Problema de roteamento VPN no Linux - como fazer com que aplicativos que só podem se vincular a endereços IP funcionem?

3

Agora eu tenho uma VPN PPTP configurada no meu VPS ubuntu remoto. Eu gostaria que certos aplicativos usassem a VPN para acessar a internet (rtorrent, irssi, entre outros). Atualmente, é configurado assim:

eth0 Link encap:Ethernet HWaddr 00:16:3e:94:38:ce inet addr:66.xxx.xxx.xxx Bcast:66.xxx.xxx.xxx Mask:255.255.255.0

eth1 Link encap:Ethernet HWaddr 00:16:3e:d7:58:a1 inet addr:10.2.0.111 Bcast:10.255.255.255 Mask:255.0.0.0

lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0

ppp0 Link encap:Point-to-Point Protocol inet addr:192.168.10.244 P-t-P:192.168.9.1 Mask:255.255.255.255

Essencialmente, a maneira como eu vi esse problema é assim.

Quando eu corro

curl --interface eth0 checkip.dyndns.com

Eu obtenho

<html><head><title>Current IP Check</title></head><body>Current IP Address: 66.xxx.xxx.xxx</body></html>

E quando eu corro

curl --interface ppp0 checkip.dyndns.com

Eu obtenho

<html><head><title>Current IP Check</title></head><body>Current IP Address: 95.xxx.xxx.xxx</body></html>

O que está correto.

No entanto, quando eu corro

curl --interface 192.168.10.244 checkip.dyndns.com

isso acaba e eu não recebo nada. O que não parece fazer qualquer sentido, já que 192.168.10.244 é o endereço IP de ppp0, e não me parece que deva ser diferente do comando acima. Estou esquecendo de algo? Se eu puder fazer isso funcionar, eu vou conseguir trabalhar no rtorrent e no irssi como eu gostaria, o curl é mais fácil de testar para esse tipo de coisa. Existem bons pontos de partida para resolver este problema?

EDITAR: Corrigido! Aqui está como eu fiz isso.

Primeiro, criei uma nova tabela de roteamento:

# echo "200 vpn" >> /etc/iproute2/rt_tables

Em seguida, criei uma regra para solicitações provenientes do meu endereço IP ppp0 para pesquisar a partir dessa nova tabela

# ip rule add from 192.168.10.244 table 200

Em seguida, criei uma regra nessa tabela para usar o ppp0.

# ip route add default dev ppp0 table 200

Funciona perfeitamente! Agora, quando eu tento o comando de falha anterior:

# curl --interface 192.168.10.244 checkip.dyndns.com
<html><head><title>Current IP Check</title></head><body>Current IP Address: 95.xxx.xxx.xxx</body></html>
    
por thatfunkymunki 11.04.2012 / 03:47

1 resposta

1

Seu raciocínio está incorreto. A vinculação a um endereço IP só escolhe o endereço IP de origem. Não tem efeito na rota tomada para o destino, que é o que você deseja controlar.

Para fazer o que você quer fazer, você precisa configurar uma forma de roteamento de política chamado roteamento baseado na origem. Isso geralmente é feito criando duas tabelas de roteamento, uma para cada conexão, e decidindo usar a tabela de roteamento com base no endereço IP de origem local. Veja um dos muitos howto em roteamento de políticas .

    
por 11.04.2012 / 04:37