在 Ubuntu 上用 iptables 设置转发(NAT/端口转发) 通常分为几种常见场景。下面按最常用 → 进阶给你说明,并附完整示例。
sudo sysctl -w net.ipv4.ip_forward=1
sudo nano /etc/sysctl.conf
取消注释或添加:
net.ipv4.ip_forward=1
生效:
sudo sysctl -p
sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-port 80
✅ 适用于:
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 \
-j DNAT --to-destination 192.168.1.10:80
sudo iptables -t nat -A POSTROUTING -j MASQUERADE
✅ 常用于:
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
或指定源网段:
sudo iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
默认 iptables 可能 DROP 转发包,需要允许:
sudo iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
sudo apt update
sudo apt install iptables-persistent
保存规则:
sudo netfilter-persistent save
规则保存在:
/etc/iptables/rules.v4
sudo iptables -t nat -L -n -v
sudo iptables -t nat -D PREROUTING -p tcp --dport 8080 -j REDIRECT --to-port 80
✅ 检查:
cat /proc/sys/net/ipv4/ip_forward
✅ 检查:
| 场景 | 命令 |
|---|---|
| 本机端口转发 | REDIRECT |
| 跨机器端口转发 | DNAT + MASQUERADE |
| 内网 NAT 上网 | POSTROUTING MASQUERADE |
| 永久生效 | iptables-persistent |
如果你愿意,可以告诉我:
我可以给你 一条可直接复制执行的完整命令。