它指在虚拟化环境中用软件定义网络和虚拟路由器接管数据转发,实现跨网段互通、策略路由和流量隔离,配置得当,中小规模场景下性能接近物理路由器的九成;但涉及大规模生产网络时,物理设备仍是主流选择。
为什么虚拟机做路由不算伪命题
许多人对虚拟机路由的第一反应是“性能差、不稳定”,这个印象多来自早期实验环境单块网卡桥接,转发全靠CPU软处理,数据一多就丢包,但现在的虚拟化平台早已不是当年的样子。
行业共识认为,虚拟路由的瓶颈不在虚拟化层,而在物理网卡队列和中断处理能力,VMware的VMXNET3虚拟网卡支持多队列,KVM下virtio-net也具备类似机制,数据从物理网卡进入宿主机后,由内核网桥或Open vSwitch直接转发,不经用户态协议栈,延迟通常能控制在5ms以内,主流实体路由器在相同负载下也不过如此。
真正让虚拟机路由“显得慢”的,是配置错误比如把虚拟网卡设为e1000模拟模式、没开硬件卸载、或者用单队列驱动扛多路并发,这些都可以通过调整解决。
虚拟机高级路由的典型场景和网络模型
要搞懂虚拟机路由,先要分清三种常见网络模型:
- 桥接模式:虚拟机直接接入物理局域网,与宿主机同级,这是最简单的路由模型,但虚拟机之间无法隔离广播域。
- NAT模式:虚拟机共享宿主机IP访问外部网络,典型场景是个人开发环境,但你无法从外部主动访问虚拟机内部服务。
- 自定义虚拟网络:在VMware中创建多个VMnet段或ESXi中的分布式交换机端口组,每个网段独立广播域,虚拟机之间靠虚拟路由器或宿主机IP转发互通。
高级路由的核心操作,发生在第三种模式下你需要让一台运行着路由系统的虚拟机,成为多个虚拟网段之间的“桥头堡”。
VMware Workstation场景:双网卡虚拟机做内网互通
最典型的需求:一台虚拟机连接VMnet2(内网段192.168.20.0/24),另一台连接VMnet3(办公段192.168.30.0/24),两者需要互相访问。
操作路径如下:
- 在VMware虚拟网络编辑器中,将VMnet2和VMnet3都设为“仅主机模式”,并取消“DHCP”以避免冲突。
- 准备一台Linux虚拟机作为路由器,添加两块虚拟网卡,分别绑定到VMnet2和VMnet3。
- 在虚拟机内分别配置IP,假设网卡ens33对应VMnet2,IP为192.168.20.1;网卡ens34对应VMnet3,IP为192.168.30.1。
- 开启内核IP转发:
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf sysctl -p
在两台目标虚拟机上,将默认网关分别指向20.1和30.1。
至此,内网互通已经完成,这里有一个常被忽视的细节:如果你用Windows Server做路由器,需要在“路由和远程访问”中启用LAN路由,并关闭防火墙对ICMP和转发的阻断,很多人卡在这一步不是路由没配,而是Windows防火墙默认丢弃了转发包。
ESXi场景:分布式交换机和虚拟路由器的协同
到了企业级虚拟化环境,ESXi的虚拟网络更复杂,高级路由通常涉及三层交换:虚拟机上跑VyOS或OpenWrt,后端接多个端口组,前端接上行链路到物理交换机。
具体配置路径:
- 在vSphere中创建分布式交换机,划分三个端口组:WAN、LAN1、LAN2。
- 创建一台VyOS虚拟机,添加三块虚拟网卡,分别接入上述端口组。
- 将WAN端口组的上行链路绑定到物理网卡,并在物理交换机上设置trunk允许对应VLAN通过。
- 在VyOS中配置静态路由或OSPF,以下为VyOS静态路由配置示例:
configure
set interfaces ethernet eth0 address 192.168.10.1/24
set interfaces ethernet eth1 address 192.168.20.1/24
set interfaces ethernet eth2 address dhcp
set protocols static route 0.0.0.0/0 next-hop 上级网关
commit
save
相比Workstation,ESXi场景的核心差异在于VLAN标记位置,你需要明确流量是在虚拟机内打标签还是在虚拟交换机上打标签,如果端口组设置了VLAN ID,而虚拟机内又配置了VLAN子接口,会导致双重封装,此时路由表和ARP学习都会出现怪象,行业中常见做法是:物理接入层交换机做trunk,虚拟端口组不做VLAN标记,由虚拟机自己处理802.1Q。
高级路由的进阶玩法:策略路由和负载均衡
策略路由让数据走指定通道
传统静态路由基于目的地址决策,策略路由则基于源地址、端口、协议甚至数据包标记来决定下一跳,这在多ISP接入场景中极其常见比如某公司同时接入电信和联通两线,需要让访问电信IP的流量走电信线路,其余走联通。
在Linux虚拟机中,策略路由需要配合ip rule和多个路由表:
# 定义两个路由表 echo "100 te" >> /etc/iproute2/rt_tables echo "200 cu" >> /etc/iproute2/rt_tables # 配置路由表内容 ip route add default via 电信网关 dev eth1 table te ip route add default via 联通网关 dev eth2 table cu # 添加策略规则 ip rule add from 192.168.10.0/24 table te ip rule add from 192.168.20.0/24 table cu
应用这个规则后再设备用链路,就可以实现带宽叠加和故障切换。
负载均衡:不建议在虚拟机上做会话级扩展
虚拟机做路由时,负载均衡不能照搬物理设备的ECMP方式,虚拟化环境下的多队列分发由宿主机完成,理论上可以给虚拟机分配多个vCPU处理不同队列,但多数场景下瓶颈不在CPU而在网卡中断,如果你实在需要更高的转发吞吐,可以尝试:
- 增大虚拟机的网卡队列数和接收缓冲区。
- 在宿主机上开启RPS(Receive Packet Steering),将软中断负载分散到多核。
- 用DPDK在虚拟机内做用户态转发但这属于少数高性能场景,配置复杂,普通运维不建议涉足。
虚拟机做软路由和物理机区别,性能损耗到底有多大
| 对比维度 | 虚拟机路由(KVM/ESXi) | 物理路由设备 | 纯软路由(物理机装OpenWrt) |
|---|---|---|---|
| 灵活度 | 高,快照回滚、克隆部署、资源随需分配 | 低,固件锁定,功能固定 | 中,依赖硬件调优 |
| 性能上限 | 受宿主机调度影响,多数情况下可达物理机约七到八成 | 取决于芯片转发能力,高端设备轻松跑满万兆 | 最高,无虚拟化层开销 |
| 稳定性 | 受宿主机负载影响较大,宿主机宕机则路由失效 | 独立硬件,可靠性最高 | 中高,取决于硬件质量 |
| 运维成本 | 低,模板化部署即可复制整套网络配置 | 高,配置需逐台操作 | 中,需要物理接触 |
| 典型预算 | 低,复用现有虚拟化平台资源即可,新增一台虚拟机几乎零成本 | 企业级路由器价格从数千元到数十万元不等 | 有参考意义的低价方案,二手工控机整机约几百元能拿下 |
什么时候不推荐虚拟机路由:当你的业务请求量达到每秒百万包级别,或需要承载企业核心出口、BGP全量路由表时,虚拟机的性能波动和宿主机故障域会影响业务韧性,这种情况下,物理设备仍然是更稳妥的选择。
完整配置流程:从零搭建可用的虚拟机路由
这里给出一套在VMware ESXi 8上部署VyOS虚拟机路由的完整流程,适用于大多数企业场景:
- 规划网段:决定WAN段、LAN段及VLAN编号,避免IP冲突。
- 上传VyOS镜像:在vSphere Client中通过OVF模板部署VyOS,分配2 vCPU、2GB内存即可满足多数中等负载场景。
- 配置虚拟硬件:按规划添加虚拟网卡,每块网卡对应一个端口组,网络类型选择VMXNET3。
- 启动系统并配置接口:
configure set interfaces ethernet eth0 address 10.0.0.2/24 set interfaces ethernet eth1 address 192.168.1.1/24 commit
- 配置NAT和DHCP:
set nat source rule 100 outbound-interface eth0 set nat source rule 100 source address 192.168.1.0/24 set nat source rule 100 translation address masquerade set service dhcp-server shared-network-name LAN1 subnet 192.168.1.0/24 static-ip 192.168.1.1 set service dhcp-server shared-network-name LAN1 subnet 192.168.1.0/24 range 0 192.168.1.100 192.168.1.200 commit save
- 验证:用客户端接入LAN段,检查能否获取IP、访问外网、跨段通信,用
show ip route查看路由表是否符合预期。
这套配置完成后,通过克隆虚拟机并调整网卡映射,几分钟就能再造一套隔离的测试网络,便于后续做变更验证。
虚拟机内网不同网段怎么互通
这几乎是虚拟化运维中被搜索最多的问题,答案分三个层面:
- 同一宿主机内出互通:在虚拟网络编辑器中启用“ LAN段”功能,或直接把虚拟机放在同一VMnet下,由虚拟交换机二层转发,不需要路由。
- 不同VMnet或端口组间互通:必须借助路由器,可以是专门的虚拟路由镜像,也可以是宿主机本身开启IP转发(仅限Linux)。
- 跨物理机互通:在ESXi中让两台宿主机加入同一个分布式交换机,并配置相同的VLAN,流量经物理链路上行后由物理交换机处理。
多数情况下,如果你使用VMware Workstation,只需在虚拟网络编辑器里将不同VMnet添加到一个自定义的网段中,然后开启宿主机Windows的“Internet连接共享”;而VMware Fusion用户则在偏好设置中创建自定义网络,按上述Linux路由方法操作。
虚拟机路由配置失败的常见原因排查
配置了路由但虚拟机之间ping不通,排查顺序建议如下:
- 检查虚拟机网卡连接类型:确认网卡没有误选“NAT”或“桥接”,自定义网络必须对应正确的VMnet编号,整体下错,后面全白搭。
- 检查防火墙规则:Linux防火墙默认FORWARD链是DROP,需要手动放行,Windows Server则注意“路由和远程访问”是否在运行状态。
- 用traceroute定位断点:从源虚拟机执行
traceroute,观察数据包在哪一跳消失,如果只显示第一跳(即路由器地址),问题出在路由器转发;如果连一跳都没有,问题出在源虚拟机网关配置。 - 抓包确认:在路由器虚拟机执行
tcpdump -i eth1 icmp,确认接口是否收到请求,若收到但没有响应,检查路由表是否有回程路径。
按这个流程排查,绝大多数虚拟机高级路由异常都能在半小时内定位。
虚拟机高级路由常见问题解答
虚拟机路由和物理路由器可以混用吗?
可以,常见做法是虚拟机路由负责内网段间通信和测试环境隔离,物理路由器负责出口NAT和上网行为管理,两者通过trunk链路连接,各司其职,只要路由协议或静态路由配置正确,不存在兼容性问题,混合架构的故障排查需要同时掌握虚拟网络和物理网络的排错工具,对运维综合能力要求更高。
VMware虚拟机做路由需要独立网卡吗?
不建议用仅主机模式承载真实业务流量,仅主机模式天然隔离外部网络,数据在宿主机内部走虚拟交换机,吞吐量受CPU影响且无硬件加速,至少需要一块物理网卡做上行接入,并启用混杂模式或多队列支持,多年运维经验表明,最理想的配置是一块万兆物理网卡做多VLAN trunk,虚拟路由镜像内部再拆分为逻辑接口,既有隔离性又能利用硬件队列能力提升转发效率。