温馨提示×

Debian iptables如何做端口映射

小樊
43
2026-07-01 22:40:09
栏目: 智能运维

在 Debian 系统中,使用 iptables 做端口映射(端口转发 / DNAT)通常需要配合 SNAT / MASQUERADE 以及开启 IP 转发。下面按最常见场景一步一步说明。


一、开启 IP 转发

1️⃣ 临时开启(重启失效)

sysctl -w net.ipv4.ip_forward=1

2️⃣ 永久开启

编辑:

sudo nano /etc/sysctl.conf

添加或修改:

net.ipv4.ip_forward=1

生效:

sudo sysctl -p

二、典型场景一:本机端口转发(本地端口映射)

例如:
访问本机 8080 → 转发到本机 80

iptables -t nat -A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-port 80

✅ 适用:

  • 本机访问
  • 不跨主机

❌ 不适合:外部访问另一台机器


三、典型场景二:将外部访问转发到另一台服务器(DNAT)

示例

  • 本机 IP:192.168.1.10
  • 目标服务器:192.168.1.20:80
  • 外部访问:192.168.1.10:8080

1️⃣ DNAT(端口映射)

iptables -t nat -A PREROUTING -p tcp --dport 8080 \
-j DNAT --to-destination 192.168.1.20:80

2️⃣ SNAT / MASQUERADE(回包)

iptables -t nat -A POSTROUTING -j MASQUERADE
# 或指定接口
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

3️⃣ 允许转发

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

四、典型场景三:内网穿透(公网 → 内网)

例如:

  • 公网 IP 在 Debian 上
  • 内网机器:10.0.0.5:22
iptables -t nat -A PREROUTING -p tcp --dport 2222 \
-j DNAT --to-destination 10.0.0.5:22

iptables -t nat -A POSTROUTING -j MASQUERADE

iptables -A FORWARD -p tcp -d 10.0.0.5 --dport 22 -j ACCEPT

访问:

ssh -p 2222 user@公网IP

五、查看 / 删除规则

查看规则

iptables -t nat -L -n -v

删除某条规则(示例)

iptables -t nat -D PREROUTING -p tcp --dport 8080 \
-j DNAT --to-destination 192.168.1.20:80

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

Debian 重启后 iptables 规则会丢失,需要保存。

方法 1:使用 iptables-persistent(推荐)

sudo apt update
sudo apt install iptables-persistent

保存:

sudo netfilter-persistent save

规则保存在:

/etc/iptables/rules.v4

七、常见问题排查

✅ IP 转发是否开启
✅ 端口是否正确
✅ 是否允许 FORWARD
✅ 回包是否正常(SNAT)
✅ 云服务器是否放行端口(安全组)


八、快速参考模板

# 开启转发
echo 1 > /proc/sys/net/ipv4/ip_forward

# 端口映射
iptables -t nat -A PREROUTING -p tcp --dport 外部端口 \
-j DNAT --to-destination 内网IP:端口

iptables -t nat -A POSTROUTING -j MASQUERADE

iptables -A FORWARD -p tcp -d 内网IP --dport 端口 -j ACCEPT

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

  • Debian 版本
  • 外网 / 内网
  • Docker / KVM / 物理机
  • 端口映射的具体结构

我可以给你 一条直接可用的完整命令配置

0