
Ich habe einen VPN-Server auf Oracle OCI mit Ubuntu 22.04 und strongSwan 5.9.5 eingerichtet. Als ich versuchte, eine Verbindung von verschiedenen Roadwarriors aus herzustellen, funktionierte Android gut, Win10 funktionierte gut, sogar das alte Blackberry10 funktionierte gut, aber nicht für Win7- und Win8.1-Laptops: Sie blieben in der ersten Phase hängen:
mytestcloud charon[968]: 05[NET] received packet: from <MYIP>[500] to 10.0.0.64[500] (616 bytes)
mytestcloud charon[968]: 05[ENC] parsed IKE_SA_INIT request 0 [ SA KE No N(NATD_S_IP) N(NATD_D_IP) V V V V ]
mytestcloud charon[968]: 05[IKE] received MS NT5 ISAKMPOAKLEY v9 vendor ID
mytestcloud charon[968]: 05[IKE] received MS-Negotiation Discovery Capable vendor ID
mytestcloud charon[968]: 05[IKE] received Vid-Initial-Contact vendor ID
mytestcloud charon[968]: 05[ENC] received unknown vendor ID: 01:52:8b:bb:c0:06:96:12:18:49:ab:9a:1c:5b:2a:51:00:00:00:02
mytestcloud charon[968]: 05[IKE] <MYIP> is initiating an IKE_SA
mytestcloud charon[968]: 05[IKE] <MYIP> is initiating an IKE_SA
mytestcloud charon[968]: 05[CFG] selected proposal: IKE:AES_CBC_256/HMAC_SHA1_96/PRF_HMAC_SHA1/MODP_1024
mytestcloud charon[968]: 05[IKE] local host is behind NAT, sending keep alives
mytestcloud charon[968]: 05[IKE] remote host is behind NAT
mytestcloud charon[968]: 05[IKE] sending cert request for "C=<MYCOUNTRY>, O=<MYFIRM>, CN=<MYNAME>"
mytestcloud charon[968]: 05[ENC] generating IKE_SA_INIT response 0 [ SA KE No N(NATD_S_IP) N(NATD_D_IP) CERTREQ N(CHDLESS_SUP) N(MULT_AUTH) ]
mytestcloud charon[968]: 05[NET] sending packet: from 10.0.0.64[500] to <MYIP>[500] (345 bytes)
mytestcloud charon[968]: 08[IKE] sending keep alive to <MYIP>[500]
mytestcloud charon[968]: 09[JOB] deleting half open IKE_SA with <MYIP> after timeout
Meine ipsec.conf ist:
config setup
charondebug="ike 1, knl 1, cfg 1"
strictcrlpolicy=no
# uniqueids = no
conn %default
ikelifetime=24h
keylife=24h
keyexchange=ikev2
dpdaction=clear
dpdtimeout=3600s
dpddelay=3600s
compress=yes
leftfirewall=yes
left=%any
leftsubnet=0.0.0.0/0
right=%any
rightsourceip=192.168.2.100/28
# rightdns=8.8.8.8, 8.8.4.4
# leftsendcert=always
# fragmentation=yes
# rightsendcert=never
# forceencaps=yes
rekey=no
auto=add
ike=aes256-sha1-modp1024,3des-sha1-modp1024!
esp=aes256-sha1,3des-sha1!
conn roadwarrior
leftauth=pubkey
leftcert=VPNCert.pem
leftid=<SERVERIP>
rightauth=pubkey
Der Status ist (Win10-Laptop ist verbunden):
ubuntu@mytestcloud:~$ sudo ipsec statusall
Status of IKE charon daemon (strongSwan 5.9.5, Linux 5.15.0-1025-oracle, aarch64):
uptime: 36 minutes, since Dec 12 09:05:21 2022
malloc: sbrk 2605056, mmap 0, used 1670848, free 934208
worker threads: 11 of 16 idle, 5/0/0/0 working, job queue: 0/0/0/0, scheduled: 2
loaded plugins: charon pkcs11 aes des rc2 sha2 sha1 md4 md5 mgf1 random nonce x509 revocation constraints pubkey pkcs1 pkcs7 pkcs8 pkcs12 pgp dnskey sshkey pem openssl fips-prf gmp curve25519 xcbc cmac hmac ccm gcm drbg curl attr kernel-netlink resolve socket-default farp stroke vici updown eap-identity eap-aka eap-aka-3gpp2 eap-md5 eap-gtc eap-mschapv2 eap-dynamic eap-tls eap-ttls eap-peap eap-tnc xauth-generic tnc-tnccs dhcp counters
Virtual IP pools (size/online/offline):
192.168.2.100/28: 11/1/0
Listening IP addresses:
10.0.0.64
Connections:
roadwarrior: %any...%any IKEv2, dpddelay=3600s
roadwarrior: local: [<SERVERIP>] uses public key authentication
roadwarrior: cert: "C=<MYCOUNTRY>, O=<MYFIRM>, CN=<SERVERIP>"
roadwarrior: remote: uses public key authentication
roadwarrior: child: 0.0.0.0/0 === dynamic TUNNEL, dpdaction=clear
Security Associations (1 up, 0 connecting):
roadwarrior[3]: ESTABLISHED 7 minutes ago, 10.0.0.64[150.136.154.215]...<MYIP>[C=<MYCOUNTRY>, O=<MYFIRM>, CN=Win10]
roadwarrior[3]: IKEv2 SPIs: 250f9e9db620a7e7_i 29b6ebbdb66a922a_r*, rekeying disabled
roadwarrior[3]: IKE proposal: AES_CBC_256/HMAC_SHA1_96/PRF_HMAC_SHA1/MODP_1024
roadwarrior{1}: INSTALLED, TUNNEL, reqid 1, ESP in UDP SPIs: c084f973_i 5daafdba_o
roadwarrior{1}: AES_CBC_256/HMAC_SHA1_96, 30958 bytes_i (122 pkts, 80s ago), 14517 bytes_o (50 pkts, 80s ago), rekeying disabled
roadwarrior{1}: 0.0.0.0/0 === 192.168.2.100/32
Ich vermute, es handelt sich um eine Art Fragmentierungsproblem, denn nach dem Hinzufügen
fragmentation=no
in ipsec.conf fällt das Win10-Gerät auf die gleiche Weise. Ich habe alles hinzugefügt, was nötig ist, glaube ich; ich meine
net/ipv4/ip_no_pmtu_disc=1
in sysctl.conf und
FORWARD -t mangle --match policy --pol ipsec --dir in -o enp0s3 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360
in iptables-Regeln. Bitte beachten Sie, dass ich eine fast identische Konfiguration in Ubuntu 16.04 / strongSwan 5.2.2 auf AWS problemlos verwenden kann. Kleine Unterschiede sind Standard-Chiffre-Suiten und unterschiedliche Serverzertifikate. Kann ich also irgendwie eine Verbindung dieser Windows-Monster erzwingen?
Antwort1
Das Problem scheint die Fragmentierung von Paketen zu sein. Einerseits glaube ich, dass Oracle die Fragmentierung in seinen öffentlichen Schnittstellen fest einprogrammiert hat; andererseits unterstützen ältere Windows-Betriebssysteme (Windows 7, Windows 8/8.1, Windows 10 vor 1803, Ubuntu 16) keine Fragmentierung. Es gibt also keine Möglichkeit, Clients auf solchen Betriebssystemen zu verwenden, um strongSwan zu verbinden, das auf Oracle OCI läuft. Es gibt drei Workarounds, um diese Einschränkung zu umgehen:
- Verabschieden Sie sich von Legacy-Clients (für die Benutzer nicht sehr beeindruckend).
- Cloud-Anbieter wechseln – ich habe strongSwan auf Amazon AWS und DigitalOcean getestet: alles funktioniert einwandfrei.
- VPN-Typ ändern – persönlich bin ich mit dieser Lösung gelandet: WireGuard hat mit Oracle OCI keine Probleme. Und ich habe als nette Ergänzung das Problem mit DNS-Lecks gelöst.