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。

graph LR subgraph 路由器局域网 R[路由器 192.168.188.1] H[宿主机 192.168.188.76<br/>物理网卡] V[VM 192.168.188.100<br/>虚拟网卡桥接] end R --- H R --- V H -.->|地位平等| V

2.2 创建步骤

图形界面

  1. Hyper-V 管理器虚拟交换机管理器新建虚拟网络交换机外部
  2. 填写属性:
    • 名称ExternalSwitch
    • 连接类型:选择你的物理网卡(如 Intel(R) Wi-Fi 6E AX211
    • 勾选"允许管理操作系统共享此网络适配器"
  3. 点击 应用确定

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(网络地址转换)把内部网络的流量转发到物理网卡。

graph LR subgraph 外部网络 R[路由器 192.168.188.1] H[宿主机 192.168.188.76<br/>物理网卡] end subgraph 宿主机内部网络 NI[vEthernet InternalSwitch<br/>192.168.100.1 网关] VM[VM 192.168.100.101] end R --- H H -.->|NAT 转发| NI NI --- VM

3.2 创建步骤

第一步:创建 Internal Switch

图形界面:

  1. 虚拟交换机管理器新建内部
  2. 名称InternalSwitch
  3. 点击 应用确定

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 内部局域网

graph LR H[宿主机 Windows 11<br/>完全隔离] subgraph 专用交换机 PrivateSwitch VM1[VM1 10.0.0.101] VM2[VM2 10.0.0.102] VM3[VM3 10.0.0.103] end H -.->|无法访问| VM1 H -.->|无法访问| VM2 H -.->|无法访问| VM3 VM1 --- VM2 VM2 --- VM3 VM1 --- VM3

4.2 创建步骤

图形界面

  1. 虚拟交换机管理器新建专用
  2. 名称PrivateSwitch
  3. 点击 应用确定

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 架构图对比

graph LR subgraph 外部["外部 External"] direction TB RE[路由器 192.168.188.1] HE[宿主机<br/>192.168.188.76] VE[VM<br/>192.168.188.100] RE --- HE RE --- VE end subgraph 内部["内部 Internal"] direction TB RI[路由器] HI[宿主机<br/>192.168.188.76] NII[vEthernet InternalSwitch<br/>192.168.100.1 NAT] VI[VM<br/>192.168.100.101] RI --- HI HI -.->|NAT 转发| NII NII --- VI end subgraph 专用["专用 Private"] direction TB HP[宿主机<br/>完全隔离] VP1[VM1<br/>10.0.0.101] VP2[VM2<br/>10.0.0.102] VP3[VM3<br/>10.0.0.103] VP1 --- VP2 VP2 --- VP3 end

5.3 选择决策树

flowchart TD A[VM 需要被外部局域网设备<br/>直接访问?] -->|是| B[外部 External] A -->|否| C[是否需要完全隔离?] C -->|是<br/>不上网、宿主机不访问<br/>仅 VM 间互通| D[专用 Private] C -->|否<br/>需要上网或宿主机访问| E[内部 Internal + NAT]

决策逻辑说明:

路径 条件 结果 原因
路径 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

九、最佳实践

  1. 命名规范:外部用 ExternalSwitch,内部用 InternalSwitch,专用用 PrivateSwitch,一目了然
  2. Linux 集群首选 Internal + NAT:IP 固定、不冲突、换网络不影响
  3. Windows VM 日常测试首选 External:直接上网,但记得设静态 IP 防冲突
  4. 安全实验首选 Private:绝对隔离,防止恶意软件逃逸
  5. 多网卡组合:给 VM 同时挂 External(上网)+ Private(内网集群),实现灵活网络拓扑
  6. 定期备份 NAT 配置Get-NetNatnetsh interface portproxy show all 的输出可以保存为脚本,重装系统后快速恢复

更新时间:2026-07-15
适用环境:Windows 10/11 + Hyper-V + PowerShell 5.1+

posted @ 2026-07-15 17:19  RK5123153  阅读(95)  评论(0)    收藏  举报