Múltiplas VLANs por falha na NIC no IPv6

2

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
    
por pewter-bronco 27.09.2018 / 21:48

1 resposta

0

Obrigado pela dica @grawity! O problema era simplesmente que dhcpcd estava desatualizado. Como @grawity mencionado nos comentários acima, dhcpcd apenas adicionou suporte para IAIDs automáticos em interfaces marcadas de VLAN na versão 7.0.0. Aqui estava a versão no meu sistema raspbian usando a instalação padrão de apt :

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

Caso isso ajude alguém, aqui estão os passos que eu dei para instalar a última versão (7.0.8) da fonte:

Verifique o link para obter a versão mais recente de 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

Note que eu defino dbdir para /var/lib/dhcpcd5 , mesmo que estas instruções geralmente recomendo usar /var/lib/dhcpcd . No meu sistema, /var/lib/dhcpcd5 já estava sendo usado pela instalação existente de dhcpcd e /var/lib/dhcpcd não existiam. Faça o que fizer sentido para você.

Agora que isso é feito:

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

E agora tudo funciona perfeitamente com a interface VLAN 10 adicionada (e também funciona quando eu adiciono a interface VLAN 20). Veja como as coisas ficam com apenas a interface da VLAN 10 adicionada:

$ 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

Curiosamente, o LLA de cada interface é único. Parece que está sendo derivado do IAID, o que eu posso ver de syslog é único em cada interface agora. Para eth0, meu IAID é derivado do meu endereço MAC, mas para a interface VLAN 10, o IAID é simplesmente ff:00:00:0a . Para a interface da VLAN 20, é ff:00:00:14 . Assim, parece que o IAID é apenas ff::VLAN_NUMBER , o que leva a LLAs exclusivos em cada interface. Seja como for, isso é mais uma curiosidade do que um problema real ...

Independentemente disso, todas as interfaces são configuradas adequadamente, e todas elas podem acessar hosts da rede interna, bem como hosts da Internet externos. Obrigado novamente @grawity!

    
por 28.09.2018 / 18:58