Zurück zu den Updates
New releaseSep 8, 2026

strongswan v6.1.0

strongSwan - IPsec-basiertes VPN

Teilen

strongSwan-Konfiguration

Übersicht

strongSwan ist eine Open-Source-IPsec-basierte VPN-Lösung.

Dieses Dokument ist nur eine kurze Einführung in den swanctl-Befehl von strongSwan, der die moderne vici Versatile IKE Configuration Interface verwendet. Der veraltete ipsec-Befehl mit der älteren stroke-Konfigurationsschnittstelle wird hier beschrieben. Für detailliertere Informationen konsultieren Sie die Manpages, unsere neue Dokumentationsseite und das alte Wiki.

Schnellstart

Zertifikate für Benutzer, Hosts und Gateways werden von einer fiktiven strongSwan-CA ausgestellt. In unseren Beispielszenarien muss das CA-Zertifikat strongswanCert.pem auf allen VPN-Endpunkten vorhanden sein, um die Peers authentifizieren zu können. Für Ihre spezielle VPN-Anwendung können Sie entweder Zertifikate einer beliebigen Drittanbieter-CA verwenden oder die benötigten privaten Schlüssel und Zertifikate selbst mit dem strongSwan-pki-Werkzeug erzeugen, dessen Verwendung in einem der folgenden Abschnitte erläutert wird.

Site-to-Site-Szenario

In diesem Szenario verbinden zwei Sicherheits-Gateways moon und sun die beiden Subnetze moon-net und sun-net über einen zwischen den beiden Gateways aufgebauten VPN-Tunnel miteinander:

10.1.0.0/16 -- | 192.168.0.1 | === | 192.168.0.2 | -- 10.2.0.0/16
  moon-net          moon                 sun           sun-net

Konfiguration auf Gateway 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
                }
            }
        }
    }

Konfiguration auf Gateway 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
                }
            }
        }
    }

Die in diesem Szenario verwendeten lokalen und entfernten Identitäten sind die subjectDistinguishedNames, die in den Endentitätszertifikaten enthalten sind. Die Zertifikate und privaten Schlüssel werden mit dem Befehl

swanctl --load-creds

in den charon-Daemon geladen, während

swanctl --load-conns

die in swanctl.conf definierten Verbindungen lädt. Mit start_action = trap wird die IPsec-Verbindung automatisch mit dem ersten unverschlüsselten IP-Paket aufgebaut, das durch den Tunnel geleitet werden soll.

Host-zu-Host-Szenario

Dies ist ein Aufbau zwischen zwei einzelnen Hosts, hinter denen sich kein Subnetz befindet. Obwohl der IPsec-Transportmodus für Host-zu-Host-Verbindungen ausreichen würde, verwenden wir den standardmäßigen IPsec-Tunnelmodus.

| 192.168.0.1 | === | 192.168.0.2 |
     moon                sun

Konfiguration auf Host 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
                }
            }
        }
    }

Konfiguration auf Host 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
                }
            }
        }
    }

Roadwarrior-Szenario

Dies ist ein sehr häufiger Fall, bei dem ein strongSwan-Gateway einer beliebigen Anzahl von Remote-VPN-Clients dient, die normalerweise dynamische IP-Adressen haben.

10.1.0.0/16 -- | 192.168.0.1 | === | x.x.x.x |
  moon-net          moon              carol

Konfiguration auf Gateway 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
                }
            }
        }
    }

Konfiguration auf 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
                }
            }
        }
    }

Für remote_addrs wurde der Hostname moon.strongswan.org gewählt, der zur Laufzeit von DNS in die entsprechende IP-Zieladresse aufgelöst wird. In diesem Szenario ist die Identität des Roadwarriors carol die E-Mail-Adresse [email protected], die als subjectAlternativeName in das Roadwarrior-Zertifikat carolCert.pem aufgenommen werden muss.

Roadwarrior-Szenario mit virtueller IP

Roadwarrior haben normalerweise dynamische IP-Adressen, die vom jeweiligen ISP zugewiesen werden. Um das Routing von moon-net zurück zum Remote-Access-Client carol zu vereinfachen, wäre es wünschenswert, wenn der Roadwarrior eine innere IP-Adresse aus einem vordefinierten Pool hätte.

Kategorien