Accès à d'autres clouds avec Libreswan

Libreswan est une implémentation IPSec open source basée sur FreeS/WAN et Openswan. La plupart des distributions Linux incluent Libreswan ou facilitent son installation. Vous pouvez l'installer sur des hôtes dans votre réseau sur site ou sur le réseau d'un fournisseur cloud. Cette rubrique explique comment connecter votre réseau cloud virtuel Oracle Cloud Infrastructure à un autre fournisseur cloud à l'aide d'un VPN site à site et d'une machine virtuelle Libreswan en tant que CPE (Customer-Premises Equipment).

Dans l'exemple illustré ici, l'autre fournisseur cloud est Amazon Web Services (AWS). Le VPN site à site offre une connexion IPSec site à site sécurisée et cryptée entre les environnements Oracle et Amazon. Elle permet aux ressources des deux clouds de communiquer entre elles à l'aide de leurs adresses IP privées comme si elles se trouvaient dans le même segment de réseau.

Un guide de CPE Libreswan est également disponible pour tous les autres cas d'emploi.

La prise en charge de l'interface de tunnel virtuel pour cette configuration basée sur un routage requiert au minimum la version 3.18 de Libreswan et un noyau Linux 3.x ou 4.x récent. Cette configuration a été validée à l'aide de Libreswan version 3.29.

Architecture

Le diagramme suivant présente la disposition générale de la connexion.

Cette image présente la disposition générale des deux clouds connectés avec un VPN site à site et un CPE Libreswan.

Paramètres IPSec pris en charge

Pour obtenir la liste des paramètres IPSec pris en charge (indépendamment du fournisseur) pour toutes les régions, reportez-vous à Paramètres IPSec pris en charge.

Le numéro ASN BGP Oracle pour le domaine de cloud commercial est 31898. Si vous configurez un VPN site à site pour US Government Cloud, reportez-vous à Paramètres de VPN site à site requis pour Government Cloud et à Numéro ASN BGP d'Oracle. Pour United Kingdom Government Cloud, reportez-vous à Numéro ASN BGP d'Oracle.

Configuration

Important

Les instructions de configuration de cette section sont fournies par Oracle Cloud Infrastructure pour Libreswan. Pour toute assistance, consultez la documentation Libreswan.

Libreswan prend en charge les tunnels basés sur un routage et basés sur une stratégie. Les types de tunnel peuvent coexister sans interférer l'un avec l'autre. Les têtes de réseau du VPN Oracle utilisent des tunnels basés sur un routage. Oracle recommande de configurer Libreswan avec la syntaxe de configuration d'interface de tunnel virtuel.

Pour plus d'informations sur les paramètres spécifiques utilisés dans ce document, reportez-vous à Paramètres IPSec pris en charge.

Fichiers de configuration Libreswan par défaut

L'installation par défaut de Libreswan crée les fichiers suivants :

  • etc/ipsec.conf : racine de la configuration Libreswan.
  • /etc/ipsec.secrets : racine de l'emplacement où Libreswan recherche les clés secrètes (les clés prépartagées du tunnel).
  • /etc/ipsec.d/ : répertoire de stockage des fichiers .conf et .secrets pour les tunnels Oracle Cloud Infrastructure (par exemple, oci-ipsec.conf et oci-ipsec.secrets). Libreswan vous encourage à créer ces fichiers dans ce dossier.

Le fichier etc/ipsec.conf par défaut inclut la ligne suivante :

include /etc/ipsec.d/*.conf

Le fichier etc/ipsec.secrets par défaut inclut la ligne suivante :

include /etc/ipsec.d/*.secrets

Les lignes précédentes fusionnent automatiquement tous les fichiers .conf et .secrets du répertoire /etc/ipsec.d dans les fichiers de configuration et de clés secrètes principaux utilisés par Libreswan.

A propos de l'utilisation d'IKEv2

Oracle prend en charge Internet Key Exchange version 1 (IKEv1) et version 2 (IKEv2). Si vous configurez la connexion IPSec dans la console pour qu'elle utilise IKEv2, vous devez configurer le CPE afin qu'il utilise uniquement IKEv2 et les paramètres de cryptage IKEv2 associés pris en charge par votre CPE. Pour obtenir la liste des paramètres pris en charge par Oracle pour IKEv1 ou IKEv2, reportez-vous à Paramètres IPSec pris en charge.

La version IKE est spécifiée lors de la définition du fichier de configuration IPSec dans la tâche 4 de la section suivante. Dans cet exemple de fichier, il existe un commentaire expliquant comment configurer IKEv1 et IKEv2.

Processus de configuration

Tâche 1 : préparer l'instance AWS Libreswan
  1. A l'aide des API ou de la console AWS, créez une machine virtuelle Libreswan en utilisant son processus de provisionnement. Utilisez Oracle Linux, CentOS ou Red Hat comme système d'exploitation principal.
  2. Une fois la nouvelle instance démarrée, connectez-vous à celle-ci avec SSH et installez le package Libreswan :

    sudo yum -y install libreswan
  3. Sur la console AWS, désactivez les vérifications de source et de destination sur l'instance de machine virtuelle Libreswan en cliquant avec le bouton droit de la souris sur l'instance, puis en cliquant sur Networking et sur Change Source/Dest. Check. A l'invite, cliquez sur Yes, Disable.

    Cette image présente la boîte de dialogue de la console AWS permettant de désactiver la vérification de source/destination sur l'instance de machine virtuelle Libreswan.
  4. Sur la machine virtuelle Libreswan, configurez IP_forward de façon à permettre aux clients AWS d'envoyer et de recevoir du trafic via la machine virtuelle Libreswan. Dans le fichier /etc/sysctl.conf, définissez les valeurs suivantes et appliquez les mises à jour avec sudo sysctl -p.

    net.ipv4.ip_forward=1
    net.ipv4.conf.all.accept_redirects = 0
    net.ipv4.conf.all.send_redirects = 0
    net.ipv4.conf.default.send_redirects = 0
    net.ipv4.conf.eth0.send_redirects = 0
    net.ipv4.conf.default.accept_redirects = 0
    net.ipv4.conf.eth0.accept_redirects = 0
  5. Dans la console AWS, modifiez la table de routage AWS. Ajoutez une règle avec le CIDR de réseau cloud virtuel (172.0.0.0/16) en tant que destination et l'ID de l'instance AWS Libreswan (i-016ab864b43cb368e dans cet exemple) en tant que cible.

    Cette image présente la boîte de dialogue de la console AWS permettant de modifier une règle de routage.
  6. Dans la console AWS, autorisez les trafics TCP et UDP entrants sur les ports 4500 et 500 pour permettre une connexion IPSec de VPN site à site Oracle Cloud Infrastructure à la machine virtuelle AWS Libreswan. Cette tâche inclut la modification des groupes de sécurité AWS et des listes de contrôle d'accès réseau. Vous pouvez définir la valeur source sur l'adresse IP publique Oracle (adresse du tunnel IPSec de la tête de réseau du VPN Oracle) au lieu de 0.0.0.0/0.

    Pour les groupes de sécurité :

    Cette image présente la boîte de dialogue de la console AWS permettant de modifier les règles de groupe de sécurité.

    Pour les listes de contrôle d'accès réseau :

    Cette image présente la boîte de dialogue de la console AWS permettant de modifier les listes de contrôle d'accès réseau.
Tâche 2 : configurer la passerelle de routage dynamique Oracle Cloud Infrastructure et l'objet CPE
  1. Dans la console Oracle, créez un objet CPE (Customer-Premises Equipment) qui pointe vers l'adresse IP publique de l'instance AWS Libreswan (34.200.255.174). Pour ce faire, utilisez l'application d'aide de configuration de CPE.

  2. Si aucune passerelle de routage dynamique n'est attachée au réseau cloud virtuel : dans la console Oracle, créez une passerelle de routage dynamique et attachez-la au réseau cloud virtuel (172.0.0.0/16).

  3. Dans la console Oracle, créez une connexion IPSec et faites-la pointer vers le CIDR AWS VPC (10.0.0.0/16). En d'autres termes, lorsque vous créez la connexion IPSec, définissez son routage statique sur le CIDR AWS VPC.

    Pour chaque connexion IPSec configurée, Oracle crée deux tunnels et affecte les éléments suivants à chacun d'eux :

    • Adresse du tunnel IPSec de la tête de réseau du VPN Oracle
    • Clé secrète partagée du tunnel VPN Oracle

    Vous pouvez afficher le statut du tunnel IPSec et l'adresse IP de la tête de réseau du VPN Oracle en cliquant sur le menu Actions (Menu Actions) de la connexion IPSec, puis sur Afficher les détails. L'état initial de chaque tunnel est DOWN (hors ligne) car vous devez effectuer des étapes de configuration supplémentaires ultérieurement sur la machine virtuelle AWS Libreswan.

    Pour afficher la clé secrète partagée, cliquez sur le menu Actions (Menu Actions) d'un tunnel, puis cliquez sur Visualiser les détails. En regard de Clé secrète partagée, cliquez sur Afficher.

  4. Dans la console Oracle, modifiez les règles de sécurité du réseau cloud virtuel afin d'autoriser les trafics TCP et UDP entrants sur les ports 4500 et 500 comme vous l'avez fait pour les groupes de sécurité et les listes de contrôle d'accès réseau AWS. Vous pouvez utiliser l'adresse IP publique de la machine virtuelle AWS Libreswan à la place de 0.0.0.0/0 s'il s'agit d'une adresse IP publique persistante. Ouvrez également tous les protocoles et ports au trafic entrant à partir du CIDR AWS VPC (10.0.0.0/16). Rappel : les listes de sécurité sont associées à un sous-réseau, vous devez donc modifier la liste de sécurité associée à chaque sous-réseau devant communiquer avec AWS VPC. Si vous utilisez des groupes de sécurité réseau de réseau cloud virtuel, modifiez les règles des groupes de sécurité réseau correspondants.

  5. Dans la console Oracle, modifiez les tables de routage du réseau cloud virtuel pour ajouter une règle qui possède le CIDR AWS VPC (10.0.0.0/16) en tant que bloc CIDR de destination et la passerelle de routage dynamique précédemment créée en tant que cible. Rappel : les tables de routage sont associées à un sous-réseau, vous devez donc modifier la table de routage associée à chaque sous-réseau devant communiquer avec AWS VPC.

Tâche 3 : déterminer les valeurs de configuration requises

La configuration Libreswan utilise les variables suivantes. Déterminez les valeurs avant de procéder à la configuration.

  • ${cpeLocalIP} : adresse IP de votre dispositif Libreswan.
  • ${cpePublicIpAddress} : adresse IP publique pour Libreswan. Il s'agit de l'adresse IP de votre interface externe. Selon la topologie du réseau, la valeur peut être différente de ${cpeLocalIP}.
  • ${oracleHeadend1} : pour le premier tunnel, adresse IP publique Oracle obtenue à partir de la console Oracle.
  • ${oracleHeadend2} : pour le deuxième tunnel, adresse IP publique Oracle obtenue à partir de la console Oracle.
  • ${vti1} : nom de la première interface de tunnel virtuel utilisée. Par exemple, vti1.
  • ${vti2} : nom de la seconde interface de tunnel virtuel utilisée. Par exemple, vti2.
  • ${sharedSecret1} : clé prépartagée du premier tunnel. Vous pouvez utiliser la clé prépartagée par défaut fournie par Oracle ou indiquer votre propre clé lors de la configuration de la connexion IPSec dans la console Oracle.
  • ${sharedSecret2} : clé prépartagée du deuxième tunnel. Vous pouvez utiliser la clé prépartagée par défaut fournie par Oracle ou indiquer votre propre clé lors de la configuration de la connexion IPSec dans la console Oracle.
  • ${vcnCidrNetwork} : plage d'adresses IP du réseau cloud virtuel.
Tâche 4 : définir le fichier de configuration /etc/ipsec.d/oci-ipsec.conf

La configuration Libreswan utilise le concept de gauche et de droite pour définir les paramètres de configuration de l'appareil CPE local et de la passerelle distante. Chaque côté de la connexion (appelée conn dans la configuration Libreswan) peut être un côté gauche ou droit, mais la configuration de cette connexion doit être cohérente. Dans cet exemple :

  • Left : votre CPE Libreswan local
  • Right : tête de réseau du VPN Oracle

Utilisez le modèle suivant pour votre fichier /etc/ipsec.d/oci-ipsec.conf. Le fichier définit les deux tunnels créés par Oracle lors de la configuration de la connexion IPSec.

Important

Si le CPE se trouve derrière un dispositif NAT 1 à 1, annulez la mise en commentaire du paramètre leftid et définissez-le sur ${cpePublicIpAddress}.
conn oracle-tunnel-1
     left=${cpeLocalIP}
     # leftid=${cpePublicIpAddress} # See preceding note about 1-1 NAT device
     right=${oracleHeadend1}
     authby=secret
     leftsubnet=0.0.0.0/0 
     rightsubnet=0.0.0.0/0
     auto=start
     mark=5/0xffffffff # Needs to be unique across all tunnels
     vti-interface=${vti1}
     vti-routing=no
     ikev2=no # To use IKEv2, change to ikev2=insist
     ike=aes_cbc256-sha2_384;modp1536
     phase2alg=aes_gcm256;modp1536
     encapsulation=yes
     ikelifetime=28800s
     salifetime=3600s
conn oracle-tunnel-2
     left=${cpeLocalIP}
     # leftid=${cpePublicIpAddress} # See preceding note about 1-1 NAT device
     right=${oracleHeadend2}
     authby=secret
     leftsubnet=0.0.0.0/0
     rightsubnet=0.0.0.0/0
     auto=start
     mark=6/0xffffffff # Needs to be unique across all tunnels
     vti-interface=${vti2}
     vti-routing=no
     ikev2=no # To use IKEv2, change to ikev2=insist
     ike=aes_cbc256-sha2_384;modp1536
     phase2alg=aes_gcm256;modp1536
     encapsulation=yes
     ikelifetime=28800s
     salifetime=3600s
Tâche 5 : configurer le fichier de clés secrètes /etc/ipsec.d/oci-ipsec.secrets

Utilisez le modèle suivant pour votre fichier /etc/ipsec.d/oci-ipsec.secrets. Il contient deux lignes par connexion à IPSec (une ligne par tunnel).

${cpePublicIpAddress} ${ipAddress1}: PSK "${sharedSecret1}"
${cpePublicIpAddress} ${ipAddress2}: PSK "${sharedSecret2}"
Tâche 6 : redémarrer la configuration de Libreswan

Après avoir configuré vos fichiers de configuration et de clés secrètes, vous devez redémarrer le service Libreswan à l'aide de la commande suivante.

Important

Le redémarrage du service Libreswan peut avoir une incidence sur les tunnels existants.
service ipsec restart
Tâche 7 : configurer le routage IP

Utilisez la commande ip suivante pour créer des routages statiques qui envoient le trafic vers votre réseau cloud virtuel par le biais des tunnels IPSec. Si vous êtes connecté avec un compte utilisateur sans privilège, vous devrez peut-être utiliser sudo avant la commande.

Important

Les routages statiques créés avec la commande ip route ne sont pas persistants en cas de redémarrage. Pour savoir comment rendre vos routages persistants, reportez-vous à la documentation de votre distribution Linux.
ip route add ${VcnCidrBlock} nexthop dev ${vti1} nexthop dev ${vti2}
ip route show

Vérification

Le service Monitoring est également disponible auprès d'Oracle Cloud Infrastructure pour surveiller de façon active et passive vos ressources cloud. Pour plus d'informations sur la surveillance du VPN site à site, reportez-vous à Mesures de VPN site à site.

Si vous rencontrez des problèmes, reportez-vous à Dépannage de VPN site à site.

Vérification du statut de Libreswan

Vérifiez l'état actuel des tunnels Libreswan à l'aide de la commande suivante :

ipsec status

Le tunnel est établi si une ligne comprenant les éléments suivants apparaît :

STATE_MAIN_I4: ISAKMP SA established

Si vous utilisez IKEv2, la ligne suivante apparaît :

STATE_V2_IPSEC_I (IPsec SA established)

A l'avenir, si vous devez créer un ticket de support auprès d'Oracle pour votre tunnel Libreswan, incluez la sortie de la commande ipsec status précédente.

Vérification du statut de l'interface de tunnel

Vérifiez si les interfaces de tunnel virtuel sont démarrées ou arrêtées à l'aide de la commande ifconfig ou ip link show. Vous pouvez également utiliser des applications telles que tcpdump avec les interfaces.

Voici un exemple de sortie ifconfig avec une implémentation Libreswan fonctionnelle indiquant les interfaces de tunnel virtuel disponibles.

ifconfig
<output trimmed>
                 
vti01: flags=209<UP,POINTOPOINT,RUNNING,NOARP> mtu 8980
     inet6 2001:db8::1 prefixlen 64 scopeid 0x20<link>
     tunnel txqueuelen 1000 (IPIP Tunnel)
     RX packets 0 bytes 0 (0.0 B)
     RX errors 0 dropped 0 overruns 0 frame 0
     TX packets 0 bytes 0 (0.0 B)
     TX errors 10 dropped 0 overruns 0 carrier 10 collisions 0
 
vti02: flags=209<UP,POINTOPOINT,RUNNING,NOARP> mtu 8980
     inet6 2001:db8::2 prefixlen 64 scopeid 0x20<link>
     tunnel txqueuelen 1000 (IPIP Tunnel)
     RX packets 0 bytes 0 (0.0 B)
     RX errors 0 dropped 0 overruns 0 frame 0
     TX packets 0 bytes 0 (0.0 B)
     TX errors 40 dropped 0 overruns 0 carrier 40 collisions 0

Voici un exemple de sortie ip link show :

ip link show
<output trimmed>
 
9: vti01@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 8980 qdisc noqueue
state UNKNOWN mode DEFAULT group default qlen 1000
   link/ipip 10.1.2.3 peer 192.168.0.51
 
10: vti02@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 8980 qdisc noqueue
state UNKNOWN mode DEFAULT group default qlen 1000
   link/ipip 10.1.2.3 peer 192.168.0.49

En outre, dans la console Oracle, chaque tunnel IPSec doit maintenant avoir l'état UP.