Я использую домашнюю сеть с двумя стеками (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):
$ 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, я добавил следующую конфигурацию поверх конфигурации в настройке с одним адресом:
$ 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. Я попробовал несколько пингов, чтобы увидеть, что сработало, и вот что я нашел:
Итак, 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
Быстрый снимок: MAC-адреса (которые вы отредактировали) интерфейса без тегов и тегов одинаковы, поэтому адреса IPv6 локальных ссылок ff80: ... совпадают, поэтому один из них удаляется.
dirkt 6 лет назад
0
@dirkt: им разрешено быть одинаковыми, _because_ они локальны по ссылкам и поэтому находятся в разных областях. Если dhcpcd удаляет их как дубликаты, это фальшивка.
grawity 6 лет назад
0
@ pewter-bronco: Какую версию dhcpcd вы используете? Поддержка автоматических IAID идентифицированных интерфейсов VLAN была добавлена только в выпуске 7.0.0.
grawity 6 лет назад
0
Хороший вопрос @grawity, похоже, что стандартная версия dhcpcd для raspbian - это 3.2.3-11. Немного устарела = P Я посмотрю, как обновить это ...
pewter-bronco 6 лет назад
0
Да, dhcpcd в Debian устарел: https://tracker.debian.org/pkg/dhcpcd
pewter-bronco 6 лет назад
0
Ну, похоже, номер версии `apt`` dhcpcd` не совпадает с тем, который на самом деле находится в системе: `$ sudo dhcpcd --version`` dhcpcd 6.11.5` `Copyright (c) 2006-2016 Рой Марплз `Скомпилировано в функции: INET IPv4LL INET6 DHCPv6 AUTH` Тем не менее, все еще нуждается в обновлении.
pewter-bronco 6 лет назад
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) из исходного кода:
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не существовала. Делай все, что имеет для тебя смысл.
И теперь все работает отлично с добавленным интерфейсом 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!