Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Windows Server

กำหนดค่าการเชื่อมต่อ VPN L2TP/IPSec ภายหลัง NAT, รหัสข้อผิดพลาด VPN 809

เนื่องจากการปิดใช้งานการรองรับ VPN PPTP ใน iOS ลูกค้าคนหนึ่งของฉันตัดสินใจกำหนดค่าเซิร์ฟเวอร์ VPN ที่รัน Windows Server 2012 R2 ใหม่จาก PPTP เป็น L2TP/IPSec ไคลเอนต์ VPN ภายในจากภายใน LAN เชื่อมต่อกับเซิร์ฟเวอร์ VPN โดยไม่มีปัญหา แต่ไคลเอนต์ Windows ภายนอกได้รับข้อผิดพลาด 809 เมื่อพยายามสร้างการเชื่อมต่อกับเซิร์ฟเวอร์ VPN L2TP:

Can't connect to L2TP-IPsec-VPN-Server.hostname

The network connection between your computer and the VPN server could not be established because the remote server is not responding. This could be because one of the network devices (e.g. firewalls, NAT, routers, etc) between your computer and the remote server is not configured to allow VPN connections. Please contact your Administrator or your service provider to determine which device may be causing the problem.

กำหนดค่าการเชื่อมต่อ VPN L2TP/IPSec ภายหลัง NAT, รหัสข้อผิดพลาด VPN 809

ใน Windows อื่นๆ รหัสข้อผิดพลาดการเชื่อมต่อ 800, 794 หรือ 809 อาจบ่งชี้ปัญหาเดียวกัน

ควรทราบว่าเซิร์ฟเวอร์ VPN อยู่เบื้องหลัง NAT และเราเตอร์ถูกกำหนดค่าให้ส่งต่อพอร์ต L2TP:

  • UDP 1701 — Layer 2 Forwarding Protocol (L2F) & Layer 2 Tunneling Protocol (L2TP)
  • UDP 500
  • UDP 4500 NAT-T – IPSec Network Address Translator Traversal
  • Protocol 50 ESP

พอร์ตเหล่านี้เปิดอยู่ในกฎ Windows Firewall สำหรับการเชื่อมต่อ VPN เช่นกัน นั่นคือการกำหนดค่าแบบคลาสสิก ใช้ไคลเอนต์ VPN ส่วนตัวของ Windows สำหรับการเชื่อมต่อ

หากเชื่อมต่อกับเซิร์ฟเวอร์ VPN เดียวกันผ่าน PPTP การเชื่อมต่อจะสำเร็จ

ข้อผิดพลาด VPN 809 สำหรับ L2TP/IPSec บน Windows ภายหลัง NAT

หลังจากตรวจสอบแล้ว ปัญหานี้เป็นที่รู้จักและอธิบายไว้ในบทความ https://support.microsoft.com/en-us/kb/926179 ไคลเอนต์ VPN ส่วนตัวของ Windows ไม่รองรับการเชื่อมต่อ L2TP/IPsec ผ่าน NAT โดยค่าเริ่มต้น เนื่องจาก IPsec ใช้ ESP (Encapsulating Security Payload) เพื่อเข้ารหัสแพ็กเก็ต และ ESP ไม่รองรับ PAT (Port Address Translation) หากต้องการใช้ IPSec สำหรับการสื่อสาร Microsoft แนะนำให้ใช้ที่อยู่ IP สาธารณะบนเซิร์ฟเวอร์ VPN

แต่มีวิธีแก้ปัญหา คุณสามารถแก้ข้อบกพร่องนี้ได้โดยเปิดใช้งานการรองรับโปรโตคอล NAT-T ซึ่งช่วยให้คุณห่อหุ้มแพ็กเก็ต ESP 50 ในแพ็กเก็ต UDP บนพอร์ต 4500 NAT-T เปิดใช้งานโดยค่าเริ่มต้นในเกือบทุกระบบปฏิบัติการ (iOS, Android, Linux) ยกเว้น Windows

หากเซิร์ฟเวอร์ VPN L2TP/IPsec อยู่เบื้องหลังอุปกรณ์ NAT เพื่อให้ไคลเอนต์ภายนอกเชื่อมต่อผ่าน NAT ได้อย่างถูกต้อง คุณต้องทำการเปลี่ยนแปลงบนรีจิสทรีทั้งฝั่งเซิร์ฟเวอร์และไคลเอนต์ เพื่ออนุญาตการห่อหุ้มแพ็กเก็ต UDP สำหรับ L2TP และการรองรับ NAT-T ใน IPsec

  • เปิด Registry Editor (regedit.exe) และไปที่คีย์รีจิสทรีต่อไปนี้:
    • Windows 10/8.1/Vista และ Windows Server 2016/2012R2/2008R2 — HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PolicyAgent
    • Windows XP/Windows Server 2003 — HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\IPSec
  • สร้างพารามิเตอร์ DWORD ชื่อ AssumeUDPEncapsulationContextOnSendRule และค่า 2; กำหนดค่าการเชื่อมต่อ VPN L2TP/IPSec ภายหลัง NAT, รหัสข้อผิดพลาด VPN 809 Note ค่าที่เป็นไปได้ของ AssumeUDPEncapsulationContextOnSendRule:
    • 0 – (ค่าเริ่มต้น) บ่งชี้ว่าเซิร์ฟเวอร์เชื่อมต่ออินเทอร์เน็ตโดยไม่มี NAT;
    • 1 – เซิร์ฟเวอร์ VPN อยู่เบื้องหลังอุปกรณ์ NAT;
    • 2 — เซิร์ฟเวอร์ VPN และไคลเอนต์ทั้งคู่อยู่เบื้องหลัง NAT
  • รีสตาร์ทคอมพิวเตอร์และตรวจสอบว่าอุโมงค์ VPN ถูกสร้างขึ้นสำเร็จ

[alert] หากเซิร์ฟเวอร์ VPN Windows และไคลเอนต์ทั้งคู่อยู่เบื้องหลัง NAT คุณต้องเปลี่ยนการตั้งค่านี้บนอุปกรณ์ทั้งสอง

ยังสามารถใช้คอมมานด์เลต PowerShell เพื่อเปลี่ยนแปลงรีจิสทรีได้:

Set-ItemProperty -Path "HKLM:SYSTEM\CurrentControlSet\Services\PolicyAgent" -Name "AssumeUDPEncapsulationContextOnSendRule" -Type DWORD -Value 2 –Force;

หลังจากเปิดใช้งานการรองรับ NAT-T แล้ว คุณจะสามารถเชื่อมต่อกับเซิร์ฟเวอร์ VPN จากไคลเอนต์ผ่าน NAT ได้สำเร็จ (รวมถึง double NAT)

ในบางกรณี เพื่อให้ VPN ทำงานได้อย่างถูกต้อง คุณต้องเปิดใช้งานกฎไฟร์วอลล์เพิ่มเติมสำหรับ TCP 1701 (ในบางการใช้งาน L2TP พอร์ตนี้ใช้ร่วมกับ UDP 1701) NAT-T ไม่ทำงานถูกต้องในบิลด์ Windows 10 ก่อนหน้า เช่น 10240, 1511, 1607 หากคุณมี Windows เวอร์ชันเก่า แนะนำให้อัปเกรดบิลด์ Windows 10

การเชื่อมต่อ VPN L2TP หลายครั้งจาก LAN เดียวกัน

มีบั๊ก VPN อีกอย่างน่าสนใจ หากเครือข่ายท้องถิ่นของคุณมีคอมพิวเตอร์ Windows หลายเครื่อง คุณไม่สามารถสร้างการเชื่อมต่อพร้อมกันมากกว่าหนึ่งการเชื่อมต่อกับเซิร์ฟเวอร์ VPN L2TP/IPSec ภายนอก หากพยายามเชื่อมต่อกับเซิร์ฟเวอร์ VPN เดียวกันจากคอมพิวเตอร์อีกเครื่อง (ที่มีอุโมงค์ VPN ใช้งานอยู่จากอุปกรณ์อื่น) จะปรากฏรหัสข้อผิดพลาด 809 หรือ 789:

Error 789: The L2TP connection attempt failed because the security layer encountered a processing error during initial negotiations with the remove computer.

น่าสนใจที่ปัญหานี้เกิดขึ้นเฉพาะบนอุปกรณ์ Windows บน Linux/MacOS/Android ในเครือข่ายท้องถิ่นเดียวกัน ไม่มีปัญหาเช่นนี้ คุณสามารถเชื่อมต่อกับเซิร์ฟเวอร์ VPN L2TP จากอุปกรณ์หลายเครื่องพร้อมกันได้ง่าย

ตาม TechNet ปัญหานี้เกี่ยวข้องกับการนำไปใช้งานที่ไม่ถูกต้องของไคลเอนต์ L2TP/IPSec บน Windows (ไม่ได้แก้ไขมาหลายปี)

เพื่อแก้ไขบั๊กนี้ คุณต้องเปลี่ยนพารามิเตอร์รีจิสทรีสองตัวในคีย์รีจิสทรี HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RasMan\Parameters และรีสตาร์ทคอมพิวเตอร์:

  • AllowL2TPWeakCrypto – เปลี่ยนเป็น 00000001 (อนุญาตอัลกอริทึมเข้ารหัสอ่อนแอ สำหรับ L2TP/IPSec ใช้อัลกอริทึม MD5 และ DES);
  • ProhibitIPSec – เปลี่ยนเป็น 00000000 (เปิดใช้งานการเข้ารหัส IPsec ซึ่งมักถูกปิดใช้งานโดยไคลเอนต์ VPN บางตัวหรือเครื่องมือระบบ)

กำหนดค่าการเชื่อมต่อ VPN L2TP/IPSec ภายหลัง NAT, รหัสข้อผิดพลาด VPN 809

รันคำสั่งต่อไปนี้เพื่อนำการเปลี่ยนแปลงรีจิสทรีไปใช้:

reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Rasman\Parameters" /v AllowL2TPWeakCrypto /t REG_DWORD /d 1 /f
reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Rasman\Parameters" /v ProhibitIpSec /t REG_DWORD /d 0 /f

สิ่งนี้เปิดใช้งานการรองรับการเชื่อมต่อ VPN L2TP/IPSec พร้อมกันบน Windows ผ่านที่อยู่ IP สาธารณะร่วมกัน (ทำงานบนทุกเวอร์ชันตั้งแต่ Windows XP ถึง Windows 10)