3.6. Configuração de uma VPN em malha
Uma rede mesh VPN, também conhecida como any-to-any VPN, é uma rede onde todos os nós se comunicam usando IPsec
. A configuração permite exceções para os nós que não podem utilizar IPsec
. A rede mesh VPN pode ser configurada de duas maneiras:
-
Para requerer
IPsec
. -
Preferir
IPsec
, mas permitir um retorno para a comunicação de texto claro.
A autenticação entre os nós pode ser baseada em certificados X.509 ou em extensões de segurança DNS (DNSSEC).
O procedimento a seguir utiliza certificados X.509. Estes certificados podem ser gerados usando qualquer tipo de sistema de gerenciamento da Autoridade Certificadora (CA), como o Sistema de Certificado Dogtag. A Dogtag assume que os certificados para cada nó estão disponíveis no formato PKCS #12 (arquivos .p12), que contém a chave privada, o certificado do nó e o certificado Root CA usado para validar os certificados X.509 dos outros nós.
Cada nó tem uma configuração idêntica, com exceção de seu certificado X.509. Isto permite adicionar novos nós sem reconfigurar nenhum dos nós existentes na rede. Os arquivos PKCS #12 requerem um "nome amigável", para o qual usamos o nome "nó" para que os arquivos de configuração referentes ao nome amigável possam ser idênticos para todos os nós.
Pré-requisitos
-
Libreswan
está instalado, e o serviçoipsec
é iniciado em cada nó.
Procedimento
Em cada nó, importar arquivos PKCS #12. Esta etapa requer a senha utilizada para gerar os arquivos PKCS #12:
# ipsec import nodeXXX.p12
Criar as três seguintes definições de conexão para os perfis
IPsec required
(privado),IPsec optional
(privado ou claro), eNo IPsec
(claro):# cat /etc/ipsec.d/mesh.conf conn clear auto=ondemand type=passthrough authby=never left=%defaultroute right=%group conn private auto=ondemand type=transport authby=rsasig failureshunt=drop negotiationshunt=drop # left left=%defaultroute leftcert=nodeXXXX leftid=%fromcert leftrsasigkey=%cert # right rightrsasigkey=%cert rightid=%fromcert right=%opportunisticgroup conn private-or-clear auto=ondemand type=transport authby=rsasig failureshunt=passthrough negotiationshunt=passthrough # left left=%defaultroute leftcert=nodeXXXX leftid=%fromcert leftrsasigkey=%cert # right rightrsasigkey=%cert rightid=%fromcert right=%opportunisticgroup
Adicionar o endereço IP da rede na categoria apropriada. Por exemplo, se todos os nós residem na rede 10.15.0.0/16, e todos os nós devem ordenar a criptografia
IPsec
:# echo "10.15.0.0/16" >> /etc/ipsec.d/policies/private
Para permitir que certos nós, por exemplo, 10.15.34.0/24, trabalhem com e sem
IPsec
, adicione esses nós ao grupo privado ou claro utilizando:# echo "10.15.34.0/24" >> /etc/ipsec.d/policies/private-or-clear
Para definir um anfitrião, por exemplo, 10.15.1.2, que não seja capaz de
IPsec
no grupo claro, use:# echo "10.15.1.2/32" >> /etc/ipsec.d/policies/clear
Os arquivos no diretório
/etc/ipsec.d/policies
podem ser criados a partir de um modelo para cada novo nó, ou podem ser provisionados usando o Puppet ou o Ansible.Observe que cada nó tem a mesma lista de exceções ou diferentes expectativas de fluxo de tráfego. Dois nós, portanto, podem não ser capazes de se comunicar porque um requer
IPsec
e o outro não pode usarIPsec
.Reinicie o nó para adicioná-lo à malha configurada:
# systemctl restart ipsec
Uma vez terminada a adição de nós, um comando
ping
é suficiente para abrir um túnelIPsec
. Para ver quais túneis um nó abriu:# ipsec trafficstatus