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 instala
Libreswan
y se inicia el servicioipsec
en cada nodo.
Procedimiento
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
Cree las siguientes tres definiciones de conexión para los perfiles
IPsec required
(privado),IPsec optional
(privado o claro) yNo 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
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
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
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 utilizarIPsec
.Reinicie el nodo para añadirlo a la malla configurada:
# systemctl restart ipsec
Una vez que haya terminado con la adición de nodos, un comando
ping
es suficiente para abrir un túnelIPsec
. Para ver qué túneles ha abierto un nodo:# ipsec trafficstatus