Criando VPN IPSec com StrongSwan entre Digital Ocean e AWS

Posted on Tue 18 September 2018 in Linux • 2 min read

Conforme mostrei nesse post vamos agora configurar uma VPN IPSec.

Vamos utilizar o StrongSwan para configurarmos a VPN IPSec.

Os peers serão configurados em dois ambientes distintos, Digital Ocean e AWS.

A instalação será feita na distribuição CentOS 7.5.1804x64.

Para o ambiente amazon foi utilizado a instância Amazon Linux 2 AMI

A VPN Site to Site precisa ser configurada dos dois lados, por isso, vamos configurar primeiro o servidor da esquerda (left) que será a Digital Ocean.

  • Desabilitar SeLinux
[root@ipsec-server ~]# sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/sysconfig/selinux && cat /etc/sysconfig/selinux
  • Atualizar o Sistema
[root@ipsec-server ~]# yum -y update
  • Reiniciar para aplicar as alterações
[root@ipsec-server ~]# reboot
  • Instale os pacotes necessários
[root@ipsec-server ~]#  yum install -y vim epel-release
  • Para a instalação do lado amazon, vamos utilizar os repositórios Amazon
[root@peer-aws  ~]# amazon-linux-extras install epel -y
  • Nesse caso, foi utilizado a última versão do pacote StrongSwan. Versão 5.6.3
[root@ipsec-server ~]# yum install strongswan -y
  • Arquivo de configuração lado esquerdo (left)
[root@ipsec-server ~]# vim /etc/strongswan/ipsec.conf
config setup
    charondebug="all"
    uniqueids=yes
    strictcrlpolicy=no

conn %default
    ikelifetime=60m
    mobike=yes
    ike=aes128-sha1-modp1536,3des-sha1-modp3072!
    esp=aes128-sha1-modp1536,3des-sha1-modp3072!

# Nome a ser utilizado para a conexao 
conn left

    left=xxx.xx.xxx.xxx
    leftsubnet=10.46.0.0/16
    leftid=xxx.xx.xxx.xx
    leftfirewall=yes

    # Outra Ponta
    right=xx.xx.xxx.xxx 
    rightsubnet=172.31.13.0/20
    rightid=xx.xx.xx.xxx

    # Fechar a VPN automaticamente
    auto=start
    # Ativar o Tunel , necessario quando existe NAT
    type=tunnel
    # Compressao
    compress=yes
  • Gerando a chave secret para usar em ambos os lados Existem N formas de gerar uma chave/password, nesse caso vamos utilizar o seguinte comando:
[root@ipsec-server  ~]# date +%s | sha256sum | base64 | head -c 32 ; echo

O resultado apresentado foi:

YmYyMzhiY2EwZWZjOGIzNzJiYjhkODRj

  • Vamos editar o arquivo secrets
[root@ipsec-server  ~]# vim /etc/strongswan/ipsec.secrets
# ipsec.secrets - strongSwan IPsec secrets file
#
# <IP lado direito> : <Criptografia Usada> “<Chave>”
xxx.xx.xx.xxx : PSK "YmYyMzhiY2EwZWZjOGIzNzJiYjhkODRj"
  • Setando strongswan para iniciar com o sistema / Iniciar strongswan
[root@ipsec-server  ~]# systemctl enable strongswan
  • Após a configuração do left vamos iniciar o strongswan e partir para configurar o right.
[root@ipsec-server  ~]# systemctl start strongswan

Configurando lado direito (right)

Vamos partir do princípio que os passos 1 ao 4 já foram executados. Vamos configurar o nosso lado direito que no nosso caso é a AWS

  • Arquivo de configuração do lado direito (right)
[root@aws-peer  ~]# vim /etc/strongswan/ipsec.conf
  • No caso da Amazon, temos que configurar o endereço left com o IP da rede local, e o leftid com o IP externo
config setup
        charondebug="all"
        uniqueids=yes
        strictcrlpolicy=no

# Preferencias padroes para todas as conexoes
conn %default
        ikelifetime=60m
        mobike=yes
        ike=aes128-sha1-modp1536,3des-sha1-modp3072!
        esp=aes128-sha1-modp1536,3des-sha1-modp3072!

conn right
    left=xxx.xx.xx.xxx
    leftsubnet=172.31.13.0/20
    leftid=xxx.xxx.xx.xx
    leftfirewall=yes

    right=xx.xx.xxx.xxx
    rightsubnet=10.46.0.0/16
    rightid=xx.xx.xxx.xxx
    auto=start
    type=tunnel
  • Vamos configurar o secret
[root@aws-peer  ~]# vim /etc/strongswan/ipsec.secrets
  • Vamos inserir a mesma chave setada no left
# ipsec.secrets - strongSwan IPsec secrets file
#
# <IP lado direito> : <Criptografia Usada> “<Chave>”
xxx.xx.xxx.xxx : PSK "YmYyMzhiY2EwZWZjOGIzNzJiYjhkODRj"
  • Setando para iniciar com o sistema / iniciando o serviço
[root@aws-peer  ~]# systemctl enable strongswan
[root@aws-peer  ~]# systemctl start strongswan
  • Verificando conexões

Lado Digital Ocean

[root@ipsec-server  ~]# strongswan status left

Security Associations (3 up, 0 connecting):
         left[6]: ESTABLISHED 2 minutes ago, xx.xx.xxx.xxx[xx.xx.xxx.xxx]...xx.xxx.xxx.xxx[xx.xx.xxx.xxx]
         left{5}:  INSTALLED, TUNNEL, reqid 4, ESP in UDP SPIs: ca942554_i ce718f43_o
         left{5}:   10.46.0.0/16 === 172.31.0.0/20

Lado AWS

[root@aws-peer  ~]# strongswan status right

Security Associations (1 up, 0 connecting):
right[1]: ESTABLISHED 3 minutes ago, xxx.xx.xx.xxx[xx.xxx.xxx.xxx]...xxx.xx.xx.xxx[xxx.xx.xx.xxx]
right{1}:  INSTALLED, TUNNEL, reqid 1, ESP in UDP SPIs: ce718f43_i ca942554_o
right{1}:   172.31.0.0/20 === 10.46.0.0/16

Simples Assim :)