在 Debian 上用 iptables 实现 NAT,常见场景是 SNAT(内网访问外网) 和 DNAT(外网访问内网)。下面按“最常用 → 进阶”来说明,并给出完整示例。
lsmod | grep nat
如果没有输出,可手动加载:
modprobe nf_nat
modprobe iptable_nat
sysctl net.ipv4.ip_forward
如果是 0,开启:
sysctl -w net.ipv4.ip_forward=1
永久生效:
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p
192.168.10.0/24eth01.2.3.4iptables -t nat -A POSTROUTING \
-s 192.168.10.0/24 \
-o eth0 \
-j SNAT --to-source 1.2.3.4
✅ 适用于 固定公网 IP
用 MASQUERADE(推荐)
iptables -t nat -A POSTROUTING \
-s 192.168.10.0/24 \
-o eth0 \
-j MASQUERADE
1.2.3.4:8080192.168.10.10:80iptables -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
Debian 重启后规则会丢失。
apt update
apt install iptables-persistent
保存规则:
iptables-save > /etc/iptables/rules.v4
以后修改后:
iptables-save > /etc/iptables/rules.v4
iptables -t nat -L -n -v
查看是否有流量命中规则。
iptables -P FORWARD ACCEPT
确保 内网主机网关指向 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 |
如果你愿意,可以告诉我:
我可以给你 更精确的配置方案。