เนื่องจากการปิดใช้งานการสนับสนุน 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 Traversal
- โปรโตคอล 50 ESP
พอร์ตเหล่านี้ยังเปิดอยู่ในกฎไฟร์วอลล์ Windows สำหรับการเชื่อมต่อ VPN กล่าวคือใช้การกำหนดค่าแบบคลาสสิก ไคลเอนต์ Windows VPN ในตัวใช้สำหรับการเชื่อมต่อ
หากคุณเชื่อมต่อกับเซิร์ฟเวอร์ 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 (การแปลที่อยู่พอร์ต). หากคุณต้องการใช้ 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.
- เปิด 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; หมายเหตุ . สมมติที่เป็นไปได้ค่า UDPEncapsulationContextOnSendRule คือ:
- 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 บิลด์การเชื่อมต่อ 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)