Use o dispositivo tun OpenVPN para solicitação específica

2

Eu configurei uma conexão OpenVPN com a configuração route-nopull . Portanto, agora nenhuma rota especial foi adicionada à configuração do cliente e apenas um dispositivo TUN é criado, assim:

tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet addr:13.0.9.88  P-t-P:13.0.9.88  Mask:255.255.255.224
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:150 errors:0 dropped:0 overruns:0 frame:0
          TX packets:20 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:12498 (12.4 KB)  TX bytes:2520 (2.5 KB)

Como resultado, nenhum tráfego passa pela VPN por padrão. Ótimo, porque eu só preciso disso para certos pedidos.

E aí está o meu problema: como faço isso? Eu vou principalmente usar isso em node.js.

No próximo exemplo, criei uma solicitação GET simples usando http.request, mas especifiquei o endereço atualmente fornecido à interface TUN.

var http = require('http'),
    url  = require('url');

var options = {
    localAddress: '13.0.9.88',
    hostname: 'www.google.be',
    path: '/',
    method: 'GET',
    port: 80
};

var req = http.request(options, function(res) {
    res.setEncoding('utf8');

    res.on('data', function (chunk) {
        console.log('Body: ' + chunk);
    });
});

req.end();

O problema é: essa solicitação nunca passa ou recebe uma resposta.

Eu também tentei um teste mais simples, usando apenas ping na interface tun0 para um dos servidores do Google:

 ping -I tun0 173.194.112.24

Isso, mais uma vez, não dá resultados.

Fyi: Quando eu configuro o OpenVPN para criar uma interface TAP (em vez de um TUN), recebo um erro 'Destination Host Unreachable'

As informações do netstat do ip da vpn:

# netstat -rn | fgrep 13.0.9
13.0.9.88      0.0.0.0         255.255.255.224 U         0 0          0 tun0

Que rotas devo adicionar para ativar isso?

    
por skerit 18.12.2014 / 16:10

2 respostas

2

Depois de bastante pesquisa, encontrei a resposta neste blog por Georgie Casey :

O no-pull config permanece, mas após cada conexão, essas rotas precisam ser adicionadas:

ip route add default via  {{P-t-P-IP}}          dev tun0 table 10
ip rule add from          {{tun0-inet addres}}  table 10

Esses valores podem ser obtidos, por exemplo, do ifconfig (ips modified):

tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet addr:16.0.2.11  P-t-P:16.0.2.11  Mask:255.255.255.224
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:66 errors:0 dropped:0 overruns:0 frame:0
          TX packets:30 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:5344 (5.3 KB)  TX bytes:2295 (2.2 KB)
    
por 18.12.2014 / 20:52
1

Você precisa adicionar rotas para os destinos que deseja rotear por meio do túnel da VPN, assim:

route add <destip> gw <server IP>

Onde <destip> é o IP de destino que você deseja rotear através da VPN e <server ip> é o IP do servidor OpenVPN na rede 13.0.9. .

A propósito, você não deve usar endereços IP publicamente roteáveis em VPNs privadas. Você tem que usar algumas das redes definidas no RFC1918.

Depois de ver a sua pergunta original Configurar o openvpn apenas como dispositivo de interface , deve remover o route-nopull na configuração do seu cliente e remover push "redirect-gateway def1" do arquivo de configuração do servidor.

Então você pode adicionar:

push "route <serverip> 255.255.255.255"

para o arquivo de configuração do servidor. Isto diz ao servidor para dizer ao cliente para rotear <serverip> via servidor OpenVPN.

    
por 18.12.2014 / 17:20