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.