温馨提示×

ubuntu iptables怎样做nat

小樊
33
2026-10-15 15:47:01
栏目: 智能运维

在 Ubuntu 上使用 iptables 做 NAT(网络地址转换),通常分为 SNAT(出站 NAT) 和 DNAT(端口/入站映射) 两种场景。下面按常见用法说明。


一、开启内核 IP 转发(必须)

NAT 依赖 Linux 的 IP 转发功能。

临时开启

sysctl -w net.ipv4.ip_forward=1

永久开启

编辑 /etc/sysctl.conf:

net.ipv4.ip_forward=1

然后执行:

sysctl -p

二、SNAT(内网访问外网,常见网关场景)

场景:

  • Ubuntu 作为网关
  • 内网:192.168.1.0/24
  • 外网网卡:eth0
  • 公网 IP:1.2.3.4

规则示例

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 1.2.3.4

如果是动态公网 IP(如 PPPoE / DHCP)

用 MASQUERADE 更方便:

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

三、DNAT(外网访问内网服务)

场景:

  • 公网 IP:在 eth0
  • 内网服务器:192.168.1.100
  • 将公网 80 端口映射到内网 80

规则示例

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:80

同时需要允许转发

iptables -A FORWARD -p tcp -d 192.168.1.100 --dport 80 -j ACCEPT

四、完整示例(网关 + NAT)

# 开启转发
sysctl -w net.ipv4.ip_forward=1

# 清除旧规则(可选)
iptables -F
iptables -t nat -F

# SNAT
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

五、保存 iptables 规则(Ubuntu)

Ubuntu 20.04 / 22.04

apt install iptables-persistent
netfilter-persistent save

规则会保存到:

/etc/iptables/rules.v4

六、常见问题

1. NAT 不生效?

  • 是否开启 ip_forward
  • 是否写错网卡名(eth0 / ens33)
  • FORWARD 链是否被 DROP

2. 查看 NAT 规则

iptables -t nat -L -n -v

3. 删除规则

iptables -t nat -D POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

如果你有 具体拓扑(几张网卡、IP 段、要做什么 NAT),我可以帮你写完整规则。

0 踩