温馨提示×

ubuntu iptables怎样nat转发

小樊
53
2026-09-19 02:25:15
栏目: 智能运维

在 Ubuntu 上使用 iptables 做 NAT 转发,常见场景有:

  • SNAT(出口 NAT):内网访问外网,修改源 IP
  • DNAT(端口映射):外部访问本机端口,转发到内网/其他机器
  • MASQUERADE:动态出口(常用于拨号/ DHCP 上网)

下面按场景说明。


一、开启内核 IP 转发

必须第一步做,否则 NAT 不生效

# 临时生效
echo 1 > /proc/sys/net/ipv4/ip_forward

# 永久生效
sudo vim /etc/sysctl.conf

添加或修改:

net.ipv4.ip_forward=1

使配置生效:

sudo sysctl -p

二、SNAT / MASQUERADE(内网上网)

1️⃣ 动态出口(推荐,最常用)

适用于:

  • 服务器公网 IP 不固定(DHCP / 云服务器)
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

说明:

  • eth0:出网网卡
  • 内网流量从本机转发出去

2️⃣ 固定公网 IP(SNAT)

iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 公网IP

三、DNAT(端口转发 / 端口映射)

示例:访问本机 80 → 内网 192.168.1.10:80

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

四、FORWARD 链放行

如果默认策略是 DROP:

iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT

五、保存 iptables 规则(Ubuntu)

Ubuntu 18.04+(推荐)

sudo apt install iptables-persistent
sudo netfilter-persistent save

规则保存在:

/etc/iptables/rules.v4

六、完整示例(网关服务器)

服务器:

  • eth0:公网(或出口)
  • eth1:内网(192.168.1.1)
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

如果你愿意,可以告诉我:

  • Ubuntu 版本
  • 网络拓扑(哪台机器、几个网卡)
  • 具体想实现什么转发

我可以直接帮你写完整可用的规则。

0 踩