在 CentOS 上使用 iptables 做 NAT(通常是要做出口上网 / 端口转发 / 内网共享公网 IP),下面按常见场景给你说明。
NAT 依赖 Linux 的 IP 转发功能。
echo 1 > /proc/sys/net/ipv4/ip_forward
编辑:
vi /etc/sysctl.conf
添加或修改:
net.ipv4.ip_forward = 1
生效:
sysctl -p
适用于:
内网机器 → CentOS 网关 → 互联网
假设:
eth0192.168.1.0/24iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
或固定公网 IP(SNAT):
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 公网IP
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
适用于:
公网访问 → CentOS → 内网服务器
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.10:80
iptables -A FORWARD -p tcp -d 192.168.1.10 --dport 80 -j ACCEPT
CentOS 7 默认可能用 firewalld,如用 iptables:
yum install iptables-services -y
systemctl stop firewalld
systemctl disable firewalld
systemctl enable iptables
保存规则:
service iptables save
# 或
iptables-save > /etc/sysconfig/iptables
| 类型 | 表 | 链 | 用途 |
|---|---|---|---|
| SNAT | nat | POSTROUTING | 内网出网 |
| MASQUERADE | nat | POSTROUTING | 动态公网 IP |
| DNAT | nat | PREROUTING | 端口映射 |
ip_forward=1iptables -t nat -L -n -vFORWARD 链没有被 DROP如果你能告诉我:
我可以给你一套可直接复制用的完整规则。