У меня есть компьютеры с Windows в сети, которые неожиданно получают IPv6-адрес из помеченной VLAN.
У меня есть маршрутизаторы / компьютеры, подключенные к коммутатору с нетегированным vlan (id 1) и тегированным (id 2). Для простоты предположим, что эта VLAN2 предназначена для телефонов VoIP, которые увидят возможность использовать тегированный vlan как часть запроса DHCP.
По какой-то причине компьютеры с Windows в этой сети получают адрес SLAAC от обоих 2001:db8:1051:4001::/64
и 2001:db8:1051:4002::/64
подсети. Я ожидал, что компьютеры с Windows будут принимать адреса только из непомеченной VLAN / подсети.
Компьютер Windows с адресом из 2001:db8:1051:4002::/64
не сможет использовать этот адрес ни для чего. Не удается пропинговать шлюз 2001:db8:1051:4002::1
и пинг от шлюза не работает. Насколько я могу судить, он никак не может использовать этот адрес.
Захват wirehark из системы Windows с фильтром icmp6 and ip6[40] == 134
покажет объявления маршрута для обеих подсетей.
Захват tcpdump с того же компьютера, на котором загружен livecd Linux, покажет, что 2001:db8:1051:4002::/64
рекламные объявления с правильным идентификатором vlan в кадре Ethernet. Linux не получает адреса из обеих подсетей.
Компьютеры с Windows - это полностью чистые новые установки Windows 10 1709, и я видел поведение в системах с адаптерами Realtek и Broadcom.
Конфигурация
+--------------+ +-----------+ +------------------+
| Linux Router +----+ HP Switch +----+ Windows Computer |
+--------------+ +-----------+ +------------------+
Конфигурация интерфейса маршрутизатора 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
Конфигурация RADVD для Linux
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;
};
Конфигурация переключателя
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
Вопросы:
Почему системы Windows получают нефункциональный IPv6-адрес из помеченной VLAN? Есть ли способ остановить это, не отключая IPv6 в VLAN 2 или не помечая эту VLAN на портах, к которым подключены системы Windows?
Ответы на вопросы из комментариев
Могут ли компьютеры Windows обмениваться данными по сети, если вы назначите им статический IPv6-адрес
Компьютер, подключенный к порту (немаркированный vlan1, маркированный vlan2), будет работать отлично, если ему будет предоставлен статический адрес из подсети VLAN 1, но он не будет работать в подсети VLAN2, чего я и ожидал.
Вы пробовали отключить SLAAC на маршрутизаторе и использовать только DHCPv6?
Если я отключу SLAAC AdvAutonomous off;
и включите DHCPv6-сервер с отслеживанием состояния, компьютеры будут получать адрес только из немаркированной VLAN.
Что произойдет, если вы отключите RA на eth_lan.2?
Тогда клиент не получит адреса из этой подсети VLAN 2. Хотя я хочу, чтобы IPv6 работал в этой подсети, поэтому RA в значительной степени требуется.
Я бы удостоверился, что драйвер сетевой карты полностью установлен вместе с их мини-драйвером, чтобы правильно включить поддержку VLAN в ОС.
Собственная Windows NDIS не поддерживает корректно VLAN и в худшем случае просто удаляет VLANid.
Цитируется из Wireshark;
Windows не имеет встроенных механизмов поддержки VLAN. Не существует отдельных физических интерфейсов и интерфейсов VLAN, с которых вы можете осуществлять захват, если не присутствует специальный драйвер, который добавляет такую поддержку.
Итак, видите ли вы теги VLAN в Wireshark или нет, будет зависеть от имеющегося у вас сетевого адаптера и от того, что он и его драйвер делают с тегами VLAN.
Большинство «простых» сетевых адаптеров (например, широко используемых Realtek RTL 8139) и их драйверы просто передают теги VLAN на верхний уровень для их обработки. В этом случае Wireshark увидит теги VLAN, сможет их обработать и отобразить.
Некоторые более сложные адаптеры будут обрабатывать теги VLAN в адаптере и / или драйвере. Сюда входят некоторые адаптеры Intel и, насколько мне известно, гигабитные чипсеты Broadcom (чипы на основе NetXtreme / 57XX). Более того, вполне вероятно, что карты со специализированными драйверами также последуют этому пути, чтобы предотвратить помехи от «настоящего» драйвера.
Обновление 1
=======
Нашел ссылку в блоге MS там; Windows Core Networking говорит о 802.1P, но они дают дополнительную информацию о 802.1Q (теги VLAN)
Сетевой стек Windows полностью поддерживает тег 802.1Q, то есть как UserPriority (как обсуждает Матиас в этом посте), так и VlanId. Однако ни один компонент стека (tcpip и т. Д.) Никогда не воздействует на поле VlanId.. Производители, такие как Intel, Broadcom и т. Д., Реализуют виртуальные локальные сети в своих драйверах минипорта в сочетании с оборудованием NIC. Таким образом, Windows позволяет независимым поставщикам программного обеспечения реализовать VLAN, если они хотят, но не реализует их изначально.
- Гейб
Из этого другого MS блог (это может объяснить, почему ваш компьютер с Windows не может проверить связь с шлюзом IPv6 (и его легко проверить с помощью wirehark, поскольку исходящий пакет (ПК-> шлюз) не будет обрабатываться, даже если он должен быть помечен))
Ваша сетевая карта отвечает за добавление тега 802.1q к исходящему пакету.
Имея в виду это обновление, мой термин «удалить идентификатор vlan» сначала был немного тяжелым, поскольку он не удаляет его по умолчанию, он получает идентификатор vlan в качестве ввода, но игнорирует его и просто не отправляет идентификатор vlan после этого и оставьте все управление драйвером сетевого адаптера.