You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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 = 1
    
    执行sysctl -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后失效):
    ip route add default via 198.162.0.10 dev <VM1的内网网卡名>
    
    比如VM1内网网卡是ens37,命令就是ip route add default via 198.162.0.10 dev ens37
  • 永久生效:编辑/etc/sysconfig/network-scripts/ifcfg-<VM1内网网卡名>文件,添加一行:
    GATEWAY=198.162.0.10
    
    之后重启网络服务:
    systemctl 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网卡配置里的NETMASKPREFIX参数是否正确(比如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 show
    
    你应该能看到类似default via 198.162.0.10 dev ens37的内容
  • 测试域名访问(验证DNS和路由是否都正常):
    ping www.baidu.com
    
    如果无法解析域名,编辑/etc/resolv.conf添加DNS服务器:
    nameserver 8.8.8.8
    

内容的提问来源于stack exchange,提问作者Lui

火山引擎 最新活动