在 Ubuntu 上使用 iptables 做转发(端口/流量转发),通常分为几种常见场景。下面按最常用情况说明,并给出可直接用的命令。
iptables 转发依赖 Linux 内核转发功能。
sudo sysctl -w net.ipv4.ip_forward=1
编辑:
sudo vim /etc/sysctl.conf
添加或取消注释:
net.ipv4.ip_forward=1
生效:
sudo sysctl -p
例如:
访问本机 8080 → 转发到 192.168.1.100:80
sudo iptables -t nat -A PREROUTING \
-p tcp --dport 8080 \
-j DNAT --to-destination 192.168.1.100:80
sudo iptables -t nat -A POSTROUTING \
-p tcp -d 192.168.1.100 --dport 80 \
-j MASQUERADE
✅ 适用场景:
如果你在本机访问 localhost:8080 也要转发:
sudo iptables -t nat -A OUTPUT \
-p tcp --dport 8080 \
-j DNAT --to-destination 192.168.1.100:80
例如 Ubuntu 做网关:
sudo iptables -t nat -A POSTROUTING \
-s 192.168.1.0/24 -o eth0 -j MASQUERADE
查看 NAT 规则:
sudo iptables -t nat -L -n -v
删除某条规则(示例):
sudo iptables -t nat -D PREROUTING 1
清空 NAT:
sudo iptables -t nat -F
Ubuntu 默认重启会丢规则。
sudo apt install iptables-persistent
sudo netfilter-persistent save
sudo iptables-save > /etc/iptables.rules
开机恢复:
iptables-restore < /etc/iptables.rules
❌ 只写 DNAT 不写 MASQUERADE → 不通
❌ 没开 ip_forward → 不通
❌ 云服务器安全组没放行 → 不通
# 开启转发
sysctl -w net.ipv4.ip_forward=1
# 端口转发
iptables -t nat -A PREROUTING -p tcp --dport 8080 \
-j DNAT --to-destination 192.168.1.100:80
iptables -t nat -A POSTROUTING -j MASQUERADE
如果你能说明:
我可以给你更精确的配置方案。