Linux用iptables实现端口转发核心需四步:开启IP转发、添加DNAT规则、放行FORWARD链、配置MASQUERADE确保回包;缺一不可,否则连接失败。

Linux 用 iptables 实现端口转发,核心就三件事:开 IP 转发、加 DNAT 规则、放行流量。不复杂,但漏一步就转不通。
第一步:开启内核 IP 转发
这是所有转发的前提,系统默认关闭。
- 临时开启(重启失效):echo 1 > /proc/sys/net/ipv4/ip_forward
- 永久生效:编辑 /etc/sysctl.conf,确保有这一行:net.ipv4.ip_forward = 1,然后运行 sysctl -p 加载
第二步:添加端口转发规则(DNAT)
把进来的流量目标地址和端口改掉。常用两种场景:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
-
转发到另一台内网机器(比如把本机 8080 端口的请求转给 192.168.1.100:80):
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80 -
本机端口映射(比如访问 80 端口自动走本地 8080 服务):
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
第三步:允许并确保回包正常
只改目标还不够,得让返回的数据能原路回去。
- 如果转发目标是内网机器,建议加上 MASQUERADE(自动伪装源地址):
iptables -t nat -A POSTROUTING -j MASQUERADE - 同时要放行 FORWARD 链,否则包被默认策略拦住:
iptables -A FORWARD -p tcp -d 192.168.1.100 --dport 80 -j ACCEPT
第四步:保存规则并验证
iptables 规则默认重启丢失,必须保存。
- 查看当前 NAT 规则:iptables -t nat -L -n -v
- 保存(不同系统命令略有差异):
Ubuntu/Debian:iptables-save > /etc/iptables/rules.v4
CentOS/RHEL:service iptables save 或 iptables-save > /etc/sysconfig/iptables - 测试时可用 telnet 本机IP 8080 或 curl,再在目标机器上抓包确认是否收到

















