Hyper-V 虚拟交换机详解(外部 / 内部 / 专用)
目标:彻底理解 Hyper-V 三种虚拟交换机的原理、区别与实战用法
适用场景:单机开发测试、本地集群搭建、网络隔离实验
更新日期:2026-07-15
一、核心概念:三种交换机的本质区别
Hyper-V 的虚拟交换机(Virtual Switch)是 VM 网络的"交通枢纽"。它决定了 VM 的数据包能流向哪里、谁能访问 VM。
| 类型 | 英文 | 与宿主机通信 | 与外网通信 | 与外部设备通信 | 本质 |
|---|---|---|---|---|---|
| 外部 | External | ✅ 能 | ✅ 能 | ✅ 能 | 桥接物理网卡,VM 是局域网中的独立设备 |
| 内部 | Internal | ✅ 能 | ⚠️ 需 NAT | ❌ 不能 | 宿主机与 VM 的私有网络,外网不可见 |
| 专用 | Private | ❌ 不能 | ❌ 不能 | ❌ 不能 | 仅 VM 之间互通,宿主机和外网完全隔离 |
二、外部交换机(External Switch)
2.1 原理
将 VM 的虚拟网卡桥接到宿主机的物理网卡(Wi-Fi 或有线网卡)上。对路由器来说,VM 和宿主机是两台完全独立的电脑,各自独立向路由器 DHCP 请求 IP。
2.2 创建步骤
图形界面
- Hyper-V 管理器 → 虚拟交换机管理器 → 新建虚拟网络交换机 → 外部
- 填写属性:
- 名称:
ExternalSwitch - 连接类型:选择你的物理网卡(如
Intel(R) Wi-Fi 6E AX211) - ✅ 勾选"允许管理操作系统共享此网络适配器"
- 名称:
- 点击 应用 → 确定
PowerShell
New-VMSwitch -SwitchName "ExternalSwitch" -SwitchType External -NetAdapterName "Wi-Fi"
NetAdapterName替换为你实际的网卡名称,可通过Get-NetAdapter查看。
2.3 适用场景
| 场景 | 说明 |
|---|---|
| VM 需要像真实物理机一样上网 | 直接获取路由器分配的 IP,无需额外配置 |
| VM 需要被局域网其他设备访问 | 如 VM 跑 Web 服务器,手机/同事电脑直接访问 VM IP |
| VM 与宿主机需要 SMB 共享 | 同网段下直接 \\VM_IP\Share 访问 |
| 需要固定 IP 但不想做 NAT | 在路由器后台做 DHCP 保留绑定 |
2.4 常见问题
| 问题 | 原因 | 解决 |
|---|---|---|
| VM 无法上网 | 物理网卡未正确选择,或 Wi-Fi 环境不支持桥接 | 确认网卡名称正确;手机热点/企业 802.1X/公共 Wi-Fi 不支持桥接,换有线或 Default Switch |
| VM 与宿主机 IP 冲突 | 家用路由器 DHCP 管理粗糙,把同一 IP 分配给两者 | 给 VM 设置静态 IP(避开宿主机 IP),或在路由器后台做 MAC 绑定 |
| 换 Wi-Fi 后 VM 断网 | 外部交换机绑定的是特定物理网卡,切换网络后需重新配置 | 检查虚拟交换机管理器中的绑定网卡是否正确 |
三、内部交换机(Internal Switch)
3.1 原理
创建一个仅存在于宿主机内部的虚拟网络。VM 和宿主机可以互通,但 VM 默认不能访问外网,除非在宿主机上配置 NAT(网络地址转换)把内部网络的流量转发到物理网卡。
3.2 创建步骤
第一步:创建 Internal Switch
图形界面:
- 虚拟交换机管理器 → 新建 → 内部
- 名称:
InternalSwitch - 点击 应用 → 确定
PowerShell:
New-VMSwitch -SwitchName "InternalSwitch" -SwitchType Internal
第二步:给宿主机虚拟网卡设置 IP(作为网关)
# 查看虚拟网卡名称
Get-NetAdapter | Where Name -Like "*InternalSwitch*"
# 设置 IP(作为 VM 的网关)
New-NetIPAddress -IPAddress 192.168.100.1 -PrefixLength 24 -InterfaceAlias "vEthernet (InternalSwitch)"
第三步:创建 NAT 规则(让 VM 能上网)
New-NetNat -Name "InternalSwitch" -InternalIPInterfaceAddressPrefix 192.168.100.0/24
验证
Get-NetNat
Get-NetIPAddress -InterfaceAlias "vEthernet (InternalSwitch)"
3.3 VM 内配置静态 IP
以 AlmaLinux / RHEL / CentOS 为例:
# 查看网卡名
nmcli device status
# 配置静态 IP(假设网卡为 eth0)
nmcli connection modify eth0 \
ipv4.addresses 192.168.100.101/24 \
ipv4.gateway 192.168.100.1 \
ipv4.dns "192.168.100.1,8.8.8.8" \
ipv4.method manual
# 生效
nmcli connection down eth0 && nmcli connection up eth0
3.4 适用场景
| 场景 | 说明 |
|---|---|
| 搭建本地 Linux 集群 | K8s、Docker Swarm、Hadoop 等,节点间固定 IP 互通 |
| 开发测试环境 | VM 需要上网下载依赖,但不需要被外部局域网直接访问 |
| 避免 IP 冲突 | 完全不受路由器 DHCP 影响,换 Wi-Fi 集群网络不变 |
| 安全隔离 | VM 隐藏在宿主机 NAT 后面,外部看不到 VM 真实 IP |
3.5 宿主机访问 VM 服务
Internal Switch 下,宿主机和 VM 是互通的。
- VM 里跑 Nginx 监听
192.168.100.101:80 - 宿主机浏览器直接访问
http://192.168.100.101✅ 无需端口转发
3.6 外部设备访问 VM 服务(端口转发)
只有需要从宿主机以外的设备(如手机、同事电脑)访问 VM 时,才需端口转发:
# 将宿主机的 8081 端口转发到 VM 的 80 端口
netsh interface portproxy add v4tov4 \
listenaddress=0.0.0.0 listenport=8081 \
connectaddress=192.168.100.101 connectport=80
# 放行防火墙
New-NetFirewallRule -DisplayName "VM-Web-8081" \
-Direction Inbound -Protocol TCP -LocalPort 8081 -Action Allow
查看规则:
netsh interface portproxy show all
删除规则:
netsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=8081
四、专用交换机(Private Switch)
4.1 原理
创建一个完全隔离的虚拟网络,只有连在这个交换机上的 VM 之间可以互通。宿主机进不去,外网也进不去,纯 VM 内部局域网。
4.2 创建步骤
图形界面
- 虚拟交换机管理器 → 新建 → 专用
- 名称:
PrivateSwitch - 点击 应用 → 确定
PowerShell
New-VMSwitch -SwitchName "PrivateSwitch" -SwitchType Private
4.3 VM 内配置静态 IP
与 Internal Switch 相同,但网关和 DNS 需要指向同一网络中的某台 VM(如一台作为路由器的 Linux VM):
nmcli connection modify eth0 \
ipv4.addresses 10.0.0.101/24 \
ipv4.gateway 10.0.0.1 \
ipv4.dns "10.0.0.1" \
ipv4.method manual
如果没有网关 VM,VM 之间只能互通,不能上网。
4.4 适用场景
| 场景 | 说明 |
|---|---|
| 高安全隔离测试 | 测试病毒、恶意软件、渗透演练,确保绝对跑不出来 |
| 纯内网集群实验 | 测试分布式系统心跳网络,不需要上网 |
| 网络教学实验 | 模拟路由、交换、VLAN,搭建完全封闭的网络拓扑 |
| 多网卡分离 | 给 VM 添加第二块网卡走专用网络,第一块网卡走外部/内部 |
五、三种交换机对比总结
5.1 网络能力对比
| 能力 | 外部 | 内部 | 专用 |
|---|---|---|---|
| VM 访问外网 | ✅ 直接 | ✅ 需 NAT | ❌ 不能 |
| 宿主机访问 VM | ✅ 能 | ✅ 能 | ❌ 不能 |
| 局域网设备访问 VM | ✅ 能 | ❌ 需端口转发 | ❌ 不能 |
| VM 间互通 | ✅ 能 | ✅ 能 | ✅ 能 |
| IP 可控性 | ⚠️ 依赖 DHCP | ✅ 完全自定义 | ✅ 完全自定义 |
| 换 Wi-Fi 影响 | ❌ 可能断网/冲突 | ✅ 无影响 | ✅ 无影响 |
| 配置复杂度 | 低 | 中 | 低 |
5.2 架构图对比
5.3 选择决策树
决策逻辑说明:
| 路径 | 条件 | 结果 | 原因 |
|---|---|---|---|
| 路径 1 | VM 需要被手机/同事电脑/NAS 等外部局域网设备直接访问 | 外部 | 只有外部能让 VM 成为局域网独立设备,被外部发现 |
| 路径 2 | VM 不需要被外部访问,且需要完全隔离(不上网、宿主机不访问) | 专用 | 仅 VM 间互通,宿主机和外网都进不来 |
| 路径 3 | VM 不需要被外部访问,但需要上网或宿主机访问 | 内部 + NAT | IP 固定可控、不冲突、换 Wi-Fi 不影响 |
重要补充:外部交换机也支持宿主机访问 VM(同网段直接互通)。但如果不涉及"外部局域网访问",强烈推荐内部 + NAT,因为:
- IP 完全由你控制,不受路由器 DHCP 影响
- 不存在 IP 冲突风险
- 换 Wi-Fi、重启路由器,VM 网络完全不受影响
外部交换机的核心价值在于"VM 被外部局域网发现",而非"宿主机访问 VM"。
六、实战场景推荐配置
场景 1:Windows 11 VM 日常办公测试
推荐:外部 (ExternalSwitch)
New-VMSwitch -SwitchName "ExternalSwitch" -SwitchType External -NetAdapterName "Wi-Fi"
注意:给 VM 设置静态 IP,避免与宿主机 DHCP 冲突。
场景 2:Linux 集群(K8s / Docker / Hadoop)
推荐:内部 (InternalSwitch) + NAT
# 1. 创建交换机
New-VMSwitch -SwitchName "InternalSwitch" -SwitchType Internal
# 2. 宿主机配置网关 IP
New-NetIPAddress -IPAddress 192.168.100.1 -PrefixLength 24 -InterfaceAlias "vEthernet (InternalSwitch)"
# 3. 创建 NAT
New-NetNat -Name "InternalSwitch" -InternalIPInterfaceAddressPrefix 192.168.100.0/24
VM 静态 IP 规划:
| 节点 | IP | 角色 |
|---|---|---|
| Node1 | 192.168.100.101 |
Master |
| Node2 | 192.168.100.102 |
Worker1 |
| Node3 | 192.168.100.103 |
Worker2 |
场景 3:恶意软件分析 / 渗透测试
推荐:专用 (PrivateSwitch)
New-VMSwitch -SwitchName "PrivateSwitch" -SwitchType Private
额外建议:给 VM 添加第二块网卡走外部,用于下载工具,分析时断开外部网卡只保留专用网卡。
场景 4:VM 需要上网 + 被外部访问(Web 服务器)
推荐:外部 (ExternalSwitch) + 路由器端口映射
或 内部 (InternalSwitch) + 宿主机端口转发:
# 外部访问宿主机的 80 端口 → 转发到 VM 的 80 端口
netsh interface portproxy add v4tov4 \
listenaddress=0.0.0.0 listenport=80 \
connectaddress=192.168.100.101 connectport=80
七、常见问题速查
| 问题 | 排查方向 |
|---|---|
| VM 无法上网 | 外部:检查物理网卡绑定;内部:检查 NAT 是否创建;专用:正常,不能上网 |
| VM 间无法互通 | 确认连在同一交换机;检查 VM 防火墙;检查 IP 是否同网段 |
| 宿主机无法 Ping VM | 外部/内部:应该能通;专用:正常,设计如此 |
| 外部设备无法访问 VM | 外部:检查 VM 防火墙;内部:需要做端口转发;专用:不可能 |
| 换 Wi-Fi 后集群断网 | 外部:会受影响;内部/专用:完全不受影响 |
New-NetIPAddress 报错 |
接口已存在 IP,先 Get-NetIPAddress 查看,或 Remove-NetIPAddress 删除旧 IP |
New-NetNat 报错 |
可能已存在同名 NAT,先 Get-NetNat 查看,或 Remove-NetNat 删除 |
八、命令速查表
# ========== 交换机管理 ==========
# 查看所有交换机
Get-VMSwitch | Select Name, SwitchType
# 创建外部交换机
New-VMSwitch -SwitchName "ExternalSwitch" -SwitchType External -NetAdapterName "Wi-Fi"
# 创建内部交换机
New-VMSwitch -SwitchName "InternalSwitch" -SwitchType Internal
# 创建专用交换机
New-VMSwitch -SwitchName "PrivateSwitch" -SwitchType Private
# 删除交换机
Remove-VMSwitch -Name "InternalSwitch" -Force
# 修改 VM 网络适配器
Connect-VMNetworkAdapter -VMName "VMName" -SwitchName "InternalSwitch"
# ========== NAT 管理 ==========
# 创建 NAT
New-NetNat -Name "InternalSwitch" -InternalIPInterfaceAddressPrefix 192.168.100.0/24
# 查看 NAT
Get-NetNat
# 删除 NAT
Get-NetNat -Name "InternalSwitch" | Remove-NetNat
# ========== IP 配置 ==========
# 给虚拟网卡设置 IP
New-NetIPAddress -IPAddress 192.168.100.1 -PrefixLength 24 -InterfaceAlias "vEthernet (InternalSwitch)"
# 查看 IP
Get-NetIPAddress -InterfaceAlias "vEthernet (InternalSwitch)"
# ========== 端口转发 ==========
# 添加转发
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=8081 connectaddress=192.168.100.101 connectport=80
# 查看转发
netsh interface portproxy show all
# 删除转发
netsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=8081
九、最佳实践
- 命名规范:外部用
ExternalSwitch,内部用InternalSwitch,专用用PrivateSwitch,一目了然 - Linux 集群首选 Internal + NAT:IP 固定、不冲突、换网络不影响
- Windows VM 日常测试首选 External:直接上网,但记得设静态 IP 防冲突
- 安全实验首选 Private:绝对隔离,防止恶意软件逃逸
- 多网卡组合:给 VM 同时挂 External(上网)+ Private(内网集群),实现灵活网络拓扑
- 定期备份 NAT 配置:
Get-NetNat和netsh interface portproxy show all的输出可以保存为脚本,重装系统后快速恢复
更新时间:2026-07-15
适用环境:Windows 10/11 + Hyper-V + PowerShell 5.1+

浙公网安备 33010602011771号