
strongswan v6.1.0
strongSwan - IPsec-basiertes VPN
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.