
strongswan v6.1.0
strongSwan - VPN basé sur IPsec
Configuration de strongSwan
Vue d'ensemble
strongSwan est une solution VPN OpenSource basée sur IPsec.
Ce document n'est qu'une brève introduction de la commande swanctl de strongSwan, qui utilise la moderne vici Versatile IKE Configuration Interface (interface polyvalente de configuration IKE). La commande ipsec obsolète, utilisant l'ancienne interface de configuration stroke, est décrite ici. Pour des informations plus détaillées, consultez les pages de manuel, notre nouveau site de documentation et l'ancien wiki.
Démarrage rapide
Les certificats pour les utilisateurs, les hôtes et les passerelles sont émis
par une autorité de certification (CA) strongSwan fictive. Dans nos scénarios
d'exemple, le certificat CA strongswanCert.pem doit être présent sur tous les
points d'extrémité VPN afin de pouvoir authentifier les pairs. Pour votre
application VPN particulière, vous pouvez soit utiliser des certificats d'une
CA tierce, soit générer vous-même les clés privées et les certificats
nécessaires à l'aide de l'outil pki de strongSwan, dont l'utilisation sera
expliquée dans l'une des sections ci-dessous.
Cas site à site
Dans ce scénario, deux passerelles de sécurité moon et sun connectent les deux sous-réseaux moon-net et sun-net l'un à l'autre via un tunnel VPN établi entre les deux passerelles :
10.1.0.0/16 -- | 192.168.0.1 | === | 192.168.0.2 | -- 10.2.0.0/16
moon-net moon sun sun-net
Configuration sur la passerelle moon :
/etc/swanctl/x509ca/strongswanCert.pem
/etc/swanctl/x509/moonCert.pem
/etc/swanctl/private/moonKey.pem
/etc/swanctl/swanctl.conf:
connections {
net-net {
remote_addrs = 192.168.0.2
local {
auth = pubkey
certs = moonCert.pem
}
remote {
auth = pubkey
id = "C=CH, O=strongSwan, CN=sun.strongswan.org"
}
children {
net-net {
local_ts = 10.1.0.0/16
remote_ts = 10.2.0.0/16
start_action = trap
}
}
}
}
Configuration sur la passerelle sun :
/etc/swanctl/x509ca/strongswanCert.pem
/etc/swanctl/x509/sunCert.pem
/etc/swanctl/private/sunKey.pem
/etc/swanctl/swanctl.conf:
connections {
net-net {
remote_addrs = 192.168.0.1
local {
auth = pubkey
certs = sunCert.pem
}
remote {
auth = pubkey
id = "C=CH, O=strongSwan, CN=moon.strongswan.org"
}
children {
net-net {
local_ts = 10.2.0.0/16
remote_ts = 10.1.0.0/16
start_action = trap
}
}
}
}
Les identités locales et distantes utilisées dans ce scénario sont les subjectDistinguishedNames contenus dans les certificats d'entité finale. Les certificats et les clés privées sont chargés dans le démon charon avec la commande
swanctl --load-creds
tandis que
swanctl --load-conns
charge les connexions définies dans swanctl.conf. Avec start_action = trap,
la connexion IPsec est automatiquement établie dès le premier paquet IP de
charge utile en clair souhaitant traverser le tunnel.
Cas hôte à hôte
Il s'agit d'une configuration entre deux hôtes uniques qui n'ont pas de sous-réseau derrière eux. Bien que le mode transport IPsec serait suffisant pour les connexions hôte à hôte, nous utiliserons le mode tunnel IPsec par défaut.
| 192.168.0.1 | === | 192.168.0.2 |
moon sun
Configuration sur l'hôte moon :
/etc/swanctl/x509ca/strongswanCert.pem
/etc/swanctl/x509/moonCert.pem
/etc/swanctl/private/moonKey.pem
/etc/swanctl/swanctl.conf:
connections {
host-host {
remote_addrs = 192.168.0.2
local {
auth=pubkey
certs = moonCert.pem
}
remote {
auth = pubkey
id = "C=CH, O=strongSwan, CN=sun.strongswan.org"
}
children {
net-net {
start_action = trap
}
}
}
}
Configuration sur l'hôte sun :
/etc/swanctl/x509ca/strongswanCert.pem
/etc/swanctl/x509/sunCert.pem
/etc/swanctl/private/sunKey.pem
/etc/swanctl/swanctl.conf:
connections {
host-host {
remote_addrs = 192.168.0.1
local {
auth = pubkey
certs = sunCert.pem
}
remote {
auth = pubkey
id = "C=CH, O=strongSwan, CN=moon.strongswan.org"
}
children {
host-host {
start_action = trap
}
}
}
}
Cas Roadwarrior
C'est un cas très courant où une passerelle strongSwan dessert un nombre quelconque de clients VPN distants ayant généralement des adresses IP dynamiques.
10.1.0.0/16 -- | 192.168.0.1 | === | x.x.x.x |
moon-net moon carol
Configuration sur la passerelle moon :
/etc/swanctl/x509ca/strongswanCert.pem
/etc/swanctl/x509/moonCert.pem
/etc/swanctl/private/moonKey.pem
/etc/swanctl/swanctl.conf:
connections {
rw {
local {
auth = pubkey
certs = moonCert.pem
id = moon.strongswan.org
}
remote {
auth = pubkey
}
children {
net-net {
local_ts = 10.1.0.0/16
}
}
}
}
Configuration sur le roadwarrior carol :
/etc/swanctl/x509ca/strongswanCert.pem
/etc/swanctl/x509/carolCert.pem
/etc/swanctl/private/carolKey.pem
/etc/swanctl/swanctl.conf:
connections {
home {
remote_addrs = moon.strongswan.org
local {
auth = pubkey
certs = carolCert.pem
id = [email protected]
}
remote {
auth = pubkey
id = moon.strongswan.org
}
children {
home {
local_ts = 10.1.0.0/16
start_action = start
}
}
}
}
Pour remote_addrs, le nom d'hôte moon.strongswan.org a été choisi ; il sera
résolu par DNS au moment de l'exécution vers l'adresse IP de destination
correspondante. Dans ce scénario, l'identité du roadwarrior carol est
l'adresse e-mail [email protected], qui doit être incluse en tant que
subjectAlternativeName dans le certificat du roadwarrior carolCert.pem.