6.7. Configuration d'un VPN maillé
Un réseau VPN maillé, également connu sous le nom de VPN any-to-any, est un réseau dont tous les nœuds communiquent à l'aide d'IPsec. La configuration prévoit des exceptions pour les nœuds qui ne peuvent pas utiliser IPsec. Le réseau VPN maillé peut être configuré de deux manières :
- Pour exiger IPsec.
- Pour privilégier IPsec tout en autorisant un retour à la communication en texte clair.
L'authentification entre les nœuds peut être basée sur des certificats X.509 ou sur des extensions de sécurité DNS (DNSSEC).
La procédure suivante utilise des certificats X.509. Ces certificats peuvent être générés à l'aide de n'importe quel système de gestion d'autorité de certification (CA), tel que le système de certificats Dogtag. Dogtag suppose que les certificats de chaque nœud sont disponibles au format PKCS #12 (fichiers .p12), qui contient la clé privée, le certificat du nœud et le certificat de l'autorité de certification racine utilisé pour valider les certificats X.509 des autres nœuds.
Chaque nœud a une configuration identique à l'exception de son certificat X.509. Cela permet d'ajouter de nouveaux nœuds sans reconfigurer les nœuds existants du réseau. Les fichiers PKCS #12 requièrent un "nom convivial", pour lequel nous utilisons le nom "nœud" afin que les fichiers de configuration faisant référence au nom convivial soient identiques pour tous les nœuds.
Conditions préalables
-
Libreswan est installé et le service
ipsec
est démarré sur chaque nœud.
Procédure
Sur chaque nœud, importer les fichiers PKCS #12. Cette étape nécessite le mot de passe utilisé pour générer les fichiers PKCS #12 :
# ipsec import nodeXXX.p12
Créez les trois définitions de connexion suivantes pour les profils
IPsec required
(privé),IPsec optional
(privé ou clair) etNo IPsec
(clair) :# 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
Ajoutez l'adresse IP du réseau dans la catégorie appropriée. Par exemple, si tous les nœuds résident dans le réseau 10.15.0.0/16 et que tous les nœuds doivent utiliser le cryptage IPsec :
# echo "10.15.0.0/16" >> /etc/ipsec.d/policies/private
Pour permettre à certains nœuds, par exemple 10.15.34.0/24, de fonctionner avec et sans IPsec, ajoutez ces nœuds au groupe privé ou clair en utilisant :
# echo "10.15.34.0/24" >> /etc/ipsec.d/policies/private-or-clear
Pour définir un hôte, par exemple 10.15.1.2, qui n'est pas capable d'IPsec dans le groupe clair, utilisez :
# echo "10.15.1.2/32" >> /etc/ipsec.d/policies/clear
Les fichiers du répertoire
/etc/ipsec.d/policies
peuvent être créés à partir d'un modèle pour chaque nouveau nœud, ou peuvent être approvisionnés à l'aide de Puppet ou Ansible.Notez que chaque nœud a la même liste d'exceptions ou des attentes différentes en matière de flux de trafic. Deux nœuds peuvent donc ne pas être en mesure de communiquer parce que l'un d'eux nécessite IPsec et que l'autre ne peut pas l'utiliser.
Redémarrez le nœud pour l'ajouter au maillage configuré :
# systemctl restart ipsec
Une fois l'ajout de nœuds terminé, une commande
ping
suffit pour ouvrir un tunnel IPsec. Pour savoir quels tunnels un nœud a ouvert :# ipsec trafficstatus