如何在VMware ESXi上让Linux虚拟机通过Windows虚拟机VPN路由连接
解决方案:通过VMware ESXi虚拟机实现Linux主机借助Windows VPN客户端访问远程服务器
刚好之前帮客户处理过类似的场景,给你整理一套在VMware ESXi上可行的分步方案,亲测有效:
一、先搞定ESXi的虚拟网络规划
核心思路是把两台虚拟机分成「对外连接」和「内部通信」两个网络,避免互相干扰:
- 创建外部虚拟交换机:绑定ESXi主机的一块物理网卡,用来让Windows虚拟机连接路由器、访问互联网以及运行VPN客户端。
- 创建内部虚拟交换机:不要绑定任何物理网卡,仅作为Windows和Linux虚拟机之间的私有通信通道,不需要开启DHCP服务。
二、配置两台虚拟机的网络和权限
1. Windows虚拟机的设置
- 给Windows VM添加两块虚拟网卡:
- 第一块网卡关联到外部虚拟交换机,负责连接外网和运行VPN。
- 第二块网卡关联到内部虚拟交换机,专门用来和Linux VM通信。
- 配置网络参数:
- 外部网卡:自动获取IP(或手动配置路由器网段的静态IP),确保能正常上网,能顺利登录VPN客户端。
- 内部网卡:先随便设一个静态IP(比如
192.168.100.1/24),后面开启共享后会被自动覆盖,不用纠结。
- 开启Internet连接共享(ICS):
- 打开Windows的「网络和共享中心」,找到VPN连接对应的网络适配器,右键选「属性」→切换到「共享」标签。
- 勾选**「允许其他网络用户通过此计算机的Internet连接来连接」**,然后在下拉菜单里选择内部交换机对应的虚拟网卡,点击确定。
- 这时候Windows的内部网卡IP会自动变成
192.168.137.1,记下来这个地址,后面Linux VM要用到。
2. Linux虚拟机的设置
- 给Linux VM添加一块虚拟网卡,直接关联到内部虚拟交换机。
- 配置静态网络参数(以Ubuntu为例,其他发行版类似):
- 编辑网络配置文件(比如
/etc/netplan/00-installer-config.yaml),设置IP为192.168.137.2/24,网关设为192.168.137.1(就是刚才Windows内部网卡的IP)。 - DNS可以设为
192.168.137.1或者公共DNS如8.8.8.8。 - 执行
sudo netplan apply生效配置。
- 编辑网络配置文件(比如
- 验证连通性:
- 先ping Windows的内部IP:
ping 192.168.137.1,能通说明内部网络没问题。 - 再ping VPN连接后才能访问的远程服务器IP,如果能通,就说明整个链路通了。
- 先ping Windows的内部IP:
三、几个容易踩坑的注意事项
- VPN客户端的流量限制:检查Windows上的VPN客户端,有没有启用「阻止非VPN流量」「仅允许VPN流量」这类选项,如果开了要关掉,否则Linux VM的流量会被拦截。
- ESXi防火墙规则:如果ESXi默认防火墙限制了内部交换机的通信,需要手动添加规则,允许两台VM之间的ICMP、TCP/UDP流量。
- ICS网段自定义:如果不想用默认的
192.168.137.x网段,可以通过Windows本地组策略修改ICS的默认地址范围,避免和现有网段冲突。
内容的提问来源于stack exchange,提问作者NictraSavios




