在 Ubuntu 上,使用 iptables 做端口映射(端口转发 / DNAT)通常分为几种场景。下面按常见用法说明。
例如:把 访问 8080 端口的流量转到本机 80 端口
sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-port 80
⚠️ 注意:
REDIRECT 只能用于 本机ip_forward例如:把本机 公网 80 端口 映射到 192.168.1.10:8080
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
永久生效:
sudo sysctl -w net.ipv4.ip_forward=1
或编辑:
sudo vim /etc/sysctl.conf
net.ipv4.ip_forward=1
sudo sysctl -p
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 \
-j DNAT --to-destination 192.168.1.10:8080
sudo iptables -t nat -A POSTROUTING -j MASQUERADE
或精确一点:
sudo iptables -t nat -A POSTROUTING -d 192.168.1.10 -p tcp --dport 8080 -j MASQUERADE
sudo iptables -A FORWARD -p tcp -d 192.168.1.10 --dport 8080 -j ACCEPT
例如:只让 1.2.3.4 访问 2222 → 192.168.1.20:22
sudo iptables -t nat -A PREROUTING -s 1.2.3.4 -p tcp --dport 2222 \
-j DNAT --to-destination 192.168.1.20:22
查看 NAT 表:
sudo iptables -t nat -L -n -v
删除某条规则(示例):
sudo iptables -t nat -D PREROUTING 1
sudo apt install iptables-persistent
sudo netfilter-persistent save
✅ 必须开 ip_forward
✅ DNAT 一定要配合 POSTROUTING MASQUERADE
✅ 云服务器注意安全组
✅ Docker 会改 iptables,可能冲突
如果你能说明:
我可以给你一条可直接用的命令。