CentOS 7双VM路由配置:内网VM借网关VM上网及默认网关问题
解决VM1通过VM2网关访问互联网的路由配置方案
我来一步步拆解你需要配置的内容——既然你已经打通了VM1到VM2、VM1到8.8.8.8的基础连通性,只是在默认网关配置上卡壳了,咱们从网关节点VM2的配置开始:
第一步:配置VM2作为IP转发网关
VM2要承担网关角色,必须先开启IP转发和源地址转换(SNAT),这是让内网流量能正常往返互联网的核心前提:
1. 开启内核IP转发
- 临时生效(重启VM2后失效):执行
echo 1 > /proc/sys/net/ipv4/ip_forward - 永久生效(重启后仍保持):编辑
/etc/sysctl.conf文件,添加或修改以下内容:
执行net.ipv4.ip_forward = 1sysctl -p让配置立即生效
2. 配置SNAT(源地址转换)
因为VM1的内网IP无法直接被互联网识别,需要VM2把VM1的源地址转换成自己NAT网卡的公网地址,才能让外部网络把数据包发回。CentOS 7默认用firewalld,配置方式如下:
- 开启伪装(masquerade)功能:
firewall-cmd --add-masquerade --permanent - 重载防火墙规则使配置生效:
firewall-cmd --reload
如果你用的是iptables而非firewalld,执行这条命令即可:
iptables -t nat -A POSTROUTING -o <VM2的NAT网卡名> -j MASQUERADE
(把<VM2的NAT网卡名>替换成实际名称,比如ens33,之后执行service iptables save保存规则)
第二步:配置VM1的路由规则
你提到VM1当前路由表有目标198.162.0.0,网关0.0.0.0,说明这个网段是VM1的直连内网网段。现在要让VM1的所有非内网流量都走VM2,推荐添加默认网关,以下是详细步骤和问题排查:
1. 添加默认网关(推荐方式)
先确认VM2的内网网卡IP(比如假设是198.162.0.10,请替换成你实际的VM2内网IP):
- 临时添加(重启VM1后失效):
比如VM1内网网卡是ip route add default via 198.162.0.10 dev <VM1的内网网卡名>ens37,命令就是ip route add default via 198.162.0.10 dev ens37 - 永久生效:编辑
/etc/sysconfig/network-scripts/ifcfg-<VM1内网网卡名>文件,添加一行:
之后重启网络服务:GATEWAY=198.162.0.10systemctl restart network
2. 解决“无法添加默认网关”的问题
你提到无法通过198网段添加默认网关,大概率是这两个原因:
- VM2内网IP不在VM1的直连网段:默认网关必须是本机直连网段内的IP,如果VM2的内网IP不在198.162.0.0网段,添加命令会提示
Network is unreachable,此时你需要确认两台虚拟机的内网网卡是否在同一个虚拟网络,且IP处于同一子网 - 子网掩码配置错误:如果VM1的子网掩码设置不正确,会导致系统认为198.162.0.0网段的范围不对,无法识别VM2为直连节点,检查VM1网卡配置里的
NETMASK或PREFIX参数是否正确(比如198.162.0.0/24对应掩码255.255.255.0)
3. 备选方案:添加静态默认路由
如果不想修改网卡配置文件,也可以直接添加覆盖所有外部网段的静态路由(和默认网关等价):
ip route add 0.0.0.0/0 via 198.162.0.10 dev <VM1内网网卡名>
第三步:验证配置是否生效
在VM1上执行以下操作确认:
- 查看路由表,确认存在默认网关条目:
你应该能看到类似ip route showdefault via 198.162.0.10 dev ens37的内容 - 测试域名访问(验证DNS和路由是否都正常):
如果无法解析域名,编辑ping www.baidu.com/etc/resolv.conf添加DNS服务器:nameserver 8.8.8.8
内容的提问来源于stack exchange,提问作者Lui




