Eu tenho as seguintes regras de roteamento (exibidas usando route -n
):
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.0.2.1 0.0.0.0 UG 100 0 0 enp0s3
10.0.2.0 0.0.0.0 255.255.255.192 U 100 0 0 enp0s3.100
10.0.2.0 0.0.0.0 255.255.255.0 U 100 0 0 enp0s3
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 enp0s3
A interface enp0s3.100
é uma interface com ID de VLAN 100.
Se eu tentar obter a rota para 10.0.2.70, espero que use a interface VLAN, mas não:
# ip route get 10.0.2.70
10.0.2.70 dev enp0s3 src 10.0.2.11
cache
Alguém sabe por que a correspondência de prefixo mais longa não está sendo usada aqui?
Em primeiro lugar, é melhor usar apenas os
ip
comandos, então você deveria ter usadoip route show
(ouip r
abreviado) para listar a tabela de roteamento.Nesse caso, a rota pela VPN é para 10.0.2.0/255.255.255.192 ou 10.0.2.0/26. Essa sub-rede é de 0 a 63. Seu destino de exemplo 10.0.2.70 está fora desse intervalo, portanto, não é roteado pela VPN, mas usa a próxima rota mais específica de 10.0.2.0/24, que é sobre enp0s3.
Você menciona a "correspondência de prefixo mais longo", eu costumo ouvir "correspondência mais específica", ou seja, onde o intervalo é o menor, o que de fato implica o prefixo mais longo. No entanto, como dito acima, o endereço IP que você está testando não está dentro do prefixo que você acha que está.
No Debian (e derivados) existe um utilitário muito útil
netmask
, que pode ajudar a tornar as coisas mais claras:Observe que
ip route show
não mostra toda a história, é possível que o roteamento baseado em política esteja em jogo. Você também precisa listar todas as regras de roteamento, esta é a saída normal:Você pode então listar as entradas de roteamento em uma determinada tabela desta forma, aqui para a tabela "local":
Isso é chamado de roteamento baseado em política. Normalmente você não usará isso (você usará se tiver mais de uma conexão com a Internet, por exemplo), mas ajuda estar ciente disso ao solucionar problemas de roteamento em sistemas que você não configurou.