Я использую домашнюю сеть с двумя стеками (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