Red Hat Training

A Red Hat training course is available for RHEL 8

26.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ço ipsec é iniciado em cada nó.

Procedimento

  1. Em cada nó, importar arquivos PKCS #12. Esta etapa requer a senha utilizada para gerar os arquivos PKCS #12:

    # ipsec import nodeXXX.p12
  2. Criar as três seguintes definições de conexão para os perfis IPsec required (privado), IPsec optional (privado ou claro), e No 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
  3. 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
  4. 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
  5. 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 usar IPsec.

  6. Reinicie o nó para adicioná-lo à malha configurada:

    # systemctl restart ipsec
  7. Uma vez terminada a adição de nós, um comando ping é suficiente para abrir um túnel IPsec. Para ver quais túneis um nó abriu:

    # ipsec trafficstatus