Múltiplas conexões VPN, roteamento baseado no país

2

Eu quero configurar algumas conexões VPN para dois países diferentes, A e B, no meu servidor Ubuntu. Então eu gostaria de configurar regras baseadas no GeoIP para determinar qual conexão VPN deve ser usada quando eu navegar na internet. Se o site que eu navego está no país A, então eu deveria usar a conexão VPN A, se é no país B, então eu deveria usar a conexão B, e se não estiver em nem A nem B, então eu não deveria usar nenhuma das conexões VPN (o padrão deve ser minha conexão DSL).

É possível configurar isso?

    
por Gunnar 14.01.2012 / 20:09

1 resposta

2

Eu não sei de uma solução "pronta para usar" que faz isso de forma totalmente automática e transparente. É possível. O melhor que posso fazer é fornecer um resumo de "alto nível".

Basicamente, você está olhando para um problema de roteamento. Você deseja que o tráfego destinado a sub-redes específicas transite por endereços IP de gateway diferentes. Se você estiver disposto a viver sem uma solução dinâmica, faça o seguinte:

  • Descubra quais sub-redes representam o tráfego em "países diferentes" e qual VPN você quer que eles usem. Digamos, por exemplo, que qualquer coisa em 10.4.0.0/16 esteja em um país diferente e você NÃO queira que ela saia, exceto por meio de uma VPN. Você tem seu modem conectado a eth0 e tem o IP de gateway padrão do seu ISP.
  • Isso é muito mais fácil se seu provedor de VPN usa um protocolo que cria um adaptador de rede virtual para cada VPN (por exemplo, OpenVPN cria uma interface tun0 virtual, o PPTP faz algo semelhante se lembrar corretamente - o IPSec pode fornecer você emite). Digamos que você tenha um provedor baseado no OpenVPN que forneça um arquivo de configuração apropriado e crie um tun0 para você.
  • Use o comando ip route para criar uma nova rota informando que qualquer tráfego que saia do sistema destinado a 10.4.0.0/16 deve sair por meio de tun0 . Você precisa atribuir a métrica adequada aonde ela sempre será usada sobre o seu gateway padrão real.
  • Para ser realmente seguro, convém criar algumas regras iptables que bloqueiam todo o tráfego que sai do seu gateway padrão ( eth0 , sua NIC real) para 10.4.0.0/16. Isso evita vazamentos.
  • Você precisa colocar seus comandos ip route em um script que é executado na inicialização.
  • Faça isso novamente para seu segundo intervalo de IP e VPN.
  • Em seguida, o tráfego não em um desses intervalos de IPs deixará de fora eth0 (ou seja, seu gateway padrão).

Você pode descobrir facilmente o alcance de IP do ISP de um site remoto com whois , a menos que eles usem algum tipo de interface CDN. Se um frontend do CDN for usado, como o Cloudflare, o site parecerá vir de um local totalmente diferente. Nesse caso, é melhor usar um proxy de camada HTTP, como squid , que pode redirecionar o tráfego para IPs diferentes com base no conteúdo da URL.

    
por 14.01.2012 / 22:27