一、核心:开启 IP 转发
sysctl -w net.ipv4.ip_forward=1 echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
二、场景命令
场景1:内网上网(SNAT)
# 动态IP(推荐) iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE # 固定公网IP iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 1.2.3.4
场景2:内网之间互访
# eth1(192.168.1.0/24) 与 eth2(10.0.0.0/24) 互通 iptables -A FORWARD -i eth1 -o eth2 -j ACCEPT iptables -A FORWARD -i eth2 -o eth1 -j ACCEPT
场景3:内网端口转发(A机器 → B机器)
# 访问 192.168.1.10:8080 → 转发到 10.0.0.100:80 iptables -t nat -A PREROUTING -d 192.168.1.10 -p tcp --dport 8080 -j DNAT --to-destination 10.0.0.100:80 iptables -t nat -A POSTROUTING -d 10.0.0.100 -p tcp --dport 80 -j MASQUERADE iptables -A FORWARD -p tcp -d 10.0.0.100 --dport 80 -j ACCEPT
三、查看与维护
# 查看规则 iptables -t nat -L -n -v iptables -L FORWARD -n -v # 检查转发是否生效 sysctl net.ipv4.ip_forward
四、避坑
| 问题 | 原因 | 解决 |
|---|---|---|
| 内网上不了网 | 缺 FORWARD 放行 |
iptables -A FORWARD -j ACCEPT |
| 某网段不通 | 路由不对 | 检查网关配置和路由表 |
| 高并发丢包 | 连接跟踪表满 |
net.netfilter.nf_conntrack_max=1048576 |
三行搞定:开转发 → MASQUERADE → FORWARD 放行。
