Roteando o tráfego em uma interface específica sobre o OpenVPN com o FreeBSD

0

Eu gostaria de configurar o OpenVPN entre um cliente FreeBSD e um servidor (Arch) Linux tal que

  • Todo tráfego ligado à Internet enviado explicitamente do FreeBSD pelo dispositivo de encapsulamento é roteado pelo OpenVPN

mas

  • O gateway / rota padrão no lado do FreeBSD permanece intacto.

Em outras palavras, se eu fizer algo como curl --interface tun0 example.com no FreeBSD, eu quero que o pedido para example.com seja roteado através do OpenVPN, mas se eu apenas fizer curl example.com eu quero isso para ignorar o túnel VPN.

Até agora, estabeleci com sucesso uma conexão básica entre as duas máquinas, e ambos os lados podem se ver.

Eu posso passar pelo túnel para buscar dados do servidor da Web em execução na máquina remota:

$ curl 10.8.0.1
<!DOCTYPE html>
...

Para completar, eu também testei o que acontece se eu especificar explicitamente a interface e ela funciona:

$ curl --interface 10.8.0.14 10.8.0.1
<!DOCTYPE html>
...

$ curl --interface tun0 10.8.0.1
<!DOCTYPE html>
...

No entanto, o uso da interface para qualquer outro host / IP falha:

$ curl --interface tun0 example.com
*hang*

$ curl --interface tun0 93.184.216.34  # (the IP I got for example.com)
*hang*

OpenVPN (no lado do FreeBSD) não imprime RwRw quando eu faço isso, então eu suponho (e eu acho corretamente) que a pilha de rede do FreeBSD está insuficientemente configurada para saber como rotear o tráfego arbitrário em tun0 através do OpenVPN corretamente.

Todos os exemplos que encontrei para configurar esse tipo de roteamento são específicos do Linux; o que eu faço para o FreeBSD?

Eu posso fazer alterações arbitrárias nos lados do FreeBSD e do Linux, se isso torna a configuração mais fácil.

Inicialmente pretendia publicá-lo em networkengineering.stackexchange.com , mas as tags freebsd e openvpn não são não está definido, então estou postando aqui.

    
por i336_ 29.07.2016 / 08:19

1 resposta

1

Veja esta resposta .

Para obter uma explicação mais detalhada sobre vários gateways, consulte aqui .

A essência é usar uma nova tabela de roteamento.

Isso é o que eu usei - servidor sendo 10.8.0.1/24 e cliente 10.8.0.2/24 :

echo "10 vpn" >> /etc/iproute2/rt_tables
ip route add default via 10.8.0.1 dev tun0 table vpn
ip rule add from 10.8.0.2/24 table vpn
ip rule add to 10.8.8.1/24 table vpn
ip route flush cache

A primeira linha deve ficar entre as reinicializações, mas as regras não.

Editar: Uma maneira muito melhor de executar os comandos quando o openvpn se conecta é usar a diretiva up no arquivo de configuração openvpn:

up /etc/openvpn/tun0_up.sh
    
por 28.06.2017 / 19:41