Ubuntu 22.04 と strongSwan 5.9.5 を使用して、Oracle の OCI に VPN サーバーをセットアップしました。さまざまなロード ウォリアーから接続を試みたところ、Android は問題なく動作し、Win10 は問題なく動作し、古い Blackberry10 でも問題なく動作しますが、Win7 および Win8.1 ラップトップでは動作せず、最初の段階で停止しました。
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
私の ipsec.conf は次のとおりです:
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
ステータスは(Win10 ラップトップが接続されています):
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
おそらくこれは断片化の問題だと思います。
fragmentation=no
ipsec.confでは、Win10デバイスもまったく同じ方法で落ちます。必要なものはすべて追加したと思います。
net/ipv4/ip_no_pmtu_disc=1
sysctl.confと
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
iptables ルールで。AWS 上の Ubuntu 16.04 / strongSwan 5.2.2 でも、ほぼ同じ構成を問題なく使用できることに注意してください。小さな違いは、デフォルトの暗号スイートと異なるサーバー証明書です。では、何らかの方法でこれらの Windows のモンスターを強制的に接続することはできますか?
答え1
問題はパケットの断片化のようです。一方では、Oracle は断片化を公開インターフェースにハードコードしていると思います。他方では、従来の Windows OS (Windows 7、Windows 8/8.1、Windows 10 1803 以前、Ubuntu 16) は断片化をサポートしていません。そのため、このような OS 上のクライアントを使用して Oracle OCI で実行されている strongSwan に接続する方法はありません。この制限を克服するための回避策が 3 つあります。
- レガシー クライアントから離れます (レガシー クライアントを使用している人にとってはあまり印象的ではありません)。
- クラウド プロバイダーの変更 - Amazon AWS と DigitalOcean で strongSwan をテストしました。すべて問題なく動作しました。
- VPN タイプを変更する - 個人的には、この解決策で終わりました。WireGuard は Oracle OCI で問題を起こしません。また、DNS リークの問題も解決しました。これは嬉しい追加機能です。