Conectando-se a um servidor remoto através de uma VPN quando o endereço de sub-rede da rede local entra em conflito com uma rede remota


35

Esta é uma pergunta canônica sobre a solução de conflitos de sub-rede IPv4 entre a rede local de um cliente VPN e uma através do link VPN a partir dela.

Após conectar-se a um local remoto via OpenVPN, os clientes tentam acessar um servidor em uma rede existente em uma sub-rede como 192.0.2.0/24. No entanto, às vezes, a rede na LAN do cliente tem o mesmo endereço de sub-rede: 192.0.2.0/24. Os clientes não conseguem se conectar ao servidor remoto digitando seu IP devido a esse conflito. Eles não conseguem acessar a Internet pública enquanto estiverem conectados à VPN.

O problema é que essa sub-rede 192.0.2.0/24 precisa ser roteada pela VPN, mas também precisa ser roteada como a LAN do cliente.

Alguém sabe como mitigar esse problema? Eu tenho acesso ao servidor OpenVPN.


3
Você pode tentar definir uma rota estática para o endereço / 32 do host que está tentando acessar e usar o ponto de VPN como seu gateway e ver o que acontece.
SpaceManSpiff

se o concentrador vpn respeitar rotas de cliente, sua segurança de perímetro poderá precisar de ajuda. obtenho acesso à lan de contabilidade, adiciono a rota ao intervalo de engenharia e posso conectar sem problemas. firewalls de baixa qualidade como SonicWALL fazer isso
nandoP

@ SpacemanSpiff: Embora isso possa resolver o problema no lado do cliente, o servidor ainda não poderá responder, porque consideraria a conexão como proveniente de sua própria rede, não de um cliente VPN.
Massimo

Respostas:


18

É possível resolver isso usando NAT; simplesmente não é muito elegante.

Portanto, sob a suposição de que você não poderia resolver isso com redes internas com números de rede tão incomuns que nunca entram em conflito, aqui está o princípio:

Como a sub-rede local e a remota têm números de rede idênticos, o tráfego do seu cliente nunca perceberá que precisa passar pelo gateway de túnel para alcançar seu destino. E mesmo se imaginarmos que poderia, a situação seria a mesma para o host remoto, pois está prestes a enviar uma resposta.

Portanto, fique comigo e finja que, até o momento, não há problemas secundários enquanto escrevo que, para uma conectividade completa, você precisará do NAT nas duas extremidades dentro do túnel, a fim de diferenciar os hosts e permitir o roteamento.

Fazendo algumas redes aqui em cima:

  • A rede do seu escritório usa 192.0.2.0/24
  • Seu escritório remoto usa 192.0.2.0/24
  • O gateway VPN da rede do escritório oculta os hosts 192.0.2.0/24 atrás do número de rede NAT 198.51.100.0/24
  • O gateway VPN da rede do escritório remoto oculta os hosts 192.0.2.0/24 atrás do número da rede NAT 203.0.113.0/24

Portanto, dentro do túnel da VPN, os hosts do escritório agora são 198.51.100.xe os hosts do escritório remoto são 203.0.113.x. Além disso, vamos fingir que todos os hosts estão mapeados 1: 1 no NAT de seus respectivos gateways VPN. Um exemplo:

  • O host de rede do escritório 192.0.2.5/24 é mapeado estaticamente como 198.51.100.5/24 no NAT do gateway vpn do escritório
  • O host de rede do escritório remoto 192.0.2.5/24 é mapeado estaticamente como 203.0.113.5/24 no NAT do gateway vpn do escritório remoto

Portanto, quando o host 192.0.2.5/24 no escritório remoto deseja conectar-se ao host com o mesmo ip na rede do escritório, ele precisa fazer isso usando o endereço 198.51.100.5/24 como destino. O seguinte acontece:

  • No escritório remoto, o host 198.51.100.5 é um destino remoto alcançado pela VPN e roteado para lá.
  • No escritório remoto, o host 192.0.2.5 é mascarado como 203.0.113.5 quando o pacote passa na função NAT.
  • No escritório, o host 198.51.100.5 é convertido para 192.0.2.5 quando o pacote passa na função NAT.
  • No escritório, o tráfego de retorno para o host 203.0.113.5 passa pelo mesmo processo na direção reversa.

Portanto, embora exista uma solução, há vários problemas que devem ser abordados para que isso funcione na prática:

  • O IP mascarado deve ser usado para conectividade remota; O DNS fica complexo. Isso ocorre porque os pontos de extremidade devem ter um endereço IP exclusivo, conforme exibido no host de conexão.
  • Uma função NAT deve ser implementada nos dois extremos como parte da solução VPN.
  • O mapeamento estatístico de hosts é essencial para a acessibilidade do outro lado.
  • Se o tráfego for unidirecional, apenas a extremidade receptora precisará de mapeamento estático de todos os hosts envolvidos; o cliente pode se livrar da NAT dinamicamente, se desejar.
  • Se o tráfego for bidirecional, as duas extremidades precisam de mapeamento estático de todos os hosts envolvidos.
  • A conectividade com a Internet não deve ser prejudicada, independentemente da VPN dividida ou não dividida.
  • Se você não pode mapear 1 para 1, fica confuso; escrituração cuidadosa é uma necessidade.
  • Naturalmente, corre-se o risco de usar endereços NAT que também se tornam duplicados :-)

Portanto, resolver isso precisa de um design cuidadoso. Se o seu escritório remoto realmente é formado por guerreiros da estrada, você adiciona uma camada de problemas:

  • eles nunca sabem de antemão quando acabam com IDs líquidos sobrepostos.
  • o NAT do gateway do escritório remoto precisaria ser implementado em seus laptops.
  • o gateway do escritório precisaria de duas VPNs, uma sem NAT e uma NAT, para cobrir os dois cenários. Caso contrário, no caso de alguém escolher uma das sub-redes que você escolheu para o método NAT, as coisas não funcionariam .

Dependendo do seu cliente VPN, você poderá selecionar automaticamente uma VPN ou outra, dependendo do endereço de rede do segmento local.

Observe que todas as menções ao NAT nesse contexto denotam uma função NAT que, por assim dizer, ocorre na perspectiva do túnel. Em termos processuais, o mapeamento estático de NAT deve ser feito antes que o pacote "entre" no túnel, ou seja, antes de ser encapsulado no pacote de transporte, que deve levá-lo pela Internet até o outro gateway VPN.

Isso significa que não se deve confundir os endereços IP públicos dos gateways VPN (e que, na prática, também podem ser NAT: ed, mas totalmente fora da perspectiva de transporte para o site remoto por VPN) com os endereços privados exclusivos usados ​​como disfarces. para os endereços particulares duplicados. Se essa abstração é difícil de visualizar, é apresentada aqui uma ilustração de como o NAT pode ser fisicamente separado do gateway VPN para esse fim:
Uso do NAT em redes sobrepostas .

Condensar a mesma imagem a uma separação lógica dentro de uma máquina, capaz de executar a funcionalidade de gateway NAT e VPN, está simplesmente dando o mesmo exemplo um passo adiante, mas coloca mais ênfase nos recursos do software em questão. Hackear junto com, por exemplo, OpenVPN e iptables e postar a solução aqui seria um desafio digno.

Em termos de software, certamente é possível:
PIX / ASA 7.xe posterior: VPN IPsec de LAN para LAN com exemplo de configuração de redes sobrepostas
e:
Configurando um túnel IPSec entre roteadores com sub-redes de LAN duplicadas

Portanto, a implementação real depende de muitos fatores, dos sistemas operacionais envolvidos, do software associado e de suas possibilidades. Mas certamente é factível. Você precisaria pensar e experimentar um pouco.

Eu aprendi isso com a Cisco, como visto pelos links.


O NAT poderia funcionar também com muitas conexões VPN e suas traduções? Eu não entendi completamente o caso aqui. Eu tenho um tópico aqui unix.stackexchange.com/q/284696/16920 sobre Como fazer VPN site a site com sub-redes sobrepostas Unix-Way?
Léo Léopold Hertz,

17

Se você precisar de uma solução temporária suja temporária para um ou vários servidores conhecidos, a solução mais simples deve ser a opção de roteamento estático do lado do cliente.

No meu caso, adicionei meu servidor de destino desejado (192.168.1.100) à minha tabela de roteamento no meu cliente linux via:

route add 192.168.1.100 dev tun0

Depois, remova esta rota estática com o comando route delete.


2
Esta é uma solução perfeita e um timing ainda perfeito! :)
Yuval A

Quanto tempo isso persiste? Até você desconectar? Até reiniciar?
31717

1
No meu sistema linux (xfce com ubuntu / mint) as configurações são "perdidas" após uma desconexão de VPN e, sim, após uma reinicialização também. Você pode verificar se a configuração está ativo com o comando route (haverá uma entrada com o ip eo dispositivo tun0 geralmente na parte inferior)
Aydin K.

A versão OSX de percurso leva a interface de forma diferente, em vez de dev tun0você precisa-interface tun0
Sirens

5

Sim, este é o pior. para mim, isso acontecia o tempo todo em quartos de hotel, antes que os administradores de VPN percebessem que deveriam usar intervalos de IP mais obscuros. 10.0.0.0/24 e 10.1.1.1/24 são os piores. se você puder ajudá-lo a nunca conectar uma rede sem fio assim.

portanto, a resposta é "consertar" o wap para usar uma rede interna diferente (por exemplo, 10.255.255.0/24) e fornecer uma concessão diferente (por exemplo, ip em um intervalo que possa rotear de volta para corp vpn), ou se você não tiver / não consigo obter administrador no wap, basta ir para a starbucks. ou 20 minutos de wardriving :)

se isso for apenas em um ambiente de laboratório, use intervalos diferentes.


Dang realmente? Não existe melhor opção?
26413 John Russell

1
não que eu saiba .... isso sempre foi um problema ... parece que alguém votou negativamente na minha resposta, mas na verdade não sugeriu uma solução .... ha matou o mensageiro!
NandoP

3

Estou em um Mac rodando El Capitan. Embora as sugestões acima não tenham funcionado para mim, elas me levaram a uma solução funcional:

  1. antes de iniciar a VPN, execute ifconfig
  2. inicie a VPN, faça ifconfige observe qual é a nova interface. No meu caso, era ppp0 com um endereço IP 192.168.42.74

    ppp0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1280
        inet 192.168.42.74 --> 192.0.2.1 netmask 0xffffff00
    
  3. digitar:

    sudo route add 192.168.1.79  192.168.42.74
    

Testei primeiro com um pinge depois provei que funcionava acessando o servidor git.

Quando tentei usar o dev ppp0 para o final do comando route, como mencionado acima, ele reclamou.


2
O que está 192.168.1.79vindo nessa troca?
31717

O servidor de destino ao qual você está se conectando. Este servidor reside na mesma rede que sua VPN, não na sua conexão local.
Carlo del Mundo

1

Eu tenho uma solução simples que estou usando em um espaço de trabalho conjunto com um intervalo de IP conflitante (10.x)

Conectei-me à rede com meu telefone celular e compartilhei a conexão de rede via bluetooth com meu laptop. Agora posso usar a VPN para meu empregador remoto.

Tenho certeza de que isso funcionará da mesma forma via USB, se você precisar de uma conexão mais rápida.


1
Ei, essa é realmente uma solução muito inteligente.
Nathan Osman

1

Se você só precisa acessar alguns ou um endereço IP, adicione a instrução route ao seu arquivo de configuração ovpn assim:

rota 192.168.1.10 255.255.255.255

rota 192.168.1.11 255.255.255.255

Ele adicionará uma rota apenas para os IPs quando você conectar o seu VPN e o removerá quando o VPN desconectar.

Funcionou para mim no Windows de qualquer maneira.


1

A resposta de Aydin K. é para linux. Se você deseja a mesma funcionalidade para o Windows, digite

route ADD 192.168.1.10 <IP of tunnel adapter>

ou

route ADD 192.168.1.10 IF <interface id>

você pode obter o ID da interface com o comando:

route print

0

Apenas como lembrete: todo esse problema se deve a anos de escassez de endereços IPv4 e ao uso extensivo do intervalo de IP privado por trás do NAT para solucionar essa escassez!

A solução ideal e definitiva para esse problema é bastante direta (embora possa e demore algum tempo para ser implementada globalmente): IPv6 ...

Em um mundo IPv6, não há escassez pública de IP (e não haverá evento em algumas décadas). Portanto, não há razão para não ter um IP público em todos os dispositivos de todas as redes. E se você precisar de isolamento de rede, continue filtrando com um firewall, mas sem o NAT feio ...

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.