Windows 7 및 8.1은 Ubuntu 22의 StrongSwan 5.9 VPN 서버에 연결할 수 없습니다.

Windows 7 및 8.1은 Ubuntu 22의 StrongSwan 5.9 VPN 서버에 연결할 수 없습니다.

Ubuntu 22.04 및 StrongSwan 5.9.5를 사용하여 Oracle OCI에 VPN 서버를 설정했습니다. 다른 RoadWarrior에서 연결을 시도했을 때 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 pre 1803, Ubuntu 16)는 조각화를 지원하지 않습니다. 따라서 이러한 OS의 클라이언트를 사용하여 Oracle OCI에서 실행되는 StrongSwan을 연결할 수 있는 방법은 없습니다. 이러한 제한을 극복하기 위한 세 가지 해결 방법이 있습니다.

  1. 레거시 클라이언트에서 벗어나세요(사용하는 사람들에게는 그리 인상적이지 않습니다).
  2. 클라우드 공급자 변경 - Amazon AWS 및 DigitalOcean에서 StrongSwan을 테스트했는데 모든 것이 완벽하게 작동합니다.
  3. VPN 유형 변경 - 개인적으로 저는 해당 솔루션으로 끝났습니다. WireGuard는 Oracle OCI에서 아무런 문제가 없습니다. 그리고 좋은 추가로 DNS 누출 문제를 해결했습니다.

관련 정보