温馨提示×

centos iptables如何 nat

小樊
44
2026-09-11 15:09:57
栏目: 智能运维

在 CentOS 上使用 iptables 做 NAT,通常分为 SNAT(内网访问外网)DNAT(外网访问内网) 两种场景。下面按常见用法说明(以 CentOS 7 为例,使用 Legacy iptables)。


一、开启内核 IP 转发(必须)

# 临时生效
echo 1 > /proc/sys/net/ipv4/ip_forward

# 永久生效
vi /etc/sysctl.conf
net.ipv4.ip_forward = 1

sysctl -p

二、SNAT(内网机器通过网关访问外网)

场景

  • 网关:CentOS(eth0 外网,eth1 内网)
  • 内网网段:192.168.1.0/24

规则示例

iptables -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

三、DNAT(外网访问内网服务)

场景

  • 外网 IP:1.2.3.4
  • 内网服务器:192.168.1.10:80

端口映射

iptables -t nat -A PREROUTING -d 1.2.3.4 -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(iptables-services)

yum install iptables-services
systemctl enable iptables
iptables-save > /etc/sysconfig/iptables

恢复:

iptables-restore < /etc/sysconfig/iptables

五、常用查看命令

iptables -t nat -L -n -v
iptables -L -n -v

六、注意事项

  • 若使用 firewalld,建议关闭后再用 iptables:
    systemctl stop firewalld
    systemctl disable firewalld
    
  • MASQUERADE 适合动态公网 IP
  • SNAT 适合固定公网 IP

如果你能说明:

  • CentOS 版本
  • 内/外网网卡名
  • 具体 NAT 需求(上网 / 端口映射)

我可以直接帮你写一套完整规则。

0