Retour aux mises à jour
New releaseSep 8, 2026

strongswan v6.1.0

strongSwan - VPN basé sur IPsec

Partager

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.

Cas Roadwarrior avec IP virtuelle

Catégories