การกำหนดค่าการเชื่อมต่อ L2TP/IPSec VPN หลัง NAT รหัสข้อผิดพลาด VPN 809
เนื่องจากการปิดใช้งานการสนับสนุน PPTP VPN ใน iOS ลูกค้ารายหนึ่งของฉันจึงตัดสินใจกำหนดค่าเซิร์ฟเวอร์ VPN ที่ใช้ Windows Server 2012 R2 ใหม่จาก PPTP เป็น L2TP/IPSec ไคลเอนต์ VPN ภายในจากภายใน LAN เชื่อมต่อกับเซิร์ฟเวอร์ VPN โดยไม่มีปัญหาใด ๆ อย่างไรก็ตาม ไคลเอนต์ Windows ภายนอกได้รับข้อผิดพลาด 809 เมื่อพยายามสร้างการเชื่อมต่อกับเซิร์ฟเวอร์ L2TP VPN:
ไม่สามารถเชื่อมต่อกับ L2TP-IPsec-VPN-Server.hostname
ไม่สามารถสร้างการเชื่อมต่อเครือข่ายระหว่างคอมพิวเตอร์ของคุณและเซิร์ฟเวอร์ VPN เนื่องจากเซิร์ฟเวอร์ระยะไกลไม่ตอบสนอง อาจเป็นเพราะหนึ่งในอุปกรณ์เครือข่าย (เช่น ไฟร์วอลล์, NAT, เราเตอร์ ฯลฯ) ระหว่างคอมพิวเตอร์ของคุณและเซิร์ฟเวอร์ระยะไกลไม่ได้กำหนดค่าให้อนุญาตการเชื่อมต่อ VPN โปรดติดต่อผู้ดูแลระบบหรือผู้ให้บริการของคุณเพื่อพิจารณาว่าอุปกรณ์ใดที่อาจทำให้เกิดปัญหา
ใน 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
โปรโตคอล 50 ESP
พอร์ตเหล่านี้ยังเปิดอยู่ในกฎ Windows Firewall สำหรับการเชื่อมต่อ VPN สิ่งเหล่านี้ใช้การกำหนดค่าแบบคลาสสิก ไคลเอนต์ Windows VPN ในตัวใช้สำหรับการเชื่อมต่อ
หากคุณเชื่อมต่อกับเซิร์ฟเวอร์ VPN เดียวกันผ่าน PPTP การเชื่อมต่อจะสำเร็จ
VPN Error 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 (การแปลที่อยู่พอร์ต) หากคุณต้องการใช้ IPSec เพื่อการสื่อสาร Microsoft ขอแนะนำให้ใช้ที่อยู่ IP สาธารณะบนเซิร์ฟเวอร์ VPN
แต่ยังมีวิธีแก้ไข คุณสามารถแก้ไขข้อเสียนี้ได้โดยเปิดใช้งานการรองรับโปรโตคอล NAT-T ซึ่งช่วยให้คุณสามารถสรุปแพ็กเก็ต ESP 50 ในแพ็กเก็ต UDP บนพอร์ต 4500 โดยค่าเริ่มต้น NAT-T จะเปิดใช้งานในระบบปฏิบัติการเกือบทั้งหมด ( iOS, Android, Linux) ยกเว้น Windows
หากเซิร์ฟเวอร์ L2TP/IPsec VPN อยู่หลังอุปกรณ์ NAT เพื่อเชื่อมต่อไคลเอ็นต์ภายนอกผ่าน NAT อย่างถูกต้อง คุณต้องทำการเปลี่ยนแปลงบางอย่างกับรีจิสทรีทั้งบนเซิร์ฟเวอร์และฝั่งไคลเอ็นต์เพื่ออนุญาตการห่อหุ้มแพ็กเก็ต UDP สำหรับ L2TP และ NAT-T รองรับ IPsec
-
เปิดตัวแก้ไขรีจิสทรี (
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;
0 - (ค่าเริ่มต้น) แสดงว่าเซิร์ฟเวอร์เชื่อมต่อกับอินเทอร์เน็ตโดยไม่มี NAT
1 - เซิร์ฟเวอร์ VPN อยู่เบื้องหลังอุปกรณ์ NAT
2 — ทั้งเซิร์ฟเวอร์ VPN และไคลเอนต์อยู่เบื้องหลัง NAT
เพียงรีสตาร์ทคอมพิวเตอร์และตรวจสอบให้แน่ใจว่าสร้างอุโมงค์ VPN สำเร็จแล้ว
นอกจากนี้ คุณสามารถใช้ PowerShell cmdlet เพื่อทำการเปลี่ยนแปลงรีจิสทรี:
Set-ItemProperty -Path "HKLM:SYSTEM\CurrentControlSet\Services\PolicyAgent" -Name "AssumeUDPEncapsulationContextOnSendRule" -Type DWORD -Value 2 -Force;หลังจากเปิดใช้งานการรองรับ NAT-T คุณจะสามารถเชื่อมต่อกับเซิร์ฟเวอร์ VPN จากไคลเอนต์ผ่าน NAT ได้สำเร็จ (รวมถึง NAT สองเท่า)
ในบางกรณี เพื่อให้ VPN ทำงานได้อย่างถูกต้อง คุณต้องเปิดใช้งานกฎไฟร์วอลล์เพิ่มเติมสำหรับ TCP 1701 (ในการใช้งาน L2TP บางอย่าง พอร์ตนี้จะใช้ร่วมกับ UDP 1701)
NAT-T ทำงานไม่ถูกต้องใน Windows 10 รุ่นก่อนหน้า เช่น 10240, 1511, 1607 หากคุณมี Windows เวอร์ชันเก่า เราขอแนะนำให้คุณอัปเกรด Windows 10 build
การเชื่อมต่อ L2TP VPN หลายรายการจาก LAN เดียวกัน
มีข้อผิดพลาด VPN ที่น่าสนใจอีกอย่างหนึ่ง หากเครือข่ายภายในของคุณมีคอมพิวเตอร์ Windows หลายเครื่อง คุณจะไม่สามารถสร้างการเชื่อมต่อพร้อมกันมากกว่าหนึ่งเครื่องไปยังเซิร์ฟเวอร์ L2TP/IPSec VPN ภายนอกได้ หากคุณพยายามเชื่อมต่อกับเซิร์ฟเวอร์ 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 หรือเครื่องมือระบบบางตัว)
เรียกใช้คำสั่งต่อไปนี้เพื่อเปลี่ยนแปลงใช้การเปลี่ยนแปลงรีจิสทรีเหล่านี้:
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สิ่งนี้ทำให้รองรับการเชื่อมต่อ L2TP/IPSec VPN พร้อมกันบน Windows ผ่านที่อยู่ IP สาธารณะที่ใช้ร่วมกัน (ใช้ได้กับทุกเวอร์ชันตั้งแต่ Windows XP ถึง Windows 10)


