在 Ubuntu 上使用 iptables 做 NAT 转发,常见场景有:
下面按场景说明。
必须第一步做,否则 NAT 不生效
# 临时生效
echo 1 > /proc/sys/net/ipv4/ip_forward
# 永久生效
sudo vim /etc/sysctl.conf
添加或修改:
net.ipv4.ip_forward=1
使配置生效:
sudo sysctl -p
适用于:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
说明:
eth0:出网网卡iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 公网IP
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.10:80
iptables -t nat -A POSTROUTING -p tcp -d 192.168.1.10 --dport 80 -j MASQUERADE
或 SNAT 形式:
iptables -t nat -A POSTROUTING -p tcp -d 192.168.1.10 --dport 80 -j SNAT --to-source 本机内网IP
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-port 80
如果默认策略是 DROP:
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo apt install iptables-persistent
sudo netfilter-persistent save
规则保存在:
/etc/iptables/rules.v4
服务器:
sysctl -w net.ipv4.ip_forward=1
# 内网上网
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# 外部访问 2222 → 内网 22
iptables -t nat -A PREROUTING -p tcp --dport 2222 -j DNAT --to 192.168.1.10:22
iptables -A FORWARD -p tcp -d 192.168.1.10 --dport 22 -j ACCEPT
iptables -t nat -L -n -v
iptables -L -n -v
conntrack -L
如果你愿意,可以告诉我:
我可以直接帮你写完整可用的规则。