我的 Windows 10 计算机有一个通过 USB 连接的额外网络接口,按Ethernet 2
列出时命名ipconfig
。Ethernet 2
具有以 192.254 开头的 IPv4 地址192.254.N.N
,以及以 开头的 IPv6 地址fe80::
。另一端连接的是 Raspberry Pi。
只要 Windows Defender 防火墙仅允许该应用程序在域和专用网络上进行通信,我的 Windows PC 上的应用程序就无法从该网络接收 UDP 数据包。将防火墙切换为允许公共网络上的通信(该选项既不是域网络也不是专用网络)解决了该问题。fe80:: 或 192.254 上的链路本地网络被归类为“公共”网络,而实际上它是点对点电缆,这让我觉得违反直觉?
我对术语或网络分类有什么误解?
Windows 防火墙中的“公共”与“专用”不会对 IP 网络前缀进行分类,而是对整个网络接口的状态进行分类。(也就是说,来自给定网络接口的所有流量都应用“专用”规则或“公共”规则,无论源 IP 地址如何。)
区别不仅在于 Internet 可访问性,也与 RFC1918 术语含义中的“私有”IP 地址无关 – 更在于本地网络中的主机是否可信。它会完全破坏系统自动信任 fe80::/64 或 192.168.0.0/16 的点,因为与点对点链路上完全相同的“私人使用”前缀也用于开放访问同一子网中可能充满了不受信任的主机的网络。
例如,如果您连接到咖啡馆或图书馆 Wi-Fi 网络,它几乎总是具有 RFC1918 IPv4 地址(以及链路本地 IPv6 地址,即使存在全局地址,这些地址也必须具有),等等所有其他客户的设备是否会使用相同的 Wi-Fi – 但在大多数情况下,您不希望他们仅仅因为他们是从 fe80::/64 地址访问您的 SMB 服务。
Windows 确实使用前缀和各种其他信息来检测当前是否连接到“域”网络(当加入 Active Directory 域时),但在其他情况下,它会偏向安全。(Windows 7-10 过去常常在首次连接到“新”网络时询问您;Windows 11 似乎每次都默认为“私人”。)
您可以更改当前网络的配置文件(对于以太网,这仅在最新版本的 Windows 10 中可用):
如果您希望 Windows 防火墙根据源前缀允许流量,则有一个单独的机制。当规则应用于“专用”接口时,Windows 防火墙 (wf.msc) 中的许多内置规则允许“范围 → 远程:本地子网”;您可以对与您的应用程序对应的规则执行相同的操作: