ifconfig falha ao instalar a rota se a interface ip for um endereço de broadcast existente

1

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.

    
por KillianDS 09.03.2012 / 15:21

1 resposta

0

Uma rota ativa / 30 será sempre preferida em qualquer rota / 29. Portanto, a menos que você tivesse uma rota de host / 32 para 192.168.2.2 em vigor, a tabela de roteamento ainda enviaria tráfego para 192.168.2.2 na interface / 30.

Não está claro se a interface 192.168.2.3 já foi instalada, já que o .3 é a transmissão para 192.168.2.0/30, e um pacote enviado para 192.168.2.3 tem uma função especial: ser enviado para todos os hosts em 192.168 .2.0 / 30, para não ser unicast para uma rede menos específica em outra interface.

Se ao invés de um / 30 e um / 29, você estivesse trabalhando com um / 29 e um / 28, você estaria tendo um problema com o .7.

    
por 04.04.2014 / 21:54