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 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.