在 Ubuntu 上使用 iptables 做转发(端口 / 流量转发),一般分三种常见场景。下面按从基础到常用给你说明。
iptables 转发依赖内核转发功能,不开启等于无效。
sudo sysctl -w net.ipv4.ip_forward=1
sudo vim /etc/sysctl.conf
添加或修改:
net.ipv4.ip_forward=1
生效:
sudo sysctl -p
例如:
本机 8080 → 192.168.1.100:80
sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 \
-j DNAT --to-destination 192.168.1.100:80
sudo iptables -A FORWARD -p tcp -d 192.168.1.100 --dport 80 -j ACCEPT
sudo iptables -t nat -A POSTROUTING -j MASQUERADE
✅ 适合:
如果你在 本机 访问 localhost:8080 也要转发:
sudo iptables -t nat -A OUTPUT -p tcp --dport 8080 \
-j DNAT --to-destination 192.168.1.100:80
例如:
访问 80 → 本机 8080
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 \
-j REDIRECT --to-port 8080
sudo iptables -A FORWARD -p tcp -s 10.0.0.0/24 \
-d 192.168.1.100 --dport 80 -j ACCEPT
sudo iptables -t nat -L -n -v
sudo iptables -L -n -v
sudo apt install iptables-persistent
sudo netfilter-persistent save
❌ 忘了开 ip_forward
❌ 没加 MASQUERADE
❌ 云服务器安全组没放行
❌ Docker 会改 iptables(注意顺序)
如果你愿意,可以告诉我:
我可以直接给你 一条可执行命令。