Eu executo uma rede doméstica dual-stack (IPv4 e IPv6), com algumas VLANs para separar dispositivos IoT (VLAN 20) de usuários normais (VLAN 10) do hardware de rede (VLAN não marcado). Atualmente estou hospedando DNS local (e alguns outros serviços) em um Raspberry Pi 3 B + (executando raspbian), que normalmente vive na VLAN não marcada, mas gostaria de tentar dar endereços a ele nas outras 2 VLANs (10 e 20) como um experimento (simplifique as regras de firewall, reduza a carga do roteador, etc). Minha primeira tentativa falhou, então tentei simplificar as coisas e apenas colocá-lo na VLAN sem tag mais a VLAN 10, mas isso também falhou, e não consigo entender o porquê.
Configuração de endereço único
Aqui está a configuração normal (apenas um endereço na VLAN não marcada, nada na VLAN 10 ou 20):
/etc/network/interfaces
está vazio.
Aqui está o /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
E aqui estão os endereços resultantes que recebo:
$ 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
Isso funciona bem, eu posso rotear para hosts em VLANs 10 e 20 através do roteador. O problema surge ao tentar adicionar uma interface em uma das VLANs ...
Adicionando uma VLAN
Para adicionar um endereço na VLAN 10, adicionei a seguinte configuração na parte superior da configuração na configuração de endereço único:
Aqui está o /etc/network/interfaces
:
auto eth0.10
iface eth0.10 inet manual
vlan-raw-device eth0
iface eth0.10 inet6 manual
vlan-raw-device eth0
Aqui está o /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
E aqui estão os endereços resultantes que recebo:
$ 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
Isso foi muito estranho, perdi meu endereço IPv6 global na VLAN não marcada, bem como meu endereço de link local (LLA) e o ULA que recebi do SLAAC. Eu tentei alguns pings para ver o que funcionou, e aqui está o que eu encontrei:
$ 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>
Assim, o IPv4 estava funcionando bem em ambas as VLANs, mas o IPv6 foi quebrado na VLAN não marcada. Eu olhei para syslog
para todas as mensagens relacionadas a dhcpcd
e encontrei estas:
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
Portanto, parece que há um problema que resulta na exclusão do LLA na VLAN não marcada, o que impede que ele veja anúncios de roteador nessa interface.
Eu estou supondo que essa configuração deve ser possível (várias VLANs por NIC trabalhando com IPv6). Alguma idéia sobre o que está causando esse problema? Isso é apenas uma configuração minha?
Caso seja útil, aqui está a versão do kernel do raspbian em execução no Raspberry Pi:
$ uname -a
Linux HOSTNAME 4.14.70-v7+ #1144 SMP Tue Sep 18 17:34:46 BST 2018 armv7l GNU/Linux