在 Debian 系统中,使用 iptables 做端口映射(端口转发 / DNAT)通常需要配合 SNAT / MASQUERADE 以及开启 IP 转发。下面按最常见场景一步一步说明。
sysctl -w net.ipv4.ip_forward=1
编辑:
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
✅ 适用:
❌ 不适合:外部访问另一台机器
192.168.1.10192.168.1.20:80192.168.1.10:8080iptables -t nat -A PREROUTING -p tcp --dport 8080 \
-j DNAT --to-destination 192.168.1.20:80
iptables -t nat -A POSTROUTING -j MASQUERADE
# 或指定接口
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -p tcp -d 192.168.1.20 --dport 80 -j ACCEPT
例如:
10.0.0.5:22iptables -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 规则会丢失,需要保存。
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
如果你愿意,可以告诉我:
我可以给你 一条直接可用的完整命令配置。