Considere a seguinte configuração:
X@Y:~$ sudo ip link add link eth0 name eth0.3 type vlan id 3
X@Y:~$ sudo ip link add link eth0 name eth0.2 type vlan id 2
X@Y:~$ sudo ifconfig eth0.2 192.168.2.1/30
X@Y:~$ sudo ifconfig eth0.3 192.168.2.2/29
X@Y:~$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
...
192.168.2.0 0.0.0.0 255.255.255.252 U 0 0 0 eth0.2
192.168.2.0 0.0.0.0 255.255.255.248 U 0 0 0 eth0.3
Como você pode ver, embora eles tenham sub-redes sobrepostas, as duas rotas para eth0.2
e eth0.3
são instaladas. No entanto, quando tento isso:
X@Y:~$ sudo ifconfig eth0.3 192.168.2.3/29
X@Y:~$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
...
192.168.2.0 0.0.0.0 255.255.255.252 U 0 0 0 eth0.2
Você pode ver que a rota para eth0.3
não está lá. Qual é a principal diferença? O eth0.3
ip configurado é o endereço de difusão da sub-rede configurada em eth0.2
. Ok, sim isso é confuso, mas a interface fica online, a única coisa que não acontece é adicionar a rota para a tabela de rotas. E, na verdade, a tabela de rotas nem se importa com esse endereço de transmissão:
X@Y:~$ sudo route add -net 192.168.2.0/29 dev eth0.3
X@Y:~$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
...
192.168.2.0 0.0.0.0 255.255.255.252 U 0 0 0 eth0.2
192.168.2.0 0.0.0.0 255.255.255.248 U 0 0 0 eth0.3
X@Y:~$ sudo ip link del eth0.3
X@Y:~$ sudo ip link del eth0.2
Existe alguma maneira de contornar isso? Antes de declarar que descobri a rota adicionando a rota depois: na minha configuração, o ifconfig real acontece por meio de um script dhclient que não posso editar, portanto, adicionar essa rota exigiria a conexão do dhclient, lendo o IP de algum lugar e executando a rota adiciona que é bastante tediosa. Eu esperava poder mudar esse comportamento com alguns sinalizadores na interface?
P.S. Obviamente, isso não é um projeto de rede real, mas é necessário para uma configuração de teste.