在 CentOS 上使用 iptables 做端口映射(端口转发),通常是指 DNAT(目的地址转换) 和 SNAT/MASQUERADE(源地址转换)。下面分常见场景说明。
端口映射依赖内核转发:
# 临时生效
echo 1 > /proc/sys/net/ipv4/ip_forward
# 永久生效
vi /etc/sysctl.conf
添加或修改:
net.ipv4.ip_forward = 1
生效:
sysctl -p
例如:
访问 8080 → 转发到 80
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-port 80
如果是本地访问本机:
iptables -t nat -A OUTPUT -p tcp --dport 8080 -j REDIRECT --to-port 80
例如:
CentOS 公网 IP:1.2.3.4
内网机器:192.168.1.10:80
映射公网 1.2.3.4:8080 → 192.168.1.10:80
iptables -t nat -A PREROUTING -p tcp --dport 8080 \
-j DNAT --to-destination 192.168.1.10:80
做 SNAT(让回包正确):
iptables -t nat -A POSTROUTING -d 192.168.1.10 -p tcp --dport 80 \
-j SNAT --to-source 192.168.1.1
或简化(推荐):
iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -t nat -A PREROUTING -s 1.1.1.1 -p tcp --dport 8080 \
-j DNAT --to-destination 192.168.1.10:80
service iptables save
yum install iptables-services
systemctl enable iptables
iptables-save > /etc/sysconfig/iptables
查看 NAT 表:
iptables -t nat -L -n --line-number
删除规则(示例):
iptables -t nat -D PREROUTING 1
✅ 防火墙放行端口
iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
✅ CentOS 7 默认 firewalld
建议关闭:
systemctl stop firewalld
systemctl disable firewalld
如果你能说明:
我可以给你 精确命令模板。