Red Hat Training

A Red Hat training course is available for RHEL 8

3.6. Configurar una VPN de malla

Una red VPN en malla, que también se conoce como VPN any-to-any, es una red en la que todos los nodos se comunican utilizando IPsec. La configuración permite excepciones para los nodos que no pueden utilizar IPsec. La red VPN en malla puede configurarse de dos maneras:

  • Requerir IPsec.
  • Para preferir IPsec, pero permitir una vuelta a la comunicación en texto claro.

La autenticación entre los nodos puede basarse en certificados X.509 o en extensiones de seguridad DNS (DNSSEC).

El siguiente procedimiento utiliza certificados X.509. Estos certificados pueden generarse utilizando cualquier tipo de sistema de gestión de autoridades de certificación (CA), como el sistema de certificados Dogtag. Dogtag asume que los certificados de cada nodo están disponibles en el formato PKCS #12 (archivos .p12), que contienen la clave privada, el certificado del nodo y el certificado de la CA Raíz utilizado para validar los certificados X.509 de otros nodos.

Cada nodo tiene una configuración idéntica con la excepción de su certificado X.509. Esto permite añadir nuevos nodos sin reconfigurar ninguno de los existentes en la red. Los archivos PKCS #12 requieren un "nombre amistoso", para el que utilizamos el nombre "nodo", de modo que los archivos de configuración que hacen referencia al nombre amistoso pueden ser idénticos para todos los nodos.

Requisitos previos

  • se instalaLibreswan y se inicia el servicio ipsec en cada nodo.

Procedimiento

  1. En cada nodo, importe los archivos PKCS #12. Este paso requiere la contraseña utilizada para generar los archivos PKCS #12:

    # ipsec import nodeXXX.p12
  2. Cree las siguientes tres definiciones de conexión para los perfiles IPsec required (privado), IPsec optional (privado o claro) y 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. Añada la dirección IP de la red en la categoría adecuada. Por ejemplo, si todos los nodos residen en la red 10.15.0.0/16, y todos los nodos deben ordenar el cifrado IPsec:

    # echo "10.15.0.0/16" >> /etc/ipsec.d/policies/private
  4. Para permitir que ciertos nodos, por ejemplo, 10.15.34.0/24, trabajen con y sin IPsec, añada esos nodos al grupo de privados o limpios mediante:

    # echo "10.15.34.0/24" >> /etc/ipsec.d/policies/private-or-clear
  5. Para definir un host, por ejemplo, 10.15.1.2, que no es capaz de IPsec en el grupo claro, utilice:

    # echo "10.15.1.2/32" >> /etc/ipsec.d/policies/clear

    Los archivos del directorio /etc/ipsec.d/policies se pueden crear a partir de una plantilla para cada nuevo nodo, o se pueden aprovisionar utilizando Puppet o Ansible.

    Tenga en cuenta que cada nodo tiene la misma lista de excepciones o diferentes expectativas de flujo de tráfico. Por lo tanto, dos nodos podrían no ser capaces de comunicarse porque uno requiere IPsec y el otro no puede utilizar IPsec.

  6. Reinicie el nodo para añadirlo a la malla configurada:

    # systemctl restart ipsec
  7. Una vez que haya terminado con la adición de nodos, un comando ping es suficiente para abrir un túnel IPsec. Para ver qué túneles ha abierto un nodo:

    # ipsec trafficstatus