XiaoK
Published on 2025-09-21 / 20 Visits
0
0

iptables NAT 转发教程

🛠️ 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 转发,并持久化规则。


Comment