stiziwik
Sie befinden sich hier: Willkommen » linux » Strongswan VPN
Zuletzt angesehen: • Strongswan VPN

Strongswan VPN

Strongswan ist eine Opensource VPN-Server Lösung.
Die Software ist in den Ubuntu-Quellen standardmäßig enthalten.
Das es verschiedene Konfigurationsmöglichkeiten gibt, werden hier nur einige aufgeführt.
Weitere Konfigurationen sind in der Strongswan-Wiki beschrieben.

Installation

Installieren kann man Strongswan ganz einfach über

apt install strongswan

IKEv1 IPSEC Authentifizierung mit X.509 Zertifikaten und User-Login

Hier erfolgt die Authentifizierung über Zertifikate und einer Benutzer/Password Anmeldung.
Dafür werden mehrere Zertifikate benötigt.

  • CA Zertifikat
  • VPN-Gateway Zertifikat
  • Host/User Zertifikate

CA mit RSA kodierten Zertifikaten

Ein RSA kodiertes Zertifikat im PEM Format erstellen.
Wer will kann die Zertifikate mit openssl erstellen (siehe hier).
In folgendem Beispiel wird, das im Strongswan, eingebaute tool ipsec pki verwendet, um alle Zertifikate zu erstellen.

Wenn noch keine CA (Certificate Authority) vorhanden ist, kann man sich hiermit eine erstellen.
Alle Zertifikate sind dann, durch die eigene CA auf dem VPN-Server, selbst signiert.

Zuerst wird ein 2048 bit langer, RSA basierter, privater Schlüssel für die CA erstellt.

ipsec pki --gen --outform pem > /usr/local/etc/ipsec.d/private/<NAME_DES_CA_KEYS>.pem

Mit dem Schlüssel erstellt man sich das CA Zertifikat.
Hier mit folgenden möglichen Angaben:

Parameter Beschreibung Definition
–dn Distinguished Name C= [Countryname: 2 Buchstaben für das Land (z.B: DE )]
ST= [Statename: Staat/Bundesland]
L= [City: Name der Stadt]
O= [Organization: Name der Firma]
OU= [Organization Unit: Name der Abteilung]
CN= [Common Name: Eindeutiger Name (z.B. Person oder Host oder … Kann auch so eingegeben werden: CN=<USER>/emailAddress=<MAILADDRESS>)]
CA/emailAddress= [CA Mailaddress: E-Mailadresse der CA]
–lifetime Laufzeit Gültigkeitszeitraum des Zertifikates
–san subjectAltName Hier wählt man am besten den FQDN des IPSec-Gateways
Beim Peer kann hier auch dessen E-Mailadresse angegeben werden
–outform output format Hier wählt man als Format „pem“
ipsec pki --self --in /usr/local/etc/ipsec.d/private/<NAME_DES_CA_KEYS>.pem --dn "<DN_ANGABEN_KOMMA_GETRENNT>" --ca --lifetime <LAUFZEIT> --san <SAN_ANGABEN> --outform <FORMAT> > /usr/local/etc/ipsec.d/cacerts/<NAME_DES_CA_Zertifikates>.pem

Nun können Zertifikate für das VPN-Gateway und für VPN-Clients erstellt werden.

VPN-Gateway Zertifikat

Zuerst wieder den privaten Schlüssel für das VPN-Gateway erstellen.

ipsec pki --gen --outform <FORMAT> > /usr/local/etc/ipsec.d/private/<NAME_VPN-Gateway_KEYS>.pem

Danach die Zertifikatsanfrage an die CA stellen (Den gleichen „–san“, wie beim CA-Zertifikat verwenden).

ipsec pki --req --in /usr/local/etc/ipsec.d/private/<NAME_DES_VPN-Gateway_KEYS>.pem --dn "<ANGABEN_WIE_BEIM_CA_ZERTIFIKAT_MIT_E-MAILADRESSE_DES_VPN-Gateways>" --san <SAN_ANGABEN_WIE_BEIM_CA_ZERTIFIKAT> --password <PASSWORD> > /usr/local/etc/ipsec.d/reqs/<NAME_DES_REQUESTS>.pem

Jetzt das Zertifikat ausstellen (Den gleichen „–san“ verwenden, wie beim CA-Zertifikat).

ipsec pki --pub --in /usr/local/etc/ipsec.d/private/<NAME_DES_VPN-Gateway_KEYS>.pem | ipsec pki --issue --cacert /usr/local/etc/ipsec.d/cacerts/<NAME_DES_CA_ZERTIFIKATES>.pem --cakey /usr/local/etc/ipsec.d/private/<NAME_DES_CA_KEYS>.pem --dn "<ANGABEN_WIE_BEIM_REQUEST>" --san <SAN_ANGABEN_WIE_BEIM_CA_ZERTIFIKAT> --lifetime <LAUFZEIT> --outform <FORMAT> > /usr/local/etc/ipsec.d/certs/<NAME_DES_VPN-GATEWAY_ZERTIFIKATES>.pem

Host/User Zertifikate

Nun wie oben beschrieben die Zertifikate und Schlüssel für VPN-Clients ausstellen (Den gleichen „–san“ verwenden, wie beim CA-Zertifikat):

ipsec pki --gen --outform <FORMAT> > /usr/local/etc/ipsec.d/private/<NAME_DES_PEER_KEYS>.pem
ipsec pki --req --in /usr/local/etc/ipsec.d/private/<NAME_DES_PEER_KEYS>.pem --dn "<ANGABEN_WIE_BEIM_CA_ZERTIFIKAT_MIT_E-MAILADRESSE_DES_VPN_PEERS>" --san <SAN_ANGABEN_HIER_E-MAILADRESSE_DES_PEERS> --password <PASSWORD> > /usr/local/etc/ipsec.d/reqs/<NAME_DES_PEER_REQUESTS>.pem
ipsec pki --pub --in /usr/local/etc/ipsec.d/private/<NAME_DES_PEER_KEYS>.pem | ipsec pki --issue --cacert /usr/local/etc/ipsec.d/cacerts/<NAME_DES_CA_ZERTIFIKATES>.pem --cakey /usr/local/etc/ipsec.d/private/<NAME_DES_CA_KEYS>.pem --dn "<ANGABEN_WIE_BEIM_CA_ZERTIFIKAT_MIT_E-MAILADRESSE_DES_VPN_PEERS>" --san <SAN_ANGABEN_WIE_BEIM_CA_ZERTIFIKAT> --lifetime <LAUFZEIT> --outform <FORMAT> > /usr/local/etc/ipsec.d/certs/<NAME_DES_PEER_ZERTIFIKATES>.pem

Zertifikate Sperren

Wenn ein Zertifikat wiederrufen werden muß (z. B. weil der Host/User nicht mehr gültig ist) dann erstellt man sich „crls“ (Certificate Revocation Lists).

ipsec pki --signcrl --cacert /usr/local/etc/ipsec.d/cacerts/<NAME_DES_CA_ZERTIFIKATES>.pem --cakey /usr/local/etc/ipsec.d/private/<NAME_DES_CA_KEYS>.pem --reason superseded --cert /usr/local/etc/ipsec.d/certs/<NAME_DES_PEER_ZERTIFIKATES>.pem --outform <FORMAT> > /usr/local/etc/ipsec.d/crls/<NAME_DER_PEER_CRL>.pem

CRLs werden in regelmäßigen Abständen geprüft.

Anzeigen welche Zertifikate sich aktuell in der CRL befinden:

ipsec listcrls

Wenn ein Zertifikat entsperren werden soll, löscht man dieses aus /usr/local/etc/ipsec.d/crls.
Danach abwarten bis strongswan die CRLS überprüft hat.
Für ungeduldige Admins, strongswan neustarten.

systemctl restart ipsec

Strongswan Konfiguration

ipsec.conf:

# ipsec.conf - strongSwan IPsec configuration file

# basic configuration


config setup

conn %default
        left=%defaultroute
        leftauth=pubkey
        leftid="<ID: FQDN_ODER_UFQDN_ODER_IP_DES_VPN-GATEWAYS_ODER_DN-Angaben_AUS_ZERTIFIKATEN>"
	leftcert=<VPN-GATEWAY_ZERTIFIKAT>
        leftrsasigkey=%cert
	leftfirewall=yes
	rightauth=pubkey
        rightauth2=xauth
        ikelifetime=4m
        keylife=2m
        rekeymargin=1m
        keyingtries=1
        rekeyfuzz=75%
        keyexchange=ikev1
        type=tunnel
        compress=yes
        ike=3des-sha1-modp1024
        esp=3des-sha1-modp1024
        dpdaction=clear
        dpddelay=30s
        dpdtimeout=120s
        auto=add

conn <NAME>
        leftsubnet=0.0.0.0/0        
        lefthostaccess=yes
        rightcert=<VPN_PEER_ZERTIFIKAT>
        rightrsasigkey=%cert
        rightid="<ID: FQDN_ODER_UFQDN_ODER_IP_DES_VPN-GATEWAYS_ODER_DN-Angaben_AUS_ZERTIFIKATEN>"
        rightsourceip=<VIRTUELLE_IP_DIE_DER_PEER_ERHALTEN_SOLL_IM_CIDR_FORMAT>
        rightsubnet=0.0.0.0/0
        right=%any
        rekey=no
        auto=add

Authentifizierung Konfiguration

ipsec.secrets Auf Leerzeichen achten:

# This file holds shared secrets or RSA private keys for inter-Pluto
# authentication.  See ipsec_pluto(8) manpage, and HTML documentation.

# RSA private key for this host, authenticating it to any other host
# which knows the public part.  Suitable public keys, for ipsec.conf, DNS,
# or configuration of other implementations, can be extracted conveniently
# with "ipsec showhostkey".

# this file is managed with debconf and will contain the automatically created private key
#include /var/lib/strongswan/ipsec.secrets.inc

: RSA <VPN-GATEWAY_KEY> "<PASSWORD_DES_ZERTIFIKATS>"

<USER> : XAUTH "<PASSWORD>"

Shrew-Client Konfiguration

Als VPN-Client kann Shrew Soft VPN von Shrew Soft Inc. verwendet werden.

Shrew ist in den Ubuntu Softwarequellen enthalten.

apt install ike-qtgui

Angaben zu Zertifikaten (die langen Schlüssel) sind hier nur Beispiele.
Zertifikate sollten in der GUI selbst des VPN-Clients eingerichtet werden.

n:version:4
n:network-ike-port:500
n:network-mtu-size:1380
n:client-addr-auto:0
n:network-natt-port:4500
n:network-natt-rate:15
n:network-frag-size:540
n:network-dpd-enable:0
n:network-notify-enable:1
n:client-banner-enable:0
n:client-dns-used:1
n:client-dns-auto:0
n:client-dns-suffix-auto:0
n:phase1-dhgroup:2
n:phase1-keylen:0
n:phase1-life-secs:2400
n:phase1-life-kbytes:0
n:vendor-chkpt-enable:0
n:phase2-keylen:0
n:phase2-pfsgroup:2
n:phase2-life-secs:120
n:phase2-life-kbytes:0
n:policy-nailed:0
n:policy-list-auto:1
s:auth-server-cert-name:<CA_ZERTIFIKAT>.pem
b:auth-server-cert-data:LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUR0ekNDQXArZ0F3SUJBZ0lKQVB1RUhscUxqY2pRTUEwR0NTcUdTSWIzRFFFQkJRVUFNRnN4Q3pBSkJnTlYKQkFZVEFrUkZNUXd3Q2dZRFZRUUlFd05PVWxjeERUQUxCZ05WQkFjVEJFaHZkMmt4RGpBTUJnTlZCQW9UQlhOMAphWHBwTVFzd0NRWURWUVFMRXdKSlZERVNNQkFHQTFVRUF4TUpWV0oxYzNaeUlFTmhNQjRYRFRFek1EWXpNREV5Ck5Ua3hObG9YRFRFNE1EWXlPVEV5TlRreE5sb3dXekVMTUFrR0ExVUVCaE1DUkVVeEREQUtCZ05WQkFnVEEwNVMKVnpFTk1Bc0dBMVVFQnhNRVNHOTNhVEVPTUF3R0ExVUVDaE1GYzNScGVta3hDekFKQmdOVkJBc1RBa2xVTVJJdwpFQVlEVlFRREV3bFZZblZ6ZG5JZ1EyRXdnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCCkFRRG1VVisvNjB2cUtBb2JsOW9EUHNHT3BFOTdmSitZTkt4ZEcrQ2J4aEg5ZTU2VUVZQUJzTHhZbERTVDlmRWsKSktTNWtnY3pzZ0dnRndhb0RxVU5DUTlQTWc4NVUxUGtVY0V6V2hvY0FmTlBnaXA2L0QydkJPeEVWVEpHWTFjcQo1WWprc0pUK2xxY3ZhZ0R0bVZwM1dtZ3FNdTZsVnhVVmxqMEF0eTZLVTlVOTBBY252QlFta0IyTVVEZ0hlWkdFCjNqeUppQTZwU2l3ZnpzQW5NNnRtV3RoM3V2K2pwQVBHNnNWVlh3YlEwRlMyaWxBYWNYWWhBNlJHQ0tvTHZJVGMKR2F5UG43c3owSnQ2cEtHL1pHYmd0alJra0FqM1BMOTUrM2lTQkxQckN2TGJuTnBlYUhPNVo5K28rQWxQYncyMwo0RTNGOTF2VmQ5L0UrTEtDTCtHYUNLekRBZ01CQUFHamZqQjhNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdEZ1lEClZSMFBBUUgvQkFRREFnRUdNQjBHQTFVZERnUVdCQlFaQjMrNzVYOWU3TExkRlMzVGh2bW12VC90TFRBZkJnTlYKSFNNRUdEQVdnQlFaQjMrNzVYOWU3TExkRlMzVGh2bW12VC90TFRBWkJnTlZIUkVFRWpBUWdnNTFZblZ6ZG5JdQpZWE11YUc5dFpUQU5CZ2txaGtpRzl3MEJBUVVGQUFPQ0FRRUFRODBtN0RHR2lvYkZRNVRzMkk&/51czdWhZekViCkFUMDNacDZRbXprQ1pWbXNzQTJrR2YzeVVVV3pna2h3VFE5WHdOdk8wbjd6SUtjL210Vk0rMStyQjZTdjhNcWgKK0k2Z3N0UElLalJCeDBvc0lZU1h4a2VQd1gxcEdEcGZ0dU1XZXQ0SXhYQmJQN2YyUElkZmg0TWs2dUNTeHRVSAo0dWVIZkhRdFNSNzJVb00wVXYxQXVNaFd0UElrRFNMUGVQYkMycVlXRkd5ejJsNXJkWFJlZDJuajJJclJGM0FyCkQ3RGo2K2RHc1JVeE5Cem5WUEZJUmNpeVh0YThnVDAxMWkzWktob1c0UmJ6blh6YjVmbllnOE93YW1sMDU5TlAKZEtBeFFuV3kxYzVHZTJTNytPMWdQd21uSExSY0QvZkJLZXJHN2NqMVNZbk5PTXEyQTBudkxNTWRxQT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
s:auth-client-cert-name:<USER-PEER_ZERTIFIKAT>.pem
b:auth-client-cert-data:LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURmekNDQW1lZ0F3SUJBZ0lKQUsydUJlWEtySDdrTUEwR0NTcUdTSWIzRFFFQkJRVUFNRnN4Q3pBSkJnTlYKQkFZVEFrUkZNUXd3Q2dZRFZRUUlFd05PVWxjeERUQUxCZ05WQkFjVEJFaHZkMmt4RGpBTUJnTlZCQW9UQlhOMAphWHBwTVFzd0NRWURWUVFMRXdKSlZERVNNQkFHQTFVRUF4TUpWV0oxYzNaeUlFTmhNQjRYRFRFek1EWXpNREV6Ck1EWXpNVm9YRFRFNE1EWXlPVEV6TURZek1Wb3dZekVMTUFrR0ExVUVCaE1DUkVVeEREQUtCZ05WQkFnVEEwNVMKVnpFTk1Bc0dBMVVtgDSSSRVNHOTNhVEVPTUF3R0ExVUVDaE1GYzNScGVta3hDekFKQmdOVkJBc1RBa2xVTVF3dwpDZ1lEVlFRREV3TkJaR2t4RERBS0JnTlZCQU1UQTBGa2FUQ0NBU0l3RFFZSktvWklodmNOQVFFQkJRQURnZ0VQCkFEQ0NBUW9DZ2dFQkFOV2VMVHpTTjBXa1N6azFnYW5ObnRobitaL3Q2SWZwVFhwYVZJQnVlNkM0TDNON2FYVTIKNkJXeElZVDlLcXlKUU51VnV1NnhWYWVtME1aYmIrd1MvOEthd2c2a2dXNzJGdk5zK2JENlA3TzlhYllrUXhEZwpDa3RXYkFmR0MyZXhqM25jTlFVcFRXUGJ1VkdzSzZTcXUzTlo3UDV4SDBPdDNFdlJ2aDJJdkNoWUxOclg0RjFLClFlN0NmN0krV0FXeWhsQS9sYVJIUC8ycUJMN2g5ZjVBays0Y09qbXlXeE9zd2NtOFMzUzlNem9JU0t2MGYvY1YKUjhKNER5TGFLbFdvSmJkMWdoaDNVMmdXNnpYWEZabE1JVTZRVW55eEJMTW5GbCtKUmRrRStJRG1uNGxjeHFWNQo1cElkNVBkQ0x6bXlPOTFDMXZpUTJYTExQT0poSmZMeWJTa0NBd0VBQWFNK01Ed3dId1lEVlIwakJCZ3dGb0FVCkdRZC91K1YvWHV5eTNSVXQwNGI1cHIwLzdTMHdHUVlEVlIwUkJCSXdFSUlPZFdKMWMzWnlMbUZ6TG1odmJXVXcKRFFZSktvWklodmNOQVFFRkJRQURnZ0VCQUdKQURVOHNpWmpRMVB4R1FkZ3ltdUg1M2VqWjArYXdtS2NEd2RrZgp5bmtNY1F5eTRNa2JvMEQrWTJyZllGZVBTY0ZJdzQ4WDF1VkttMHFlM203Znk3VzJCSjg1ZDRTTEswbmRlV3U5Ck1hTnE3dVhnK0pha1ZQcVhYeU1kRzFnTVNFd2VLR0ZySDVkNVJkZWFsZThOZ1pFZjZBL3M5QlNxSGt4bks0UUsKb1M0VVhBQnJnczdMbFdmQ2xhdWdtYmZ2TzFRN2FrTTN5eTFhbTh6WVhwUWFwZVZ4OG03M09wYnoycmJQTlE3bApFSDhiTVlGODBGaVdOdGoza1BiRXYxUTZjVUxxcDNWL25qV2JYQkpRaGd0UVNML0hMTDcrWE9WTDNHb2dVanJuCkJMUVFPMTRtN3ByUThyKzVEMFpJamthYWYwQ2ZHVHIyVDhEbGd5T3ZWODVXQ2VnPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
s:auth-client-key-name:<USER-PEER_PRIVATE-KEY>.pem
b:auth-client-key-data:LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb3dJQkFBS0NBUUVBMVo0dFBOSTNSYVJMT1RXQnFjMmUyR2Y1biszb2grbE5lbHBVZ0c1N29MZ3ZjM3RwCmRUYm9GYkVoaFAwcXJJbEEyNVc2N3JGVnA2YlF4bHR2N0JML3dwckNEcVNCYnZZVzgyejVzUG8vczcxcHRpUkQKRU9BS1MxWnNCOFlMWjdHUGVkdzFCU2xOWTl1NVVhd3JwS3E3YzFucy9uRWZRNjNjUzlHK0hZaThLRmdzMnRmZwpYVXBCN3NKL3NqNVlCYktHVUQrVnBFYy8vYW9FdnVIMS9rQ1Q3aHc2T2JKYkU2ekJ5YnhMZEwwek9naElxL1IvCjl4Vkh3bmdQSXRvcVZhZ2x0M1dDR0hkVGFCYnJOZGNWbVV3aFRwQlNmTEVFc3ljV1g0bEYyUVQ0Z09hZmlWekcKcFhubWtoM2s5MEl2T2JJNzNVTFcrSkRaY3NzODRtRWw4dkp0S1FJREFRQUJBb0lCQUJmaldDSTJ6TlVHSGg1Zgo2Q2ZWdFdkMFd5TWlEdkNSNjZiY3pwbk5JUmlVT0VRMC94SkxTVkZSclZLcW4vaks0WHljeGhwMnJNSXlncUxICjYyQnVNSGt4NXJVTit1WnVjUnNZS3VUNld5RE5zL0paSkVIUkYvMmNSTGpxMGZBdTJFRlRtWDlDQXVSQm1EdjAKb2EzSXBPMHRsM1hOcnlZWm5XckNJZjA2QXZhTXowNk40L0k0TldMd3lQSnNNZU1PdGwrN2dnRldmbEhXbHR0Vwp4RTBWRlFiT015WHM4RmhtM0pHSGRjMXV6K1E5ZGZXMEVvd3dLalhSUkwzT2YrUy9aTElCRW5qaFRvSnlFMXdSCmVFeXU2aTFPcHRoMklzdmloN0NqdXpHdTBwOU1ddwer5&&Z1hueVRTVTBvS1NEU0RDTFZtR2ErY0hMV1UKN3lHQnpPMENnWUVBK2Q5OXlFK2dTczVyTnZiWUhZVXkyMTBmMjFBcjJieEhEY010cDJJcFpLNzYxY1I1Rk1YbwoxUzI2OW1aVzVONmZ4SGF3ckUvSVcvU1RPVStvOHRMa3h4enpRWC9Ya09lK2JndTg4Nll5SGdQQWRXbHZHWWlrCnBTaHlKRW5mbnovM2kzQW42ZnR4b1hXUXBjWExiUHBVRXg2b09ucGp1M3BtNkp4YUR3NEc1QTBDZ1lFQTJ0c2EKa25LT2RsYnNXeEorb0MxVEg5L0krakpHeHpRT0RMUTdPUTNMZDgxVGlaRlFXc0N1UzFpTE9scjBtblBIR2phUwo0QnNrTm5HTHh0ejVKVTJiRWVxUjRuNXplS0dQM3JaNEhtOEhienJSMEhxS1J4cC84U3VEZFN0WkFEWGpVNkpjCkliWndKeE1ETHRBR2NYbDIxRXdwY2VOaTg0NktjZlZETEFNVG1vMENnWUVBN3dpVHBWbzI5eGo4aTdvY0NERngKODFQa3M4TEFFQzBDcy9HdzdOMEV5Q0owSnFjclJXb0dVRmpNOEFYNnZqc1NEN21UVFdPTlFocDM5RzEySzhULwp3bEs1aWtFb0VLRUJGUGo1cXdPa0VmNTQwRmtxUlB6b3RHNDZzdWhRbW1GeEI5MGs4YnJ1ZXd5aWNWTUVSWjQ3CmE0YjZXK2JWSFhYOG1DMXFJZGpEVXNrQ2dZQjBXSFpQMUVhWDhxM0QzSmtrWGZRS3hkVDU3VEJqUmZFU0g5NDcKL25Ga1J1dFovcjVSQUkybjBISnptMWJkcFI3N2VIZXNXOEZza0FCV3Y3SlRlbVl0cUIzVjRwTlFWZE05K3BMdwoydVdBNUN3V1FJNnlMZ3hHRVhQWkhpbzZTbXVIVXBEWCt6eTBDUTl3RzNiUmJGa1hrMFdWSGVURXhjb2p1dGJ5CjFzL2RJUUtCZ0NhOHhqVnRqandBYUZlYUtUY3p6VEhwRG1oaVRUOWM3OCtZb1FjSkJ2Ti9XdlBCZDBQWVQveSsKTFF6Sm1CUi9KT3NrVUMrc2FDbEluN3J1YXVjNXlnTXdrc213RVhzWC9abVUzUGFycGdyL3FHR05Pb0RKNW82WApMZEQ2UjRvUXJqRHBTczlWUno1VVgxQ1NXdFVNZmoyMlJjczk5OWdETkw0bzFCZzliRUpXCi0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCg==
s:network-host:<HOSTNAME_ODER_IP_DES_VPN-GATEWAYS>
s:client-auto-mode:disabled
s:client-iface:virtual
s:client-ip-addr:10.0.0.5
s:client-ip-mask:255.255.255.0
s:network-natt-mode:enable
s:network-frag-mode:enable
s:client-dns-addr:<DNS_IP-ADRESSE>
s:client-dns-suffix:<DNS-SUFFIX>
s:auth-method:mutual-rsa-xauth
s:ident-client-type:fqdn
s:ident-client-data:<FQDN_DES_VPN-GATEWAYS>
s:ident-server-type:fqdn
s:ident-server-data:<FQDN_DES_VPN-GATEWAYS>
s:phase1-exchange:main
s:phase1-cipher:des
s:phase1-hash:sha1
s:phase2-transform:esp-des
s:phase2-hmac:sha1
s:ipcomp-transform:disabled
s:policy-level:auto

Shrew in Dash-Leiste

Wer Shrew über die Dash-Startleiste öffnen möchte, der kopiert zunächst das Icon des Programms.

cp source/qikea/png/ikea.png /usr/share/icons/hicolor/32x32/apps

Danach erstellt man sich eine „.desktop“ Datei zum starten des Programms.

vi /usr/share/applications/qikea.desktop
[Desktop Entry]
Encoding=UTF-8
Name=Shrew IPSEC VPN-Client
Name[de]=Shrew IPSEC QT4 VPN-Client
Comment=Connects IPSEC VPNs
Comment[de]=IPSEC VPN Verbindungen verbinden
GenericName=IPSEC VPN Client
GenericName[de]=IPSEC-VPN-Anwendung
Keywords=vpn;ipsec;ike;qtikea;shrew
Keywords[de]=vpn;ipsec;ike;qtikea;shrew
Exec=qikea
Terminal=false
X-MultipleArgs=false
Type=Application
Icon=/usr/share/icons/hicolor/32x32/apps/ikea.png
Categories=Application;Network;VPN;
StartupNotify=true

L2TP / IPSEC

L2TP/IPSEC VPN eingerichten (Quelle: https://linuxscriptshub.com/configure-l2tp-ipsec-vpn-ubuntu-1604/).

Server

apt-get install xl2tpd strongswan ppp iptables-persistent
  • IPSEC konfigurieren /etc/ipsec.conf (Anweisungen der einzelnen „conn“-Abschnitte müssen eingerückt sein)
    conn L2TP-PSK-noNAT
      authby=secret
      type=transport
      keyexchange=ikev1
      left=<LAN-IP_OF_INTERNET_GATEWAY>
    
      leftprotoport=17/1701
      right=%any
      rightprotoport=17/%any
      auto=add
      ike=aes128-sha1-modp2048,aes256-sha1-modp4096,aes128-sha1-modp1536,aes256-sha1-modp2048,aes128-sha1-modp1024,aes256-sha1-modp1536,aes256-sha1-modp1024
      dpddelay=15
      dpdtimeout=45
      dpdaction=clear
      esp=aes128-sha1-modp2048,aes256-sha1-modp4096,aes128-sha1-modp1536,aes256-sha1-modp2048,aes128-sha1-modp1024,aes256-sha1-modp1536,aes256-sha1-modp1024
      rekey=no
      ikelifetime=3600
      keylife=3600
  • IPSEC-PSK konfigurieren /etc/ipsec.secrets:
    <LAN-IP_OF_INTERNET_GATEWAY> %any : PSK "<PRE_SHARED_KEY>"
  • xl2tpd konfigurieren /etc/xl2tpd/xl2tpd.conf:
    [global]
    ipsec saref = yes
    saref refinfo = 30
    ;debug avp = yes
    ;debug network = yes
    ;debug state = yes
    ;debug tunnel = yes
    [lns default]
    ip range = <START-IP_OF_IP-RANGE_FOR_CLIENTS_IN_VPN_SUBNET>-<END-IP_OF_IP-RANGE_FOR_CLIENTS_IN_VPN_SUBNET>
    local ip = <IP_OF_VPN_GATEWAY_IN_VPN_SUBNET>
    refuse pap = yes
    require authentication = yes
    ;ppp debug = yes
    pppoptfile = /etc/ppp/options.xl2tpd
    length bit = yes
  • PPP konfigurieren /etc/ppp/options.xl2tpd:
    logfd 2
    logfile /var/log/xl2tpns.log
    refuse-mschap-v2
    refuse-mschap
    ms-dns 8.8.8.8
    ms-dns 8.8.4.4
    asyncmap 0
    auth
    crtscts
    idle 1800
    mtu 1200
    mru 1200
    lock
    hide-password
    local
    #debug
    name l2tpd
    proxyarp
    lcp-echo-interval 30
    lcp-echo-failure 4
  • Benutzer konfigurieren /etc/ppp/chap-secrets:
    # client        server  secret                  IP addresses
    <USERNAME> * <PASSWORD> *
  • Daemons neustarten:
    systemctl restart xl2tpd
    systemctl restart strongswan

Clients

  • Ubuntu
    • apt install network-manager-l2tp-gnome
    • konfigurieren wie folgt
      • Name: <NAME>
      • Gateway: <IP_OR_HOSTNAME_VPN_GATEWAYS_OR_DYNDNS-ADDRESS>
      • Benutzername: <USER>
      • IPsec Settings:
        • Pre-shared key: <PSK_FROM_ipsec.secrets>
        • Phase1 Algorithms: aes128-sha1-modp2048
        • Phase2 Algorithms: aes256-sha1-modp1024
      • PPP Settings
        • nur folgende Methoden: MSCHAP, MSCHAPv2
        • Haken setzen bei „Point-to-Point…“
          • Sicherheit: „128-bit“
        • sonstige Häckchen so lassen

Port-/IP-Forwarding / NAT

Damit das Subnetz hinter dem VPN-Gateway erreicht werden kann, müssen folgende Einstellungen vorgenommen werden.

  • IP-Forwarding konfigurieren:
    echo "net.ipv4.ip_forward = 1" | tee -a /etc/sysctl.conf
    echo "net.ipv4.conf.all.accept_redirects = 0" | tee -a /etc/sysctl.conf
    echo "net.ipv4.conf.all.send_redirects = 0" | tee -a /etc/sysctl.conf
    echo "net.ipv4.conf.default.rp_filter = 0" | tee -a /etc/sysctl.conf
    echo "net.ipv4.conf.default.accept_source_route = 0" | tee -a /etc/sysctl.conf
    echo "net.ipv4.conf.default.send_redirects = 0" | tee -a /etc/sysctl.conf
    echo "net.ipv4.icmp_ignore_bogus_error_responses = 1" | tee -a /etc/sysctl.conf

Danach sysctl reloaden

sysctl -p /etc/sysctl.conf
  • NAT auf dem VPN-Gateway einrichten:
    iptables -t nat -A POSTROUTING -j SNAT --to-source <IP_OR_HOSTNAME_VPN_GATEWAYS> -o <INTERFACE>
    • IPtables Regeln sichern:
      iptables-save > /etc/iptables/rules.v4
  • folgende Ports als Weiterleitung auf dem Internet-Gateway hinzufügen:
    from any to VPN-GATEWAY, Port UDB 500, 4500

Troubleshooting

  • folgende Befehle können beim Troubleshooting helfen
    ipsec statusall
    ipsec listall
    ipsec listcerts
    ...
  • rekeying im Strongswan ausschalten (Shrew mag das rekeying von einem VPN-Gateway nicht und übernimmt selbst dieses)

Default Gateway Routen

Wenn man sich mit dem VPN verbunden hat, lässt der Network-Manager eine neue Default Route erstellen.
Dadurch wird alles vom Client über das VPN geroutet.
Möchte man das nicht, möchte man also anstatt eines full tunneling ein split tunneling verwenden, so muss in den IPv4 Einstellungen der jew.
VPN-Verbindung der Haken bei „Diese Verbindung nur für Ressourcen in deren Netzwerk verwenden“ gesetzt werden.
ggf auch diesen Befehl ausführen

nmcli connection modify <VPN connection> ipv4.never-default yes

DNS

Generell wird der, in der VPN-Verbindung, eingetragene DNS Server nur verwendet, wenn die Funktion „Diese Verbindung nur für Ressourcen in deren Netzwerk verwenden“ abgehakt ist.
Dann wird auch das Default-GW neben dem Ursprünglichen GW auch auf die VPN-Verbindung gesetzt.
Hakt man die o.g. Funktion an, wird kein zusätzliches Default-GW erstellt. Dann wird auch der angegeben DNS server nicht verwendet. Das kann mit dem Befehl resolvectl status ausgelesen werden.
Man sieht dann, dass die VPN-Verbindung (z.B. „ppp0“) keinen DNS eingestellt hat.
Setzt man nun die DNS-Search-Domain für die Verbindung, wird der DNS-Server jedes mal für die Verbindung gesetzt und Split-DNS verwendet.
Die Search-Domain kann man leider nicht in der Gui (zum Einrichten von VPNs) einstellen und muss dies per CLI-Befehl tun.

nmcli connection modify <VPN_NAME> ipv4.dns-search '<DOMAIN_NAME>'

Nachdem man den VPN-Tunnel aufgebaut hat, ruft man nun resolvectl status auf und sieht dann den eingestellten/verwendeten DNS-Server und die Search-Domain.

Previous Next

Webseiten-Werkzeuge

  • Letzte Änderungen
  • Medien-Manager
  • Übersicht

Seiten-Werkzeuge

  • Zeige Quelltext
  • Ältere Versionen
  • Links hierher
  • Nach oben

Benutzer-Werkzeuge

  • Anmelden
linux/strongswan_vpn.txt · Zuletzt geändert: 2022/03/03 21:18 von 127.0.0.1
stiziwik

Table of Contents

Inhaltsverzeichnis

  • Strongswan VPN
    • Installation
    • IKEv1 IPSEC Authentifizierung mit X.509 Zertifikaten und User-Login
      • CA mit RSA kodierten Zertifikaten
      • VPN-Gateway Zertifikat
      • Host/User Zertifikate
      • Zertifikate Sperren
      • Strongswan Konfiguration
      • Authentifizierung Konfiguration
      • Shrew-Client Konfiguration
      • Shrew in Dash-Leiste
    • L2TP / IPSEC
      • Server
      • Clients
    • Port-/IP-Forwarding / NAT
    • Troubleshooting
      • Default Gateway Routen
      • DNS
  • Android
  • Bild-und-video
  • Datenverarbeitung
  • Fahrzeuge
  • Hausautomatisation
  • linux
    • Alix-router
    • Icinga
    • Log-Server
    • Mail
    • Mysql
    • Nagios
    • Owncloud
    • Virtualisierung
    • Webcam
    • Accl Attr
    • Alternativen-System
    • Antivirus-live
    • Anzahl
    • Audacious
    • Audiodateien-umwandeln
    • Avira-Live-Rescue
    • Backupscript
    • Bash
    • Beep-mit-Ringtones
    • Benutzerpassword Deaktivieren
    • Bluetooth
    • Bootvorgang
    • CD-Ripper
    • Clonezilla
    • Coredump
    • Datenrettung
    • Datum Und Uhrzeit
    • dd
    • Desktop-dateien
    • Docker
    • Duplikate
    • Fail2ban
    • Festplatten
    • Fingerprintsensor
    • Gddrescue
    • Geda
    • Genisoimage mkisofs
    • Grub
    • Internetradio
    • Ipod
    • Journalctl
    • Keepass
    • Kernel Bauen
    • Keystore
    • Live-CD erstellen
    • Lnav
    • Lshw-hardware
    • Message-of-the-day
    • Midnight Commander
    • Mongodb
    • Nohup, Hintergrund, anhalten und Co
    • Openssl
    • Pakete bauen
    • Paketverwaltung
    • Passwort-Generator
    • Patches
    • Prüfsumme
    • Quota
    • Remote Desktop Verbindung
    • Request Tracker
    • Rsync
    • Samba
    • Scriptschnipsel
    • Serielle-Konsole
    • Smartmontools
    • Sms-gateway
    • Softwareraid
    • Squid
    • SSH
    • Stats
    • Stresstest
    • Strongswan VPN
    • Sudo
    • Supergrub2disk
    • Supervisord
    • Swap
    • Syslog
    • Systemrescue
    • Tftp
    • Thunderbird
    • Umbenennen
    • Unity Fenstermanager
    • Video-streaming
    • Virenscan-script
    • Virtualbox
    • Virtualisierung
    • Vnc-vino
    • Watchdog
    • Webmin
    • Wmctrl
    • Zeitsynchronisation Mit DCF-77 Empfänger
    • Zoneminder
  • Nas
  • Netzwerk
  • PlayGround
  • Programieren
  • Projekte
  • Raspberry Pi
  • sonstiges
  • VDR
  • Web
  • Werkstatt
  • Wiki
  • sidebar-acmenu
  • sidebar-indexmenu
  • sidebar-simplenavi