OpenVPN encadeamento

7

Estou tentando configurar uma "cadeia" do OpenVPN, semelhante ao que é descrito aqui . Eu tenho duas redes separadas, A e B. Cada rede tem um servidor OpenVPN usando uma abordagem padrão "road warrior" ou "client / server". Um cliente pode se conectar a qualquer um para acessar os hosts / serviços na respectiva rede.

Mas os servidores A e B também estão conectados a uns aos outros . Os servidores em cada rede têm uma conexão "site a site" entre os dois.

O que estou tentando realizar é a capacidade de se conectar à rede A como um cliente e, em seguida, fazer conexões com hosts na rede B. Estou usando o tun / roteamento para todas as conexões VPN. A "cadeia" é algo parecido com isto:

[Client]  ---> [Server A] ---> [Server A] ---> [Server B] ---> [Server B] ---> [Host B] 
(tun0) (tun0) (tun1) (tun0) (eth0) (eth0)

A idéia é que o servidor A deve rotear o tráfego destinado à rede B através da VPN "site a site" configurada no tun1 quando um cliente do tun0 tenta se conectar.

Eu fiz isso simplesmente configurando dois perfis de conexão no servidor A. Um perfil é uma configuração de servidor padrão em execução no tun0, definindo uma rede de cliente virtual, um pool de endereços IP, rotas de push etc. O outro é cliente conexão ao Servidor B em execução no tun1. Com o ip_forwarding ativado, eu simplesmente adicionei uma "rota de envio" aos clientes anunciando uma rota para a rede B.

No servidor A, isso parece funcionar quando vejo a saída do tcpdump. Se eu me conectar como cliente e, em seguida, executar ping em um host na rede B, poderei ver o tráfego sendo passado de tun0 para tun1 no Servidor A:

tcpdump -nSi tun1 icmp

O mais estranho é que eu não vejo o Servidor B recebendo esse tráfego pelo túnel. É como se o Servidor A estivesse enviando-o através da conexão site a site como deveria, mas o servidor B está ignorando-o completamente. Quando procuro o tráfego no Servidor B, ele simplesmente não está lá.

Um ping do servidor A - > O host B funciona bem. Mas um ping de um cliente conectado ao Servidor A para o host B não.

Gostaria de saber se o Servidor B está ignorando o tráfego porque o IP de origem não corresponde ao pool de IP do cliente que distribui aos clientes? Alguém sabe se eu preciso fazer algo no Servidor B para ver o tráfego?

Este é um problema complicado de explicar, então obrigado se você ficou comigo até agora.

    
por noderunner 25.06.2013 / 19:38

2 respostas

7

Eu encontrei a solução para isso. Não há necessidade de ter conexões VPN múltiplas / redundantes da maneira descrita na Resposta 1. Nem penso que teria feito qualquer coisa para resolver o meu problema, tanto quanto apreciei o feedback.

O problema se deve ao fato de que um servidor OpenVPN aceitará somente o tráfego IP através do túnel do cliente conectado, se o endereço IP de origem corresponder ao que o servidor atribuiu ao cliente quando o túnel foi estabelecido. O tráfego originado de qualquer outro endereço IP de origem que passar pelo túnel será completamente ignorado pelo servidor.

Veja o seguinte:

10.2.1.15     10.2.0.1/123.123.123.1                                     124.124.124.1/10.1.0.1    10.1.1.20
  (eth0)                   (eth0/eth1)                                                        (eth0/eth1)              (eth0)
----------                   -------------                                                         ------------              ----------
| Host A |-------------| Gateway 1 |------------------------------------------| Gateway 2 |--------| Host B |
----------                   --------------               {INTERNET}                    ----------------          -----------
                              VPN CLIENT                                                     VPN SERVER
                              172.16.1.12                                                        172.16.2.1
                                   (tun0)                                                                (tun0)

Portanto, neste exemplo, "Gateway 1" é o cliente VPN que estabelece um túnel para o "Gateway 2" como o servidor VPN. O que queremos realizar é a capacidade do Host A de se comunicar com o Host B através da VPN. Portanto, configuramos uma conexão padrão do OpenVPN, com o Gateway 1 como um cliente para o servidor do Gateway 2. Cada gateway tem uma interface "pública" e "privada". Um para a rede privada e outro para a Internet pública. Quando a conexão VPN é estabelecida, cada servidor está usando uma interface "tun0" adicional. O Gateway 2, atuando como o servidor VPN, solicita a conexão do gateway 1 e atribui a ele um IP de 172.16.1.12.

O problema é que o Gateway 2 só aceitará tráfego através do túnel VPN se o IP de origem for 172.16.1.12 .

Isso funciona bem quando Gateway 1 quer se conectar ao Host B, mas é um problema quando Host A tenta se conectar ao Host B. Quando o Host A tenta conecte-se, o Gateway 1 atua como um roteador e roteia o tráfego corretamente através do túnel VPN para o Gateway 2 (supondo que você tenha suas rotas configuradas corretamente). Se você executar o tcpdump no dispositivo tun0 do Gateway 1, você verá o tráfego do Host A passando pelo túnel, destinado à outra rede. Mas o Gateway 2 vê o endereço IP de origem como 10.2.1.15 , o qual não corresponde ao endereço IP que ele designou para a conexão, e o ignora completamente.

Portanto, a solução é configurar o Gateway 2 para aceitar o tráfego da rede 10.2.0.0/16 através do túnel VPN. O servidor VPN precisa ser configurado com uma configuração iroute . O procedimento para configurar isto e todos os parâmetros de configuração são explicados no site oficial da OpenVPN aqui então não vou re-explicar isso neste post.

Eu sugiro que quando você ler esta documentação, note que você precisa usar o diretório de configuração do cliente (CCD) em sua configuração OpenVPN para usar iroute . Certifique-se de ler essa parte da documentação com cuidado. Você também precisará, claro, configurar rotas em todos os seus gateways, para que eles saibam como rotear o tráfego através do túnel VPN. Referenciando o diagrama acima, você ainda precisaria adicionar uma rota no Gateway 2 desta forma:

route add -net 10.2.0.0 netmask 255.255.0.0 gw 172.16.1.12 tun0

e no Gateway 1 assim:

route add -net 10.1.0.0 netmask 255.255.0.0 gw 172.16.2.1 tun0

Para que o tráfego do Host B seja roteado adequadamente pela VPN ao tentar se conectar ao Host A.

No meu caso particular, o Gateway 1 está agindo como um cliente para o Gateway 2, mas também como um servidor para outros clientes que se conectam da Internet que precisam de acesso ao Host A. Então, eu precisava criar duas interfaces, tun0 e tun1, para que uma pudesse ser usada para a conexão do cliente com a outra rede, e a outra poderia ser usada como um servidor para os guerreiros da estrada se conectando. Eu também preciso adicionar rotas adicionais , para que eu possa estabelecer uma conexão VPN com o Gateway 1 (servidor) da Internet, e posso rotear o tráfego para o Host B na outra rede.

Espero que isso ajuda os outros que estão confusos sobre isso.

    
por 29.06.2013 / 21:48
3

Eu configurei isso recentemente. A mágica que eu precisava era adicionar comandos de rota corretos no openvpn.confs.

Minha configuração é até um pouco mais complexa que a sua. Eu tenho três sites, que por acaso são regiões EC2: us-east-1 (VA), us-west-1 (CA) e us-west-2 (OR). Cada um tem seu próprio intervalo de IP privado da seguinte forma:

VA 10.1.0.0/16
CA 10.0.0.0/16
OR 10.10.0.0/16

A configuração é OR < = > CA < = > VA, com CA formando um "hub" central.

host vavpn

config va-para-ca.conf

# Sample OpenVPN configuration file using a pre-shared static key
# Port to use: 1194 is the official IANA port number
port 1194

# Use a dynamic tun device.
dev tun

# Remote peer and network
remote 54.241.174.228
route 10.0.0.0 255.255.0.0
route 10.10.0.0 255.255.0.0

# Configure local and remote VPN endpoints
ifconfig 169.254.255.1 169.254.255.2

# The pre-shared static key
secret ovpn.key

# keepalive
keepalive 10 120

host cavpn

config ca-para-va.conf

# Sample OpenVPN configuration file using a pre-shared static key
# Port to use: 1194 is the official IANA port number
port 1195

# Use a dynamic tun device.
dev tun

# Remote peer and network
remote 54.244.21.223
route 10.10.0.0 255.255.0.0

# Configure local and remote VPN endpoints
ifconfig 169.254.255.3 169.254.255.4

# The pre-shared static key
secret ovpn.key

# keepalive
keepalive 10 120

config ca-para-or.conf

# Sample OpenVPN configuration file using a pre-shared static key
# Port to use: 1194 is the official IANA port number
port 1194

# Use a dynamic tun device.
dev tun

# Remote peer and network
remote 54.236.173.50
route 10.1.0.0 255.255.0.0

# Configure local and remote VPN endpoints
ifconfig 169.254.255.2 169.254.255.1

# The pre-shared static key
secret ovpn.key

# keepalive
keepalive 10 120

host orvpn

config ou -a-ca.conf

# Sample OpenVPN configuration file using a pre-shared static key
# Port to use: 1194 is the official IANA port number
port 1195

# Use a dynamic tun device.
dev tun

# Remote peer and network
remote 54.241.174.228
route 10.0.0.0 255.255.0.0
route 10.1.0.0 255.255.0.0

# Configure local and remote VPN endpoints
ifconfig 169.254.255.4 169.254.255.3

# The pre-shared static key
secret ovpn.key

# keepalive
keepalive 10 120

Observe bem os comandos de rota que vão para o outro terminal. Acho que, se você planejar sua rede e todos os IPs em um dos endpoints, você poderá modificar rapidamente meu exemplo para sua topologia.

    
por 25.06.2013 / 20:08

Tags