我的网络上有 Windows 计算机,它们意外地从标记的 VLAN 获取 IPv6 地址。
我有路由器/计算机连接到带有未标记 vlan (id 1) 和标记 (id 2) 的交换机。为简单起见,假设此 VLAN2 用于 VoIP 手机,它将看到使用标记的 VLAN 作为 DHCP 请求的一部分的选项。
2001:db8:1051:4001::/64
由于某种原因,该网络上的 Windows 计算机从和子网中获取 SLAAC 地址2001:db8:1051:4002::/64
。 我预计 Windows 计算机只能从未标记的 VLAN/子网中获取地址。
地址为 的 Windows 计算机2001:db8:1051:4002::/64
将无法实际使用该地址进行任何操作。它无法对网关执行 ping 操作2001:db8:1051:4002::1
,并且来自网关的 ping 操作也不起作用。据我所知,它实际上不能以任何方式使用这个地址。
使用过滤器从 Windows 系统上进行的wireshark捕获icmp6 and ip6[40] == 134
将显示两个子网的路由通告。
从启动到 Linux livecd 的同一台计算机进行 tcpdump 捕获将显示2001:db8:1051:4002::/64
以太网帧中具有正确 vlan id 的广告。Linux 不会从两个子网获取地址。
Windows 计算机是全新安装的 Windows 10 1709,我已经在具有 Realtek 和 Broadcom 适配器的系统上看到了该行为。
配置
+--------------+ +-----------+ +------------------+
| Linux Router +----+ HP Switch +----+ Windows Computer |
+--------------+ +-----------+ +------------------+
Run Code Online (Sandbox Code Playgroud)
Linux路由器接口配置
3: eth_lan: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 0c:c4:7a:14:c7:fd brd ff:ff:ff:ff:ff:ff
inet 10.2.25.1/24 brd 10.2.25.255 scope global eth_lan
valid_lft forever preferred_lft forever
inet6 2001:db8:1051:4001::1/64 scope global
valid_lft forever preferred_lft forever
inet6 fe80::ec4:7aff:fe14:c7fd/64 scope link
valid_lft forever preferred_lft forever
5: eth_lan.2@eth_lan: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 0c:c4:7a:14:c7:fd brd ff:ff:ff:ff:ff:ff
inet 10.2.26.1/24 brd 10.2.26.255 scope global eth_lan.2
valid_lft forever preferred_lft forever
inet6 2001:db8:1051:4002::1/64 scope global
valid_lft forever preferred_lft forever
inet6 fe80::ec4:7aff:fe14:c7fd/64 scope link
valid_lft forever preferred_lft forever
Run Code Online (Sandbox Code Playgroud)
Linux RADVD 配置
interface eth_lan
{
AdvSendAdvert on;
AdvManagedFlag on;
AdvOtherConfigFlag on;
MaxRtrAdvInterval 90;
MinRtrAdvInterval 30;
prefix ::/64
{
};
};
interface eth_lan.2
{
AdvSendAdvert on;
MaxRtrAdvInterval 90;
MinRtrAdvInterval 30;
prefix ::/64
{
};
AdvDefaultPreference low;
};
Run Code Online (Sandbox Code Playgroud)
交换机配置
HP-2530-24G-PoEP# show running-config
Running configuration:
; J9773A Configuration Editor; Created on release #YA.15.14.0007
; Ver #05:18.63.ff.37.27:91
hostname "HP-2530-24G-PoEP"
snmp-server community "public" unrestricted
vlan 1
name "DEFAULT_VLAN"
untagged 1-28
ip address dhcp-bootp
exit
vlan 2
name "VLAN2"
tagged 1-28
no ip address
exit
Run Code Online (Sandbox Code Playgroud)
问题:
为什么 Windows 系统从标记的 VLAN 获取非功能性 IPv6 地址?有没有办法阻止这种情况,而无需在 VLAN 2 上禁用 IPv6 或不在 Windows 系统连接的端口上标记该 VLAN?
回答评论中的问题
如果为 Windows 计算机分配静态 IPv6 地址,它们是否能够在网络上通信
如果给定来自 VLAN 1 子网的静态地址,连接到端口(未标记的 vlan1、标记的 vlan2)的计算机将工作得很好,但在 VLAN2 子网上将无法工作,这是我期望发生的情况。
您是否尝试过在路由器上禁用 SLAAC 并仅使用 DHCPv6?
如果我禁用 SLAACAdvAutonomous off;
并启用有状态 DHCPv6 服务器,计算机将仅从未标记的 VLAN 获取地址。
如果在 eth_lan.2 上禁用 RA,会发生什么情况?
客户端将无法从该 VLAN 2 子网获取地址。不过,我希望 IPv6 能够在该子网上工作,因此 RA 是非常需要的。
我会确保 NIC 的驱动程序及其微型驱动程序已完全安装,以便在操作系统中正确启用 VLAN 支持。
\n\n本机 Windows NDIS 不正确支持 VLAN,在最坏的情况下它只会删除 VLANid。
\n\n引自Wireshark;
\n\n\n\n\nWindows 没有内置的 VLAN 支持机制。没有可以捕获的单独的物理和 VLAN 接口,除非存在添加此类支持的专用驱动程序。
\n\n因此,您是否在 Wireshark 中看到 VLAN 标记将取决于您拥有的网络适配器以及它及其驱动程序对 VLAN 标记的处理方式。
\n\n大多数“简单”网络适配器(例如广泛使用的 Realtek RTL 8139)及其驱动程序将简单地将 VLAN 标记传递到上层来处理这些问题。在这种情况下,Wireshark 将看到 VLAN 标记并可以处理和显示它们。
\n\n一些更复杂的适配器将处理适配器和/或驱动程序中的 VLAN 标记。这包括一些 Intel 适配器,据我所知,还有 Broadcom 千兆位芯片组(基于 NetXtreme / 57XX 的芯片)。此外,具有专门驱动程序的卡也可能会遵循此路径,以防止来自“真实”驱动程序的干扰。
\n
\n更新 1
=======
在那里找到了 MS 博客参考;Windows 核心网络谈论 802.1P,但他们提供了有关 802.1Q(VLAN 标记)的更多信息
\n\n\n\n\nWindows 网络堆栈完全支持 802.1Q 标记,即\n UserPriority(正如 Mathias 在本文中讨论的那样)以及 VlanId。\n 但是,没有任何堆栈组件(tcpip 等)作用于 VlanId\n 字段。。Intel、Broadcom 等供应商在其微型端口驱动程序中结合 NIC 硬件实现 VLAN。因此,Windows 允许 ISV 根据需要实现 VLAN,但本身并不实现它们。
\n\n\xe2\x80\x93 加布
\n
来自另一篇 MS博客(这可以解释为什么你的 Windows 计算机无法 ping IPv6 的网关(并且很容易使用wireshark进行验证,因为传出的数据包(PC->网关)将被取消标记,即使它\应该被标记))
\n\n\n\n\n您的 NIC 负责将 802.1q 标记添加到传出\n 数据包中。
\n
考虑到这一更新,我的术语“剥离 vlan id”一开始有点重,因为它默认不剥离它,它获取 vlan id 作为输入,但忽略它,它只是不剥离它。之后不要发送 vlan id,并将所有管理工作留给 NIC 驱动程序。
\n 归档时间: |
|
查看次数: |
1893 次 |
最近记录: |