O que as entradas na minha tabela de roteamento realmente significam?

2

Eu tenho uma conexão VPN (implementada via Open VPN), mas estou tentando direcionar o tráfego para determinados IPs / domínios em torno dele, então eles usam minha conexão de internet nua. Da minha pesquisa, parece que a melhor maneira de fazer isso é com tabelas de roteamento. Nenhum dos exemplos que encontrei funcionou, por isso, gostaria de entender o que está a acontecer para resolver problemas de forma mais eficaz.

Quando executo "rota" com a VPN desativada, parece bastante sensato:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.1.1     0.0.0.0         UG    0      0        0 eth1
192.168.1.0     *               255.255.255.0   U     1      0        0 eth1

Eu suspeito que a primeira linha define o comportamento padrão - nós roteamos através do gateway. Se o destino estiver em qualquer lugar no intervalo 192.168.1. * / Minha rede interna, a segunda linha ativa um gateway de * (eu acho que isso significa usar o padrão da linha acima - mas se eu tivesse uma rede que abrange vários octetos, poderia usar isso para canalizar certos blocos para certos gateways).

Minha expectativa era de que, quando eu ligasse a VPN, isso permanecesse mais ou menos o mesmo, mas minha porta de entrada para "default" mudaria para algum IP de VPN.

Se este entendimento está correto, eu só preciso adicionar o IP que eu quero ignorar a VPN como o destino, meu roteador real (192.168.1.1) como o gateway e as coisas vão funcionar bem (se a sintaxe para isso é simples Eu adoraria ver isso.

Assim que ligo a VPN, as coisas ficam confusas e começo a questionar meu conhecimento:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.172.1.5      128.0.0.0       UG    0      0        0 tun0
0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 eth1
10.172.1.1      10.172.1.5      255.255.255.255 UGH   0      0        0 tun0
10.172.1.5      0.0.0.0         255.255.255.255 UH    0      0        0 tun0
128.0.0.0       10.172.1.5      128.0.0.0       UG    0      0        0 tun0
168.1.6.15      192.168.1.1     255.255.255.255 UGH   0      0        0 eth1
192.168.1.0     0.0.0.0         255.255.255.0   U     1      0        0 eth1

O que está acontecendo aqui? Alguém pode explicar o que essas linhas adicionais são e por que elas aparecem / desaparecem quando eu alterno a vpn?

Obrigado por qualquer sugestão! Eu encontrei alguns artigos "o que é uma tabela de roteamento", mas eu acho que eles foram escritos para pessoas muito mais inteligentes que eu - eu ainda sou muito novo no Linux e adoraria algum conselho à prova de idiotas:)

    
por penitent_tangent 19.10.2015 / 15:02

1 resposta

3

Nice e difícil, pergunta.

Primeiro, um princípio geral: nas tabelas de roteamento, if você tem várias regras que se aplicam ao mesmo destino, a mais específica é usada. Por exemplo, olhando para o seu segundo RT, suponha que você deseja fazer ping no Google DNS 8.8.8.8. Tanto a primeira linha quanto a segunda linha se aplicam, mas a primeira linha é um pouco mais específica porque tem uma máscara de rede mais restritiva que a segunda: a primeira linha se aplica a todos os endereços IP no intervalo

    0.0.0.0 -> 127.255.255.255

enquanto a segunda regra se aplica a todos os endereços IP de ponto final, ou seja, aqueles no intervalo

   0.0.0.0 -> 255.255.255.255

Assim, a primeira regra, que é mais restrita / mais restritiva / mais específica, é usada: o ping 8.8.8.8 terá que passar pelo dev tun0 e pelo endereço IP 10.172.1.5.

Segundo ponto: sua segunda RT contém duas rotas unicast : elas são aquelas indicadas por um H na quarta coluna. A presença de rotas unicast é mais clara se você usar, em vez do comando obsoleto route/netstat , o novo comando:

   $ ip route show 

(o que você deve sempre fazer) porque aqui as rotas unicast são indicadas pela expressão link do escopo .

Esta é a chave para entender o roteamento de VPN (Open). O manual afirma:

scope SCOPE_VAL

the scope of the destinations covered by the route prefix. SCOPE_VAL may be a number or a string from the file /etc/iproute2/rt_scopes. If this parameter is omitted, ip assumes scope global for all gatewayed unicast routes, scope link for direct unicast and broadcast routes and scope host for local routes.

O que é uma rota unicast ?

A static unicast route is a manually configured mapping of an IP address to a next-hop destination, hence called a destination specific route... Add static routes when you want to route traffic destined for specific network/host via a different next hop instead of the default route.

Em outras palavras: se esta regra não existir, então, como o ping 8.8.8.8 passa para 10.172.1.5 (no seu caso), mas não há um gateway padrão no tun0, o pacote ser transferido para a interface eth0, onde existe um gateway padrão, e sairia disso. Mas isso é o que acontece normalmente, e você não teria uma VPN (Aberta). Em vez disso, existe uma regra unicast, e é tão restritiva quanto possível: força você, não importa para quem o pacote está endereçado, a contatar 10.172.1.1 como o próximo salto.

Bem, e agora: como entramos em contato com o 10.172.1.1? dev tun0 não possui tal regra, portanto o pacote é transferido para eth0 , na esperança de melhor sorte. Agora, quais das regras restantes podemos aplicar para encaminhar nosso pacote de ping? O fato é que eth0 também possui uma rota unicast,

  168.1.6.15      192.168.1.1     255.255.255.255 UGH   0      0        0 eth1

que o obriga a enviar o pacote, como seu próximo salto, para 168.1.6.15. E, a partir de então, não é mais nossa responsabilidade.

Podemos resumir este processo lógico da seguinte forma:

Packet to 8.8.8.8 ---> dev tun0 ---> 10.172.1.5 ---> 168.1.6.15

            (Rule #1)     
                      (Rule #3)
                                  (Rule #6)

Pontas soltas :

Uma das regras restantes, Regra nº 5

128.0.0.0       10.172.1.5      128.0.0.0       UG    0      0        0 tun0

complementa a regra nº 1

0.0.0.0       10.172.1.5      128.0.0.0       UG    0      0        0 tun0   

Os dois juntos fornecem regras padrão para todos os endereços IP do mundo, mas uma vez que cada um deles é um pouco mais restritivo que a regra 2

 0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 eth1

eles têm precedência sobre ele e são usados para rotear todo o tráfego da Internet através do OpenVPN. Na verdade, a regra acima é redundante e foi excluída na versão anterior do OpenVPN. Mas agora é deixado no lugar porque ele é basicamente nunca invocado, e isso torna a RT # 1 mais fácil, quando o OpenVPN é demolido.

A regra nº 7 é a regra habitual da LAN local. Você está faltando uma regra como

    10.172.1.0/24 dev tun0  proto kernel  scope link  src 10.172.1.5

que é o que seria necessário para você entrar em contato com os PCs na LAN remota . Provavelmente, isso se deve ao fato de que você está usando como um servidor OpenVPN um serviço por pagamento, que não tem a intenção de permitir o acesso a outras máquinas locais. Se, ao invés disso, este OpenVPN for o único que você conecta à sua LAN doméstica na estrada (por exemplo), então você definitivamente desejaria ter a capacidade de contatar os outros PCs em sua LAN, e você teria uma tal regra.

Por fim, a regra nº 4

 10.172.1.5      0.0.0.0         255.255.255.255 UH    0      0        0 tun0

é completamente misterioso para mim: eu não o tenho em nenhum dos meus (numerosos) OpenVPNs, e, pelo que entendi, parece-me totalmente redundante.

    
por 19.10.2015 / 16:36