iOS में PPTP VPN सपोर्ट अक्षम होने के कारण, मेरे एक क्लाइंट ने Windows Server 2012 R2 पर चल रहे VPN सर्वर को PPTP से L2TP/IPSec पर पुनः कॉन्फ़िगर करने का निर्णय लिया। आंतरिक LAN से VPN क्लाइंट बिना किसी समस्या के VPN सर्वर से कनेक्ट होते हैं, हालांकि बाहरी Windows क्लाइंट L2TP VPN सर्वर के साथ कनेक्शन स्थापित करने का प्रयास करते समय त्रुटि 809 प्राप्त करते हैं:
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.

अन्य 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
ये पोर्ट VPN कनेक्शन के लिए Windows Firewall नियमों में भी खुले हैं। तो, क्लासिक कॉन्फ़िगरेशन उपयोग किया जाता है। कनेक्शन के लिए बिल्ट-इन Windows VPN क्लाइंट उपयोग किया जाता है।
यदि आप उसी VPN सर्वर से PPTP के माध्यम से कनेक्ट करते हैं, तो कनेक्शन सफलतापूर्वक स्थापित हो जाता है।
Windows पर NAT के पीछे L2TP/IPSec के लिए VPN त्रुटि 809
जैसा कि सामने आया, समस्या पहले से ही ज्ञात है और लेख https://support.microsoft.com/en-us/kb/926179 में वर्णित है। बिल्ट-इन Windows VPN क्लाइंट डिफ़ॉल्ट रूप से NAT के माध्यम से L2TP/IPsec कनेक्शन का समर्थन नहीं करता। ऐसा इसलिए है क्योंकि IPsec पैकेट एन्क्रिप्ट करने के लिए ESP (Encapsulating Security Payload) का उपयोग करता है, और ESP PAT (Port Address Translation) का समर्थन नहीं करता। यदि आप संचार के लिए IPSec का उपयोग करना चाहते हैं, तो Microsoft VPN सर्वर पर पब्लिक IP पते उपयोग करने की सिफारिश करता है।
लेकिन एक समाधान भी है। आप NAT-T प्रोटोकॉल के लिए समर्थन सक्षम करके इस कमी को ठीक कर सकते हैं, जो आपको ESP 50 पैकेट को UDP पैकेट में पोर्ट 4500 पर एनकैप्सुलेट करने की अनुमति देता है। NAT-T लगभग सभी ऑपरेटिंग सिस्टम (iOS, Android, Linux) में डिफ़ॉल्ट रूप से सक्षम है सिवाय Windows के।
यदि L2TP/IPsec VPN सर्वर NAT डिवाइस के पीछे है, तो NAT के माध्यम से बाहरी क्लाइंट को सही ढंग से कनेक्ट करने के लिए, आपको सर्वर और क्लाइंट दोनों तरफ रजिस्ट्री में कुछ बदलाव करने होंगे ताकि L2TP और IPsec में NAT-T सपोर्ट के लिए UDP पैकेट एनकैप्सुलेशन की अनुमति मिल सके।
- रजिस्ट्री एडिटर (
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
- AssumeUDPEncapsulationContextOnSendRule नाम से एक DWORD पैरामीटर बनाएं और मान 2 सेट करें;
नोट. AssumeUDPEncapsulationContextOnSendRule के संभावित मान:
- 0 – (डिफ़ॉल्ट मान) सुझाव देता है कि सर्वर NAT के बिना इंटरनेट से जुड़ा है;
- 1 – VPN सर्वर NAT डिवाइस के पीछे है;
- 2 — VPN सर्वर और क्लाइंट दोनों NAT के पीछे हैं।
- बस अपना कंप्यूटर पुनरारंभ करें और सुनिश्चित करें कि VPN टनल सफलतापूर्वक स्थापित हो गई है
[alert] यदि Windows VPN सर्वर और क्लाइंट दोनों NAT के पीछे हैं, तो आपको दोनों डिवाइस पर इस सेटिंग को बदलने की आवश्यकता है।
आप रजिस्ट्री में परिवर्तन करने के लिए PowerShell cmdlet का भी उपयोग कर सकते हैं:
Set-ItemProperty -Path "HKLM:SYSTEM\CurrentControlSet\Services\PolicyAgent" -Name "AssumeUDPEncapsulationContextOnSendRule" -Type DWORD -Value 2 –Force;
NAT-T सपोर्ट सक्षम करने के बाद, आप NAT (डबल NAT सहित) के माध्यम से क्लाइंट से VPN सर्वर से सफलतापूर्वक कनेक्ट कर पाएंगे।
कुछ मामलों में, VPN को ठीक से काम करने के लिए, आपको TCP 1701 के लिए एक अतिरिक्त फायरवॉल नियम सक्षम करने की आवश्यकता होती है (कुछ L2TP कार्यान्वयन में, यह पोर्ट UDP 1701 के साथ संयोजन में उपयोग किया जाता है)। NAT-T पहले के Windows 10 बिल्ड में सही ढंग से काम नहीं करता था, उदाहरण के लिए, 10240, 1511, 1607। यदि आपके पास पुराना Windows संस्करण है, तो हम Windows 10 बिल्ड को अपग्रेड करने की सलाह देते हैं।
एक ही LAN से एकाधिक L2TP VPN कनेक्शन
एक और दिलचस्प 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 के अनुसार, यह समस्या Windows पर L2TP/IPSec क्लाइंट के गलत कार्यान्वयन से संबंधित है (कई वर्षों से ठीक नहीं किया गया)।
इस बग को ठीक करने के लिए, आपको 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
यह Windows पर शेयर्ड पब्लिक IP पते (Windows XP से Windows 10 तक सभी संस्करणों पर काम करता है) के माध्यम से समवर्ती L2TP/IPSec VPN कनेक्शन के लिए समर्थन सक्षम करता है।