Como um OpenVPN sintoniza todo o tráfego que entra no tun0?

0

Antes de mais nada, entendo que a tabela de roteamento do kernel faz todo o tráfego de saída encaminhado para tun0 . No entanto, NÃO vão para o endereço IP que a interface tun0 local tem (por exemplo, 10.13.10.6 ), e sim para o endereço de destino (por exemplo, 10.13.10.5 ). Nesse caso, como um OpenVPN se conecta a todo o tráfego que vai para tun0 ? Como eu ouvi, algo chamado soquete bruto está envolvido, mas eu quero entender como especificamente ele garante esse comportamento.

    
por b1sub 12.07.2018 / 15:52

1 resposta

1

Veja novamente a tabela de roteamento ( ip route ). Você notará que há uma rota default para 10.13.10.5 ou um par de 0.0.0.0/1 / 128.0.0.0/1 rotas para 10.13.10.5 (que é apenas um truque que permite que o OpenVPN mantenha a rota padrão, embora se torne inativo), e esta rota passa por tun0 .

Não importa qual% IP tun0 tenha, o que importa é o IP gateway , que por acaso é 10.13.10.5 e está do outro lado de tun0 .

Então, como o OpenVPN faz todo o tráfego entrar em tun0 ? Ao fornecer rotas, assim como sem o OpenVPN, todo o tráfego vai para eth0 (ou wlan0 , ou para onde quer que a rota padrão diga).

O OpenVPN não faz nada de especial. Em particular, ele não usa um socket bruto, ele cria uma interface tun / tap.

Editar

O OpenVPN não "escuta o tráfego ligado ao outro lado".

Quando o kernel Linux vê um pacote de rede, ele consulta a tabela de roteamento para decidir o que fazer com o pacote. Se a tabela de roteamento disser "enviar todos os pacotes para o gateway 10.13.10.5 via tun0 ", é isso que o kernel do Linux faz. O OpenVPN não está envolvido de forma alguma nisso.

Agora o OpenVPN criou tun0 , então o que acontece quando o kernel coloca um pacote em tun0 é que o OpenVPN pode ler este pacote. Isso é o que uma interface tun / tap faz: permite que uma aplicação leia pacotes colocados nesta interface (pelo kernel), e também escrever pacotes que serão emitidos desta interface (que também será tratada como o kernel, assim como se o pacote veio de uma placa de rede real).

Nenhum modo promíscuo envolvido. O problema é que você não entende como a interface tun / tap funciona?

    
por 12.07.2018 / 17:25