Houve perguntas semelhantes no StackExchange, mas nenhuma das respostas me ajudou, então vou tentar fazer uma pergunta.
Eu tenho uma conexão VPN via OpenVPN. Por padrão, todo o tráfego é redirecionado através do túnel usando o truque "two more specific routes" do OpenVPN, mas eu desabilitei isso. Minha tabela de roteamento é assim:
198.144.156.141 192.168.2.1 255.255.255.255 UGH 0 0 0 eth0
10.30.92.5 0.0.0.0 255.255.255.255 UH 0 0 0 tun1
10.30.92.1 10.30.92.5 255.255.255.255 UGH 0 0 0 tun1
192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
0.0.0.0 10.30.92.5 0.0.0.0 UG 0 0 0 tun1
0.0.0.0 192.168.2.1 0.0.0.0 UG 0 0 0 eth0
E a configuração da interface é assim:
# ifconfig
eth0 Link encap:Ethernet HWaddr XX-XX-
inet addr:192.168.2.100 Bcast:192.168.2.255 Mask:255.255.255.0
inet6 addr: fe80::211:9ff:fe8d:acbd/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:394869 errors:0 dropped:0 overruns:0 frame:0
TX packets:293489 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:388519578 (370.5 MiB) TX bytes:148817487 (141.9 MiB)
Interrupt:20 Base address:0x6f00
tun1 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.30.92.6 P-t-P:10.30.92.5 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:64 errors:0 dropped:0 overruns:0 frame:0
TX packets:67 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:9885 (9.6 KiB) TX bytes:4380 (4.2 KiB)
mais o dispositivo lo.
A tabela de roteamento tem duas rotas padrão, uma via eth0 através do meu roteador de rede local (modem DSL) em 192.168.2.1 e outra via tun1 através do gateway da VPN. Com esta configuração, se eu me conectar a um site, a rota escolhida é a direta (porque tem menos saltos?):
# traceroute 8.8.8.8 -n
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
1 192.168.2.1 0.427 ms 0.491 ms 0.610 ms
2 213.191.89.13 17.981 ms 20.137 ms 22.141 ms
3 62.109.108.48 23.681 ms 25.009 ms 26.401 ms
...
Isso é bom, porque meu objetivo é enviar apenas tráfego de aplicativos específicos através do túnel (especialmente transmissão, usando sua opção -i / bind-address-ipv4). Para testar se isso pode funcionar, verifique primeiro com a opção -s do traceroute:
# traceroute 8.8.8.8 -n -s 10.30.92.6
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
1 * * *
2 * * *
3 * * *
...
Isso significa que a conexão usando o endereço local do túnel como fonte não é possível.
O que é possível (embora apenas como root) é especificar a interface de origem:
# traceroute 8.8.8.8 -n -i tun1
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
1 10.30.92.1 129.337 ms 297.758 ms 297.725 ms
2 * * *
3 198.144.152.17 297.653 ms 297.652 ms 297.650 ms
...
Então aparentemente a interface tun1 está funcionando e é possível enviar pacotes através dela.
Mas a seleção da interface de origem não é implementada no meu aplicativo de destino real (transmissão), portanto, gostaria de fazer a seleção do endereço de origem funcionar.
O que estou fazendo de errado?
Editar: Com base na resposta do DerfK, aqui está minha configuração do OpenVPN:
No arquivo .conf ou .ovpn, inclua estes comandos
# disable automatic route configuration
route-noexec
# enable executing scripts
script-security 2
# script to configure routes
up updown.sh
# script to deconfigure routes
down updown.sh
E o script updown.sh
contém:
#!/bin/bash
case $script_type in
up) echo routes up
# reproduce OpenVPN's standard routes
ip route add $trusted_ip via $route_net_gateway
ip route add $route_network_1 via $route_vpn_gateway
# but put the default route in an extra table
ip route add default via $route_vpn_gateway table 200
# and make sure it is activated by selection of the interface's address
ip rule add from $ifconfig_local/32 table 200
# flush routing cache (but everything seems to work without this, too)
ip route flush cache
;;
down) echo routes down
ip route del $trusted_ip
;;
esac
Com essa configuração, o comando traceroute -s
fornece a mesma saída que o traceroute -i
mostrando a rota através da VPN até o endereço de destino.
Algo que não expliquei na postagem original: a VPN em questão não fornece acesso a uma rede local protegida, mas à Internet, mas a partir de um local / endereço IP diferente. Caso contrário, adicionar uma rota padrão não seria necessário em primeiro lugar.