🛠️ iptables NAT 转发教程
本文介绍如何使用 iptables 在 Debian 12 下配置端口转发。主要分为两种场景:
1. 内部 NAT 转发(宿主机 → 内部虚拟机 / 内网机器)。
2. 外部 IP 转发(公网 IP → 内部服务器 / 另一台服务器)。
1️⃣ 内部 NAT 转发(宿主机 → 内部虚拟机)
📌 场景
• 宿主机外网 IP:1.2.3.4
• 内部虚拟机 IP:172.16.1.2
• 要转发的端口:80, 443
🔹 配置步骤
1. 开启 IP 转发
echo 1 > /proc/sys/net/ipv4/ip_forward
# 永久生效:
# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
# sysctl -p
2. DNAT:外部访问宿主机 80/443 → 转发到 VM
iptables -t nat -A PREROUTING -i eth0 -p tcp -m multiport --dports 80,443 \
-j DNAT --to-destination 172.16.1.2
3. SNAT:保证回包正确返回外部
iptables -t nat -A POSTROUTING -p tcp -d 172.16.1.2 -m multiport --dports 80,443 \
-j MASQUERADE
🔎 流程
• 外部主机访问 1.2.3.4:80
• 流量进入宿主机 → DNAT 到 172.16.1.2:80
• VM 回包 → SNAT 回宿主机 → 转发给外部主机
2️⃣ 外部 IP 转发(公网 → 另一台服务器)
📌 场景
• 中转服务器外网 IP:1.2.3.4
• 目标服务器内网 IP:10.0.0.5
• 要转发的端口:80, 443
🔹 配置步骤
1. 开启 IP 转发
echo 1 > /proc/sys/net/ipv4/ip_forward
2. DNAT:外部访问 1.2.3.4 的 80/443 → 转发到 10.0.0.5
iptables -t nat -A PREROUTING -i eth0 -p tcp -m multiport --dports 80,443 \
-j DNAT --to-destination 10.0.0.5
3. SNAT:保证 10.0.0.5 回包走回中转机
iptables -t nat -A POSTROUTING -p tcp -d 10.0.0.5 -m multiport --dports 80,443 \
-j MASQUERADE
🔎 流程
• 外部主机访问 1.2.3.4:443
• 流量进入中转机 → DNAT 到 10.0.0.5:443
• 目标服务器回包 → SNAT 回中转机 → 转发回外部主机
3️⃣ 常用扩展写法
批量端口
转发 80, 443, 8080
-m multiport --dports 80,443,8080
连续端口范围
转发 60000–60100
--dport 60000:60100
简化 POSTROUTING
如果目标机器的所有 TCP 端口都需要 SNAT,可以省略 --dport:
iptables -t nat -A POSTROUTING -p tcp -d 172.16.1.2 -j MASQUERADE
4️⃣ 查看与保存规则
查看当前规则
iptables -t nat -L -n -v
保存规则(Debian 12)
安装持久化工具
apt install iptables-persistent -y
保存规则
netfilter-persistent save
开机自动加载
systemctl enable netfilter-persistent
✅ 这样,你就能根据需要选择 内部 NAT 转发 或 外部 IP 转发,并持久化规则。