在 Debian 上配置 iptables NAT(网络地址转换),常见用途是 SNAT / MASQUERADE(内网共享上网)、DNAT(端口映射)。下面按常见场景一步步说明。
lsmod | grep nat
如果没有输出,可手动加载:
modprobe iptable_nat
modprobe nf_nat
编辑:
sudo nano /etc/sysctl.conf
添加或修改:
net.ipv4.ip_forward=1
立即生效:
sudo sysctl -p
假设网络环境:
eth0(公网 IP:1.2.3.4)eth1(内网网段:192.168.10.0/24)iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth0 \
-j SNAT --to-source 1.2.3.4
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT \
--to-destination 192.168.10.10:80
允许转发:
iptables -A FORWARD -p tcp -d 192.168.10.10 --dport 80 -j ACCEPT
iptables -t nat -L -n -v
Debian 不会自动保存 iptables 规则,重启会丢失。
sudo apt update
sudo apt install iptables-persistent
保存规则:
sudo netfilter-persistent save
规则保存在:
/etc/iptables/rules.v4
/etc/iptables/rules.v6
# 开启转发
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p
# NAT
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
# 保存
netfilter-persistent save
ip_forwardFORWARD 规则是的,但 iptables 仍然可用(通过兼容层)。
如果你愿意,我也可以给你 nftables 的 NAT 配置示例。
如果你能告诉我:
我可以帮你写一份完全贴合你环境的 iptables 配置。