Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
| linux_strongswan [2019/05/16 09:14] – [Titre] nekan | linux_strongswan [2021/03/05 14:15] (Version actuelle) – nekan | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| ====== Installation d'un VPN site à site avec StrongSwan ====== | ====== Installation d'un VPN site à site avec StrongSwan ====== | ||
| + | <label type=" | ||
| Le recours à un VPN est très utile dans différents cas. Les plus importants sont : | Le recours à un VPN est très utile dans différents cas. Les plus importants sont : | ||
| Ligne 7: | Ligne 8: | ||
| Sous linux, il existe plusieurs possibilités pour établir un tunnel VPN. Les plus courantes seront OpenVPN, intéressant dans le cadre d'un poste itinérant, et StrongSwan, pour les tunnel IPSec site à site. | Sous linux, il existe plusieurs possibilités pour établir un tunnel VPN. Les plus courantes seront OpenVPN, intéressant dans le cadre d'un poste itinérant, et StrongSwan, pour les tunnel IPSec site à site. | ||
| - | <note important>Ce tutoriel a été réalisé sur deux debian stretch (version 9.4 et 9.7) et en tant que root.</note> | + | <callout type=" |
| ===== Installation ===== | ===== Installation ===== | ||
| * On commence par mettre à jour notre base de paquets. | * On commence par mettre à jour notre base de paquets. | ||
| - | <code bash> | + | <sxh bash> |
| * On installe le paquet nécessaire. | * On installe le paquet nécessaire. | ||
| - | <code bash> | + | <sxh bash> |
| * La partie " | * La partie " | ||
| Ligne 36: | Ligne 37: | ||
| * La plage d' | * La plage d' | ||
| - | <note warning> | + | <callout type="warning" icon=" |
| Voici donc mon tableau récapitulatif : | Voici donc mon tableau récapitulatif : | ||
| Ligne 60: | Ligne 61: | ||
| - | * On édite le fichier de configuration. | + | |
| - | <code bash> | + | <sxh bash> |
| + | * On ajoute notre interface : | ||
| + | <sxh bash># " | ||
| + | # " | ||
| + | auto eth1:0 | ||
| + | # On déclare l' | ||
| + | iface eth1:0 inet static | ||
| + | address 10.0.1.1/ | ||
| + | * On active notre nouvelle interfacve : | ||
| + | <sxh bash> | ||
| + | | ||
| + | <sxh bash> | ||
| * On écris la configuration choisie dans le fichier : | * On écris la configuration choisie dans le fichier : | ||
| - | <code bash>## On commence par la configuration générale du deamon | + | <sxh bash>## On commence par la configuration générale du daemon |
| config setup | config setup | ||
| # Cette ligne sert à l' | # Cette ligne sert à l' | ||
| Ligne 118: | Ligne 130: | ||
| # On indique notre souhait de forcer l' | # On indique notre souhait de forcer l' | ||
| forceencaps=yes | forceencaps=yes | ||
| - | # Cette ligne permet d' | + | # Cette ligne permet d' |
| # pull pour attendre l' | # pull pour attendre l' | ||
| # push pour établir cette connexion | # push pour établir cette connexion | ||
| modeconfig=push | modeconfig=push | ||
| - | </code> | + | </sxh> |
| * Une fois ce fichier de configuration enregistrée, | * Une fois ce fichier de configuration enregistrée, | ||
| - | <code bash> | + | <sxh bash> |
| * Dans ce fichier, on indique notre PSK (J'ai choisi " | * Dans ce fichier, on indique notre PSK (J'ai choisi " | ||
| - | <code bash># PSK pour test-vpn | + | <sxh bash># PSK pour test-vpn |
| - | 78.79.1.2 89.90.3.4 : PSK " | + | 78.79.1.2 89.90.3.4 : PSK " |
| + | |||
| + | <callout type=" | ||
| Notre première tête de pont est paramétrée. Passons à la seconde. | Notre première tête de pont est paramétrée. Passons à la seconde. | ||
| - | ==== Titre ==== | + | ==== 2ème tête de pont ==== |
| Pour la seconde tête de pont, le cheminement de la configuration est similaire, à l' | Pour la seconde tête de pont, le cheminement de la configuration est similaire, à l' | ||
| + | * On commence par établir une carte réseau virtuelle qui correspond au routeur de la plage destinée aux postes distants : | ||
| + | <sxh bash> | ||
| + | * On ajoute notre interface : | ||
| + | <sxh bash># " | ||
| + | # " | ||
| + | auto eth1:0 | ||
| + | # On déclare l' | ||
| + | iface eth1:0 inet static | ||
| + | address 10.0.2.1/ | ||
| + | * On active notre nouvelle interfacve : | ||
| + | <sxh bash> | ||
| + | * On édite le fichier de configuration d' | ||
| + | <sxh bash> | ||
| + | * On écris la configuration choisie dans le fichier : | ||
| + | <sxh bash>## On commence par la configuration générale du daemon ipsec | ||
| + | config setup | ||
| + | # Cette ligne sert à l' | ||
| + | charondebug=" | ||
| + | |||
| + | ## Ce bloc correspond aux paramètres de notre tunnel VPN. On peut utiliser un autre nom que celui de l' | ||
| + | conn test-vpn | ||
| + | # On indique le mode de démarrage du tunnel | ||
| + | auto=start | ||
| + | # On indique le type de tunnel | ||
| + | type=tunnel | ||
| + | # On indique la version du protocole IKE | ||
| + | keyexchange=ikev2 | ||
| + | ## Les lignes suivantes sont optionnelles mais utiles. Elles permettent de vérifier si la connexion est toujours active. | ||
| + | # C'est le DPD (Dead Peer Detection) | ||
| + | closeaction=hold | ||
| + | dpdaction=hold | ||
| + | dpddelay=30s | ||
| + | dpdtimeout=150s | ||
| + | ## Les lignes suivantes sont optionnelles mais utiles. Elles permettent de relancer la connexion en cas d' | ||
| + | rekey=yes | ||
| + | keyingtries=5 | ||
| + | |||
| + | ## Le bloc " | ||
| + | # " | ||
| + | left= 192.168.0.1 | ||
| + | # " | ||
| + | leftid= 89.90.3.4 | ||
| + | # " | ||
| + | leftsubnet=10.0.2.1/ | ||
| + | # La ligne suivante indique la présence d'un pare-feu | ||
| + | leftfirewall=yes | ||
| + | |||
| + | ## Le bloc " | ||
| + | # " | ||
| + | right= 78.79.1.2 | ||
| + | rightid= 78.79.1.2 | ||
| + | # " | ||
| + | rightsubnet= 10.0.1.0/ | ||
| + | |||
| + | ## Ici, on commence les paramétrages de la phase 1 (ISAKMP) | ||
| + | # On indique le type d' | ||
| + | authby=secret | ||
| + | # On indique nos choix de chiffrement et le groupe Diffie-Hellman | ||
| + | ike=aes256-sha256-modp2048 | ||
| + | # On indique la durée de vie de la phase 1 | ||
| + | ikelifetime=28800s | ||
| + | | ||
| + | ## Ici, on commence les paramétrage de la phase 2 (IPSEC) | ||
| + | # On indique nos choix de chiffrement et le groupe Diffie-Hellman | ||
| + | esp=aes256-sha256-modp2048 | ||
| + | # On indique la durée de vie de la phase 1 | ||
| + | lifetime=1h | ||
| + | # On indique notre souhait de forcer l' | ||
| + | forceencaps=yes | ||
| + | # Cette ligne permet d' | ||
| + | # pull pour attendre l' | ||
| + | # push pour établir cette connexion | ||
| + | modeconfig=push | ||
| + | </ | ||
| + | |||
| + | <callout type=" | ||
| + | |||
| + | * Une fois ce fichier de configuration enregistrée, | ||
| + | <sxh bash> | ||
| + | * Dans ce fichier, on indique notre PSK (J'ai choisi " | ||
| + | <sxh bash># PSK pour test-vpn | ||
| + | 89.90.3.4 78.79.1.2 : PSK " | ||
| + | |||
| + | <callout type=" | ||
| + | |||
| + | La configuration des deux têtes de pont est maintenant terminée. Il ne reste plus qu'à lancer la connexion. | ||
| + | |||
| + | ===== Prise en compte des paramétrages ===== | ||
| + | |||
| + | Pour établir la connexion, il faut d' | ||
| + | |||
| + | <callout type=" | ||
| + | |||
| + | * Du coup, pour redémarrer le daemon ipsec : | ||
| + | <sxh bash>/ | ||
| + | |||
| + | * Sinon, pour recharger la configuration, | ||
| + | <sxh bash> | ||
| + | * On recharge la configuration : | ||
| + | <sxh bash> | ||
| + | * On recharge tous les secrets et autres paramètres supplémentaires : | ||
| + | <sxh bash> | ||
| + | |||
| + | |||
| + | ===== Établissement de la connexion ===== | ||
| + | |||
| + | Il ne nous reste plus qu'à établir la connexion. Pour cela : | ||
| + | * On commence par vérifier si notre connexion n'est pas déjà établie (nous avons choisi un mode de démarrage automatique). | ||
| + | <sxh bash> | ||
| + | |||
| + | Si la connexion existe déjà, la console nous renvoie des informations de ce genre : | ||
| + | <sxh bash> | ||
| + | uptime: 17 hours, since May 15 18:06:34 2019 | ||
| + | malloc: sbrk 1810432, mmap 0, used 1228912, free 581520 | ||
| + | worker threads: 11 of 16 idle, 5/0/0/0 working, job queue: 0/0/0/0, scheduled: 3 | ||
| + | loaded plugins: charon aesni aes rc2 sha2 sha1 md5 random nonce x509 revocation constraints pubkey pkcs1 pkcs7 pkcs8 pkcs12 pgp dnskey sshkey pem openssl fips-prf gmp agent xcbc hmac gcm attr kernel-netlink resolve socket-default connmark stroke updown | ||
| + | Listening IP addresses: | ||
| + | 78.79.1.2 | ||
| + | 10.0.1.1 | ||
| + | Connections: | ||
| + | test-vpn: | ||
| + | test-vpn: | ||
| + | test-vpn: | ||
| + | test-vpn: | ||
| + | Routed Connections: | ||
| + | test-vpn{24}: | ||
| + | test-vpn{24}: | ||
| + | Security Associations (1 up, 0 connecting): | ||
| + | test-vpn[4]: | ||
| + | test-vpn[4]: | ||
| + | test-vpn[4]: | ||
| + | test-vpn{28}: | ||
| + | test-vpn{28}: | ||
| + | test-vpn{28}: | ||
| + | |||
| + | Si ce n'est pas le cas, il suffit d' | ||
| + | <sxh bash> | ||
| + | |||
| + | Nous aurons alors droit à un message de ce type : | ||
| + | <sxh bash> | ||
| + | generating IKE_SA_INIT request 0 [ SA KE No N(NATD_S_IP) N(NATD_D_IP) N(FRAG_SUP) N(HASH_ALG) N(REDIR_SUP) ] | ||
| + | sending packet: from 78.79.1.2[500] to 89.90.3.4[500] (1172 bytes) | ||
| + | received packet: from 89.90.3.4[500] to 78.79.1.2[500] (464 bytes) | ||
| + | parsed IKE_SA_INIT response 0 [ SA KE No N(NATD_S_IP) N(NATD_D_IP) N(FRAG_SUP) N(HASH_ALG) N(MULT_AUTH) ] | ||
| + | remote host is behind NAT | ||
| + | sending cert request for " | ||
| + | authentication of ' | ||
| + | establishing CHILD_SA test-vpn | ||
| + | generating IKE_AUTH request 1 [ IDi N(INIT_CONTACT) CERTREQ IDr AUTH SA TSi TSr N(MOBIKE_SUP) N(ADD_4_ADDR) N(MULT_AUTH) N(EAP_ONLY) ] | ||
| + | sending packet: from 78.79.1.2[4500] to 89.90.3.4[4500] (416 bytes) | ||
| + | received packet: from 89.90.3.4[4500] to 78.79.1.2[4500] (272 bytes) | ||
| + | parsed IKE_AUTH response 1 [ IDr AUTH SA TSi TSr N(AUTH_LFT) N(MOBIKE_SUP) N(ADD_4_ADDR) N(ADD_4_ADDR) N(ADD_4_ADDR) ] | ||
| + | authentication of ' | ||
| + | IKE_SA test-vpn[5] established between 78.79.1.2[78.79.1.2]...89.90.3.4[89.90.3.4] | ||
| + | scheduling reauthentication in 27990s | ||
| + | maximum IKE_SA lifetime 28530s | ||
| + | connection ' | ||
| + | |||
| + | <callout type=" | ||
| + | |||
| + | ===== Résolution des pannes ===== | ||
| + | |||
| + | <panel type=" | ||
| + | Si le tunnel ne veux pas se monter. | ||
| + | </ | ||
| + | <panel type=" | ||
| + | Il est intéressant d' | ||
| + | <sxh bash> | ||
| + | |||
| + | Une autre bonne source d' | ||
| + | <sxh bash> | ||
| + | </ | ||
| + | ~~DISCUSSION~~ | ||