在 Ubuntu 上使用 iptables 做 NAT,常见场景有两类:
下面一步步说明。
NAT 必须开启转发:
sudo sysctl -w net.ipv4.ip_forward=1
永久生效(推荐):
sudo vim /etc/sysctl.conf
添加或修改:
net.ipv4.ip_forward=1
然后执行:
sudo sysctl -p
192.168.1.0/24eth0sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
假设公网 IP 是 1.2.3.4:
sudo iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 1.2.3.4
1.2.3.4192.168.1.10:801.2.3.4:8080 访问sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8080 \
-j DNAT --to-destination 192.168.1.10:80
还需要允许转发:
sudo iptables -A FORWARD -p tcp -d 192.168.1.10 --dport 80 -j ACCEPT
sudo apt install iptables-persistent
sudo netfilter-persistent save
sudo netfilter-persistent reload
规则会保存在:
/etc/iptables/rules.v4
# 开启转发
sysctl -w net.ipv4.ip_forward=1
# 内网共享上网
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# 允许转发
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
ip_forwardip addr 查看)FORWARD 规则Docker 已自动做 NAT,一般不用手动加。
如果你愿意,可以告诉我:
我可以给你一份可直接用的配置。