温馨提示×

Debian iptables怎么实现NAT

小樊
37
2026-08-14 05:19:27
栏目: 智能运维

在 Debian 上用 iptables 实现 NAT,常见场景是 SNAT(内网访问外网)DNAT(外网访问内网)。下面按“最常用 → 进阶”来说明,并给出完整示例。


一、前置条件

1. 确认系统支持 NAT

lsmod | grep nat

如果没有输出,可手动加载:

modprobe nf_nat
modprobe iptable_nat

2. 开启 IP 转发

sysctl net.ipv4.ip_forward

如果是 0,开启:

sysctl -w net.ipv4.ip_forward=1

永久生效:

echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p

二、SNAT(内网访问外网,最常见)

场景

  • 内网:192.168.10.0/24
  • 外网出口:eth0
  • 出口 IP:1.2.3.4

规则示例

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

✅ 适用于 固定公网 IP


如果是动态 IP(如拨号)

MASQUERADE(推荐)

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

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

场景

  • 外网访问 1.2.3.4:8080
  • 转发到内网 192.168.10.10:80
iptables -t nat -A PREROUTING \
  -d 1.2.3.4 -p tcp --dport 8080 \
  -j DNAT --to-destination 192.168.10.10:80

⚠️ 别忘了允许转发

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

四、常见完整示例(网关服务器)

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

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

# SNAT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# 允许相关连接
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

五、持久化 iptables 规则(非常重要)

Debian 重启后规则会丢失

方法 1:iptables-persistent(推荐)

apt update
apt install iptables-persistent

保存规则:

iptables-save > /etc/iptables/rules.v4

以后修改后:

iptables-save > /etc/iptables/rules.v4

六、常见问题排查

1. NAT 不生效

iptables -t nat -L -n -v

查看是否有流量命中规则。

2. FORWARD 被 DROP

iptables -P FORWARD ACCEPT

3. 回包路径问题

确保 内网主机网关指向 NAT 服务器


七、总结速查表

功能 命令
SNAT iptables -t nat -A POSTROUTING -j SNAT --to-source IP
动态 IP iptables -t nat -A POSTROUTING -j MASQUERADE
DNAT iptables -t nat -A PREROUTING -j DNAT --to-destination IP:PORT
开启转发 sysctl -w net.ipv4.ip_forward=1
保存规则 iptables-save > /etc/iptables/rules.v4

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

  • 服务器做网关 还是 Docker / KVM / 虚拟机 NAT
  • 家用宽带 还是 云服务器
  • 想做 端口映射 / 负载均衡 / 多出口

我可以给你 更精确的配置方案

0