CentOS 7.9环境下配置NAT网关实现私有服务器访问互联网的问题排查与解决请求
CentOS 7.9环境下配置NAT网关实现私有服务器访问互联网的问题排查与解决请求
一、现有配置核心问题分析
从你提供的环境信息和命令输出来看,Server02无法通过NAT网关访问互联网主要由以下几个关键问题导致:
- 内核IP转发未开启:Linux系统默认关闭IP数据包转发功能,这是作为网关的必要前提
- NAT网关(Server01)缺少私有子网路由:路由表中没有指向Server02所在
192.168.110.0/24网段的转发规则,无法正确处理私有子网的流量 - Server02网关配置错误:当前网关设置为
192.168.110.254,但该地址并非NAT网关在私有子网的绑定IP,导致流量无法正确投递到网关 - Firewalld地址伪装(Masquerade)未启用:从截断的
firewall-cmd输出看,地址伪装功能未正常配置,这是实现SNAT(源地址转换)让私有子网流量通过公网网卡出站的核心配置
二、分步配置与修复方案
1. 在NAT网关(Server01)开启内核IP转发
临时生效(重启后失效,用于快速测试):
sudo sysctl -w net.ipv4.ip_forward=1
永久生效(写入系统配置,重启后保留):
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf sudo sysctl -p
验证生效状态:
sysctl net.ipv4.ip_forward
输出应为net.ipv4.ip_forward = 1
2. 修正NAT网关(Server01)的路由与私有子网网卡配置
假设Server01有第二块网卡(如eth1)用于连接私有子网,先为该网卡配置IP(对应Server02原网关地址):
# 临时配置IP(重启后失效) sudo ip addr add 192.168.110.254/24 dev eth1 sudo ip link set eth1 up # 永久配置:编辑网卡文件/etc/sysconfig/network-scripts/ifcfg-eth1 # 写入以下内容(根据实际网卡名称调整) TYPE=Ethernet BOOTPROTO=static NAME=eth1 DEVICE=eth1 ONBOOT=yes IPADDR=192.168.110.254 NETMASK=255.255.255.0
然后添加私有子网路由:
# 临时添加路由 sudo ip route add 192.168.110.0/24 dev eth1 proto static metric 101 # 永久保存路由 echo "192.168.110.0/24 via 0.0.0.0 dev eth1" | sudo tee /etc/sysconfig/network-scripts/route-eth1
最后重启网络服务生效:
sudo systemctl restart network
3. 修正Server02的网关配置
将Server02的网关指向NAT网关的私有子网IP(192.168.110.254):
临时生效:
sudo ip route change default via 192.168.110.254 dev eth0
永久生效:编辑网卡配置文件(如/etc/sysconfig/network-scripts/ifcfg-eth0),修改或添加:
GATEWAY=192.168.110.254
然后重启网络服务:
sudo systemctl restart network
4. 在NAT网关(Server01)启用Firewalld地址伪装
开启地址伪装功能(实现SNAT转换):
# 临时启用(当前会话生效) sudo firewall-cmd --add-masquerade --zone=public # 永久启用(重启firewalld后保留) sudo firewall-cmd --add-masquerade --zone=public --permanent # 重新加载firewalld配置 sudo firewall-cmd --reload
验证配置:
sudo firewall-cmd --list-all
输出的public区域中应包含masquerade: yes
三、配置验证与问题排查
- 基础连通性验证
在Server02上测试互联网访问:# 测试DNS解析 nslookup baidu.com # 测试ICMP连通性 ping -c 4 8.8.8.8 # 测试HTTPS访问 curl -I https://www.baidu.com - 流量排查
如果仍无法访问,可在NAT网关的私有子网网卡抓包,查看是否接收Server02的流量:sudo tcpdump -i eth1 host 192.168.110.101 - 临时关闭防火墙排查
若怀疑firewalld拦截流量,可临时关闭服务测试(仅限排查用,测试后务必重启):sudo systemctl stop firewalld
备注:内容来源于stack exchange,提问作者Thanh Hoang
相关产品推荐
相关产品推荐

