iptables端口转发需完成“进得来、转得过去、回得去”:先开启ipv4转发,再配置prerouting dnat映射端口,接着放行forward链中目标流量并允许established连接,最后通过postrouting masquerade伪装源ip确保响应可达。

iptables 实现内网流量转发与服务端口映射,核心在于打通“进得来、转得过去、回得去”三个环节。只配 DNAT 规则却连不上,大概率是漏了转发放行或源地址伪装——数据能进,但响应包发不回来。
开启 IPv4 转发功能
这是所有转发操作的前提,系统默认关闭该功能。
- 临时启用:
echo 1 > /proc/sys/net/ipv4/ip_forward - 永久生效:编辑
/etc/sysctl.conf,确保含net.ipv4.ip_forward = 1,再执行sysctl -p
配置 PREROUTING DNAT 实现端口映射
把外部访问本机某端口的请求,重定向到内网目标主机对应端口。
- 基本命令:
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80 - 若外网接口固定(如
ens33),建议限定入口:-i ens33,避免规则被误触发 - 协议支持 TCP/UDP,需按实际服务选择;多个端口可用
--dports或分条添加
放行 FORWARD 链并允许目标流量
DNAT 只改地址,不自动放行。若 FORWARD 默认策略为 DROP,必须显式允许该转发路径。
- 允许目标主机和服务端口的入向流量:
iptables -A FORWARD -p tcp -d 192.168.1.100 --dport 80 -j ACCEPT - 双网卡场景(如
ens33接外网、ens34接内网):iptables -A FORWARD -i ens33 -o ens34 -p tcp -d 192.168.1.100 --dport 80 -j ACCEPT - 务必放行已建立连接的返回包:
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
添加 POSTROUTING MASQUERADE 确保响应可达
内网服务响应时,源 IP 是私有地址(如 192.168.1.100),外网客户端无法路由。MASQUERADE 把响应包的源 IP 替换成本机外网 IP。
- 通用写法:
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE - 更精确可限定出口网卡:
-o ens33,避免影响其他网段 - MASQUERADE 适合动态公网 IP;若 IP 固定,也可用 SNAT,但灵活性不如前者











