
一. 前言
对于各类网络配置介绍的文章或视频, 可以简单分为两类
- 晦涩难懂, 主要是涉及到各种网络协议以及底层原理的实现.
- 内容混乱稀碎, 不成体系, 往往是知其所以, 而不知其所以然(对于涉及硬件的文章, 这是很普遍的现象).
以下, 以Hyper-V的网络设置为中心, 简略对其中涉及的主要内容进行相对详尽的梳理.
1.1 关于Hyper-V
在 Windows, Windows Server 和 Azure Local 上, 支持 Hyper-V 的 Windows 客户操作系统 | Microsoft Learn
虚拟机性能哪家强? 三款虚拟机软件对比测试_哔哩哔哩_bilibili
Windows Server 和 Windows 中的 Hyper-V 虚拟化 | Microsoft Learn
Windows 和 Windows Server 上 Hyper-V 的系统要求 | Microsoft Learn
Hyper-V虚拟化架构浅析_51CTO博客_Hyper-V虚拟化
hyper-v, 相关介绍这里就不一一赘述了.
自推土机公司掀起的CPU核心战争, 牙膏公司的四核顶配成入门, 消费级CPU的性能发生根本性的改变.
普通PC的性能已经远远超出了一般使用需要, 和手机的性能增长被用于作为广告设备不一样, PC的控制权还基本在用户手上, 就算日益无底线的Windows三哥使劲折腾, PC的性能依然还未受到根本影响.
所以如何最大化利用PC的性能是个值得深挖的方向, 而硬件虚拟化显然是个极佳的方向.
二. 基本概念
在开始正篇前, 需要对网络的基础有一定了解, 主要是NAT, DHCP, 网关, 子网掩码等.
2.1 NAT
Network Address Translation, 网络地址转换.
网络地址转换 ( NAT) 是一种互联网服务提供商 ( ISP) 和组织常用的技术, 使多个设备能够共享单个公共 IP 地址. 通过使用 NAT, 专用网络上的设备可以与公共网络上的设备通信, 而无需每个设备都有自己的唯一 IP 地址.
NAT 最初旨在作为短期解决方案, 以缓解可用 IPv4 地址的短缺. 通过在一个本地网络上的多台计算机之间共享单个 IP 地址, NAT 可保留有限数量的可公开路由的 IPv4 地址. NAT 还为专用网络提供了一层安全防护, 因为它将设备的实际 IP 地址隐藏在单个公共 IP 地址后面.
设置家庭或办公室网络时可能出现的最常见问题之一是互联网协议 ( IP) 地址冲突. IP 地址 分配给网络上的每台设备, 并且没有两台设备可以拥有相同的 IP 地址. 如果同一网络上的两台设备具有相同的 IP 地址, 则会出现连接问题.

Set up a NAT network | Microsoft Learn
【计算机网络】网络层学习笔记: 总结IP, NAT和DHCP-腾讯云开发者社区-腾讯云
(在外网获取本机的IP)
这种方式实现的外网连接, 一旦所在的IP(段)有爬虫一类的灰产活动, 很容易被网站集中封禁所波及, 例如豆瓣, 基本就是一刀切对IP段封禁.
2.1.1 私有网络地址
出于特定目的而保留的地址.
IPv4私有地址详解: 定义, 范围, 应用场景与实践要点_ipv4私网地址-CSDN博客
RFC 1918 为私有网络预留出了如下 3 类 IP 地址:
- A 类 IP 地址: 10.0.0.0~10.255.255.255;
- B 类 IP 地址: 172.16.0.0~172.31.255.255;
- C 类 IP 地址: 192.168.0.0~192.168.255.255.
此外还有本地的127.0.0.1, 又如: 网络世界的" 万能钥匙" : 深入解析 0.0.0.0/0 的含义与核心应用 - 知乎
2.2 DHCP
Dynamic Host Configuration Protocol, 动态主机配置协议.
NAT( 网络地址转换) 和 DHCP( 动态主机配置协议) 的关系, 简单来说:
- DHCP 负责 " 内网设备的网络配置分配"
- NAT 负责 " 内网与公网的地址转换与通信转发"
DHCP 负责让内网设备 " 获得合法的内网身份( IP 配置) " , NAT 负责让这个 " 内网身份" 能与外网通信.
| 对比维度 | DHCP( 动态主机配置协议) | NAT( 网络地址转换) |
|---|---|---|
| 核心功能 | 分配内网设备的网络配置( IP, 网关, DNS 等) | 私有 IP 与公网 IP 的转换, 转发内外网流量 |
| 解决的问题 | 手动设置 IP 繁琐, IP 冲突 | 公网 IP 稀缺, 内网设备无法直接访问公网 |
| 工作层级 | 应用层( UDP 协议, 端口 67/68) | 网络层( IP 层) + 传输层( 端口映射) |
| 依赖关系 | 不依赖 NAT( 手动设置 IP 也能工作) | 不依赖 DHCP( 但需要内网设备使用私有 IP) |
| 网络位置 | 仅作用于局域网( LAN) 内 | 作用于局域网与公网( WAN) 的边界( 网关) |
| 安全性 | 避免 IP 冲突, 无直接安全防护 | 隐藏内网 IP, 隔离外网攻击( 内网设备不可被公网直接访问) |
有 NAT 但无 DHCP:
- 场景: 手动为内网设备设置静态私有 IP( 如
192.168.1.10) , 子网掩码, 网关( NAT 设备内网 IP) ; - 结果: 设备仍能通过 NAT 访问公网, 但需要手动管理 IP, 容易冲突( 不推荐) .
有 DHCP 但无 NAT:
- 场景: 局域网内仅需设备互通( 如办公室电脑共享文件) , 无需访问公网;
- 结果: DHCP 分配私有 IP, 设备之间可通过内网 IP 通信, 但无法访问互联网( 如无路由转发功能)
2.3 网关
Gateway, 网关.
(win10上, default switch的默认配置, ip地址会发生变化, 子网掩码不会变)
网关, 可视为设备所处网络边界的 " 出入口 + 转发器"
- 其核心作用是连接两个不同类型的网络( 如局域网 LAN 和广域网 WAN) , 实现数据包在不同网络间的转发( 跨网段通信的必经之路) .
- 是一个 " 网络层设备" ( 工作在 OSI 模型第三层) , 拥有至少两个网络接口( 一个连接 LAN, 一个连接 WAN)
- 内网设备要与外网( 或其他网段) 通信, 必须将数据包发送到网关, 由网关转发出去( 类似 " 小区大门" , 所有进出都要经过) .
| 组件 | 核心角色 | 与网关的关系 | 与其他组件的关系 |
|---|---|---|---|
| 网关 | 网络边界出入口, 转发器 | 自身是 " 载体" , 集成 DHCP 服务器和 NAT 功能模块 | 为 DHCP 提供网关配置项, 为 NAT 提供物理基础 |
| DHCP | 内网配置分配管家 | 依赖网关提供 " 出口地址" , 通常集成在网关中 | 给内网设备分配访问 NAT 所需的网关地址 |
| NAT | 内外网地址转换翻译官 | 是网关的核心转发功能, 必须在网关上实现 | 依赖内网设备通过 DHCP 获得私有 IP 和网关 |
一般以default gateway, 缺省网关这一名称出现
缺省网关( Default Gateway) 是子网与外网连接的设备, 通常是一个路由器. 当一台计算机发送信息时, 根据发送信息的目标地址, 通过子网掩码来判定目标主机是否在本地子网中, 如果目标主机在本地子网中, 则直接发送即可. 如果目标不在本地子网中则将该信息送到缺省网关/路由器, 由路由器将其转发到其他网络中, 进一步寻找目标主机.
这个参数为空时, 同一网段下的设备依然可以相互通信, 例如下面将提及的Hyper-V虚拟机的private switch模式.
2.4 子网掩码
subnet mask, 简而言之, 就是用于标识不同设备是否处于同一网段.
子网掩码( Subnet Mask) 是一个32位的二进制数, 用于区分IP地址中的网络部分和主机部分. 它的主要作用包括:
其中的关键判断不同的设备是否处于同于子网.
Ethernet adapter Ethernet 5:
Connection-specific DNS Suffix . :
Link-local IPv6 Address . . . . . : fe80::b178:cc44:115:a8f0%17
Autoconfiguration IPv4 Address. . : 169.254.110.0
Subnet Mask . . . . . . . . . . . : 255.255.0.0
Default Gateway . . . . . . . . . :
Connection-specific DNS Suffix . :
Link-local IPv6 Address . . . . . : fe80::d77c:1f94:5bdb:7a0b%17
Autoconfiguration IPv4 Address. . : 169.254.190.79
Subnet Mask . . . . . . . . . . . : 255.255.0.0
Default Gateway . . . . . . . . . :
IP二进制: 10101001 . 11111110 . 01101110 . 00000000
子网掩码二进制: 11111111 . 11111111 . 00000000 . 00000000
按位与结果: 10101001 . 11111110 . 00000000 . 00000000
IP二进制: 10101001 . 11111110 . 10111110 . 01001111
子网掩码二进制: 11111111 . 11111111 . 00000000 . 00000000
按位与结果: 10101001 . 11111110 . 00000000 . 00000000
// js
// 0, 补位从前面开始
const func = (number_s) => number_s.split('.').map(e => ('0'.repeat(7)+ parseInt(e).toString(2)).slice(-8)).join('.');
console.log(func('169.254.190.79'))
// 10101001.11111110.10111110.01001111
// 需要注意, 数字的字面量, 调用其函数时, 需要 .. , 两个点, 因为单个点, 依然还是数字
4..toString(2)
// '100'
IP地址 ✖️( 按位与) 子网掩码 = 网络地址→ 「网络地址相同 = 同一网段」与运算, 1 x 1 = 1, 0 x 1 = 0, 0 x 0 = 0
def ip_to_int(ip_str):
"""
核心工具函数1: 将IPv4地址字符串( 如169.254.110.0) 转为32位整数, 方便位运算
:param ip_str: IPv4地址字符串
:return: 对应32位整数
"""
# 分割IP为四段, 转成整数列表
ip_segments = list(map(int, ip_str.split('.')))
# 移位计算32位整数: 第一段左移24位 + 第二段左移16位 + 第三段左移8位 + 第四段
ip_int = (ip_segments[0] << 24) + (ip_segments[1] << 16) + (ip_segments[2] << 8) + ip_segments[3]
print(ip_int)
return ip_int
def mask_to_int(mask):
"""
核心工具函数2: 子网掩码转32位整数, 支持两种格式:
1. 十进制掩码字符串( 如255.255.0.0)
2. CIDR前缀数字( 如16, 24)
:param mask: 子网掩码(字符串/数字)
:return: 对应32位整数
"""
if isinstance(mask, int):
# 处理CIDR前缀( 如/16 → 16) : 前mask位为1, 后32-mask位为0
return (0xFFFFFFFF << (32 - mask)) & 0xFFFFFFFF
else:
# 处理十进制掩码字符串( 如255.255.0.0) , 复用ip_to_int函数
return ip_to_int(mask)
def is_same_network(ip1, mask1, ip2, mask2):
"""
主函数: 判断两台设备是否处于同一网段( 支持两种入参格式)
:param ip1: 设备1的IPv4地址( 字符串)
:param mask1: 设备1的子网掩码( 十进制字符串/ CIDR数字)
:param ip2: 设备2的IPv4地址( 字符串)
:param mask2: 设备2的子网掩码( 十进制字符串/ CIDR数字)
:return: True=同网段, False=不同网段
"""
# 1. 转IP为整数
ip1_int = ip_to_int(ip1)
ip2_int = ip_to_int(ip2)
# 2. 转子网掩码为整数
mask1_int = mask_to_int(mask1)
mask2_int = mask_to_int(mask2)
# 3. 按位与运算, 计算网络地址
network1 = ip1_int & mask1_int
network2 = ip2_int & mask2_int
# 4. 对比网络地址, 返回结果
return network1 == network2
# ===================== 测试你的实际虚拟机场景 =====================
if __name__ == "__main__":
# ✅ 场景1: 你的两台Hyper-V虚拟机( IP+十进制子网掩码 格式) 【重点测试】
ip_1 = "169.254.110.0"
mask_1 = "255.255.0.0"
ip_2 = "169.254.190.79"
mask_2 = "255.255.0.0"
# 调用判断函数
result = is_same_network(ip_1, mask_1, ip_2, mask_2)
print(f"【你的虚拟机场景】\n设备1: {ip_1} | 掩码: {mask_1}\n设备2: {ip_2} | 掩码: {mask_2}\n是否同一网段: {result}")
print("-" * 60)
# ✅ 场景2: CIDR格式测试( 日常更常用, 如192.168.1.0/24)
ip_3 = "192.168.1.100"
mask_3 = 24 # /24 → 直接传数字24
ip_4 = "192.168.1.200"
mask_4 = 24
result2 = is_same_network(ip_3, mask_3, ip_4, mask_4)
print(f"【CIDR格式场景】\n设备1: {ip_3}/24\n设备2: {ip_4}/24\n是否同一网段: {result2}")
print("-" * 60)
# ✅ 场景3: 不同网段测试( 验证函数正确性)
ip_5 = "192.168.1.100"
mask_5 = 24
ip_6 = "192.168.2.100"
mask_6 = 24
result3 = is_same_network(ip_5, mask_5, ip_6, mask_6)
print(f"【不同网段场景】\n设备1: {ip_5}/24\n设备2: {ip_6}/24\n是否同一网段: {result3}")
Online IP Subnet Calculator and CIDR Calculator
2.4.1 CIDR表示法
到底什么是CIDR( 无类域间路由) ? 做网络的一定得懂这个术语! -云社区-华为云
CIDR, Classless Inter-Domain Routing, 无类域间路由.
/24 的含义是: 子网掩码的二进制形式中, 前 24 位是 " 1" , 后 8 位是 " 0" , 对应关系如下:
| 表示方式 | 二进制子网掩码( 32 位) | 十进制子网掩码 |
|---|---|---|
192.168.1.0/24 |
11111111.11111111.11111111.00000000( 前 24 个 1) |
255.255.255.0 |
// 指定生成需要的二进制掩码
const fn = (ic) => [...('1'.repeat(ic) + '0'.repeat(32 - ic))].reduce((p, c, i) => (p[Math.floor(i / 8)].push(c), p), Array.from({ length: 4 }, (_) => [])).map(e => e.join('')).join(".")
console.log(fn(24));
// 11111111.11111111.11111111.00000000
// 将二进制掩码转换为十进制
const func = (number_s) => number_s.split('.').map(e => parseInt(e, 2)).join('.');
console.log(func('11111111.11111111.11111111.00000000'));
// 255.255.255.0
| CIDR 格式 | 十进制子网掩码 | 网络位长度 | 主机位长度 | 理论 IP 数 | 可用 IP 数 | 典型应用场景 |
|---|---|---|---|---|---|---|
/8 |
255.0.0.0 |
8 | 24 | 16777216(2 ^ 24, 以下) | 16777214 | 大型企业 / 运营商网络 |
/16 |
255.255.0.0 |
16 | 16 | 65536 | 65534 | 中型企业 / 校园网 |
/24 |
255.255.255.0 |
24 | 8 | 256 | 254 | 家庭 / 小型办公网络 |
/27 |
255.255.255.224 |
27 | 5 | 32 | 30 | 小型机房 / 服务器集群 |
/30 |
255.255.255.252 |
30 | 2 | 4 | 2 | 路由器之间互联 |
(Ubuntu安装过程的静态IP设置)
2.5 APIPA
为网络适配器分配 IP 地址后, 计算机可以使用 TCP/IP 与连接到同一 LAN 的任何其他计算机通信, 并且该计算机也配置为 APIPA, 或者将 IP 地址手动设置为 169.254.x.y( 其中 x.y 是客户端的唯一标识符) 地址范围, 子网掩码为 255.255.0.0. 请注意, 计算机无法与其他子网上的计算机通信, 也不能与不使用自动专用 IP 寻址的计算机通信. 默认情况下启用自动专用 IP 寻址.
如何在不使用 DHCP 服务器的情况下使用自动 TCP/IP 寻址 | Microsoft Learn
Automatic Private IP Addressing, APIPA, 自动专用IP寻址, 是DHCP故障转移机制, 用于客户端在DHCP服务器不可用时自动配置私有IP地址. 该机制通过分配169.254.0.0/16地址段的IPv4地址( 子网掩码255.255.0.0) , 确保同一子网内的主机通信, 但地址不可路由且不适用于互联网连接.
| 技术 | 全称 | 核心作用 |
|---|---|---|
| DHCP | 动态主机配置协议( Dynamic Host Configuration Protocol) | 由DHCP 服务器主动向设备分配 IP, 网关, DNS 等完整网络参数, 是网络中「正常的自动配置方案」. |
| APIPA | 自动专用 IP 寻址( Automatic Private IP Addressing) | 当设备找不到 DHCP 服务器时, 自己生成一个临时私有 IP, 是「DHCP 失效时的应急方案」. |
| 对比维度 | DHCP | APIPA |
|---|---|---|
| IP 地址范围 | 由 DHCP 服务器配置( 通常是局域网私有网段, 如192.168.x.x, 10.x.x.x) |
固定为169.254.0.1 ~ 169.254.255.254( 这是 IANA 预留的专用应急网段) |
| 分配主体 | 由专门的 DHCP 服务器( 如路由器, 宿主机 DHCP 服务) 分配 | 设备自己生成( 无需服务器, 客户端独立完成) |
| 网络参数 | 会同时分配网关, DNS, 子网掩码等完整配置 | 仅分配 IP 和子网掩码( 255.255.0.0) , 无网关, 无 DNS |
| 网络连通性 | 能正常访问局域网, 外网( 只要网关 / DNS 配置正确) | 仅能与「同样使用 APIPA 网段的设备」通信, 无法访问外网, 无法跨网段通信 |
| 适用场景 | 日常网络的正常配置( 如家庭 / 公司 WiFi, Hyper-V Default Switch) | DHCP 服务器故障, 网络断开, 设备连不上 DHCP 时的「临时应急」( 比如路由器断电后, 电脑自动用 APIPA) |
| IP 租期 | 有租期( 通常几小时到几天) , 到期需向服务器续租 | 无租期, 只要设备没找到 DHCP, 就一直使用该 IP( 重启后会重新检测 DHCP, 若仍失效则重新生成) |
2.6 VLAN
VLAN( Virtual Local Area Network) 即虚拟局域网, 是将一个物理的LAN在逻辑上划分成多个广播域的通信技术.
每个VLAN是一个广播域, VLAN内的主机间可以直接通信, 而VLAN间则不能直接互通. 这样, 广播报文就被限制在一个VLAN内.
为 Hyper-V 配置虚拟局域网 | Microsoft Learn
VLAN 的基础作用: 通过给网络流量打 " 标签" , 将同一物理网络中的设备划分到不同的 " 广播域" , 实现网络隔离, 多网段管理.
Hyper-V虚拟交换机里的 VLAN 设置, 是专门给宿主机的虚拟网卡划分 VLAN的功能, 用于在多 VLAN 网络环境中, 控制宿主机通过该虚拟交换机的通信范围( 仅同 VLAN 设备互通) , 和虚拟机的网络隔离是相互独立的配置.
2.7 Windows防火墙
Windows防火墙默认状态下, 进站受限, 出站则不设防. 防火墙设置一大问题是, 软件可以很容易添加规则.
三者的信任级别从高到低排序: 域网络 > 专用网络 > 公用网络, 对应不同的网络环境属性:
| 网络类型 | 核心定义 | 信任级别 | 设计目标 |
|---|---|---|---|
| 域网络 | 已加入 Active Directory (AD) 域 的网络( 由域控制器统一管理) | 最高 | 企业级内网, 优先保障资源共享与域策略部署 |
| 专用网络 | 私有, 可控的网络( 如家庭 Wi-Fi, 公司非域内网) , 仅信任已知设备 | 中等 | 兼顾便利性与基础安全, 支持文件 / 打印机共享 |
| 公用网络 | 公开, 不可控的网络( 如咖啡馆 Wi-Fi, 酒店网络) , 存在陌生设备与安全风险 | 最低 | 极致安全优先, 限制所有非必要网络访问 |
| 比维度 | 域网络( Domain) | 专用网络( Private) | 公用网络( Public) |
|---|---|---|---|
| 防火墙策略 | 应用「域配置文件」, 默认放行域内必要端口( 如 LDAP 389, SMB 445, RDP 3389) , 可通过域组策略( GPO) 统一管控防火墙规则 | 应用「专用配置文件」, 默认放行文件共享( SMB 445) , 网络发现( UPnP, SSDP) 等私有服务端口 | 应用「公用配置文件」, 默认阻断所有入站连接( 仅放行 HTTP/HTTPS 等必要出站) , 禁用所有私有服务端口 |
| 资源共享权限 | 支持域内文件共享, 打印机共享, 网络驱动器映射, 权限由域用户 / 组策略控制( 如 Domain Users 组默认访问权限) | 支持本地文件 / 打印机共享, 权限由本地用户组( 如 HomeUsers) 控制, 仅允许同网段信任设备访问 | 禁用所有共享功能( 文件, 打印机, 网络发现) , 即使手动开启也会被防火墙阻断 |
| 网络发现 | 启用( 允许域内设备发现, AD 域控制器检测, 组播 / 广播通信) | 启用( 允许同网段设备发现, 如局域网内查找其他电脑) | 禁用( 隐藏设备, 避免被陌生设备扫描探测) |
| 组策略( GPO) 支持 | 完全支持域组策略, 防火墙规则, 共享权限, 网络配置可通过 GPO 强制部署到所有域成员机 | 仅支持本地组策略( Local Group Policy) 或本地防火墙规则, 不支持域级统一管控 | 仅支持本地组策略, 且系统强制锁定高安全配置( 如无法通过 GPO 开启公用网络的文件共享) |
| 身份验证方式 | 依赖 AD 域身份验证( 域账号 / 密码, Kerberos 协议) , 设备需通过域控制器认证才能接入 | 依赖本地账号或网络密码( 如 Wi-Fi 密码) , 无集中身份验证 | 仅依赖网络接入密码( 如 Wi-Fi 密码) , 无设备级身份验证, 陌生设备可自由接入 |
| 网络位置感知( NLA) | 自动检测域控制器( 通过 DNS SRV 记录, LDAP 探测) , 优先级最高( 无法手动修改为其他类型) | 手动标记或系统自动识别( 如家庭网络标记为专用) , 可手动切换 | 系统自动识别( 如公共 Wi-Fi 默认标记为公用) , 手动切换需管理员权限 |
| 典型端口放行规则 | 入站: LDAP (389), LDAPS (636), SMB (445), RDP (3389), RPC (135); 出站无限制 | 入站: SMB (445), NetBIOS (137-139), UPnP (1900); 出站无限制 | 入站: 仅放行 ICMP( ping) , HTTP (80), HTTPS (443); 出站限制非必要协议 |
2.8 LAN/WAN/Ethernet
容易搞混的三个常见词汇.
以太网( Ethernet) 是一种 基于IEEE 802.3标准的局域网( LAN) 技术
通过以太网技术搭建 LAN, 再通过 WAN 技术连接多个 LAN, 最终形成端到端的网络通路
| 对比维度 | 局域网( LAN) | 广域网( WAN) | 以太网( Ethernet) |
|---|---|---|---|
| 本质属性 | 按地理范围划分的网络类型 | 按地理范围划分的网络类型 | 网络技术标准( 物理层 + 数据链路层) |
| 覆盖范围 | 小( ≤10km, 本地) | 大( ≥10km, 跨地域) | 主要用于 LAN, 可延伸至 WAN |
| 速率 | 高( 1Gbps~400Gbps) | 中低~ 中高( 64Kbps~10Gbps) | 高( 10Mbps~400Gbps) |
| 延迟 | 极低( <1ms) | 较高( 几十~ 几百 ms) | 极低( LAN 场景) |
| 管理主体 | 私有( 单一组织) | 公共 / 多主体( 运营商 + 企业) | 无特定管理主体, 仅为技术标准 |
| 核心设备 | 交换机, 路由器, AP | 路由器, 调制解调器, SD-WAN 网关 | 交换机, 网卡, AP |
| 传输介质 | 双绞线, 光纤, WiFi | 光纤, 双绞线, 5G / 卫星 | 双绞线, 光纤, 无线( WiFi) |
| 典型协议 | 以太网( 802.3/802.11) | SD-WAN, MPLS, IPsec, 5G | 以太网帧协议, VLAN, LACP |
| 核心用途 | 本地设备互联, 资源共享 | 跨地域 LAN 互联, 远程访问 | 实现 LAN 数据传输, 设备互联 |
2.9 小结
综上, 简而言之.
NAT为子域的设备连接其他网络的设备提供(转发)支持; DHCP为子域设备自动分配IP, 既可以免除手动操作的繁琐, 同时也避免了手动分配IP带来的可能冲突, 子网掩码为不同域IP提供了标记, CIDR为子网掩码提供了更为简洁的表示方式; VLAN为进一步提供局域网设备的管理提供支持; APIPA为没有DHCP支持的设备提供自动IP分配; Windows防火墙为设备提供安全防护, 防止外部设备恶意的访问.
LAN, 局域网
WAN, 广域网
Ethernet, 上述网络的具体技术实现.
三. 虚拟机实现外部网络连接
相关内容: Hyper虚拟机折腾记录 | Lian
对于通过WIFI连接宽带的设备, Hyper-V中的虚拟机一般有这么几种连接外网的方式实现.
- 网卡桥接, 直接操作物理网卡
- 网卡分享
- 直接使用Windows中默认配置的
Default Switch - 自建NAT网络.
3.1 网卡桥接
Network Bridge
通过这种方式创建的网络连接, 最为直观的特点就是设备的关系是平行的, 即意味着宿主机和虚拟机相当于直接连接外部网关, 这意味着所有的设备都可以处于同一网络环境之下, 相互之间可以直接通信, 外部设备可以直接访问虚拟机.
Linux 网络桥接( Network Bridge) 详解: 从原理到实践 - geek-blogs.com
网桥需处理不同IEEE 802子标准( 如802.3, 802.4, 802.5) 的兼容性问题, 包括帧格式差异, 传输速率不一致及最大帧长限制. 跨标准转发时易引发数据丢失或缓冲溢出, 尽管通过帧重组等技术可部分缓解, 但协议层缺乏统一支持, 限制了其在大规模网络中的应用.
这种方式的最大问题是兼容性, 特别是对于Wi-Fi网卡, 出现网速骤降甚至无法访问网络属于常见现象.
所以, 以下内容主要聚焦于网卡分享和NAT网络.
注意win10和win11的设置有所差异, 在win11直接虚拟化网卡, 会自动创建一个内部虚拟交换机, 然后桥接到WiFi网卡.
在win11中:
这种操作在win11上网速几乎不受到影响, 但win10上这种操作不行.
同时设置上也需要手动操作.
首先创建一个内部的交换机.
将这个交换机的网卡和实际外部连接网络的WiFi网卡进行桥接.
将三个选项的都设置为disable.
需要注意不同设备, 上述设置未必有效.
3.1.1 LSO(Large Send Offload)
Large Send Offload (LSO) is a networking technology that can significantly improve the performance of TCP connections by offloading the TCP segmentation and reassembly process from the CPU to the network interface card (NIC). This can be especially beneficial for applications that send large amounts of data, such as video streaming and file transfers.
可以降低CPU负载的网络传输技术- - LSO_large send offload-CSDN博客
Large Send Offload v2 (IPv4) - What It Is and How to Use It
3.1.2 IPV4 Checksum Offload
IPv4 Checksum Offload is a feature that offloads the calculation of checksums for IPv4 packets to the network interface card (NIC) hardware. This can improve network performance by reducing the CPU load and increasing throughput. The checksum offload can be applied to both the send and receive paths of the network traffic.
IPv4 Checksum Offload - 30.3 - ID:705831 | Intel® Ethernet Adapters and Devices User Guide
High-performance networking | Microsoft Learn
从介绍来看, 都是和降低cpu的负载有关.
3.2 网卡分享
Network Sharing
这种方式是相对推荐的, 简单易于操作.
先创建一个内部交换机, 然后, 在WIFI网络适配器上选中这个设备即可, 简单易用.
从上述内容应该可以看出网卡分享实现的实际上就是一个预置的NAT网络, 这是这个网络的参数和下面将提及的默认交换机一样是系统写死的, 无法手动调整其中的参数, 但是其网关地址却是固定的.
使用无线托管网络, Internet 连接共享 - Win32 apps | Microsoft Learn
Set up Internet Connection Sharing - Windows Server | Microsoft Learn
需要注意的是这种方式存在一个潜在的问题, 将在下面的虚拟机交换机提到.
3.3 小结
| 对比维度 | 网卡桥接 | 网卡分享 |
|---|---|---|
| 本质 | 二层转发( 虚拟交换机) | 三层转发( NAT+DHCP) |
| IP 分配 | 与物理网络同网段( DHCP / 静态) | 私有网段( 内置 DHCP 分配) |
| 隔离性 | 无隔离( 直接暴露在物理网络) | 有隔离( 内网设备通过 NAT 访问公网) |
| 关联技术 | 依赖交换机 / 桥接接口 | 依赖 NAT+DHCP + 网关 |
| 适用场景 | 虚拟机对外服务, 多设备直接互联 | 临时网络共享, 小型测试环境 |
这里简单介绍上述两种方式, 关于交换机更多细节放在下一章节.
四. 虚拟交换机
需要先理清交换机和路由的差异, 以便于理解后续的虚拟交换机:
| 设备 | 核心定义 | 本质作用 |
|---|---|---|
| 交换机 | 工作在 数据链路层( Layer 2) 的网络设备 | 解决同一网段内的设备互联问题, 相当于「局域网内的信号分配器」 |
| 路由器 | 工作在 网络层( Layer 3) 的网络设备 | 解决不同网段之间的通信问题, 相当于「不同网络之间的网关 / 桥梁」 |
| 对比维度 | 交换机 | 路由器 |
|---|---|---|
| 工作层次 | 数据链路层( Layer 2) | 网络层( Layer 3) |
| 寻址依据 | 基于 MAC 地址( 设备的物理地址, 全球唯一) | 基于 IP 地址( 设备的逻辑地址, 可手动配置) |
| 核心功能 | 1. 同一网段内的设备互联( 如电脑, 手机, 虚拟机) 2. 端口扩展( 增加局域网内的设备数量) | 1. 不同网段之间的路由转发( 如 192.168.1.0/24 ↔ 192.168.3.0/24) 2. 连接外网( 通过 PPPoE, DHCP 获取公网 IP) 3. NAT 功能( 私有 IP 转公网 IP, 节省公网 IP) 4. DHCP 服务( 自动分配 IP 给局域网设备) |
| 连接范围 | 仅能连接同一网段的设备, 无法跨网段通信 | 可连接不同网段的设备, 还能连接到互联网 |
| 是否需要 IP | 本身不需要配置 IP 就能工作( 管理 IP 可选, 仅用于维护) | 必须配置 IP( 至少两个网段的 IP, 作为网关) 才能工作 |
| 典型应用场景 | 1. 家庭 / 公司局域网内的设备互联( 如电脑, 打印机, 交换机级联) 2. Hyper-V 中的虚拟交换机( Internal/Private/External, 实现宿主机与虚拟机, 虚拟机与虚拟机的同一网段互联) | 1. 家庭网关( 连接光猫和家庭局域网, 实现多设备上网) 2. 企业网络的网段隔离( 如办公网段, 服务器网段) 3. Hyper-V 中的 NAT 网关( 实现虚拟机私有网段与宿主机外网的通信) |
Hyper-V 虚拟交换机( 如 WIFI-NAT-Switch) → 交换机的功能
- 它工作在二层, 基于 MAC 地址转发流量;
- 实现了「宿主机 ↔ 虚拟机」「虚拟机 ↔ 虚拟机」的同一网段互联( 如 192.168.3.0/24 网段内) ;
- 但它无法让虚拟机访问外网, 因为没有跨网段转发的能力.
NAT 规则( New-NetNat 命令) → 路由器的核心功能
- 它工作在三层, 基于 IP 地址转发流量;
- 实现了「虚拟机私有网段( 192.168.3.0/24) ↔ 宿主机外网网段( 如 192.168.10.0/24) 」的跨网段通信;
- 同时提供 NAT 功能, 将虚拟机的私有 IP 转换为宿主机的公网 IP, 让虚拟机能访问外网 - - 这正是路由器的核心作用.
Default Switch → 集成了交换机 + 路由器的功能
- 内置的虚拟交换机实现二层互联( 同一网段) ;
- 内置的 NAT 网关实现三层路由转发( 跨网段 + 连接外网) ;
- 内置的 DHCP 服务自动分配 IP- - 相当于一个「迷你路由器」.
- 交换机主要功能是用于数据交换, 路由器主要功能是用于路由转发.
- 交换机根据MAC地址进行数据转发, 而路由器是根据IP地址进行数据转发.
- 路由器能在多条路径中选择最佳的路径, 提升交换数据的传输速率
- 什么是交换机? 交换机是做什么用的? - 华为
PS C:\Windows\system32> Get-VMSwitch
Name SwitchType NetAdapterInterfaceDescription
---- ---------- ------------------------------
iLan Internal
pLan Private
iLan_1 Internal
Default Switch Internal
PS C:\Windows\system32> Get-NetAdapter
Name InterfaceDescription ifIndex Status MacAddress LinkSpeed
---- -------------------- ------- ------ ---------- ---------
vEthernet (iLan) Hyper-V Virtual Ethernet Adapter #4 25 Up 00-15-5D-02-6D-10 10 Gbps
vEthernet (Default Swi... Hyper-V Virtual Ethernet Adapter 10 Up 00-15-5D-95-32-35 10 Gbps
vEthernet (vEthernet (... Hyper-V Virtual Ethernet Adapter #3 40 Up 00-15-5D-30-10-F9 10 Gbps
vEthernet (iLan_1) Hyper-V Virtual Ethernet Adapter #6 21 Up 00-15-5D-02-6D-11 10 Gbps
vEthernet (Ethernet) Hyper-V Virtual Ethernet Adapter #2 36 Up 00-15-5D-D5-99-A8 10 Gbps
vEthernet (vEthernet ...2 Hyper-V Virtual Ethernet Adapter #5 46 Up 00-15-5D-67-31-C5 10 Gbps
Ethernet Realtek PCIe GbE Family Controller 16 Disconnected 74-D7-13-B0-7D-A2 0 bps
Wi-Fi MediaTek Wi-Fi 6 MT7921 Wireless LAN... 9 Up A8-3B-76-42-F8-E7 866.7 Mbps
vEthernet (Wi-Fi) Hyper-V Virtual Ethernet Adapter #7 51 Up 00-15-5D-5F-A4-D7 10 Gbps
Bluetooth Network Conn... Bluetooth Device (Personal Area Netw... 3 Disconnected A8-3B-76-42-F8-E8 3 Mbps
Virtual switch types are:
- External virtual switch - Connects to a wired, physical network by binding to a physical network adapter.
- Internal virtual switch - Connects to a network that can be used only by the virtual machines running on the host that has the virtual switch, and between the host and the virtual machines.
- Private virtual switch - Connects to a network that can be used only by the virtual machines running on the host that has the virtual switch, but doesn't provide networking between the host and the virtual machines.
在 Windows Server 中规划 Hyper-V 网络 | Microsoft Learn
三种交换机, 虚拟机之间是双向通信没有任何问题, 但是需要注意虚拟机和宿主机之间的通信.
| 对比项 | 外部虚拟交换机 | 内部虚拟交换机 | 专用虚拟交换机 |
|---|---|---|---|
| 物理网卡需求 | 必须 | 不需要 | 不需要 |
| 虚拟机↔虚拟机 | ✓ | ✓ | ✓ |
| 虚拟机↔主机 | ✓ (双向) | ✓ (宿主机 -> 虚拟机, 反之不行) | ✗ |
| 虚拟机↔外部网络 | ✓ | ✗( 可通过 NAT 间接访问) | ✗ |
| 主机↔外部网络 | ✓( 通过虚拟交换机) | ✗ | ✗ |
| 主机网络适配器变化 | 物理网卡被接管 | 新增虚拟网卡 | 无变化 |
| 隔离程度 | 最低 | 中等 | 最高 |
在进行测试前, 注意网络和防火墙的设置
在接入网络时, 会提示用户选择网络类型, 以便于判断是否将用户的设备暴露于局域网之下.
在防火墙中放行这个规则, ICMPV-4/6, ping命令依赖于这个服务作出相应.
默认状态下, 远端地址: 并不是any, 而是本地subnet.
4.1 内部交换机
不进行任何设置, 其网络配置信息看起来和专用交换机基本如出一辙.
在绝大部分描述Hyper-V内部交换机的内容都会提及, 内部交换机之下, 宿主机和虚拟机是可以相互通信的.
但是对于其中如何相互通信却基本都是含糊其辞, 例如将主机可以ping通虚拟机这种也称为可互相通信.
需要注意的是, 虽然主机的网络是private 但是不意味着虚拟机交换机的网络也是这个.
这会涉及到主机防火墙对于来自虚拟机流量是否放行的问题.
Get-NetConnectionProfile
Name : Lian
InterfaceAlias : Wi-Fi
InterfaceIndex : 22
NetworkCategory : Private # 需要注意这里的差异
DomainAuthenticationKind : None
IPv4Connectivity : Internet
IPv6Connectivity : NoTraffic
Name : Unidentified network
InterfaceAlias : vEthernet (iLan)
InterfaceIndex : 57
NetworkCategory : Public # private / public
DomainAuthenticationKind : None
IPv4Connectivity : LocalNetwork
IPv6Connectivity : NoTraffic
为什么虚拟机的网络会是public, 而不是private?
前面提及, public网络, Windows是将之视作相对存在风险的, 显然虚拟机的网络应该是属于相对存在风险的.
# 虚拟机, 尚未设置和外部网络连接
PS C:\Users\Lian> ipconfig
Windows IP Configuration
Ethernet adapter Ethernet 5:
Connection-specific DNS Suffix . :
Link-local IPv6 Address . . . . . : fe80::b178:cc44:115:a8f0%17
Autoconfiguration IPv4 Address. . : 169.254.110.0
Subnet Mask . . . . . . . . . . . : 255.255.0.0
Default Gateway . . . . . . . . . : # 同样没有默认网关
# 主机 ping 虚拟机可行, 但是反之不行
ping 169.254.110.0
Pinging 169.254.110.0 with 32 bytes of data:
Reply from 169.254.110.0: bytes=32 time=1ms TTL=128
Reply from 169.254.110.0: bytes=32 time<1ms TTL=128
Reply from 169.254.110.0: bytes=32 time<1ms TTL=128
Reply from 169.254.110.0: bytes=32 time<1ms TTL=128
Ping statistics for 169.254.110.0:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 1ms, Average = 0ms
4.1.1 ICS
Internet connection sharing.
这部分内容, 微软的文档没有找到详细的技术细节的介绍.
在Wi-Fi网卡适配器上, 设置分享之后
内部交换机的网络配置会同时被修改(不需要手动修改).
可以实现外部网络连接, 宿主机也能正常ping虚拟机, 虚拟机也能访问和宿主机同处一网络的其他设备,
但, 填上上面的坑.
PS C:\Users\Lian> ping 192.168.2.109 # 这是宿主机
Pinging 192.168.2.109 with 32 bytes of data:
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Ping statistics for 192.168.2.109:
Packets: Sent = 4, Received = 0, Lost = 4 (100% loss),
PS C:\Users\Lian> ping 192.168.2.108 # 这是和宿主机同处一网络的其他设备
Pinging 192.168.2.108 with 32 bytes of data:
Reply from 192.168.2.108: bytes=32 time=2ms TTL=127
Reply from 192.168.2.108: bytes=32 time=4ms TTL=127
Reply from 192.168.2.108: bytes=32 time=2ms TTL=127
Reply from 192.168.2.108: bytes=32 time=3ms TTL=127
Ping statistics for 192.168.2.108:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 2ms, Maximum = 4ms, Average = 2ms`
看到这个会不会很疑惑呢? 各种介绍(包括AI)都称, 内部交换机 + ICS这种模式, 是可以双向通信的.
按理说, 虚拟机可以ping通和宿主机同一网络的其他设备, 但是无法ping主机, 这是难以理解的.
这个就和防火墙联系起来了.
前面提及, 入站规则, 只允许subnet, 难道是这个问题?
注意虚拟机交换机的网络属于public.
防火墙规则, 并不是都这样整合的, 有些是分开的.
将192.168.137.0/24加入规则.
但, 还是无法从虚拟机ping通主机.
暂时允许全部进站.
# 虚拟机
PS C:\Users\Lian> tracert 192.168.2.109
Tracing route to latopWin10.lan [192.168.2.109]
over a maximum of 30 hops:
1 <1 ms * <1 ms DESKTOP-9T8UIPS.mshome.net [192.168.137.1]
2 * * * Request timed out.
3 <1 ms <1 ms <1 ms latopWin10.lan [192.168.2.109]
Trace complete.
PS C:\Users\Lian> tracert 192.168.2.108
Tracing route to pcWin10.lan [192.168.2.108]
over a maximum of 30 hops:
1 <1 ms * <1 ms DESKTOP-9T8UIPS.mshome.net [192.168.137.1]
2 * * * Request timed out.
3 3 ms 2 ms 2 ms pcWin10.lan [192.168.2.108]
Trace complete.
PS C:\Users\Lian> route print
===========================================================================
Interface List
17...00 15 5d 02 6d 0b ......Microsoft Hyper-V Network Adapter #5
1...........................Software Loopback Interface 1
===========================================================================
IPv4 Route Table
===========================================================================
Active Routes:
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 192.168.137.1 192.168.137.240 15
127.0.0.0 255.0.0.0 On-link 127.0.0.1 331
127.0.0.1 255.255.255.255 On-link 127.0.0.1 331
127.255.255.255 255.255.255.255 On-link 127.0.0.1 331
192.168.137.0 255.255.255.0 On-link 192.168.137.240 271
192.168.137.240 255.255.255.255 On-link 192.168.137.240 271
192.168.137.255 255.255.255.255 On-link 192.168.137.240 271
224.0.0.0 240.0.0.0 On-link 127.0.0.1 331
224.0.0.0 240.0.0.0 On-link 192.168.137.240 271
255.255.255.255 255.255.255.255 On-link 127.0.0.1 331
255.255.255.255 255.255.255.255 On-link 192.168.137.240 27
# 主机的route table
Active Routes:
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 192.168.2.10 192.168.2.109 35
0.0.0.0 0.0.0.0 192.168.2.10 192.168.2.135 15
127.0.0.0 255.0.0.0 On-link 127.0.0.1 331
127.0.0.1 255.255.255.255 On-link 127.0.0.1 331
127.255.255.255 255.255.255.255 On-link 127.0.0.1 331
172.18.64.0 255.255.240.0 On-link 172.18.64.1 5256
172.18.64.1 255.255.255.255 On-link 172.18.64.1 5256
172.18.79.255 255.255.255.255 On-link 172.18.64.1 5256
172.27.32.0 255.255.240.0 On-link 172.27.32.1 271
172.27.32.1 255.255.255.255 On-link 172.27.32.1 271
172.27.47.255 255.255.255.255 On-link 172.27.32.1 271
172.28.64.0 255.255.240.0 On-link 172.28.64.1 5256
172.28.64.1 255.255.255.255 On-link 172.28.64.1 5256
172.28.79.255 255.255.255.255 On-link 172.28.64.1 5256
172.29.112.0 255.255.240.0 On-link 172.29.112.1 271
172.29.112.1 255.255.255.255 On-link 172.29.112.1 271
172.29.127.255 255.255.255.255 On-link 172.29.112.1 271
192.168.2.0 255.255.255.0 On-link 192.168.2.135 271
192.168.2.0 255.255.255.0 On-link 192.168.2.109 291
192.168.2.109 255.255.255.255 On-link 192.168.2.109 291
192.168.2.135 255.255.255.255 On-link 192.168.2.135 271
192.168.2.255 255.255.255.255 On-link 192.168.2.135 271
192.168.2.255 255.255.255.255 On-link 192.168.2.109 291
192.168.137.0 255.255.255.0 On-link 192.168.137.1 271
192.168.137.1 255.255.255.255 On-link 192.168.137.1 271
192.168.137.255 255.255.255.255 On-link 192.168.137.1 271
192.168.144.0 255.255.240.0 On-link 192.168.144.1 5256
192.168.144.1 255.255.255.255 On-link 192.168.144.1 5256
192.168.159.255 255.255.255.255 On-link 192.168.144.1 5256
224.0.0.0 240.0.0.0 On-link 127.0.0.1 331
224.0.0.0 240.0.0.0 On-link 192.168.137.1 271
224.0.0.0 240.0.0.0 On-link 172.28.64.1 5256
224.0.0.0 240.0.0.0 On-link 192.168.2.109 291
224.0.0.0 240.0.0.0 On-link 172.29.112.1 271
224.0.0.0 240.0.0.0 On-link 192.168.2.135 271
224.0.0.0 240.0.0.0 On-link 192.168.144.1 5256
224.0.0.0 240.0.0.0 On-link 172.27.32.1 271
224.0.0.0 240.0.0.0 On-link 172.18.64.1 5256
255.255.255.255 255.255.255.255 On-link 127.0.0.1 331
255.255.255.255 255.255.255.255 On-link 192.168.137.1 271
255.255.255.255 255.255.255.255 On-link 172.28.64.1 5256
255.255.255.255 255.255.255.255 On-link 192.168.2.109 291
255.255.255.255 255.255.255.255 On-link 172.29.112.1 271
255.255.255.255 255.255.255.255 On-link 192.168.2.135 271
255.255.255.255 255.255.255.255 On-link 192.168.144.1 5256
255.255.255.255 255.255.255.255 On-link 172.27.32.1 271
255.255.255.255 255.255.255.255 On-link 172.18.64.1 5256
正常.
显然, Windows大概率出于安全原因, 限制了虚拟机对于主机的访问限制.
4.1.2 端口转发
还是以虚拟机的ssh服务为例, 在WIFI网卡适配器上打开分享 - 设置 - 添加即可.
这一点和default switch有所差异.
4.2 专用交换机
不会创建对应的网卡适配器, 但是虚拟机之间是可以相互通信的.
PS C:\Users\Lian> ipconfig
Windows IP Configuration
Ethernet adapter Ethernet 5:
Connection-specific DNS Suffix . :
Link-local IPv6 Address . . . . . : fe80::b178:cc44:115:a8f0%17
Autoconfiguration IPv4 Address. . : 169.254.110.0
Subnet Mask . . . . . . . . . . . : 255.255.0.0
Default Gateway . . . . . . . . . :
PS C:\Users\Lian> PING 169.254.190.79
Pinging 169.254.190.79 with 32 bytes of data:
Reply from 169.254.190.79: bytes=32 time=1ms TTL=128
Reply from 169.254.190.79: bytes=32 time=1ms TTL=128
Reply from 169.254.190.79: bytes=32 time=1ms TTL=128
Reply from 169.254.190.79: bytes=32 time=1ms TTL=128
Ping statistics for 169.254.190.79:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 1ms, Maximum = 1ms, Average = 1ms
可以看到内部交换机和专用交换机, 其IP段都是169.254开头的 在没有dhcp服务的情况下, 其自动分配的IP是APIPA提供的.
4.3 Default Switch
这也是个内部交换机, 但是这个交换机是可以直接和外部设备相连的而不需要任何的手动设置, 这和手动创建的内部交换机有所差异.
但是这存在一个问题, 其IP(虚拟机网关)是动态变化的, 所以是没办法手动设置固定的IP在虚拟机上.
Hyper-V Default Switch IP地址为何开机总是变动? _编程语言-CSDN问答
Change Hyper-V (Default Switch) IP address range - Microsoft Q&A
The Default Switch has a built-in local collision detection mechanism to determine if IP address in these ranges is already assigned to a network interface on the Local Host system and will try to find a (/28 – 255.255.255.240) address space within one of these ranges that is not already allocated to any network interfaces.
简单测试一下:
虚拟机
PS C:\Users\Lian> ipconfig
Windows IP Configuration
Ethernet adapter Ethernet 5:
Connection-specific DNS Suffix . : mshome.net
Link-local IPv6 Address . . . . . : fe80::b178:cc44:115:a8f0%17
IPv4 Address. . . . . . . . . . . : 172.27.167.106
Subnet Mask . . . . . . . . . . . : 255.255.240.0
Default Gateway . . . . . . . . . : 172.27.160.1
PS C:\Users\Lian> ping 192.168.2.109
Pinging 192.168.2.109 with 32 bytes of data:
Reply from 192.168.2.109: bytes=32 time<1ms TTL=127
Reply from 192.168.2.109: bytes=32 time<1ms TTL=127
Reply from 192.168.2.109: bytes=32 time<1ms TTL=127
Reply from 192.168.2.109: bytes=32 time<1ms TTL=127
Ping statistics for 192.168.2.109:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0m
PS C:\Users\Lian> tracert 192.168.2.109
Tracing route to DESKTOP-9T8UIPS.lan [192.168.2.109]
over a maximum of 30 hops:
1 <1 ms <1 ms <1 ms DESKTOP-9T8UIPS [172.27.160.1]
2 <1 ms <1 ms <1 ms DESKTOP-9T8UIPS.lan [192.168.2.109]
Trace complete.
PS C:\Users\Lian> tracert 192.168.2.108
Tracing route to pcWin10.lan [192.168.2.108]
over a maximum of 30 hops:
1 <1 ms <1 ms <1 ms DESKTOP-9T8UIPS [172.27.160.1]
2 2 ms 2 ms 2 ms pcWin10.lan [192.168.2.108]
Trace complete.
宿主机
ping 172.27.167.106
Pinging 172.27.167.106 with 32 bytes of data:
Reply from 172.27.167.106: bytes=32 time<1ms TTL=128
Reply from 172.27.167.106: bytes=32 time<1ms TTL=128
Reply from 172.27.167.106: bytes=32 time<1ms TTL=128
Reply from 172.27.167.106: bytes=32 time<1ms TTL=128
Ping statistics for 172.27.167.106:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms
Lian ~ v3.12.10
tracert 172.27.167.106
Tracing route to DESKTOP-RAFU0RC.mshome.net [172.27.167.106]
over a maximum of 30 hops:
1 <1 ms <1 ms <1 ms DESKTOP-RAFU0RC.mshome.net [172.27.167.106]
Trace complete.
另一虚拟机
C:\Users\Lian>ipconfig
Windows IP Configuration
Ethernet adapter Ethernet 5:
Connection-specific DNS Suffix . : mshome.net
Link-local IPv6 Address . . . . . : fe80::d77c:1f94:5bdb:7a0b%17
IPv4 Address. . . . . . . . . . . : 172.27.175.124
Subnet Mask . . . . . . . . . . . : 255.255.240.0
Default Gateway . . . . . . . . . : 172.27.160.1
C:\Users\Lian>ping 192.168.2.109
Pinging 192.168.2.109 with 32 bytes of data:
Reply from 192.168.2.109: bytes=32 time=1ms TTL=127
Reply from 192.168.2.109: bytes=32 time<1ms TTL=127
Reply from 192.168.2.109: bytes=32 time=1ms TTL=127
Reply from 192.168.2.109: bytes=32 time<1ms TTL=127
Ping statistics for 192.168.2.109:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 1ms, Average = 0ms
C:\Users\Lian>ping 172.27.167.106
Pinging 172.27.167.106 with 32 bytes of data:
Reply from 172.27.167.106: bytes=32 time<1ms TTL=128
Reply from 172.27.167.106: bytes=32 time=1ms TTL=128
Reply from 172.27.167.106: bytes=32 time<1ms TTL=128
Reply from 172.27.167.106: bytes=32 time=1ms TTL=128
Ping statistics for 172.27.167.106:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 1ms, Average = 0ms
4.4 NAT网络
使用须知:
- Multiple internal subnet prefixes not supported, 单一子网, 即不能存在多个NAT网络
- External / Internal prefixes must not overlap, IP不能和主机相同
- No automatic networking configuration, 不支持自动网络配置
- Cannot access externally mapped NAT endpoint IP/ ports directly from host – must use internal IP / ports assigned to endpoints, 无法直接从主机访问外部映射的NAT端点IP/端口–必须使用分配给端点的内部IP/端口
不要和NAT搞混, NAT网络, 是建立在以NAT为基础的网络, 包含了NAT在内的多种技术的整合实现的网络实现, 而NAT是单一技术, 其目的在于解决局域网和外部网络之间的通信.
创建的NAT网络会直接通过WIFI网卡实现和外部网络连接, 不需要手动设置.
目前, 每个主机只能有一个 NAT 网络
Windows NAT (WinNAT) -- Capabilities and limitations | Microsoft Community Hub
> Get-NetNat
Name : WiFi-NAT-Network
ExternalIPInterfaceAddressPrefix :
InternalIPInterfaceAddressPrefix : 192.168.3.0/24
IcmpQueryTimeout : 30
TcpEstablishedConnectionTimeout : 1800
TcpTransientConnectionTimeout : 120
TcpFilteringBehavior : AddressDependentFiltering
UdpFilteringBehavior : AddressDependentFiltering
UdpIdleSessionTimeout : 120
UdpInboundRefresh : False
Store : Local
Active : True
New-NetNat (NetNat) | Microsoft Learn
创建方式, Hyper-V没有提供图形界面来操作, 执行下面的命令, 依次执行
-
先创建一个内部交换机
-
为这个设备设置网关, 192.168.3.1, 子网掩码 24
-
设置转换规则
The New-NetNat cmdlet creates a Network Address Translation (NAT) object that translates an internal network address to an external network address. NAT modifies IP address and port information in packet headers.
-
在虚拟机中选中这个交换机
PS C:\Windows\system32> New-VMSwitch -SwitchName "WiFi-NAT-Switch" -SwitchType Internal # 创建内部交换机
Name SwitchType NetAdapterInterfaceDescription
---- ---------- ------------------------------
WiFi-NAT-Switch Internal
PS C:\Windows\system32> Get-VMSwitch -SwitchType Internal
Name SwitchType NetAdapterInterfaceDescription
---- ---------- ------------------------------
iLan Internal
iLan_1 Internal
Default Switch Internal
WiFi-NAT-Switch Internal
PS C:\Windows\system32> $natAdapter = Get-NetAdapter | Where-Object Name -like "vEthernet (WiFi-NAT-Switch)"
PS C:\Windows\system32> New-NetIPAddress -InterfaceIndex $natAdapter.InterfaceIndex -IPAddress 192.168.3.1 -PrefixLength 24 # 设置网关 - 子网掩码
IPAddress : 192.168.3.1
InterfaceIndex : 79
InterfaceAlias : vEthernet (WiFi-NAT-Switch)
AddressFamily : IPv4
Type : Unicast
PrefixLength : 24
PrefixOrigin : Manual
SuffixOrigin : Manual
AddressState : Tentative
ValidLifetime : Infinite ([TimeSpan]::MaxValue)
PreferredLifetime : Infinite ([TimeSpan]::MaxValue)
SkipAsSource : False
PolicyStore : ActiveStore
IPAddress : 192.168.3.1
InterfaceIndex : 79
InterfaceAlias : vEthernet (WiFi-NAT-Switch)
AddressFamily : IPv4
Type : Unicast
PrefixLength : 24
PrefixOrigin : Manual
SuffixOrigin : Manual
AddressState : Invalid
ValidLifetime : Infinite ([TimeSpan]::MaxValue)
PreferredLifetime : Infinite ([TimeSpan]::MaxValue)
SkipAsSource : False
PolicyStore : PersistentStore
PS C:\Windows\system32> New-NetNat -Name "WiFi-NAT-Network" -InternalIPInterfaceAddressPrefix 192.168.3.0/24 # 创建转发规则
Name : WiFi-NAT-Network
ExternalIPInterfaceAddressPrefix :
InternalIPInterfaceAddressPrefix : 192.168.3.0/24
IcmpQueryTimeout : 30
TcpEstablishedConnectionTimeout : 1800
TcpTransientConnectionTimeout : 120
TcpFilteringBehavior : AddressDependentFiltering
UdpFilteringBehavior : AddressDependentFiltering
UdpIdleSessionTimeout : 120
UdpInboundRefresh : False
Store : Local
Active : True
# Connect-VMNetworkAdapter -VMName "你的虚拟机名" -SwitchName "WiFi-NAT-Switch" # 绑定到指定的虚拟机
由于创建的NAT网络是没有DHCP服务, 在虚拟机上需要手动设置静态IP
WinNAT itself does not dynamically assign IP addresses, routes, DNS servers, or other network information to an endpoint. For container endpoints, since HNS manages IPAM, HNS will assign IP networking information from the NAT network to container endpoints. However, if a user is creating a VM and connecting a VM Network Adapter to a NAT network, the admin must assign the IP configuration manually inside the VM.
IP: 19.168.3.3
subnet: 255.255.255.0
dns & gateway: 192.168.3.1
PS C:\Windows\system32> Get-NetConnectionProfile
Name : Unidentified network
InterfaceAlias : vEthernet (WiFi-NAT-Switch)
InterfaceIndex : 75
NetworkCategory : Public # 网络类型也是public
DomainAuthenticationKind : None
IPv4Connectivity : LocalNetwork
IPv6Connectivity : NoTraffic
IPv4 Route Table
===========================================================================
Active Routes:
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 192.168.3.1 192.168.3.3 271
127.0.0.0 255.0.0.0 On-link 127.0.0.1 331
127.0.0.1 255.255.255.255 On-link 127.0.0.1 331
127.255.255.255 255.255.255.255 On-link 127.0.0.1 331
192.168.3.0 255.255.255.0 On-link 192.168.3.3 271
192.168.3.3 255.255.255.255 On-link 192.168.3.3 271
192.168.3.255 255.255.255.255 On-link 192.168.3.3 271
224.0.0.0 240.0.0.0 On-link 127.0.0.1 331
224.0.0.0 240.0.0.0 On-link 192.168.3.3 271
255.255.255.255 255.255.255.255 On-link 127.0.0.1 331
255.255.255.255 255.255.255.255 On-link 192.168.3.3 271
===========================================================================
Persistent Routes:
Network Address Netmask Gateway Address Metric
0.0.0.0 0.0.0.0 192.168.3.1 Default
4.4.1 端口转发
(win10, 新版, 这个特性被移到系统选项之下)
Releases - PowerShell/Win32-OpenSSH, 离线安装包, 使用Windows可选组件下载大概率会扑街.
PS C:\Users\Lian> netstat -ano
Active Connections
Proto Local Address Foreign Address State PID
TCP 0.0.0.0:22 0.0.0.0:0 LISTENING 3660 # 确认服务正常运行
TCP 0.0.0.0:135 0.0.0.0:0 LISTENING 992
TCP 0.0.0.0:445 0.0.0.0:0 LISTENING 4
TCP 0.0.0.0:5040 0.0.0.0:0 LISTENING 5848
TCP 0.0.0.0:5357 0.0.0.0:0 LISTENING 4
TCP 0.0.0.0:5985 0.0.0.0:0 LISTENING 4
TCP 0.0.0.0:7680 0.0.0.0:0 LISTENING 3144
TCP 0.0.0.0:47001 0.0.0.0:0 LISTENING 4
TCP 0.0.0.0:49664 0.0.0.0:0 LISTENING 748
如: 在虚拟机上开启ssh服务, 在外部访问这个服务.
在宿主机上, 指定监听一个端口用于转发到内网的192.168.3.3:22上, 如: 2222端口
# 设置端口转发
PS C:\Windows\system32> Add-NetNatStaticMapping -NatName "WiFi-NAT-Network" -Protocol TCP -ExternalIPAddress "0.0.0.0" -ExternalPort 2222 -InternalIPAddress "192.168.3.3" -InternalPort 22
PS C:\Windows\system32> Get-NetNatStaticMapping
StaticMappingID : 1
NatName : WiFi-NAT-Network
Protocol : TCP
RemoteExternalIPAddressPrefix : 0.0.0.0/0
ExternalIPAddress : 0.0.0.0
ExternalPort : 2222
InternalIPAddress : 192.168.3.3
InternalPort : 22
InternalRoutingDomainId : {00000000-0000-0000-0000-000000000000}
Active : True
# > Remove-NetNatStaticMapping -NatName "WiFi-NAT-Network" # 移除
ssh lian@192.168.2.109 -p 2222
在外部设备访问宿主机 端口指定为上面设置的.
4.4.2 DHCP
这个组件只能在server上使用, 专业版也不支持.
netsh dhcp server add scope 192.168.100.0 255.255.255.0 "WiFi-NAT-DHCP" "DHCP for WiFi-NAT-Switch"
# 需要下组件支持
Enable-WindowsOptionalFeature -Online -FeatureName DHCP -All
将 DHCP 服务器迁移到 Windows Server | Microsoft Learn
关于DHCP服务器见: 如何在windows10上面搭建DHCP服务器_windows10搭建dhcp服务器-CSDN博客
hyper-v实战系列: 创建NAT网络共享主机上网_hyper-v nat-CSDN博客
4.4.3 问题
需要注意, 一旦启用NAT网络, 上面提及的网卡分享方式将无法连接外部网络, 当然内部和虚拟机的通信也无法进行.
前面所提及的NAT网络(可以固定IP的)只能存在一个, 是否意味着二者存在某种关系呢?
Remove-NetNat -Name "WiFi-NAT-Network"
执行删除之后, 建议重启系统, 否则网卡分享的网络可能依然还是不可用.
但是NAT网络的存在不会影响default switch, 还是能够正常连接外部网络.
4.5 小结
可以简单的这样认为, 暂不去具体区分NAT网络的定义, 这里权且都称呼为NAT网络, 毕竟所有的上述网络的实现底层都是NAT, 除了桥接实现的例外.
默认交换机, 是个现成的NAT网络, 但是所有设置都不可修改, 同时其IP是动态变化的, 意味着虚拟机的网关无法固定, 所以虚拟机无法设置固定的IP, 托底的存在, 保证用户可以开箱即用.
内部交换机 + 网卡分享, 也是个现成NAT网络, 相比于前者, 其IP是固定的, 意味着虚拟机的网关可以固定, 所以虚拟机是可以设置固定IP.
以上二者皆支持DHCP服务.
NAT网络, 和上述的最大差异, 就是是个可以自定义的NAT网络, 但是没有集成DHCP服务, 其目标用户是服务器版本的系统.
五. 总结
内部交换机 + 网卡分享(ICS), 这是WIFI环境下推荐的网络设置.
| 情况 | 易用性 | 可自定义程度 | 对宿主机影响 | IP分配 | 主机 -> 虚拟机 | 虚拟机 -> 主机 | 虚拟机 <-> 虚拟机 | 外部网络连接(含主机所在网络) | 虚拟机IP固定 | 端口转发 | 类NAT | 隔离程度 | 备注 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 网卡桥接 | 5 | 5 | 5(无线网卡这个问题很严重) | 根据主机所在网络 | 1 | 1 | 1 | 1 | 1 | 不需要 | 0 | 0 | 消耗主机所在局域网IP |
| 默认交换机(特殊内部交换机) | 4 | 0 | 0 | 自动 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | 1 | 动态IP |
| 内部交换机 + ICS | 3 | 3 | 0 | 自动/手动 | 1 | 1(受到防火墙的限制) | 1 | 1 | 1 | 1(借助ICS所在的网卡) | 1 | 2 | 可以固定IP |
| 内部交换机 + NAT网络 | 1 | 4 | 4 | 手动 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 3 | 无DHCP |
| 内部交换机 | / | / | / | / | 1 | 0 | 1 | 0 | / | / | 1 | 4 | |
| 专用交换机 | / | / | / | / | 0 | 0 | 1 | 0 | / | / | 1 | 5 | 不创建网卡适配器 |
