VPN dupla em um clique. Como dividir facilmente o endereço IP de um ponto de entrada e saída



TL; DR Este artigo descreve a maneira mais fácil de configurar um servidor VPN, cujo endereço IP para conectar clientes VPN é diferente do endereço IP do qual os clientes acessam a Internet.

Você usa uma VPN para proteger a privacidade na Internet e aluga seu próprio servidor para isso? Você é o único cliente que se conecta a este servidor em todo o mundo? É tão difícil encontrar o seu endereço IP real, você acha? Com a entrada em vigor do pacote Spring, torna-se muito mais fácil.

A VPN dupla é um tópico popular em torno do qual há muita especulação. Geralmente, esse termo é chamado de tecnologia completamente diferente, mas quase sempre significa conexão à Internet e pontos de saída espaçados no nível dos endereços IP. Consideraremos a maneira mais fácil de configurar um servidor VPN nesse modo, que não requer configuração adicional no lado do servidor e permite obter a velocidade máxima e a latência mais baixa.

Modelo de ameaça


Para se proteger de algo, você precisa entender claramente o modelo de ameaça. Não discutiremos novas leis que exigem que os provedores armazenem todo o tráfego do cliente, mas podemos dizer definitivamente que os dados de conexão, os chamados Netflow, o armazenamento é bastante simples, e isso é feito há muito tempo. Ou seja, o fato de conectar um endereço IP condicional 1.1.1.1 ao endereço 2.2.2.2 em um determinado horário do dia é registrado.

Tendo acesso a essas informações na escala do provedor, cidade ou país, basta estabelecer quem está escondido atrás da VPN.

Para aumentar o nível de privacidade ao usar uma VPN, é necessário separar o ponto de conexão e o ponto de acesso à Internet no nível IP. Na foto acima, nosso usuário está atrás da cerca sob o escrutínio de Irina Yarovoy. Todas as conexões que passam pela cerca, Irina se lembra estritamente. O usuário, como cidadão decente, conecta-se ao endereço good.citizen.vpn , enquanto volta ao endereço super.cool.guy.vpn . Como resultado, para Irina, essas duas conexões parecem desconectadas.

O que são VPNs duplas?


Sob o nome de VPN "dupla", muitas vezes são entendidas coisas diferentes, mas quase sempre significa nós de conexão e acesso à Internet espaçados geograficamente ou no nível da rede. Às vezes, é apenas um truque de marketing dos provedores de VPN, o que significa absolutamente nada, esses serviços podem ser chamados de VPNs "triplos" e "quádruplos".

Analisaremos os esquemas mais típicos usados ​​na prática.

VPN entre servidores


A maneira mais comum. Nesse modo, o cliente estabelece uma conexão VPN apenas para o primeiro servidor. O túnel para o segundo está configurado no primeiro servidor e todo o tráfego do cliente vai para o segundo servidor, e assim por diante. Pode haver vários servidores intermediários. Nesse caso, o túnel entre os servidores pode ser instalado usando qualquer outro protocolo que não seja o protocolo através do qual o cliente está conectado, por exemplo, IPsec ou sem criptografia, como GRE ou IPIP. Nesse modo, todos os servidores intermediários podem ser vistos no rastreamento de rota . Não há como verificar exatamente como os servidores intermediários do lado do cliente estão conectados, para que você possa confiar apenas no provedor.

Durante a rota de tráfego, o MTU mínimo (unidade máxima de transmissão) permanece igual ao valor do primeiro túnel e cada servidor intermediário tem acesso ao tráfego de cliente descriptografado .



VPN através de proxy


Também é uma maneira bastante comum. Geralmente usado para mascarar o tráfego VPN sob um protocolo diferente, por exemplo, na China. Esse método é mais conveniente do que uma cadeia de proxies, porque, usando uma VPN, é fácil rotear todo o tráfego do sistema para o túnel. Também existem ferramentas para interceptar chamadas de sistema de programas e redirecioná-las para proxies: ProxyCap, Proxifier, mas são menos estáveis ​​porque às vezes perdem solicitações e ignoram o proxy ou funcionam incorretamente com alguns programas.

Nesse modo, o servidor proxy não é visível no rastreamento de rota.



VPN dentro da VPN


A maneira mais paranóica e lenta: todos os túneis sobem no lado do cliente, um dentro do outro. Esse método requer uma configuração astuta de rotas no lado do cliente e o lançamento de todos os clientes VPN na ordem certa. Isso é ruim para a latência e o desempenho, mas os servidores intermediários não têm acesso ao tráfego aberto do cliente. Todas as despesas gerais de encapsulamento são resumidas e o tamanho máximo de pacote (MTU) que está finalmente disponível para o cliente diminui dependendo do número de túneis. Servidores intermediários não são visíveis no rastreamento de rota.



Configurar VDS


A maneira mais fácil de configurar uma VPN com pontos de entrada e saída divididos é conectar vários endereços IP a um único servidor virtual. Este método permite obter velocidade máxima e atrasos mínimos, pois, na verdade, o tráfego é finalizado em um único servidor. No Vdsina.ru, você pode fazer isso sozinho no painel de controle. Enquanto o IPv4 termina em qualquer lugar, emitimos endereços IP adicionais, mesmo nos servidores, por 60 rublos!

Analisaremos a configuração do servidor passo a passo.

Escolha um servidor


Solicitamos o VDS com uma tarifa adequada, no data center necessário. Dada a nossa tarefa, escolheremos um data center mais distante, na Holanda;)



Conecte um endereço IP adicional


Depois de comprar um endereço IP adicional, é necessário configurá-lo de acordo com as instruções .



Para maior clareza, atribua um registro PTR ao IP. Este é o nome do domínio que ficará visível quando o endereço IP for convertido novamente em um domínio. Pode ser qualquer valor, incluindo um domínio inexistente.

Por exemplo, usaremos os seguintes valores:

 xxx.xxx.38.220 — super.cool.guy.vpn #   ( ) xxx.xxx.39.154 — good.citizen.vpn #   ( ) 



Verificação de dois IP


É importante lembrar que o endereço IP que foi originalmente definido no servidor será o ponto de saída, portanto o novo endereço será o ponto de entrada. Conecte via SSH ao servidor e verifique qual endereço é usado como externo.

Para fazer isso, é mais fácil usar o serviço ifconfig.co no console. Ao solicitar via curl, ele retorna o endereço IP a partir do qual a solicitação foi feita.

 $ curl ifconfig.co xxx.xxx.38.220 

Os últimos números mostram que nosso endereço externo realmente corresponde ao ponto de saída. Vamos tentar verificar a operação correta do segundo IP como um ponto de entrada. Para fazer isso, basta usar a função de proxy SOCKS embutida no SSH.

Os comandos são executados no cliente:

 ssh -D 9999 root@good.citizen.vpn #    curl -x socks5h://127.0.0.1:9999 ifconfig.co super.cool.guy.vpn 

O primeiro comando configura uma sessão SSH com o endereço good.citizen.vpn e ativa simultaneamente um proxy SOCKS dentro desta sessão, disponível na porta local. O segundo faz uma solicitação HTTP normal por meio desse proxy.
É importante lembrar que nossos exemplos usam nomes de domínio fictícios para consultas. Eles serão exibidos apenas com uma resolução PTR e uma solicitação completa para eles não pode ser feita. Portanto, nesta fase, você precisa acessar o servidor através do endereço IP.

Configuração do servidor IKEv2




O IPsec IKEv2 é um protocolo VPN moderno suportado por quase todos os sistemas operacionais prontos para uso. É usado como o protocolo padrão no Windows, macOS e iOS. Ao mesmo tempo, não requer a instalação de software de terceiros e, na maioria dos casos, funciona mais rápido que o OpenVPN. Já havia artigos sobre a configuração do servidor IKEv2 no hub , mas todos descrevem o uso de certificados autoassinados e são inconvenientes, pois exigem a instalação do certificado raiz no lado do cliente VPN.

Analisaremos um exemplo de configuração do servidor usando um certificado confiável do Let's Encrypt. Isso permite que você não instale certificados raiz externos para o cliente, mas emita apenas um nome de usuário e senha.

Preparação do servidor


Usaremos um servidor baseado no Ubuntu 18.04, mas a instrução também é adequada para a maioria das distribuições modernas.

Atualizamos o sistema e instalamos os pacotes necessários

 apt update && apt upgrade apt install certbot strongswan libstrongswan-extra-plugins 

Emissão do certificado


Para emitir um certificado confiável, você precisa direcionar o domínio real para o endereço IP do ponto de entrada. Não consideraremos esse item em detalhes, pois está além do escopo do artigo. Como exemplo, usaremos o domínio fictício good.citizen.vpn

Se você já possui um servidor Web no servidor, use o método apropriado para emitir o certificado através do certbot ou outro cliente para o Let's Encrypt. Este exemplo assume que a porta HTTP (80) não está ocupada.

 certbot certonly --standalone --agree-tos -d good.citizen.vpn 

Respondendo às perguntas do assistente? receberemos um certificado e uma chave assinados

 # find /etc/letsencrypt/live/good.citizen.vpn/ /etc/letsencrypt/live/good.citizen.vpn/ /etc/letsencrypt/live/good.citizen.vpn/fullchain.pem /etc/letsencrypt/live/good.citizen.vpn/README /etc/letsencrypt/live/good.citizen.vpn/cert.pem /etc/letsencrypt/live/good.citizen.vpn/privkey.pem /etc/letsencrypt/live/good.citizen.vpn/chain.pem 

Para autenticação do servidor IKEv2, os mesmos certificados X.509 são usados ​​como para
Https Para que o Strongswan possa usar esses certificados, eles devem ser copiados para a pasta /etc/ipsec.d.

Veja como os certificados devem estar localizados:

 cp /etc/letsencrypt/live/good.citizen.vpn/cert.pem /etc/ipsec.d/certs/ cp /etc/letsencrypt/live/good.citizen.vpn/privkey.pem /etc/ipsec.d/private/ cp /etc/letsencrypt/live/good.citizen.vpn/chain.pem /etc/ipsec.d/cacerts/ 

Como os certificados letsencrypt são reemitidos com frequência, fazê-lo manualmente é inconveniente. Portanto, automatizamos esse processo usando o gancho para certbot.

A tarefa do script é copiar três arquivos para a pasta desejada sempre que o certificado for atualizado e, em seguida, enviar o comando strongswan para reler os certificados.

Crie o arquivo /etc/letsencrypt/renewal-hooks/deploy/renew-copy.sh e torne-o executável.

 #!/bin/sh set -e for domain in $RENEWED_DOMAINS; do case $domain in good.citizen.vpn) daemon_cert_root=/etc/ipsec.d/ # Make sure the certificate and private key files are # never world readable, even just for an instant while # we're copying them into daemon_cert_root. umask 077 cp "$RENEWED_LINEAGE/cert.pem" "$daemon_cert_root/certs/" cp "$RENEWED_LINEAGE/chain.pem" "$daemon_cert_root/cacerts/" cp "$RENEWED_LINEAGE/privkey.pem" "$daemon_cert_root/private/" # Reread certificates /usr/sbin/ipsec reload /usr/sbin/ipsec purgecerts /usr/sbin/ipsec rereadall ;; esac done 

Agora, após cada reemissão do certificado, o script copiará os novos arquivos para as pastas strongswan e enviará um comando ao daemon para reler os certificados.

Configuração do Strongswan


Adicione a configuração strongswan /etc/ipsec.conf

 config setup #       uniqueids=no # Increase debug level # charondebug = ike 3, cfg 3 conn %default #       ike=aes256-sha256-modp1024,aes256-sha256-modp2048 #  ""  dpdaction=clear dpddelay=35s dpdtimeout=2000s keyexchange=ikev2 auto=add rekey=no reauth=no fragmentation=yes #compress=yes # left - local (server) side leftcert=cert.pem #      /etc/ipsec.d/certs/ leftsendcert=always #    leftsubnet=0.0.0.0/0 # right - remote (client) side eap_identity=%identity #   IP-  VPN- rightsourceip=10.0.1.0/24 rightdns=8.8.8.8,1.1.1.1 # Windows and BlackBerry clients usually goes here conn ikev2-mschapv2 rightauth=eap-mschapv2 # Apple clients usually goes here conn ikev2-mschapv2-apple rightauth=eap-mschapv2 leftid=good.citizen.vpn 

Logins e senhas de clientes VPN são definidos no arquivo /etc/ipsec.secrets

Nesse arquivo, você também precisa especificar o nome da chave privada que copiamos anteriormente da pasta letsencrypt:

 #       /etc/ipsec.d/private/ : RSA privkey.pem #  VPN #  : EAP "" IrinaYarovaya : EAP "PleaseLoveMe123" Mizooleena : EAP "IwannaLoveToo3332" 

Nesta fase, você pode reiniciar o servidor strongswan e verificar se a nova configuração foi ativada:

 $ systemctl restart strongswan $ ipsec statusall Virtual IP pools (size/online/offline): 10.0.1.0/24: 254/0/0 Listening IP addresses: xxx.xxx.38.220 Connections: ikev2-mschapv2: %any...%any IKEv2, dpddelay=35s ikev2-mschapv2: local: [CN=good.citizen.vpn] uses public key authentication ikev2-mschapv2: cert: "CN=good.citizen.vpn" ikev2-mschapv2: remote: uses EAP_MSCHAPV2 authentication with EAP identity '%any' ikev2-mschapv2: child: 0.0.0.0/0 === dynamic TUNNEL, dpdaction=clear ikev2-mschapv2-apple: %any...%any IKEv2, dpddelay=35s ikev2-mschapv2-apple: local: [good.citizen.vpn] uses public key authentication ikev2-mschapv2-apple: cert: "CN=good.citizen.vpn" ikev2-mschapv2-apple: remote: uses EAP_MSCHAPV2 authentication with EAP identity '%any' ikev2-mschapv2-apple: child: 0.0.0.0/0 === dynamic TUNNEL, dpdaction=clear 

Você pode ver que a configuração foi ativada com sucesso e o certificado está conectado. Nesta fase, você já pode se conectar ao servidor VPN, mas será sem acesso à Internet. Para liberar clientes na Internet, você precisa habilitar o encaminhamento e configurar o NAT.

Configuração NAT


Ativamos pacotes de encaminhamento:

 echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf sysctl -p 

Ligue o NAT. É importante ter em mente que este é apenas um exemplo de uma configuração mínima de iptables. Personalize o restante das regras de acordo com suas necessidades.

ethName0 - substitua pelo nome da sua interface
10.0.1.0/24 - o intervalo de endereços IP que serão emitidos para clientes VPN. Pedimos no /etc/ipsec.conf
111.111.111.111 - o endereço IP do ponto de saída; em nosso exemplo, é o endereço super.cool.guy.vpn

 iptables -t nat -A POSTROUTING -s 10.0.1.0/24 -o ethName0 -j SNAT --to-source 111.111.111.111 

Depuração


Nesse estágio da configuração, devemos obter um servidor totalmente funcional, ao qual os clientes já possam se conectar. Antes de prosseguir, é melhor verificar isso verificando a conexão.

Em caso de problemas de conexão, você pode assistir ao log em tempo real:

 journalctl -f -u strongswan 

Inicialização na inicialização


Se tudo der certo, você pode adicionar o strongswan à inicialização na inicialização:

 systemctl enable strongswan 

Salvando regras do iptables


Para salvar as regras do iptables após a reinicialização, existe um pacote iptables-persistent especial. É importante lembrar que ele salvará o conjunto de regras atual e o adicionará à inicialização.

 apt install iptables-persistent 

Configuração do cliente


A configuração no lado do cliente é extremamente simples - basta informar ao cliente o endereço do servidor, o nome de usuário e a senha. Para macOS e iOS, você pode criar perfis de configuração automática que serão suficientes para ativar em dois cliques.

Configuração do Windows
Nas novas versões do Windows, o IKEv2 é configurado em um assistente simples, que pode ser acessado no menu de conexão WiFi.



O Windows não define uma rota padrão para essa conexão, portanto a instalaremos manualmente. Nas propriedades da conexão VPN, vá para as propriedades de TCP / IPv4 -> adicionalmente e marque a caixa "Usar um gateway em uma rede remota"


clicável

Configuração do MacOS
O MacOS suporta o IKEv2 a partir da versão 10.11 (El Capitan). A conexão é criada através do menu de configurações de rede.

imagem

Adicione uma nova conexão. O nome da conexão é qualquer nome arbitrário.

imagem

Para autenticar um certificado, você deve especificar um nome de domínio. Ao mesmo tempo, no campo "Endereço do servidor", você pode especificar o endereço IP do servidor e o domínio apenas em "ID remota", a resolução do DNS não será executada para a conexão e acontecerá um pouco mais rápido.

imagem

O nome do usuário e a senha são especificados no arquivo /etc/ipsec.secrets

imagem

Configuração do IOS
A configuração do IOS pode ser feita manualmente por meio do assistente, mas é muito mais conveniente usar o perfil de configuração automática mobileconfig.

O ajuste manual é semelhante em significado ao macOS da área de trabalho:

Configurações -> VPN -> Adicionar configuração da VPN

Perfil de configuração automática para dispositivos Apple

Perfis de configuração automática .mobileconfig é um arquivo de configuração XML que pode configurar qualquer coisa, de certificados SSL a conexões VPN.

Basta que o usuário clique no arquivo e todas as configurações necessárias serão instaladas automaticamente.

Exemplo de configuração para conectar-se ao nosso servidor IKEv2.
Para configurar um arquivo para sua configuração, basta editar alguns parâmetros neste modelo:

AuthName - nome de usuário do arquivo /etc/ipsec.secrets
AuthPassword - senha do usuário /etc/ipsec.secrets
RemoteAddress - endereço IP do domínio ou do servidor
RemoteIdentifier - domínio para o qual o certificado é emitido

 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>PayloadContent</key> <array> <dict> <key>IKEv2</key> <dict> <!-- Username and password from ipsec.secrets --> <key>AuthName</key> <string>IrinaYarovaya</string> <key>AuthPassword</key> <string>PleaseLoveMe123</string> <!-- Hostname or IP address of VPN server. Chosing IP address instead of DNS name can avoid issues with client DNS resolvers and speed up connection process. --> <key>RemoteAddress</key> <string>123.123.123.123</string> <!-- leftid in ipsec.conf --> <key>RemoteIdentifier</key> <string>good.citizen.vpn</string> <key>AuthenticationMethod</key> <string>Certificate</string> <key>ChildSecurityAssociationParameters</key> <dict> <!-- in ipsec.conf this proposal is: ike=aes256-sha256-modp2048 --> <key>DiffieHellmanGroup</key> <integer>14</integer> <key>EncryptionAlgorithm</key> <string>AES-256</string> <key>IntegrityAlgorithm</key> <string>SHA2-256</string> <key>LifeTimeInMinutes</key> <integer>1440</integer> </dict> <key>DeadPeerDetectionRate</key> <!-- None (Disable) Low (keepalive sent every 30 minutes) Medium (keepalive sent every 10 minutes) High (keepalive sent every 1 minute) --> <string>High</string> <key>ExtendedAuthEnabled</key> <true/> <key>IKESecurityAssociationParameters</key> <dict> <key>DiffieHellmanGroup</key> <integer>14</integer> <key>EncryptionAlgorithm</key> <string>AES-256</string> <key>IntegrityAlgorithm</key> <string>SHA2-256</string> <key>LifeTimeInMinutes</key> <integer>1440</integer> </dict> <!-- Always On OnDemand Rule Cen be disabled in connection preferences by "On Demand" checkbox http://www.v2ex.com/t/137653 https://developer.apple.com/library/mac/featuredarticles/iPhoneConfigurationProfileRef/Introduction/Introduction.html https://github.com/iphoting/ovpnmcgen.rb --> <key>OnDemandEnabled</key> <integer>1</integer> <key>OnDemandRules</key> <array> <dict> <key>Action</key> <string>Connect</string> </dict> </array> </dict> <key>IPv4</key> <dict> <key>OverridePrimary</key> <integer>1</integer> </dict> <key>PayloadDescription</key> <string>Configures VPN settings</string> <key>PayloadDisplayName</key> <string>VPN</string> <key>PayloadIdentifier</key> <string>com.apple.vpn.managed.96C1C38F-D4D6-472E-BA90-9117ED8896B5</string> <key>PayloadType</key> <string>com.apple.vpn.managed</string> <key>PayloadUUID</key> <string>96C1C38F-D4D6-472E-BA90-9117ED8896B5</string> <key>PayloadVersion</key> <integer>1</integer> <!-- VPN connection name in Network Preferences --> <key>UserDefinedName</key> <string>London VPN</string> <key>VPNType</key> <string>IKEv2</string> </dict> </array> <!-- Set the name to whatever you like, it is used in the profile list on the device --> <key>PayloadDisplayName</key> <string>My Super IKEv2 VPN</string> <!-- A reverse-DNS style identifier (com.example.myprofile, for example) that identifies the profile. This string is used to determine whether a new profile should replace an existing one or should be added. --> <key>PayloadIdentifier</key> <string>vpn.googd.citizen</string> <!-- A globally unique identifier, use uuidgen on Linux/Mac OS X to generate it --> <key>PayloadUUID</key> <string>F3FAD91C-019C-4A79-87A1-CF334C583339</string> <key>PayloadType</key> <string>Configuration</string> <key>PayloadVersion</key> <integer>1</integer> </dict> </plist> 

Configuração do Android
Infelizmente, o Android é o único dos sistemas operacionais populares que ainda não possui suporte interno para o IKEv2. Para se conectar, você pode usar o cliente oficial do Strongswan do PlayMarket

Sumário


Mostramos a opção mais simples de configuração do servidor com pontos de entrada e saída espaçados. Essa configuração permite obter a velocidade máxima da VPN, pois ela não usa túneis adicionais entre os servidores, apesar de os endereços IP dos pontos de entrada e saída estarem em sub-redes diferentes. Essa abordagem permite que você experimente mais, conectando mais de dois endereços IP ao servidor.

O protocolo IKEv2 é perfeito para usá-lo no sistema operacional da área de trabalho para o dia a dia, pois é mais nativamente integrado ao sistema e, sendo todas as outras coisas iguais, permite obter mais velocidade do que através de programas VPN de terceiros.





Inscreva-se no nosso desenvolvedor do Instagram


Source: https://habr.com/ru/post/pt469879/


All Articles