Servidor VPN no Google Compute Engine com OpenVPN

13

Estou tentando usar o servidor do Google Compute Engine como servidor VPN para todo o meu tráfego (estou morando na Rússia, temos alguns problemas de censura aqui).

Há um mini-tutorial sobre VPN no GCE , mas trata-se da rede entre dois servidores dentro do GCE e não com o OpenVPN.

Fiz todas as etapas de outro tutorial, sobre como configurar a VPN com o OpenVPN no Debian , posso conectar-me à VPN a partir do cliente, mas não consigo abrir conexões (nem consigo fazer ping no google). No servidor, posso executar ping e baixar tudo como de costume.

Eu tenho VPN no Linode com a mesma configuração e funciona bem. Portanto, o problema está no roteamento de rede GCE ou nas regras de firewall.

Eu tentei muitas variantes, mas nada funciona. Por favor, veja as configurações e me diga o que devo alterar.

// linhas de configuração removidas, porque o problema foi resolvido //

OZ_
fonte
Existe uma maneira de ativar o encaminhamento de IP? echo 1> / proc / sys / net / ipv4 / ip_forward
Alec Istomin
@AlecIstomin, sim, está feito. Eu tenho VPN no Linode com a mesma configuração e funciona bem. Portanto, o problema está no roteamento de rede GCE ou nas regras de firewall.
OZ_
Talvez peça suporte à GCE? Parece ser o tipo de coisa que eles poderiam responder rapidamente.
Bill Weiss
O preço do @BillWeiss para seus planos de suporte começa em US $ 150 / mês, mas se esse problema não for resolvido em uma semana, acho que vou pagar. Também vou tentar encontrar alguém no oDesk para corrigi-lo e, em seguida, escreverei o tutorial no meu blog.
OZ_
odesk.com/jobs/~01c4b1438a64f31fdd - não hesite em se inscrever, se puder ajudar, pessoal.
OZ_

Respostas:

7

Antes de tudo, obrigado a @Shivox por sua resposta .

E aqui está o rápido como fazer:

  • Eu recomendo que você criar rede adicional (ver guia "Redes" ") preferências de rede In, adicionar regras que permitem: tcp: 22 (se não existir), tcp: 9700, tcp:. 17619 . 17619 aqui é variável - alterá-lo para qualquer porta que você gosta (o intervalo é 9075-65534) .Você só precisa de 3 regras e 2 rotas padrão, nada mais.
  • Vá para "Criar instância do Compute Engine", clique em "Mostrar opções avançadas", permita o encaminhamento de portas, selecione o local do servidor.
  • Agora (quando você selecionou o local), adicione IP estático ao servidor.
  • Selecione a imagem do Ubuntu 14.04 (exatamente esta versão).
  • Criar instância
  • Conecte-se via SSH (maneira mais fácil - use a ferramenta no navegador do painel GCE)
  • sudo su
  • apt-key update && apt-get update && apt-get -y upgrade && apt-get -y install python-software-properties && apt-get -y install software-properties-common && add-apt-repository -y ppa:pritunl && apt-get update && apt-get -y install pritunl
  • No navegador aberto https://instance_ip:9700
  • Na pergunta sobre o banco de dados, clique em "Salvar"
  • Na janela de login, use pritunlcomo nome de usuário e senha
  • Agora mude o nome de usuário e a senha do usuário administrador
  • Adicione organização e dois usuários (para computador e celular)
  • Clique em "Adicionar servidor" na guia "Servidores"
  • Use o número da porta da primeira etapa ( 17619 como exemplo) e o protocolo TCP.
  • Anexar organização ao servidor
  • Iniciar servidor
  • Na guia "Usuários", faça o download das chaves para os dois usuários (arquivos tar com arquivos ovpn dentro).

Eu uso o Viscosity para OS X e o OpenVPN connect for iOS como clientes. Na viscosidade, ative a opção "Enviar todo o tráfego pela conexão VPN" na guia "Rede".

OZ_
fonte
Apenas para observar: o Google Cloud Platform oferece avaliação gratuita com US $ 300 por 60 dias.
OZ_
1
Intructions instalar Pritunl no Ubuntu 14.04 mudou: github.com/pritunl/pritunl#ubuntu-trusty
motobói
6

Você pode resolver o problema de não conseguir navegar na Web pela VPN, apesar de poder executar ping, traceroute ... de uma das duas maneiras a seguir:

Primeiro, você pode usar o protocolo TCP em vez do UDP, alterando 'proto udp' para 'proto tcp' nos arquivos conf do cliente e do servidor.

Segundo, você pode usar o dispositivo de toque em vez do tun, alterando 'dev tun' para 'dev tap' nos arquivos conf do cliente e do servidor.

Não sei ao certo qual é o problema, parece que é um problema do final do Google.

Shivox
fonte
1
Você é meu herói! Muito obrigado! Mudar para TCP fez o truque. Expandirei o "como fazer" em uma resposta separada. Aquele sentimento quando sonho de longa data se torna realidade ... Obrigado!
OZ_
4

Lembre-se de que o Google VPC está descartando pacotes que possuem source_ipoutro IP interno de uma VM com IP externo.

Este documento https://cloud.google.com/compute/docs/vpc/advanced-vpc afirma:

A rede VPC reescreve o cabeçalho IP para declarar o endereço IP externo da instância como a origem. Se a instância não tiver um endereço IP externo, a chamada não será permitida e a rede VPC descartará o pacote sem informar o remetente.

Portanto, se o seu openVPN estiver apenas encaminhando pacotes da outra rede, os pacotes para o público interno serão descartados, pois source_ipnão correspondem ao IP interno de nenhuma VM existente. Por esse motivo, você precisa enviar NAT aos pacotes que saem da sua rede local, por exemplo, no seu nó VPN.

Chain POSTROUTING (policy ACCEPT)
target      prot opt source              destination         
MASQUERADE  all  --  192.168.0.0/16      !192.168.0.0/16

O "Pritunl" mencionado na resposta OZ_ funciona, porque configura o NAT automaticamente.

Piotr Tabor
fonte
3

Esta não é realmente uma resposta, mas o site não me permitiu adicioná-lo como um comentário à sua pergunta.

No entanto, tenho quase exatamente a mesma configuração que você detalhou acima (não configurei o dnsmaq no servidor com firmeza)

Infelizmente, a VPN não está funcionando conforme o esperado. Posso resolver um endereço, executar ping em alguns hosts da Internet e até fazer um rastreamento completo enquanto estiver conectado à VPN. No entanto, quando abro o navegador e navego para um site, a conexão é realmente lenta. Não sei o que pode estar afetando a conexão, mas é realmente um problema estranho.

Talvez alguém do Google possa nos ajudar a saber o que está acontecendo.

PS 1. Como outras pessoas sugeriram antes, você pode verificar se o encaminhamento de IP está ativado? Para mim, a única maneira de garantir que o valor de net.ipv4.ip_forward foi restaurado corretamente após a reinicialização, após o uso de uma regra personalizada no /etc/sysctl.d

Por exemplo, você pode adicionar a regra usando o seguinte comando:

$ sudo echo "net.ipv4.ip_forward = 1" > /etc/sysctl.d/90-useroverrides.conf

PS 2. Se o encaminhamento funcionar para você, você pode testar uma rota de rastreamento para um host externo enquanto estiver conectado à VPN ?. A saída que obtive quando faço isso é um pouco estranha (por que existem vários saltos no mesmo IP ????):

$ sudo traceroute www.yahoo.com -T -p 80 -N 1 -z 0.5 -q 1
traceroute to www.yahoo.com (98.139.183.24), 30 hops max, 60 byte packets
 1  209.85.241.26 (209.85.241.26)  0.764 ms
 2  209.85.241.34 (209.85.241.34)  0.668 ms
 3  209.85.241.26 (209.85.241.26)  0.966 ms
 4  209.85.241.36 (209.85.241.36)  0.702 ms
 5  209.85.241.28 (209.85.241.28)  0.865 ms
 6  209.85.241.36 (209.85.241.36)  0.642 ms
 7  209.85.241.26 (209.85.241.26)  0.921 ms
 8  209.85.241.28 (209.85.241.28)  18.837 ms
 9  72.14.238.107 (72.14.238.107)  13.378 ms
10  72.14.237.131 (72.14.237.131)  38.275 ms
11  209.85.254.131 (209.85.254.131)  13.349 ms
12  *
13  ae-8.pat1.bfz.yahoo.com (216.115.101.231)  44.903 ms
14  ae-4.msr1.bf1.yahoo.com (216.115.100.25)  45.323 ms
15  xe-10-3-1.clr1-a-gdc.bf1.yahoo.com (98.139.232.101)  47.382 ms
16  et18-25.fab6-1-sat.bf1.yahoo.com (98.139.128.103)  45.793 ms
17  po-13.bas1-7-prd.bf1.yahoo.com (98.139.129.209)  41.143 ms
18  ir2.fp.vip.bf1.yahoo.com (98.139.183.24)  42.451 ms

PS 3. A única coisa que parece funcionar corretamente é que a VPN está usando o IP externo do meu host para acessar a Internet.

$ sudo curl --interface tun0 checkip.dyndns.org
<html><head><title>Current IP Check</title></head><body>Current IP Address: 107.178.XXX.XXX</body></html>
Mario
fonte
@OZ_ Fico feliz em saber que agora você pode executar ping e traceroute enquanto estiver conectado à VPN. Agora, você pode postar o resultado de um dos seus traceroute? Estou curioso sobre as primeiras linhas da saída, porque parece que o pacote são encaminhadas em um loop, pelo menos nos primeiros 8 saltos (não sou um especialista em rede, embora)
Mario
desculpe, aqui está: gist.github.com/jamm/028ae858a03e40495740 . E sim, parece estranho. Talvez precisemos de alguma rota específica.
OZ_
1

Você precisa do encaminhamento de IP ativado para sua instância de VM no Google Cloud, caso contrário, os pacotes não alcançarão sua VM. Observe que isso é separado do net.ipv4.ip_forward = 1que você pode definir na sua VM.

O encaminhamento de IP pode ser definido apenas uma vez antes de criar uma VM e não pode ser modificado posteriormente. Para habilitá-lo para uma nova VM, clique em Management, security, disks, networking, sole tenancy: insira a descrição da imagem aqui

Em seguida, na Networkingguia, clique em Network Interfacee defina o Encaminhamento de IP para ON:

insira a descrição da imagem aqui

Pavel P
fonte
0

Você precisa adicionar uma regra que permita o tráfego para o OpenVPN:

iptables -A INPUT -p udp --dport 1194 -j ACCEPT
Paul Rudnitskiy
fonte
existe como regra # 4
OZ_
0

Sobre a rede.

1) Habilite todo o tráfego da sub-rede OpenVPN (por exemplo, 10.8.0.0/24) no console

2) Eu sugiro fortemente que você adicione Masquerade à sua rede

firewall-cmd --zone=trusted --add-masquerade --permanent
firewall-cmd --reload-all

3) Não se esqueça de habilitar o roteamento de pacotes no kernel

a) uma vez

 echo 1 > /proc/sys/net/ipv4/ip_forward

b) para sempre em /etc/sysctl.conf:

 net.ipv4.ip_forward = 1
Mikolas Pansky
fonte