Vários clientes OpenVPN no mesmo host

2

Estou tentando executar dois clientes openvpn no mesmo host (vamos chamar isso de caixa dual client), conectando-se a dois servidores openvpn diferentes. Minha caixa dual client está executando o Ubuntu 10.04, e eu tenho dois aliases ethernet configurados no meu arquivo de interfaces.

Eu quero configurar a caixa dual client de modo que um computador cujo gateway seja configurado como eth0: 0 receba todo o tráfego roteado por meio de um túnel OpenVPN, e um computador cujo gateway esteja definido como eth0: 1 receba todo o tráfego roteado através de um túnel OpenVPN diferente. Eventualmente, eu quero ser capaz de ter vários computadores se conectando à minha caixa dual client, compartilhando esse túnel OpenVPN (mas sem saber uns dos outros).

Trecho do meu arquivo / etc / network / interface:

iface eth0:0 inet static
address 192.168.1.242
netmask 255.255.255.0
broadcast 192.168.1.255
network 192.168.1.1

iface eth0:1 inet static
address 192.168.1.243
netmask 255.255.255.0
broadcast 192.168.1.255
network 192.168.1.1

Eu quero configurar um cliente para rotear através de um alias e o outro cliente para rotear através do outro. Até agora, criei os arquivos de configuração do cliente e disse ao OpenVPN para chamar um & baixo script quando é iniciado / parado.

O OpenVPN é capaz de iniciar e parar corretamente, mas estou tendo problemas com o roteamento, provavelmente devido à minha própria ignorância. Eu tenho uma caixa de teste que estou usando para se conectar à minha caixa dual client, e eu configurei o gateway na caixa de teste para o IP do alias ethernet. Eu sou capaz de ping coisas através da caixa dual client, mas meus pings são roteados de forma estranha - através do gateway principal na caixa dupla, em oposição ao túnel OpenVPN.

root@test-box:~# ping yahoo.com
PING yahoo.com (98.137.149.56) 56(84) bytes of data.
64 bytes from ir1.fp.vip.sp2.yahoo.com (98.137.149.56): icmp_seq=1 ttl=49 time=413 ms
From 192.168.1.133: icmp_seq=2 Redirect Host(New nexthop: 192.168.1.1)

Além disso, meu servidor parece não configurar o dispositivo tun0 corretamente - de acordo com o arquivo de log do OpenVPN, o ifconfig é chamado para definir o endereço tun0, mas quando executo o ifconfig para verificar as configurações do tun0, não há endereço IP atribuído. Eu verifiquei os logs e eles não indicam nenhum problema.

O arquivo de configuração do cliente é assim:

client
dev tun0
proto tcp
remote xxx.xxx.xxx.xxx 1000
resolv-retry infinite
nobind
persist-key
tls-client
tls-remote server
ns-cert-type server
tls-auth ta.key 1
cert acertificate.crt
key akey.key
ca ca.crt
comp-lzo
verb 3
auth-user-pass afile
log-append /var/log/openvpn/openvpn.log
script-security 3 system
up "/etc/openvpn/tun-up-us.sh"
down "/etc/openvpn/tun-down-us.sh"

Meu script acima é assim:

# OpenVPN up script for US
#!/bin/bash
. /usr/local/common/copy-routing-table.sh

# following are the shared variables passed by openvpn
# tun1 1500 1544 10.26.0.2 255.255.255.0 init

# Grab the IP address for the eth0:0 alias
IP_ETH00=$(ifconfig eth0:0 | grep 'inet addr' | sed -e 's/:/ /' | awk '{print $3}')

# Set up routing
copy_routing_table "us_table"
ip route add 10.26.0.0/16 dev eth0:0 src $IP_ETH00 table us_table
ip route add default via $4 table us_table
ip route add 10.26.0.0/16 dev eth0:0 src $IP_ETH00
ip rule add from $IP_ETH00/32 table us_table
ip rule add to $IP_ETH00/32 table us_table
ip route flush cache
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

copy-routing-table.sh copia as entradas da tabela de roteamento principal para o us_table. Copiar a tabela de roteamento principal é indesejável em caso de conflito?

    
por serpah 09.06.2011 / 11:15

2 respostas

0

Você precisaria elaborar um pouco mais o que é que você está tentando fazer. Um esboço com endereços IP dos hosts envolvidos e uma listagem de suas tabelas de roteamento ajudariam muito a entender seu problema.

my server doesn't seem to configure the tun0 device properly

É possível que um comando ifconfig falhe - talvez você deva verificar os registros para isso e publicar os trechos relevantes.

I want to set up the dual client box such that a computer whose gateway is set to eth0:0 gets all their traffic routed through one OpenVPN tunnel, and a computer whose gateway is set to eth0:1 gets all their traffic routed through a different OpenVPN tunnel

ip rule add from $IP_ETH00 table us_table

Essa provavelmente não é a melhor maneira de alcançar o que você realmente quer - o que parece ser rotas diferentes para diferentes clientes. Embora seja possível adicionar regras iptables -t mangle para marcar pacotes para critérios diferentes, não haveria um conjunto de critérios capaz de distinguir entre eth0: 0 e eth0: 1 como interface de entrada (o que se deve à maneira como o aliasing IP é implementado).

O que você pode fazer, no entanto, é simplesmente configurar algo como

ip rule add from <ip-of-your-client-for-the-us-table> table us_table

que eliminaria totalmente a necessidade de aliases de IP em sua configuração, já que a decisão de roteamento seria feita com base nos endereços IP de origem e de destino, independentemente da interface em que o pacote chegasse.

copy_routing_table "us_table"

Você omitiu a fonte de copy_routing_table - se fizer o que eu suspeito, você terá toda a sua tabela de roteamento principal em us_table. Se sua tabela de roteamento principal já contém rotas potencialmente conflitantes com o que você está definindo no script, você pode acabar usando-as em vez de suas rotas recém-adicionadas. Isso é especialmente uma preocupação, já que você está adicionando uma nova rota padrão em seu script:

 ip route add default via $4 table us_table

Como você já tem uma rota padrão na sua tabela "principal" e adiciona outra "via $ 4" (o que é errado BTW, como $ 4 representaria um endereço IP local da própria interface tun do roteador - você deve usar "dev $ 1 "em vez disso) sem excluir a rota antiga. Você deve prefixar ip route del default table us_table aqui - e provavelmente algo semelhante para as outras rotas que você adicionar também.

E isso aqui:

From 192.168.1.133: icmp_seq=2 Redirect Host(New nexthop: 192.168.1.1)

é uma mensagem de 192.168.1.133 que está recebendo o pacote para 98.137.149.56 (yahoo.com) e encaminhando-o para 192.168.1.1. Desde 192.168.1.133 sabe (por avaliação da máscara de rede) que seu host está na mesma rede que 192.168.1.1, você será notificado para usar 192.168.1.1 diretamente em primeiro lugar.

    
por 09.06.2011 / 12:09
2

Se os dois servidores OpenVPN estiverem configurados corretamente para enviar as rotas necessárias para os clientes, você não precisará fazer nada.

Eu recomendaria iniciar uma das conexões primeiro e, em seguida, verificar a tabela de roteamento que agora contém uma rota para a (s) rede (s) atrás desse servidor. Em seguida, inicie a outra conexão e verifique novamente. Se alguma das rotas necessárias estiver faltando, fale com o administrador do sistema para o servidor OpenVPN. Se é você, verifique o seu arquivo de configuração do servidor para comandos push.

    
por 09.06.2011 / 12:34