Несколько VLAN на NIC, Сбой на IPv6

461
pewter-bronco

Я использую домашнюю сеть с двумя стеками (IPv4 и IPv6) и несколькими VLAN для отделения устройств IoT (VLAN 20) от обычных пользователей (VLAN 10) от сетевого оборудования (VLAN без тегов). В настоящее время я размещаю локальный DNS (и несколько других сервисов) на Raspberry Pi 3 B + (работающем с raspbian), который обычно живет в нетегированной VLAN, но я хотел бы попробовать дать ему адреса в других 2 VLAN (10 и 20) в качестве эксперимента (упрощение правил межсетевого экрана, снижение нагрузки на маршрутизатор и т. д.). Моя первая попытка этого не удалась, поэтому я попытался упростить вещи и просто поместить их в без тегов VLAN плюс VLAN 10, но это также не удалось, и я не могу понять, почему.

Настройка одного адреса

Вот обычная настройка (только адрес в нетегированной VLAN, ничего в VLAN 10 или 20):

/etc/network/interfaces пустой.

Вот /etc/dhcpcd.conf:

hostname clientid persistent option rapid_commit option domain_name_servers, domain_name, domain_search, host_name option classless_static_routes option ntp_servers option interface_mtu require dhcp_server_identifier slaac private  interface eth0 static ip_address=192.168.1.10/24 static ip6_address=fd:<STATIC_IPv6_ULA>/64 static routers=192.168.1.1 fd:<STATIC_IPv6_ULA_FOR_ROUTER> static domain_name_servers=127.0.0.1 ::1 

И вот результирующие адреса, которые я получаю:

$ ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether <MAC_ADDR> brd ff:ff:ff:ff:ff:ff inet 192.168.1.10/24 brd 192.168.1.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fd:<IPv6_ULA_FROM_SLAAC>/64 scope global mngtmpaddr noprefixroute dynamic valid_lft 85965sec preferred_lft 13965sec inet6 <IPv6_GLOBAL_ADDR_FROM_SLAAC>/64 scope global mngtmpaddr noprefixroute dynamic valid_lft 85965sec preferred_lft 13965sec inet6 fd:<STATIC_IPv6_ULA>/64 scope global noprefixroute valid_lft forever preferred_lft forever inet6 fe80::<IPv6_LLA>/64 scope link valid_lft forever preferred_lft forever 

Это работает нормально, я могу маршрутизировать к хостам в VLAN 10 и 20 через маршрутизатор. Проблема возникает при попытке добавить интерфейс в одну из VLAN ...

Добавление VLAN

Чтобы добавить адрес в VLAN 10, я добавил следующую конфигурацию поверх конфигурации в настройке с одним адресом:

Вот /etc/network/interfaces:

auto eth0.10  iface eth0.10 inet manual vlan-raw-device eth0  iface eth0.10 inet6 manual vlan-raw-device eth0 

Вот /etc/dhcpcd.conf:

interface eth0.10 static ip_address=10.0.10.10/24 static ip6_address=fd:<STATIC_IPv6_VLAN_10_ULA>/64 static routers=10.0.10.1 <STATIC_IPv6_VLAN_10_ULA_FOR_ROUTER> static domain_name_servers=127.0.0.1 ::1 

И вот результирующие адреса, которые я получаю:

$ ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether <MAC_ADDR> brd ff:ff:ff:ff:ff:ff inet 192.168.1.10/24 brd 192.168.1.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fd:<STATIC_IPv6_ULA>/64 scope global noprefixroute valid_lft forever preferred_lft forever 3: eth0.10@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether <MAC_ADDR> brd ff:ff:ff:ff:ff:ff inet 10.0.10.10/24 brd 10.0.10.255 scope global eth0.10 valid_lft forever preferred_lft forever inet6 fd:<IPv6_VLAN_10_ULA_FROM_SLAAC>/64 scope global mngtmpaddr noprefixroute dynamic valid_lft 86377sec preferred_lft 14377sec inet6 <IPv6_GLOBAL_ADDR_FROM_SLAAC>/64 scope global mngtmpaddr noprefixroute dynamic valid_lft 86377sec preferred_lft 14377sec inet6 fd:<STATIC_IPv6_VLAN_10_ULA>/64 scope global noprefixroute valid_lft forever preferred_lft forever inet6 fe80::<IPv6_LLA>/64 scope link valid_lft forever preferred_lft forever 

Это было очень странно, я потерял свой глобальный IPv6-адрес в нетегированной VLAN, а также локальный адрес канала (LLA) и ULA, которые я получаю от SLAAC. Я попробовал несколько пингов, чтобы увидеть, что сработало, и вот что я нашел:

$ ping -4 -I eth0 www.google.com <SUCCESS> $ ping -4 -I eth0.10 www.google.com <SUCCESS> $ ping -6 -I eth0 www.google.com connect: Network is unreachable $ ping -6 -I eth0.10 www.google.com <SUCCESS> 

Итак, IPv4 работал нормально на обеих VLAN, но IPv6 был сломан на немаркированной VLAN. Я посмотрел на syslogвсе сообщения, связанные с dhcpcd, и нашел эти:

00:28:23 HOSTNAME systemd[1]: Starting dhcpcd on all interfaces... 00:28:23 HOSTNAME dhcpcd[340]: dev: loaded udev 00:28:23 HOSTNAME dhcpcd[340]: eth0: waiting for carrier 00:28:23 HOSTNAME dhcpcd[340]: eth0.10: waiting for carrier 00:28:24 HOSTNAME dhcpcd[340]: eth0: carrier acquired 00:28:24 HOSTNAME dhcpcd[340]: DUID <DUID> 00:28:24 HOSTNAME dhcpcd[340]: eth0: IAID <IAID> 00:28:24 HOSTNAME dhcpcd[340]: eth0: IAID conflicts with one assigned to eth0.10 00:28:24 HOSTNAME dhcpcd[340]: eth0: adding address fe80::<IPv6_LLA> 00:28:24 HOSTNAME dhcpcd[340]: eth0: adding address fd:<STATIC_IPv6_ULA>/64 00:28:24 HOSTNAME dhcpcd[340]: eth0: adding route to fd:<STATIC_IPv6_ULA_PREFIX>/64 00:28:24 HOSTNAME dhcpcd[340]: eth0: probing address 192.168.1.10/24 00:28:24 HOSTNAME dhcpcd[340]: eth0.10: carrier acquired 00:28:24 HOSTNAME dhcpcd[340]: eth0.10: IAID <IAID> 00:28:24 HOSTNAME dhcpcd[340]: eth0.10: IAID conflicts with one assigned to eth0 00:28:24 HOSTNAME dhcpcd[340]: eth0: deleting address fe80::<IPv6_LLA> 00:28:24 HOSTNAME dhcpcd[340]: eth0.10: adding address fe80::<IPv6_LLA> 00:28:24 HOSTNAME dhcpcd[340]: eth0.10: adding address fd:<STATIC_IPv6_VLAN_10_ULA>/64 00:28:24 HOSTNAME dhcpcd[340]: eth0.10: adding route to fd:<STATIC_IPv6_ULA_VLAN_10_PREFIX>/64 00:28:24 HOSTNAME dhcpcd[340]: eth0.10: probing address 10.0.10.10/24 00:28:24 HOSTNAME dhcpcd[340]: eth0: soliciting an IPv6 router 00:28:25 HOSTNAME dhcpcd[340]: eth0.10: soliciting an IPv6 router 00:28:29 HOSTNAME dhcpcd[340]: eth0.10: using static address 10.0.10.10/24 00:28:29 HOSTNAME dhcpcd[340]: eth0.10: adding route to 10.0.10.0/24 00:28:29 HOSTNAME dhcpcd[340]: eth0.10: adding default route via 10.0.10.1 00:28:29 HOSTNAME dhcpcd[340]: forked to background, child pid 603 00:28:29 HOSTNAME systemd[1]: Started dhcpcd on all interfaces. 00:28:30 HOSTNAME dhcpcd[603]: eth0: using static address 192.168.1.10/24 00:28:30 HOSTNAME dhcpcd[603]: eth0: adding route to 192.168.1.0/24 00:28:30 HOSTNAME dhcpcd[603]: eth0: adding default route via 192.168.1.1 00:28:30 HOSTNAME dhcpcd[603]: eth0.10: Router Advertisement from fe80::<IPv6_LLA_OF_ROUTER> 00:28:30 HOSTNAME dhcpcd[603]: eth0.10: adding address <IPv6_GLOBAL_ADDR_FROM_SLAAC>/64 00:28:30 HOSTNAME dhcpcd[603]: eth0.10: adding address <IPv6_VLAN_10_ULA_FROM_SLAAC>/64 00:28:30 HOSTNAME dhcpcd[603]: eth0.10: adding route to <IPv6_GLOBAL_PREFIX_FROM_SLAAC>/64 00:28:30 HOSTNAME dhcpcd[603]: eth0.10: adding default route via fe80::<IPv6_LLA_OF_ROUTER> 00:29:17 HOSTNAME dhcpcd[603]: eth0.10: fe80::<IPv6_LLA_OF_ROUTER> is unreachable, expiring it 00:30:08 HOSTNAME dhcpcd[603]: eth0.10: fe80::<IPv6_LLA_OF_ROUTER> is reachable again 

Таким образом, кажется, есть проблема, которая приводит к удалению LLA в нетегированной VLAN, что не позволяет ему видеть рекламу маршрутизатора на этом интерфейсе.

Я предполагаю, что эта настройка должна быть возможной (несколько VLAN на NIC, работающие с IPv6). Любые идеи о том, что вызывает эту проблему? Это просто глупость для меня?

В случае, если это полезно, вот версия ядра raspbian, работающая на Raspberry Pi:

$ uname -a Linux HOSTNAME 4.14.70-v7+ #1144 SMP Tue Sep 18 17:34:46 BST 2018 armv7l GNU/Linux 
2
Быстрый снимок: MAC-адреса (которые вы отредактировали) интерфейса без тегов и тегов одинаковы, поэтому адреса IPv6 локальных ссылок ff80: ... совпадают, поэтому один из них удаляется. dirkt 5 лет назад 0
@dirkt: им разрешено быть одинаковыми, _because_ они локальны по ссылкам и поэтому находятся в разных областях. Если dhcpcd удаляет их как дубликаты, это фальшивка. grawity 5 лет назад 0
@ pewter-bronco: Какую версию dhcpcd вы используете? Поддержка автоматических IAID идентифицированных интерфейсов VLAN была добавлена ​​только в выпуске 7.0.0. grawity 5 лет назад 0
Хороший вопрос @grawity, похоже, что стандартная версия dhcpcd для raspbian - это 3.2.3-11. Немного устарела = P Я посмотрю, как обновить это ... pewter-bronco 5 лет назад 0
Да, dhcpcd в Debian устарел: https://tracker.debian.org/pkg/dhcpcd pewter-bronco 5 лет назад 0
Ну, похоже, номер версии `apt`` dhcpcd` не совпадает с тем, который на самом деле находится в системе: `$ sudo dhcpcd --version`` dhcpcd 6.11.5` `Copyright (c) 2006-2016 Рой Марплз `Скомпилировано в функции: INET IPv4LL INET6 DHCPv6 AUTH` Тем не менее, все еще нуждается в обновлении. pewter-bronco 5 лет назад 0

1 ответ на вопрос

0
pewter-bronco

Спасибо за отзыв @grawity! Проблема была просто в том, что dhcpcdона устарела. Как @grawity упомянул в комментариях выше, dhcpcdв версии 7.0.0 добавлена ​​только поддержка автоматических IAID на интерфейсах с тегами VLAN. Вот версия в моей системе raspbian с использованием установки по умолчанию из apt:

$ sudo dhcpcd --version dhcpcd 6.11.5 Copyright (c) 2006-2016 Roy Marples Compiled in features: INET IPv4LL INET6 DHCPv6 AUTH 

Если это кому-нибудь поможет, вот шаги, которые я предпринял, чтобы установить последнюю версию (7.0.8) из исходного кода:

Проверьте https://github.com/rsmarples/dhcpcd/releases для последней версии dhcpcd.

wget https://github.com/rsmarples/dhcpcd/archive/dhcpcd-7.0.8.tar.gz tar xzf dhcpcd-7.0.8.tar.gz cd dhcpcd-dhcpcd-7.0.8 ./configure --libexecdir=/lib/dhcpcd --dbdir=/var/lib/dhcpcd5 make sudo make install 

Обратите внимание, что я установил dbdirна /var/lib/dhcpcd5, хотя эти инструкции обычно рекомендуют использовать /var/lib/dhcpcd. В моей системе /var/lib/dhcpcd5уже использовалась существующая установка dhcpcdи /var/lib/dhcpcdне существовала. Делай все, что имеет для тебя смысл.

Теперь, когда это сделано:

$ sudo dhcpcd --version dhcpcd 7.0.8 Copyright (c) 2006-2018 Roy Marples Compiled in features: INET ARP ARPing IPv4LL INET6 DHCPv6 AUTH 

И теперь все работает отлично с добавленным интерфейсом VLAN 10 (и это также работает, когда я добавляю в интерфейс VLAN 20). Вот как все выглядит с добавленным интерфейсом VLAN 10:

$ ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether <MAC_ADDR> brd ff:ff:ff:ff:ff:ff inet 192.168.1.10/24 brd 192.168.1.255 scope global noprefixroute eth0 valid_lft forever preferred_lft forever inet6 fd:<IPv6_ULA_FROM_SLAAC>/64 scope global mngtmpaddr noprefixroute dynamic valid_lft 86382sec preferred_lft 14382sec inet6 <IPv6_GLOBAL_ADDR_FROM_SLAAC>/64 scope global mngtmpaddr noprefixroute dynamic valid_lft 86382sec preferred_lft 14382sec inet6 fd:<STATIC_IPv6_ULA>/64 scope global noprefixroute valid_lft forever preferred_lft forever inet6 fe80::<IPv6_LLA>/64 scope link valid_lft forever preferred_lft forever 3: eth0.10@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether <MAC_ADDR> brd ff:ff:ff:ff:ff:ff inet 10.0.10.10/24 brd 10.0.10.255 scope global noprefixroute eth0.10 valid_lft forever preferred_lft forever inet6 fd:<IPv6_VLAN_10_ULA_FROM_SLAAC>/64 scope global mngtmpaddr noprefixroute dynamic valid_lft 86381sec preferred_lft 14381sec inet6 <IPv6_VLAN_10_GLOBAL_ADDR_FROM_SLAAC>/64 scope global mngtmpaddr noprefixroute dynamic valid_lft 86381sec preferred_lft 14381sec inet6 fd:<STATIC_IPv6_VLAN_10_ULA>/64 scope global noprefixroute valid_lft forever preferred_lft forever inet6 fe80::<IPv6_LLA_2>/64 scope link valid_lft forever preferred_lft forever 

Интересно, что LLA для каждого интерфейса уникален. Похоже, что он получен из IAID, который, как я вижу, syslogтеперь уникален для каждого интерфейса. Для eth0 мой IAID получен из моего MAC-адреса, но для интерфейса VLAN 10 IAID - просто ff:00:00:0a. Для интерфейса VLAN 20 это так ff:00:00:14. Таким образом, может показаться, что IAID справедлив ff::VLAN_NUMBER, что приводит к уникальным LLA на каждом интерфейсе. Как бы то ни было, это скорее любопытство, чем реальная проблема ...

Несмотря на это, все интерфейсы настроены правильно, и все они могут достигать узлов внутренней сети, а также внешних узлов Интернета. Еще раз спасибо @ Grawity!