能否通过静态路由实现不同宿主机的VM2访问特定网段10.10.20.20?
环境概述
我有两台位于不同宿主机上的虚拟机:
- VM #1 配备2块网卡:
- IP地址:172.31.154.100,网关:172.31.154.1
- IP地址:172.31.177.200,网关:172.31.177.1
- VM #2 配备1块网卡:
- IP地址:172.31.154.101,网关:172.31.154.1
目前的网络状态:
- VM #1 能成功ping通10.10.20.20,流量会通过172.31.177.1网关发出
- VM #2 无法ping通10.10.20.20
问题描述
我希望VM #2也能访问10.10.20.20,但能通往目标网段的网关172.31.177.1只在另一台宿主机的VM #1上。我原本以为给VM #2加一条静态路由,把目标网段的流量导向VM #1,再通过VM #1的177网段网卡出去就能解决,但尝试后发现没效果。
可行方案及排查要点
理论上这个需求是可以通过静态路由+IP转发实现的,你之前的思路方向没错,但可能漏了几个关键步骤,我给你梳理一下:
1. 确保VM #1和VM #2的基础通信正常
首先确认VM #2能ping通VM #1的172.31.154.100地址(这是两台VM唯一共通的网段)。如果连这个都不通,那宿主机之间的网络策略或者虚拟机的防火墙肯定有问题,得先解决这个基础连通性。
2. 给VM #1开启IP转发功能
VM #1需要具备路由转发能力,才能把VM #2发过来的流量转给自己的177网段网卡,再把响应回传给VM #2。不同系统的开启方式不一样:
- Linux系统:
临时生效:echo 1 > /proc/sys/net/ipv4/ip_forward
永久生效:编辑/etc/sysctl.conf,把net.ipv4.ip_forward设为1,然后执行sysctl -p - Windows系统:
命令行临时开启:netsh interface ipv4 set interface "你的154网段网卡名称" forwarding=enabled
永久生效需要修改注册表或者通过组策略配置
3. 正确配置VM #2的静态路由
你之前的路由命令可能下一跳设置错了——应该指向VM #1的172.31.154.100地址,而不是直接指向172.31.177.1(因为VM #2根本不在177网段,无法直接访问这个网关)。举两个系统的示例命令:
- Linux系统:
如果是单个IP(10.10.20.20/32):route add -host 10.10.20.20 gw 172.31.154.100
如果是整个网段(比如10.10.20.0/24):route add -net 10.10.20.0 netmask 255.255.255.0 gw 172.31.154.100 - Windows系统:
单个IP:route add 10.10.20.20 mask 255.255.255.255 172.31.154.100
整个网段:route add 10.10.20.0 mask 255.255.255.0 172.31.154.100
4. 检查VM #1的防火墙规则
别忽略防火墙的影响!VM #1的防火墙需要允许转发流量通过:
- Linux的iptables要确保FORWARD链默认允许,或者添加规则允许172.31.154.0/24和172.31.177.0/24之间的转发
- Windows防火墙要放开转发权限,或者直接添加允许IP转发的入站/出站规则
5. 验证回程路由
最后要确认10.10.20.20的响应能正确回到VM #2:当VM #1把流量转发到177.1网关后,网关需要知道把172.31.154.0/24的流量送回VM #1,这样VM #1才能再转给VM #2。如果网关没有这条回程路由,你可能需要在172.31.177.1上添加一条静态路由,指向VM #1的172.31.177.200地址。
备注:内容来源于stack exchange,提问作者CodeCowboyOrg

