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.
Installieren kann man Strongswan ganz einfach über
apt install strongswan
Hier erfolgt die Authentifizierung über Zertifikate und einer Benutzer/Password Anmeldung.
Dafür werden mehrere Zertifikate benötigt.
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.
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
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
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
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
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>"
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
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 VPN eingerichten (Quelle: https://linuxscriptshub.com/configure-l2tp-ipsec-vpn-ubuntu-1604/).
apt-get install xl2tpd strongswan ppp iptables-persistent
/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
/etc/ipsec.secrets
: <LAN-IP_OF_INTERNET_GATEWAY> %any : PSK "<PRE_SHARED_KEY>"
/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
/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
/etc/ppp/chap-secrets
: # client server secret IP addresses <USERNAME> * <PASSWORD> *
systemctl restart xl2tpd systemctl restart strongswan
apt install network-manager-l2tp-gnome
aes128-sha1-modp2048
aes256-sha1-modp1024
MSCHAP, MSCHAPv2
Damit das Subnetz hinter dem VPN-Gateway erreicht werden kann, müssen folgende Einstellungen vorgenommen werden.
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
iptables -t nat -A POSTROUTING -j SNAT --to-source <IP_OR_HOSTNAME_VPN_GATEWAYS> -o <INTERFACE>
iptables-save > /etc/iptables/rules.v4
from any to VPN-GATEWAY, Port UDB 500, 4500
ipsec statusall ipsec listall ipsec listcerts ...
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
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.