在你配置VPS时,是不是也被“端口转发”这几个字搞得头晕脑涨?面对 iptables 时不知道从那下手,所以这一篇文章我就告诉你iptables转发,如何它学会、用好、用爽。用通俗易懂的方式,配合实战指令,让你从一个怕 iptables 的人也可以变成高手。

一、iptables转发到底是干嘛用的?
iptables 是 Linux 自带的防火墙系统,转发(Forwarding)功能,就是去把一个端口的访问请求转移到另一个IP或端口。
你在 VPS 上部署了一个本地服务(比如 docker 容器、内网服务),监听的是 127.0.0.1:8000,外网访问不到。你有一台服务器做跳板,希望把外部端口 8080 映射到内网中某个服务 192.168.1.10:80。你在用 VPS 做某种“端口代理”或“翻转访问”,比如将 HTTP 转发至某个局域网服务或本机其他服务端口。
这时候,iptables 的 NAT表 + FORWARD链 + PREROUTING / POSTROUTING 出场了!
二、iptables转发配置实战
第一步:开启内核转发
echo 1 > /proc/sys/net/ipv4/ip_forward
或者修改配置文件:vim /etc/sysctl.conf
添加或取消注释:net.ipv4.ip_forward = 1
然后执行:sysctl -p
这一步不做,iptables 配再多也不会生效!
第二步:配置端口转发(常见PREROUTING用法)
场景外部访问VPS的 公网IP:8080,自动转发到 VPS 内部的 127.0.0.1:8000
iptables -t nat -A PREROUTING -p tcp –dport 8080 -j REDIRECT –to-port 8000
这条命令的意思是:监听进入8080端口的TCP请求;将它重定向到本机的8000端口上;
场景外部访问 公网IP:8080,转发到“另一个IP”的某个端口(跨主机)
iptables -t nat -A PREROUTING -p tcp -d YOUR_PUBLIC_IP –dport 8080 -j DNAT –to-destination 192.168.1.100:80
别忘了加 FORWARD 链允许转发:iptables -A FORWARD -p tcp -d 192.168.1.100 –dport 80 -j ACCEPT
这一种用法适用于做 端口跳板 或 内网穿透出口代理。
第三步(可选):让本机出去的连接使用伪装(源地址伪装)
iptables -t nat -A POSTROUTING -j MASQUERADE
这适用于数据需要返回给公网IP,而不是“原始内部源IP”。
查看当前规则 iptables -t nat -L -n -v
保存规则(不同系统略有不同):
Debian/Ubuntu:
apt install iptables-persistent netfilter-persistent save
CentOS/RHEL:
service iptables save
三、iptables转发常见误区
忘了开启内核转发!你配得再漂亮,net.ipv4.ip_forward=0 也是白搭。
配置了 PREROUTING 却没设 FORWARD 规则,转发没被允许,数据包自然“中道崩殂”。
公网IP写错或漏了 -d 参数,有时候不指定 -d 的目标IP 会导致规则无效。
没有做 NAT 出口伪装,数据返回的路径不对,被目标主机直接丢弃了。
规则未持久化,重启就失效,做完记得保存,否则下次重启等于白干。
四、iptables转发适配场景总结
使用场景 | 具体做法 | 是否建议 |
---|---|---|
本地端口映射 | REDIRECT | 非常实用 |
跨IP转发 | DNAT + FORWARD | 需要搭配配置 |
NAT 伪装 | POSTROUTING | 常用于数据返回 |
内网穿透 | 配合VPN或Wireguard更优 | 更复杂但更灵活 |
总结
搞定iptables转发,你的VPS就不再是单机。很多人玩 VPS 只会开服务,顶多开个宝塔,但你如果想进阶成系统玩家”,iptables转发是你绕不开的路。
原创文章,作者:VPS,如若转载,请注明出处:https://www.whalevpsreview.com/383.html