Linux routing e HMA

4

Minha configuração é a seguinte: Eu tenho um acesso ssh a uma máquina distante, executando a última versão do Ubuntu Server edition, e eu tenho que executar um software nele "através de" HideMyAss VPN (porque o IP desta máquina tem que ser falsificado quando o software está rodando). Mas é claro que eu quero poder ainda acessar a máquina através do seu IP "original".

Meu problema é que assim que eu inicio o script hma-start na máquina distante (que basicamente pega um arquivo de configuração de seus servidores, e executo o openvpn com ele), perco a conexão e não consigo me conectar mais.

Isso é solucionável e, em caso afirmativo, como? Obrigado!

    
por m4573r 13.08.2012 / 17:17

2 respostas

3

Se você quiser que seu software específico use a conexão VPN, use os namespaces de rede.

basicamente, o comando ip netns add vpn criará outro namespace para dispositivos de rede, tabelas de roteamento, regras de firewall e assim por diante, então é como executar duas pilhas de rede.

Um dispositivo de rede só pode estar em um namespace, portanto, você precisará de um dispositivo virtual, agindo como uma ponte entre os dois namespaces.

É exatamente para isso que as interfaces de rede virtual são:

ip link add veth0 type veth peer name veth1

tudo o que entra em veth0 sairá de veth1 e assim por diante. Agora você só precisa mover uma das interfaces virtuais para o outro namespace da rede:

ip link set veth0 netns vpn

Agora você tem uma situação semelhante a esta topologia de rede:

                   .----------.              .------.
[intertubes] ------|   Host   |--------------|  vpn |
               eth0'----------'veth1    veth0'------'

Você pode aplicar o método que quiser para compartilhar a conexão com a Internet. Faça o masquerading (se a vpn suportar o NAT), roteamento / bridging (você precisará de outro endereço IP ou configurações sérias) ou qualquer outro método que você goste.

Quando você quiser 'acessar' vpn , execute ip netns exec vpn bash e acabará no namespace vpn . Você verá que esse namespace tem apenas a interface de rede veth0 , bem como uma interface lo não configurada que você pode querer configurar usando ip addr add 127.0.0.1/8 dev lo && ip link set lo up . Agora basta configurar sua interface veth0 para que você possa se conectar à Internet e depois iniciar sua VPN para que ela possa reconfigurar a rede para passar pela VPN. Você verá que o namespace principal não usará a VPN, enquanto o namespace vpn será.

    
por 19.08.2012 / 22:51
0

A conexão é interrompida porque a VPN alterará a rota padrão para que tudo entre na VPN. Você pode alterar essa tabela de roteamento, mas pode ser difícil acertar, especialmente se você perder o acesso ssh se as coisas derem errado.

Uma solução simples e fácil é dizer ao seu servidor para alcançar seu próprio endereço IP via eth0 definindo uma rota:

    ip route add your_ip_address via the_server's_gateway

e esperando que o script VPN não o toque.

Se você também quiser permitir que outros hosts acessem o endereço original do servidor, ou seja, se você quiser que o servidor responda tanto ao endereço IP original quanto ao endereço IP da VPN, será necessário alterar a forma como a VPN modifica sua rota ou, pelo menos, sabe como ela é alterada para solucionar o problema.

Basicamente, o que você deseja é o roteamento de políticas. Você terá duas tabelas de roteamento: uma usará a VPN e a outra não a usará.

Se o script VPN modificar apenas a tabela main , você poderá adicionar outra tabela de roteamento a ser usada para o endereço IP original.

Então, basicamente, antes de lançar a VPN, você duplica o conteúdo de main em outra tabela, por exemplo table 2 (2 é um número arbitrário aqui, veja / etc / iproute2 / rt_tables para definir um apelido de nome) :

ip route add (network)/(prefixlen) dev eth0 src (address) table 2
ip route add default via (gateway) dev eth0 src (address) table 2

Agora, adicione uma regra para usar essa tabela se o seu servidor for acessado por seu endereço IP original da interface eth0 :

ip rule add to (address) iif eth0 table 2

Em seguida, você inicia seu script de VPN.

Em teoria, você deve executar ip rule add antes de adicionar a rota padrão à sua segunda tabela porque, caso contrário, o kernel rejeitará esta regra, dizendo que não pode rotear para o gateway. mas, no seu caso, funcionará bem, pois main já pode direcionar para o gateway.

    
por 19.08.2012 / 23:31