温馨提示×

centos iptables如何做nat

小樊
49
2026-10-02 18:07:05
栏目: 智能运维

在 CentOS 上使用 iptables 做 NAT,常见场景是作为网关/软路由,让内网机器通过这台 CentOS 上网(SNAT / MASQUERADE),或把外部流量转发到内网(DNAT)。

下面按常见用法说明(以 CentOS 7 为例,使用 iptables 而非 firewalld)。


一、开启内核 IP 转发

临时生效

sysctl -w net.ipv4.ip_forward=1

永久生效

编辑 /etc/sysctl.conf

net.ipv4.ip_forward = 1

然后执行:

sysctl -p

二、SNAT(内网通过 CentOS 上网)

假设:

  • 外网网卡:eth0(公网 IP:1.2.3.4)
  • 内网网卡:eth1(内网网段:192.168.1.0/24)

方式 1:MASQUERADE(推荐,适合动态 IP)

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

方式 2:SNAT(固定公网 IP)

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 1.2.3.4

三、DNAT(端口映射 / 外网访问内网)

例如:

  • 公网 IP:1.2.3.4
  • 内网服务器:192.168.1.10
  • 将公网 80 端口映射到内网 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

四、允许转发(很重要)

如果默认 FORWARD 策略是 DROP:

iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT

五、保存 iptables 规则(CentOS 7)

安装工具

yum install iptables-services -y

保存规则

service iptables save
# 或
iptables-save > /etc/sysconfig/iptables

开机启动

systemctl enable iptables
systemctl stop firewalld
systemctl disable firewalld

六、常见检查命令

iptables -t nat -L -n -v
cat /proc/sys/net/ipv4/ip_forward

七、简单示例(完整)

sysctl -w net.ipv4.ip_forward=1

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT

如果你能告诉我:

  • CentOS 版本(6 / 7 / 8)
  • 是 上网共享 还是 端口映射
  • 网卡名称和 IP 规划

我可以给你一套可直接用的配置。

0 踩