Como Configurar um Servidor VPN IKEv2 com StrongSwan no Ubuntu 22.04

Introdução

A virtual private network, or VPN, allows you to securely encrypt traffic as it travels through untrusted networks, such as those at the coffee shop, a conference, or an airport.

Internet Key Exchange v2, ou IKEv2, é um protocolo que permite o túnel direto IPSec entre o servidor e o cliente. Nas implementações de VPN IKEv2, IPSec fornece criptografia para o tráfego de rede. O IKEv2 é nativamente suportado em algumas plataformas (OS X 10.11+, iOS 9.1+ e Windows 10) sem a necessidade de aplicativos adicionais, e ele lida com interrupções do cliente de forma bastante suave.

Neste tutorial, você irá configurar um servidor VPN IKEv2 utilizando StrongSwan em um servidor Ubuntu 22.04. Em seguida, aprenderá como se conectar a ele com clientes Windows, macOS, Ubuntu, iOS e Android.

Pré-requisitos

Para concluir este tutorial, você precisará de:

Passo 1 — Instalando o StrongSwan

Primeiro, você instalará o StrongSwan, um daemon IPSec de código aberto que você configurará como seu servidor VPN. Você também instalará o componente de infraestrutura de chave pública (PKI) para que possa criar uma Autoridade de Certificação (CA) para fornecer credenciais para sua infraestrutura.

Comece atualizando o cache de pacotes local:

  1. sudo apt update

Em seguida, instale o software digitando:

  1. sudo apt install strongswan strongswan-pki libcharon-extra-plugins libcharon-extauth-plugins libstrongswan-extra-plugins

O pacote adicional libcharon-extauth-plugins é usado para garantir que vários clientes possam se autenticar em seu servidor usando um nome de usuário e frase secreta compartilhados. O pacote libstrongswan-extra-plugins está incluído para que o Strongswan suporte suites de cifra de curva elíptica que usem a suíte de criptografia Curve25519.

Agora que tudo está instalado, avance para a criação de seus certificados.

Passo 2 — Criando uma Autoridade de Certificação

Um servidor IKEv2 requer um certificado para se identificar aos clientes. Para ajudar a criar o certificado necessário, o pacote strongswan-pki vem com um utilitário chamado pki para gerar uma Autoridade de Certificação e certificados de servidor.

Para começar, crie alguns diretórios para armazenar todos os recursos com os quais você estará trabalhando. A estrutura de diretórios corresponde a alguns dos diretórios em /etc/ipsec.d, onde você eventualmente moverá todos os itens que criar:

  1. mkdir -p ~/pki/{cacerts,certs,private}

Em seguida, restrinja as permissões para que nossos arquivos privados não possam ser vistos por outros usuários:

  1. chmod 700 ~/pki

Agora que você tem uma estrutura de diretórios para armazenar tudo, pode gerar uma chave raiz. Esta será uma chave RSA de 4096 bits que será usada para assinar o certificado de Autoridade de Certificação raiz:

Execute esses comandos para gerar a chave:

  1. pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/ca-key.pem

Em seguida, você pode prosseguir para criar sua Autoridade de Certificação raiz, usando a chave que acabou de gerar para assinar o certificado raiz:

  1. pki --self --ca --lifetime 3650 --in ~/pki/private/ca-key.pem \
  2. --type rsa --dn "CN=VPN root CA" --outform pem > ~/pki/cacerts/ca-cert.pem

A flag --lifetime 3650 é usada para garantir que o certificado raiz da autoridade seja válido por 10 anos. O certificado raiz de uma autoridade geralmente não muda, pois teria que ser redistribuído para cada servidor e cliente que dependem dele, então 10 anos é um valor de expiração padrão seguro.

Você pode alterar o valor do nome distinto (DN) para algo diferente se desejar. O nome comum (campo CN) aqui é apenas indicativo, portanto, não precisa corresponder a nada em sua infraestrutura.

Agora que você tem sua Autoridade de Certificação raiz em funcionamento, pode criar um certificado que o servidor VPN usará.

Passo 3 — Gerando um Certificado para o Servidor VPN

Agora você irá criar um certificado e uma chave para o servidor VPN. Este certificado permitirá que o cliente verifique a autenticidade do servidor usando o certificado da CA que acabamos de gerar.

Primeiro, crie uma chave privada para o servidor VPN com o seguinte comando:

  1. pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/server-key.pem

Agora, crie e assine o certificado do servidor VPN com a chave da autoridade de certificação que você criou no passo anterior. Execute o seguinte comando, mas altere o Nome Comum (CN) e o Campo de Nome Alternativo do Assunto (SAN) para o nome DNS ou endereço IP do seu servidor VPN:

  1. pki --pub --in ~/pki/private/server-key.pem --type rsa \
  2. | pki --issue --lifetime 1825 \
  3. --cacert ~/pki/cacerts/ca-cert.pem \
  4. --cakey ~/pki/private/ca-key.pem \
  5. --dn "CN=server_domain_or_IP" --san server_domain_or_IP \
  6. --flag serverAuth --flag ikeIntermediate --outform pem \
  7. > ~/pki/certs/server-cert.pem

Observação: Se você estiver usando um endereço IP em vez de um nome DNS, será necessário especificar várias entradas --san. A linha no bloco de comando anterior onde você especifica o nome distinto (--dn ...) precisará ser modificada com a entrada extra como na linha extraída a seguir:

--dn "CN=endereço_IP" --san @endereço_IP --san endereço_IP \

O motivo dessa entrada extra --san @endereço_IP é que alguns clientes verificarão se o certificado TLS possui tanto uma entrada de DNS quanto uma entrada de Endereço IP para um servidor ao verificar sua identidade.

A opção --flag serverAuth é usada para indicar que o certificado será usado explicitamente para autenticação do servidor, antes que o túnel criptografado seja estabelecido. A opção --flag ikeIntermediate é usada para dar suporte a clientes mais antigos do macOS.

Agora que você gerou todos os arquivos TLS/SSL necessários para o StrongSwan, pode mover os arquivos para o diretório /etc/ipsec.d digitando:

  1. sudo cp -r ~/pki/* /etc/ipsec.d/

Neste passo, você criou um par de certificados que serão usados para garantir a segurança das comunicações entre o cliente e o servidor. Você também assinou os certificados com a chave do CA, para que o cliente possa verificar a autenticidade do servidor VPN usando o certificado do CA. Com todos esses certificados prontos, você está pronto para prosseguir para a configuração do StrongSwan.

Passo 4 — Configurando o StrongSwan

O StrongSwan possui um arquivo de configuração padrão com alguns exemplos, mas teremos que fazer a maior parte da configuração nós mesmos. Vamos fazer backup do arquivo para referência antes de começar do zero:

  1. sudo mv /etc/ipsec.conf{,.original}

Crie e abra um novo arquivo de configuração em branco usando seu editor de texto preferido. Aqui, você usará o nano:

  1. sudo nano /etc/ipsec.conf

Nota: Ao trabalhar nesta seção para configurar a parte do servidor da sua VPN, você encontrará configurações que se referem aos lados esquerdo e direito de uma conexão. Ao trabalhar com VPNs IPSec, o lado esquerdo, por convenção, refere-se ao sistema local que você está configurando, neste caso o servidor. As diretivas do lado direito nessas configurações se referirão a clientes remotos, como telefones e outros computadores.

Quando você passar a configurar os clientes mais tarde neste tutorial, os arquivos de configuração do cliente se referirão a si mesmos usando várias diretivas esquerdo, e o servidor será referido usando a terminologia do lado direito.

Primeiro, vamos dizer ao StrongSwan para registrar os status do daemon para depuração e permitir conexões duplicadas. Adicione estas linhas ao arquivo:

/etc/ipsec.conf
config setup
    charondebug="ike 1, knl 1, cfg 0"
    uniqueids=no

Em seguida, criaremos uma seção de configuração para nossa VPN. Também diremos ao StrongSwan para criar túneis VPN IKEv2 e carregar automaticamente esta seção de configuração quando ele iniciar. Acrescente as seguintes linhas ao arquivo:

/etc/ipsec.conf
. . .
conn ikev2-vpn
    auto=add
    compress=no
    type=tunnel
    keyexchange=ikev2
    fragmentation=yes
    forceencaps=yes

Também configuraremos a detecção de pares inativos para limpar quaisquer conexões “penduradas” caso o cliente se desconecte inesperadamente. Adicione estas linhas:

/etc/ipsec.conf
. . .
conn ikev2-vpn
    . . .
    dpdaction=clear
    dpddelay=300s
    rekey=no

Em seguida, configuraremos os parâmetros IPSec do lado “esquerdo” do servidor. Cada um dos parâmetros a seguir garante que o servidor esteja configurado para aceitar conexões de clientes e se identificar corretamente. Você adicionará cada uma dessas configurações ao arquivo /etc/ipsec.conf assim que estiver familiarizado com o que são e por que são usadas:

  • left=%any O valor %any garante que o servidor usará a interface de rede onde recebe conexões de entrada para comunicação subsequente com clientes. Por exemplo, se você estiver conectando um cliente por uma rede privada, o servidor usará o endereço IP privado onde recebe tráfego para o resto da conexão.
  • leftid=@server_domain_or_IP Esta opção controla o nome que o servidor apresenta aos clientes. Quando combinada com a próxima opção leftcert, a opção leftid garante que o nome configurado do servidor e o Nome Distinto (DN) contido no certificado público correspondam.
  • leftcert=server-cert.pem Esta opção é o caminho para o certificado público do servidor que você configurou na Etapa 3. Sem isso, o servidor não poderá se autenticar com os clientes ou concluir a negociação da configuração do IKEv2.
  • leftsendcert=always O valor always garante que qualquer cliente que se conecte ao servidor sempre receberá uma cópia do certificado público do servidor como parte da configuração inicial da conexão.
  • leftsubnet=0.0.0.0/0 A última opção do lado “esquerdo” que você adicionará informa aos clientes sobre as sub-redes alcançáveis atrás do servidor. Neste caso, 0.0.0.0/0 é usado para representar todo o conjunto de endereços IPv4, o que significa que o servidor dirá aos clientes para enviar todo o seu tráfego pela VPN por padrão.

Agora que você está familiarizado com cada uma das opções relevantes do lado “esquerdo”, adicione-as todas ao arquivo assim:

/etc/ipsec.conf
. . .
conn ikev2-vpn
    . . .
    left=%any
    leftid=@server_domain_or_IP
    leftcert=server-cert.pem
    leftsendcert=always
    leftsubnet=0.0.0.0/0

Nota: Ao configurar o ID do servidor (leftid), inclua apenas o caractere @ se o seu servidor VPN for identificado por um nome de domínio:

/etc/ipsec.conf
    . . .    leftid=@vpn.example.com
    . . .

Se o servidor for identificado pelo seu endereço IP, basta colocar o endereço IP em:

/etc/ipsec.conf
    . . .
    leftid=your_server_ip
    . . .

Em seguida, podemos configurar os parâmetros IPSec do lado “direito” do cliente. Cada um dos seguintes parâmetros informa ao servidor como aceitar conexões dos clientes, como os clientes devem se autenticar no servidor e as faixas de endereços IP privados e servidores DNS que os clientes usarão. Adicione cada uma dessas configurações ao arquivo /etc/ipsec.conf assim que estiver familiarizado com o que são e por que são usadas:

  • right=%any A opção %any para o lado right da conexão instrui o servidor a aceitar conexões de entrada de qualquer cliente remoto.
  • rightid=%any Esta opção garante que o servidor não rejeitará conexões de clientes que fornecerem uma identidade antes que o túnel criptografado seja estabelecido.
  • rightauth=eap-mschapv2 Esta opção configura o método de autenticação que os clientes usarão para se autenticar no servidor. eap-mschapv2 é usado aqui para uma ampla compatibilidade para suportar clientes como Windows, macOS e dispositivos Android.
  • rightsourceip=10.10.10.0/24 Esta opção instrui o servidor a atribuir endereços IP privados aos clientes a partir da piscina especificada de IPs 10.10.10.0/24.
  • rightdns=8.8.8.8,8.8.4.4 Estes endereços IP são os resolvedores DNS públicos do Google. Eles podem ser alterados para usar outros resolvedores públicos, os resolvedores do servidor VPN ou qualquer outro resolvedor que os clientes possam acessar.
  • rightsendcert=never Esta opção instrui o servidor a não exigir que os clientes enviem um certificado para se autenticarem.

Agora que você está familiarizado com as opções necessárias do lado “direito” para a VPN, adicione as seguintes linhas ao arquivo /etc/ipsec.conf:

/etc/ipsec.conf
. . .
conn ikev2-vpn
    . . .
    right=%any
    rightid=%any
    rightauth=eap-mschapv2
    rightsourceip=10.10.10.0/24
    rightdns=8.8.8.8,8.8.4.4
    rightsendcert=never

Agora vamos instruir o StrongSwan a solicitar credenciais de usuário ao se conectarem:

/etc/ipsec.conf
. . .
conn ikev2-vpn
    . . .
    eap_identity=%identity

Por fim, adicione as seguintes linhas para oferecer suporte a clientes Linux, Windows, macOS, iOS e Android. Essas linhas especificam os vários algoritmos de troca de chaves, hash, autenticação e criptografia (comumente referidos como Suites de Cifra) que o StrongSwan permitirá que diferentes clientes usem:

/etc/ipsec.conf
. . .
conn ikev2-vpn
    . . .
    ike=chacha20poly1305-sha512-curve25519-prfsha512,aes256gcm16-sha384-prfsha384-ecp384,aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!
    esp=chacha20poly1305-sha512,aes256gcm16-ecp384,aes256-sha256,aes256-sha1,3des-sha1!

Cada conjunto de cifras suportado é delimitado dos outros por uma vírgula. Por exemplo, chacha20poly1305-sha512-curve25519-prfsha512 é um conjunto, e aes256gcm16-sha384-prfsha384-ecp384 é outro. As suites de cifras listadas aqui são selecionadas para garantir a maior compatibilidade possível entre clientes Windows, macOS, iOS, Android e Linux.

O arquivo de configuração completo deve parecer com isso:

/etc/ipsec.conf
config setup
    charondebug="ike 1, knl 1, cfg 0"
    uniqueids=no

conn ikev2-vpn
    auto=add
    compress=no
    type=tunnel
    keyexchange=ikev2
    fragmentation=yes
    forceencaps=yes
    dpdaction=clear
    dpddelay=300s
    rekey=no
    left=%any
    leftid=@server_domain_or_IP
    leftcert=server-cert.pem
    leftsendcert=always
    leftsubnet=0.0.0.0/0
    right=%any
    rightid=%any
    rightauth=eap-mschapv2
    rightsourceip=10.10.10.0/24
    rightdns=8.8.8.8,8.8.4.4
    rightsendcert=never
    eap_identity=%identity
    ike=chacha20poly1305-sha512-curve25519-prfsha512,aes256gcm16-sha384-prfsha384-ecp384,aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!
    esp=chacha20poly1305-sha512,aes256gcm16-ecp384,aes256-sha256,aes256-sha1,3des-sha1!

Salve e feche o arquivo depois de verificar se você adicionou cada linha corretamente. Se você usou o nano, faça isso pressionando CTRL + X, Y, e então ENTER.

Agora que você configurou os parâmetros VPN, você pode prosseguir para criar uma conta para que os usuários possam se conectar ao servidor.

Passo 5 — Configurando a Autenticação VPN

Seu servidor VPN está agora configurado para aceitar conexões de clientes, mas ainda não há credenciais configuradas. Você precisará configurar algumas coisas em um arquivo de configuração especial chamado ipsec.secrets:

  • Você precisa informar ao StrongSwan onde encontrar a chave privada para o certificado do nosso servidor, para que o servidor possa autenticar os clientes.
  • Você também precisa configurar uma lista de usuários que serão autorizados a se conectar à VPN.

Vamos abrir o arquivo de segredos para edição:

  1. sudo nano /etc/ipsec.secrets

Primeiro, informe ao StrongSwan onde encontrar a chave privada e como interpretá-la.

/etc/ipsec.secrets
: RSA "server-key.pem"

Verifique se a linha começa com o caractere : e se há um espaço depois dele, para que a linha inteira fique assim: : RSA "server-key.pem".

Em seguida, você definirá as credenciais do usuário. Você pode inventar qualquer combinação de nome de usuário e senha que desejar:

/etc/ipsec.secrets
your_username : EAP "your_password"

Salve e feche o arquivo. Agora que você terminou de trabalhar com os parâmetros VPN, reinicie o serviço VPN para que nossa configuração seja aplicada:

  1. sudo systemctl restart strongswan-starter

Agora que o servidor VPN foi totalmente configurado com ambas as opções do servidor e credenciais de usuário, é hora de passar para a configuração da parte mais importante: o firewall.

Passo 6 — Configurando o Firewall & Encaminhamento IP do Kernel

Com a configuração do StrongSwan completa, você precisa configurar o firewall para permitir o tráfego VPN e encaminhá-lo.

Se você seguiu o tutorial de configuração inicial do servidor, deverá ter um firewall UFW ativado. Se ainda não tiver o UFW configurado, você deve começar adicionando uma regra para permitir conexões SSH através do firewall para que sua sessão atual não seja fechada ao ativar o UFW:

  1. sudo ufw allow OpenSSH

Em seguida, ative o firewall digitando:

  1. sudo ufw enable

Depois, adicione uma regra para permitir tráfego UDP nas portas IPSec padrão, 500 e 4500:

  1. sudo ufw allow 500,4500/udp

Em seguida, você abrirá um dos arquivos de configuração do UFW para adicionar algumas políticas de nível baixo para roteamento e encaminhamento de pacotes IPSec. No entanto, antes de fazer isso, você precisa encontrar qual interface de rede em nosso servidor é usada para acesso à Internet. Encontre essa interface consultando o dispositivo associado à rota padrão:

  1. ip route show default

Sua interface pública deve seguir a palavra “dev”. Por exemplo, este resultado mostra a interface chamada eth0, que está destacada no exemplo a seguir:

Output
default via your_server_ip dev eth0 proto static

Quando você tiver a interface de rede pública, abra o arquivo /etc/ufw/before.rules no seu editor de texto. As regras neste arquivo são adicionadas ao firewall antes do restante das regras usuais de entrada e saída. Elas são usadas para configurar a tradução de endereço de rede (NAT) para que o servidor possa rotear corretamente conexões de e para clientes e a Internet.

  1. sudo nano /etc/ufw/before.rules

Perto do topo do arquivo (antes da linha *filter), adicione o seguinte bloco de configuração. Altere cada instância de eth0 na configuração acima para corresponder ao nome da interface que você encontrou com ip route. As linhas *nat criam regras para que o firewall possa rotear e manipular o tráfego entre os clientes VPN e a internet. A linha *mangle ajusta o tamanho máximo do segmento de pacote para evitar problemas potenciais com certos clientes VPN:

/etc/ufw/before.rules
*nat
-A POSTROUTING -s 10.10.10.0/24 -o eth0 -m policy --pol ipsec --dir out -j ACCEPT
-A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE
COMMIT

*mangle
-A FORWARD --match policy --pol ipsec --dir in -s 10.10.10.0/24 -o eth0 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360
COMMIT

*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-not-local - [0:0]
. . .

Em seguida, após as linhas de definição de *filter e cadeia, adicione mais um bloco de configuração:

/etc/ufw/before.rules
. . .
*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-not-local - [0:0]

-A ufw-before-forward --match policy --pol ipsec --dir in --proto esp -s 10.10.10.0/24 -j ACCEPT
-A ufw-before-forward --match policy --pol ipsec --dir out --proto esp -d 10.10.10.0/24 -j ACCEPT

Essas linhas dizem ao firewall para encaminhar o tráfego ESP (Encapsulating Security Payload) para que os clientes VPN possam se conectar. ESP fornece segurança adicional para nossos pacotes VPN enquanto atravessam redes não confiáveis.

Quando terminar, salve e feche o arquivo assim que verificar que adicionou cada linha corretamente. Se você estiver usando nano, faça isso pressionando CTRL + X, Y, depois ENTER.

Antes de reiniciar o firewall, você também precisa alterar alguns parâmetros do kernel de rede para permitir o roteamento de uma interface para outra. O arquivo que controla essas configurações é chamado de /etc/ufw/sysctl.conf. Você precisará configurar algumas coisas no arquivo.

Primeiro, o encaminhamento de pacotes IPv4 precisa ser ativado para que o tráfego possa se mover entre as interfaces de rede VPN e públicas no servidor. Em seguida, você desativará a descoberta do MTU do caminho para evitar problemas de fragmentação de pacotes. Por fim, não aceitaremos redirecionamentos ICMP nem enviaremos redirecionamentos ICMP para evitar ataques de homem no meio.

Abra o arquivo de configuração dos parâmetros do kernel do UFW usando o nano ou seu editor de texto preferido:

  1. sudo nano /etc/ufw/sysctl.conf

Agora, adicione a seguinte configuração net/ipv4/ip_forward=1 no final do arquivo para habilitar o encaminhamento de pacotes entre interfaces:

/etc/ufw/sysctl.conf
. . .
net/ipv4/ip_forward=1

Em seguida, bloqueie o envio e recebimento de pacotes de redirecionamento ICMP adicionando as seguintes linhas ao final do arquivo:

/etc/ufw/sysctl.conf
. . .
net/ipv4/conf/all/accept_redirects=0
net/ipv4/conf/all/send_redirects=0

Por fim, desative a descoberta do MTU do caminho adicionando esta linha ao final do arquivo:

/etc/ufw/sysctl.conf
. . .
net/ipv4/ip_no_pmtu_disc=1

Salve o arquivo quando terminar. Agora você pode habilitar todas as suas alterações desabilitando e reabilitando o firewall, já que o UFW aplica essas configurações sempre que ele reinicia:

  1. sudo ufw disable
  2. sudo ufw enable

Você será solicitado a confirmar o processo. Digite Y para habilitar o UFW novamente com as novas configurações.

Passo 7 — Testando a Conexão VPN no Windows, macOS, Ubuntu, iOS e Android

Agora que você tem tudo configurado, é hora de experimentar. Primeiro, você precisará copiar o certificado CA que você criou e instalá-lo no(s) dispositivo(s) cliente que se conectará(ão) à VPN. A maneira mais fácil de fazer isso é fazer login no seu servidor e exibir o conteúdo do arquivo de certificado:

  1. cat /etc/ipsec.d/cacerts/ca-cert.pem

Você verá uma saída semelhante a esta:

Output
-----BEGIN CERTIFICATE----- MIIFNDCCAxygAwIBAgIIHCsidG5mXzgwDQYJKoZIhvcNAQEMBQAwODELMAkGA1UE . . . H2YUdz8XNHrJHvMQKWFpi0rlEcMs+MSXPFWE3Q7UbaZJ/h8wpSldSUbQRUlphExJ dJ4PX+MUJO/vjG1/ie6Kh25xbBAc3qNq8siiJZDwrg6vjEK7eiZ1rA== -----END CERTIFICATE-----

Copie essa saída para o seu computador, incluindo as linhas -----BEGIN CERTIFICATE----- e -----END CERTIFICATE-----, e salve-a em um arquivo com um nome reconhecível, como ca-cert.pem. Certifique-se de que o arquivo que você cria tenha a extensão .pem.

Alternativamente, use o SFTP para transferir o arquivo para o seu computador.

Depois de ter o arquivo ca-cert.pem baixado para o seu computador, você pode configurar a conexão com a VPN.

Conectando a partir do Windows

Existem várias maneiras de importar o certificado raiz e configurar o Windows para se conectar a uma VPN. O primeiro método utiliza ferramentas gráficas para cada etapa. O segundo método utiliza comandos do PowerShell, que podem ser scriptados e modificados para se adequarem à sua configuração de VPN.

Nota: Estas instruções foram testadas em instalações do Windows 10 executando as versões 1903 e 1909.

Configurando o Windows com Ferramentas Gráficas

Primeiro, importe o certificado raiz seguindo estes passos:

  1. Pressione WINDOWS+R para abrir a caixa de diálogo Executar e digite mmc.exe para iniciar o Console de Gerenciamento do Windows.

  2. No menu Arquivo, vá para Adicionar ou Remover Snap-in, selecione Certificados na lista de snap-ins disponíveis e clique em Adicionar.

  3. Queremos que a VPN funcione com qualquer usuário, então selecione Conta do Computador e clique em Avançar.

  4. Estamos configurando as coisas no computador local, então selecione Computador Local, depois clique em Concluir.

  5. Na entrada Autoridades de Certificação Raiz Confiáveis, expanda o nó Console Root e selecione a entrada Certificados:

  6. No menu Ação, selecione Todas as Tarefas e clique em Importar para exibir o Assistente para Importação de Certificados. Clique em Avançar para passar pela introdução.

  7. Na tela Arquivo a Importar, pressione o botão Procurar, verifique se você alterou o tipo de arquivo de “Certificado X.509 (.cer;.crt)” para “Todos os Arquivos (.)”, e selecione o arquivo ca-cert.pem que você salvou. Em seguida, clique em Avançar.

  8. Garanta que o Armazenamento de Certificados esteja definido como Autoridades de Certificação Raiz Confiáveis e clique em Avançar.

  9. Clique em Concluir para importar o certificado.

Em seguida, configure a VPN com estes passos:

  1. Inicie o Painel de Controle, depois navegue até o Centro de Rede e Compartilhamento.
  2. Clique em Configurar uma nova conexão ou rede, em seguida, selecione Conectar-se a um local de trabalho.
  3. Selecione Usar minha conexão com a Internet (VPN).
  4. Insira os detalhes do servidor VPN. Digite o nome de domínio ou endereço IP do servidor no campo Endereço da Internet, em seguida, preencha Nome de destino com algo que descreva sua conexão VPN. Em seguida, clique em Concluído.

Configurando o Windows usando o PowerShell

Para importar o certificado da autoridade de certificação raiz usando o PowerShell, primeiro abra um prompt do PowerShell com privilégios de administrador. Para fazer isso, clique com o botão direito no ícone do menu Iniciar e selecione Windows PowerShell (Admin). Você também pode abrir um prompt de comando como administrador e digitar powershell.

Em seguida, importaremos o certificado usando o cmdlet do PowerShell Import-Certificate. No comando a seguir, o primeiro argumento -CertStoreLocation garantirá que o certificado seja importado no armazenamento de Autoridades de Certificação Raiz Confiáveis do computador para que todos os programas e usuários possam verificar o certificado do servidor VPN. O argumento -FilePath deve apontar para o local onde você copiou o certificado. No exemplo a seguir, o caminho é C:\Users\sammy\Documents\ca-cert.pem. Certifique-se de editar o comando para que corresponda ao local que você usou.

  1. Import-Certificate `
  2. -CertStoreLocation cert:\LocalMachine\Root\ `
  3. -FilePath C:\users\sammy\Documents\ca-cert.pem

O comando produzirá algo como o seguinte:

Output
PSParentPath: Microsoft.PowerShell.Security\Certificate::LocalMachine\Root Thumbprint Subject ---------- ------- DB00813B4087E9367861E8463A60CEA0ADC5F002 CN=VPN root CA

Agora, para configurar a VPN usando o PowerShell, execute o seguinte comando. Substitua o nome DNS ou o endereço IP do seu servidor na linha -ServerAddress. As várias opções garantirão que o Windows seja configurado corretamente com os parâmetros de segurança apropriados que correspondam às opções definidas em /etc/ipsec.conf.

  1. Add-VpnConnection -Name "VPN Connection" `
  2. -ServerAddress "server_domain_or_IP" `
  3. -TunnelType "IKEv2" `
  4. -AuthenticationMethod "EAP" `
  5. -EncryptionLevel "Maximum" `
  6. -RememberCredential `

Se o comando for bem-sucedido, não haverá nenhuma saída. Para confirmar se a VPN está configurada corretamente, use o cmdlet Get-VPNConnection:

  1. Get-VpnConnection -Name "VPN Connection"

Você receberá uma saída como a seguinte:

Output
Name : VPN Connection ServerAddress : your_server_ip AllUserConnection : False Guid : {B055A1AB-175C-4028-B4A8-D34309A2B20E} TunnelType : Ikev2 AuthenticationMethod : {Eap} EncryptionLevel : Maximum L2tpIPsecAuth : UseWinlogonCredential : False EapConfigXmlStream : #document ConnectionStatus : Disconnected RememberCredential : True SplitTunneling : False DnsSuffix : IdleDisconnectSeconds : 0

Por padrão, o Windows escolhe algoritmos mais antigos e mais lentos. Execute o cmdlet Set-VpnConnectionIPsecConfiguration para atualizar os parâmetros de criptografia que o Windows usará para a troca de chaves IKEv2 e para criptografar pacotes:

  1. Set-VpnConnectionIPsecConfiguration -Name "VPN Connection" `
  2. -AuthenticationTransformConstants GCMAES256 `
  3. -CipherTransformConstants GCMAES256 `
  4. -DHGroup ECP384 `
  5. -IntegrityCheckMethod SHA384 `
  6. -PfsGroup ECP384 `
  7. -EncryptionMethod GCMAES256

Observação: Se você deseja excluir a conexão VPN e reconfigurá-la com opções diferentes, você pode executar o cmdlet Remove-VpnConnection.

  1. Remove-VpnConnection -Name "VPN Connection" -Force

A flag -Force irá pular a solicitação para confirmar a remoção. Você deve estar desconectado da VPN se tentar removê-la usando este comando.

Conectando à VPN

Assim que tiver o certificado importado e a VPN configurada usando qualquer um dos métodos, sua nova conexão VPN será visível na lista de redes. Selecione a VPN e clique em Conectar. Você será solicitado a inserir seu nome de usuário e senha. Digite-os, clique em OK, e você estará conectado.

Conectando a partir do macOS

Siga estas etapas para importar o certificado:

  1. Dê um duplo clique no arquivo do certificado. O Acesso às Chaves irá aparecer com um diálogo que diz “O Acesso às Chaves está tentando modificar o chaveiro do sistema. Digite sua senha para permitir isso.”
  2. Digite sua senha e então clique em Modificar Chaveiro.
  3. Dê um duplo clique no certificado VPN recém-importado. Isso abrirá uma pequena janela de propriedades onde você pode especificar os níveis de confiança. Defina Segurança IP (IPSec) como Sempre Confiar e você será solicitado a digitar sua senha novamente. Essa configuração é salva automaticamente após inserir a senha.

Agora que o certificado foi importado e confiável, configure a conexão VPN com estes passos:

  1. Vá para Preferências do Sistema e escolha Rede.
  2. Clique no pequeno botão “mais” localizado na parte inferior esquerda da lista de redes.
  3. No pop-up que aparece, defina Interface como VPN, defina o Tipo de VPN para IKEv2, e dê um nome à conexão.
  4. No campo Servidor e ID Remoto, insira o nome de domínio ou endereço IP do servidor. Deixe o ID Local em branco.
  5. Clique em Configurações de Autenticação, selecione Nome de Usuário, e insira seu nome de usuário e senha que você configurou para seu usuário VPN. Em seguida, clique em OK.

Por fim, clique em Conectar para se conectar à VPN. Você deve agora estar conectado à VPN.

Conectando a partir do Ubuntu

Para se conectar a partir de uma máquina Ubuntu, você pode configurar e gerenciar o StrongSwan como um serviço ou usar um comando único toda vez que desejar se conectar. As instruções são fornecidas para ambos.

Gerenciando o StrongSwan como um Serviço

Para gerenciar o StrongSwan como um serviço, você precisará seguir as seguintes etapas de configuração.

Primeiro, atualize o cache de pacotes local usando o apt

  1. sudo apt update

Em seguida, instale o StrongSwan e os plugins necessários para autenticação:

  1. sudo apt install strongswan libcharon-extra-plugins

Agora você precisará de uma cópia do certificado CA no diretório /etc/ipsec.d/cacerts para que seu cliente possa verificar a identidade do servidor. Execute o seguinte comando para copiar o arquivo ca-cert.pem para o local correto:

  1. sudo cp /tmp/ca-cert.pem /etc/ipsec.d/cacerts

Para garantir que a VPN só seja executada sob demanda, use o systemctl para desativar o StrongSwan de ser executado automaticamente:

  1. sudo systemctl disable --now strongswan-starter

Em seguida, configure o nome de usuário e senha que você usará para autenticar-se no servidor VPN. Edite o arquivo /etc/ipsec.secrets usando o nano ou seu editor preferido:

  1. sudo nano /etc/ipsec.secrets

Adicione a seguinte linha, editando os valores de nome de usuário e senha destacados para corresponder aos que você configurou no servidor:

/etc/ipsec.secrets
your_username : EAP "your_password"

Finalmente, edite o arquivo /etc/ipsec.conf para configurar seu cliente para coincidir com a configuração do servidor:

/etc/ipsec.conf
config setup

conn ikev2-rw
    right=server_domain_or_IP
    # Isso deve corresponder ao valor `leftid` na configuração do seu servidor
    rightid=server_domain_or_IP
    rightsubnet=0.0.0.0/0
    rightauth=pubkey
    leftsourceip=%config
    leftid=username
    leftauth=eap-mschapv2
    eap_identity=%identity
    auto=start

Para se conectar à VPN, digite:

  1. sudo systemctl start strongswan-starter

Para desconectar novamente, digite:

  1. sudo systemctl stop strongswan-starter

Usando o Cliente charon-cmd para Conexões Únicas

Para gerenciar o StrongSwan como um serviço, você precisará realizar as seguintes etapas de configuração.

Primeiro, atualize o cache de pacotes local usando apt

  1. sudo apt update

Em seguida, instale o StrongSwan e os plugins necessários para autenticação:

  1. sudo apt install strongswan libcharon-extra-plugins

Agora você precisará de uma cópia do certificado da CA no diretório /etc/ipsec.d/cacerts para que seu cliente possa verificar a identidade do servidor. Execute o seguinte comando para copiar o arquivo ca-cert.pem para o local:

  1. sudo cp /tmp/ca-cert.pem /etc/ipsec.d/cacerts

Neste ponto, você pode se conectar ao servidor VPN com charon-cmd usando o certificado da CA do servidor, o endereço IP do servidor VPN e o nome de usuário que você configurou.

Execute o seguinte comando sempre que quiser se conectar à VPN:

  1. sudo charon-cmd --cert ca-cert.pem --host vpn_domain_or_IP --identity your_username

Quando solicitado, forneça a senha do usuário VPN e você será conectado à VPN. Para desconectar, pressione CTRL+C no terminal e aguarde a conexão ser fechada.

Conectando a partir do iOS

Para configurar a conexão VPN em um dispositivo iOS, siga estas etapas:

  1. Envie um e-mail para si mesmo com o certificado raiz anexado.
  2. Abra o e-mail no seu dispositivo iOS e toque no arquivo de certificado anexado, depois toque em Instalar e insira seu código de acesso. Uma vez instalado, toque em Concluído.
  3. Vá para Configurações, Geral, VPN e toque em Adicionar Configuração VPN. Isso abrirá a tela de configuração de conexão VPN.
  4. Toque em Tipo e selecione IKEv2.
  5. No campo Descrição, insira um nome curto para a conexão VPN. Pode ser qualquer coisa que você quiser.
  6. No campo Servidor e ID Remoto, insira o nome de domínio ou o endereço IP do servidor. O campo ID Local pode ser deixado em branco.
  7. Insira seu nome de usuário e senha na seção Autenticação, depois toque em Concluído.
  8. Selecione a conexão VPN que você acabou de criar, toque no interruptor na parte superior da página e você estará conectado.

Conexão a partir do Android

Siga estas etapas para importar o certificado:

  1. Envie um email para si mesmo com o certificado CA anexado. Salve o certificado CA na sua pasta de downloads.
  2. Baixe o cliente VPN StrongSwan da Play Store.
  3. Abra o aplicativo. Toque no ícone “mais” (. . .) no canto superior direito e selecione Certificados CA.
  4. Toque novamente no ícone “mais” (. . .) no canto superior direito. Selecione Importar certificado.
  5. Navegue até o arquivo do certificado CA na sua pasta de downloads e selecione-o para importá-lo para o aplicativo.

Agora que o certificado foi importado para o aplicativo StrongSwan, você pode configurar a conexão VPN com estes passos:

  1. No aplicativo, toque em ADICIONAR PERFIL VPN no topo.
  2. Preencha o Servidor com o nome de domínio do seu servidor VPN ou endereço IP público.
  3. Verifique se IKEv2 EAP (Nome de usuário/Senha) está selecionado como o Tipo de VPN.
  4. Preencha o Nome de usuário e Senha com as credenciais que você definiu no servidor.
  5. Desmarque Selecionar automaticamente na seção de certificado CA e clique em Selecionar certificado CA.
  6. Toque na aba IMPORTADOS no topo da tela e escolha o CA que você importou (ele será nomeado “Certificado CA raiz VPN” se você não tiver alterado o “DN” anteriormente).
  7. Se desejar, preencha Nome do perfil (opcional) com um nome mais descritivo.

Quando desejar se conectar à VPN, clique no perfil que você acabou de criar no aplicativo StrongSwan.

Resolução de problemas de conexões

Se você não conseguir importar o certificado, certifique-se de que o arquivo tenha a extensão .pem, e não .pem.txt.

Se você não conseguir se conectar à VPN, verifique o nome do servidor ou o endereço IP que você usou. O nome de domínio ou o endereço IP do servidor devem corresponder ao que você configurou como o nome comum (CN) ao criar o certificado. Se eles não corresponderem, a conexão VPN não funcionará. Por exemplo, se você configurou um certificado com o CN de vpn.example.com, você deve usar vpn.example.com ao inserir os detalhes do servidor VPN. Verifique novamente o comando que você usou para gerar o certificado e os valores que você usou ao criar sua conexão VPN.

Por fim, verifique a configuração da VPN para garantir que o valor leftid esteja configurado com o símbolo @ se estiver usando um nome de domínio:

/etc/ipsec.conf
    leftid=@vpn.example.com

Se estiver usando um endereço IP, certifique-se de que o símbolo @ seja omitido. Além disso, certifique-se de que, ao gerar o arquivo server-cert.pem, você incluiu tanto as bandeiras --san @IP_address quanto --san IP_address.

Conclusão

Neste tutorial, você construiu um servidor VPN que usa o protocolo IKEv2. Você aprendeu sobre as diretivas que controlam os lados left e right de uma conexão em ambos os servidores e clientes. Você também configurou um cliente Windows, macOS, iOS, Android ou Linux para se conectar à VPN.

Para adicionar ou remover usuários, pule para o Passo 5 novamente. Cada linha em /etc/ipsec.secrets é para um usuário, então adicionar ou remover usuários, ou alterar senhas só requer editar o arquivo.

Agora você pode ter certeza de que suas atividades online permanecerão seguras onde quer que você vá e com qualquer dispositivo que você use para acessar a internet.

Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-an-ikev2-vpn-server-with-strongswan-on-ubuntu-22-04