यह लेख मेरे नए प्लुरलसाइट कोर्स, "कनेक्टिंग ऑन-प्रेम रिसोर्सेज टू योर AWS इन्फ्रास्ट्रक्चर" के एक भाग से अनुकूलित किया गया है।
क्या आपको कभी-कभी उन संसाधनों से जुड़ने की आवश्यकता होती है जो आपने Amazon Web Services पर चलाए हैं? अपने सार्वजनिक EC2 इंस्टेंस को SSH का उपयोग करके एक्सेस करना और अपने S3 डेटा को एन्क्रिप्ट करना, सभी इरादों और उद्देश्यों के लिए, पर्याप्त सुरक्षित है। लेकिन बैक-एंड RDS डेटाबेस इंस्टेंस में जाना या AWS-आधारित डेटा के साथ काम करना जो सार्वजनिक नहीं है, उसके बारे में क्या? ऐसे सभी प्रकार के कारण हैं जिनकी वजह से एडमिन ऐसे संसाधनों को आम जनता की पहुंच से बाहर रखते हैं। लेकिन अगर आप जब जरूरत हो तब उन तक नहीं पहुंच सकते, तो वे आपके लिए क्या अच्छा करेंगे?
इसलिए आपको ACLs और सुरक्षा समूहों के आसपास एक सुरक्षित और विश्वसनीय तरीका खोजने की आवश्यकता होगी जो आपकी चीजों की रक्षा कर रहे हैं। एक समाधान जिसे मैं अपने प्लुरलसाइट पर "कनेक्टिंग ऑन-प्रेम रिसोर्सेज टू योर AWS इन्फ्रास्ट्रक्चर" कोर्स में कवर करता हूं, वह है डायरेक्ट कनेक्ट। लेकिन अगर डायरेक्ट कनेक्ट का प्राइस टैग आपकी कंपनी के लिए बजट-बस्टर है, तो किसी प्रकार की VPN टनल चाल चल सकती है।
वर्चुअल प्राइवेट नेटवर्क क्या है?
वर्चुअल प्राइवेट नेटवर्क (VPN) का उपयोग अक्सर अन्यथा प्रतिबंधित नेटवर्क गतिविधि या गुमनाम ब्राउज़िंग की अनुमति देने के लिए किया जाता है। लेकिन यह लेख इसके बारे में नहीं है।
एक VPN एक पॉइंट-टू-पॉइंट कनेक्शन है जो आपको एक सार्वजनिक नेटवर्क पर दो साइटों के बीच सुरक्षित रूप से डेटा ले जाने देता है। प्रभावी रूप से, एक टनल को दो भौगोलिक रूप से अलग निजी साइटों को एक एकल निजी नेटवर्क में संयोजित करने के लिए डिज़ाइन किया जा सकता है। हमारे संदर्भ में, इसका अर्थ होगा अपने स्थानीय कार्यालय नेटवर्क को उस AWS VPC से जोड़ना जो आपके निजी संसाधनों की मेजबानी कर रहा है।
इसे करने के दो तरीके हैं:
- AWS वर्चुअल प्राइवेट गेटवे के शीर्ष पर निर्मित एक प्रबंधित VPN कनेक्शन
- अपने स्वयं के VPN का उपयोग करना।
यह लेख DIY विधि पर केंद्रित होगा।
OpenVPN एक्सेस सर्वर
जैसा कि नाम से पता चलता है, OpenVPN एक ओपन सोर्स प्रोजेक्ट है, और आप हमेशा मुफ्त कम्युनिटी संस्करण डाउनलोड कर सकते हैं और चीजों को अपने स्वयं के VPN सर्वर पर सेट कर सकते हैं। लेकिन OpenVPN कंपनी एक उद्देश्य-निर्मित OpenVPN एक्सेस सर्वर को EC2 AMI के रूप में भी प्रदान करती है जो AWS-फ्रेंडली इंटीग्रेशन और स्वचालित कॉन्फ़िगरेशन टूल के साथ बॉक्स से बाहर आता है।
मैं जो देख सकता हूं, उससे आपके AWS VPC के भीतर AMI लॉन्च करना और इसे नियंत्रित रिमोट कनेक्शन के लिए खोलना इस काम को पूरा करने का "सही" तरीका बन गया है।
इसकी लागत क्या है? यदि आप केवल चीजों का परीक्षण कर रहे हैं और एक समय में दो से अधिक कनेक्शन का उपयोग करके VPN तक पहुंचने की योजना नहीं बना रहे हैं, तो AMI स्वयं मुफ़्त है। आप अभी भी एक EC2 इंस्टेंस की नियमित लागतों के लिए जिम्मेदार होंगे, लेकिन यदि आपका खाता अभी भी फ्री टियर के लिए योग्य है, तो आप इसे मुफ्त में भी प्राप्त कर सकते हैं।
एक बार जब आप अपने VPN को सक्रिय उत्पादन में डालते हैं, तो आपके द्वारा खरीदा गया लाइसेंस इस बात पर निर्भर करेगा कि आपको कितने समवर्ती कनेक्शन की आवश्यकता होगी। इस पृष्ठ में वे विवरण हैं जिनकी आपको आवश्यकता होगी।
यहाँ हम इस गाइड में क्या करने जा रहे हैं:
- मेरे VPC में OpenVPN एक्सेस सर्वर के साथ प्री-इंस्टॉल्ड एक Ubuntu AMI का चयन, प्रोविजन, और लॉन्च करें
- SSH का उपयोग करके सर्वर तक पहुंचें और VPN कॉन्फ़िगर करें
- एक एडमिन उपयोगकर्ता सेट करें
- अपने AWS VPC में एक निजी इंस्टेंस से जुड़ने के लिए एक स्थानीय मशीन को OpenVPN क्लाइंट के रूप में सेट अप करें और कनेक्ट करें
तैयार?
OpenVPN एक्सेस सर्वर लॉन्च करना
EC2 डैशबोर्ड से — और यह सुनिश्चित करते हुए कि हम सही AWS क्षेत्र में हैं — एक इंस्टेंस लॉन्च करें जो हमारे VPN सर्वर के रूप में कार्य करेगा। क्विक स्टार्ट AMIs में से एक का उपयोग करने के बजाय, मैं AWS मार्केटप्लेस टैब पर क्लिक करूंगा और "openvpn access server" खोजूंगा। OpenVPN कई आधिकारिक छवियां प्रदान करता है जो बढ़ती संख्या में जुड़े क्लाइंट्स की पेशकश करने वाले लाइसेंस से जुड़ी हुई हैं।
मैं इस Ubuntu छवि के साथ जाऊंगा जो "ब्रिंग योर ओन लाइसेंस" व्यवस्था के माध्यम से काम करती है। जैसा कि मैंने पहले लिखा था, हम वास्तव में जो करने जा रहे हैं उसके लिए लाइसेंस की आवश्यकता नहीं होगी।

AMI का चयन करने से एक पॉपअप खुलता है जो हमें बताता है कि विभिन्न इंस्टेंस प्रकारों और EBS स्टोरेज विकल्पों का उपयोग करके इस छवि की प्रति घंटे लागत कितनी होगी। हालांकि, वे केवल नियमित AWS इन्फ्रास्ट्रक्चर लागतें हैं, और इसमें लाइसेंस शुल्क शामिल नहीं हैं।

जब इंस्टेंस प्रकार की बात आती है, तो मैं इसे फ्री टियर के भीतर रखने के लिए t2.micro पर डाउनग्रेड करूंगा। एक व्यस्त उत्पादन सर्वर को थोड़ी अधिक शक्ति की आवश्यकता हो सकती है।
क्योंकि मैं कुछ मिनटों में उसी सबनेट में एक दूसरा इंस्टेंस शुरू करना चाहता हूं, मैं कॉन्फिगर इंस्टेंस डिटेल्स पेज से, मान लीजिए, "us-east-1b" का चयन करूंगा, और बाद के लिए एक नोट बना लूंगा।

अब सिक्योरिटी ग्रुप पेज वह जगह है जहां OpenVPN AMI सेटिंग्स वास्तव में चमकती हैं। हमें एक सिक्योरिटी ग्रुप प्रस्तुत किया जाता है जो वह सब कुछ खोलता है जिसकी हमें आवश्यकता होगी। पोर्ट 22 सर्वर में SSH ट्रैफिक के लिए है, 943 वह पोर्ट है जिसका उपयोग हम एडमिन GUI तक पहुंचने के लिए करेंगे, 443 TLS-एन्क्रिप्टेड HTTP ट्रैफिक है, और OpenVPN इनकमिंग क्लाइंट कनेक्शन के लिए पोर्ट 1194 पर सुनेगा।

नोट: यदि व्यावहारिक हो, तो आमतौर पर उन नियमों को कसना एक अच्छा विचार होगा ताकि केवल वैध कंपनी IP पते रेंज से अनुरोध स्वीकार किए जाएं, लेकिन यह अल्पकालिक परीक्षण के लिए ठीक रहेगा।
यहां से, मैं अपनी सेटिंग्स की समीक्षा करूंगा, पुष्टि करूंगा कि मेरे पास सूचीबद्ध SSH एन्क्रिप्शन कुंजी है, और ट्रिगर खींचूंगा।
एक बार इंस्टेंस लॉन्च हो जाने पर, मुझे महत्वपूर्ण लॉगिन जानकारी दिखाई जाएगी — जिसमें यह तथ्य शामिल है कि जिस उपयोगकर्ता खाते का उपयोग हम सर्वर में SSH करने के लिए करेंगे उसे openvpnas कहा जाता है — और एक क्विक स्टार्ट गाइड। मुझे उसी जानकारी के लिंक वाला एक ईमेल भी प्राप्त होगा।
EC2 इंस्टेंस कंसोल में वापस, जबकि नई मशीन बूटिंग समाप्त करती है, हमें हमारा सार्वजनिक IP पता दिखाया जाता है। यदि हमें कभी इंस्टेंस को रीबूट करने की आवश्यकता होती है, तो इस बात की कोई गारंटी नहीं है कि हमें वही IP फिर से मिलेगा, जिससे उचित मात्रा में तबाही हो सकती है। इसलिए इंस्टेंस को एक इलास्टिक IP असाइन करना एक अच्छा विचार है।
ऐसा करने के लिए, मैं इलास्टिक IPs पर क्लिक करूंगा और फिर नया पता आवंटित करूंगा। नए पते को नोट करें और पेज बंद करें। अब, उस पते के चयनित होने पर, एक्शन पर क्लिक करें, और "एसोसिएट एड्रेस"। मैं इंस्टेंस बॉक्स में एक बार क्लिक करूंगा और मेरा OpenVPN इंस्टेंस — अपने सहायक टैग के साथ — सूचीबद्ध है। मुझे केवल इसे चुनना है, "एसोसिएट" पर क्लिक करना है और मैं पूरा हो गया। अब से, वह हमारे सर्वर तक पहुंचने के लिए स्थायी सार्वजनिक IP होगा।

सर्वर तक पहुंचना
मैं सार्वजनिक IP पते को टर्मिनल में अपने SSH कमांड के हिस्से के रूप में पेस्ट करूंगा जो इस इंस्टेंस के लिए सेट की गई कुंजी जोड़ी को कॉल करता है।
ssh -i KeyPairName.pem openvpnas@<PublicIPAddress>यदि आप Windows या macOS मशीन से एक्सेस कर रहे हैं, तो चीजें थोड़ी अलग तरीके से काम कर सकती हैं, लेकिन दस्तावेज़ीकरण आपको वह सभी सहायता देगा जिसकी आपको आवश्यकता होगी।
इंस्टेंस कंसोल छोड़ने से पहले, हालांकि, मैं एक और महत्वपूर्ण कार्य करूंगा। OpenVPN इंस्टेंस चयनित होने पर, मैं एक्शन पर क्लिक करूंगा और फिर नेटवर्किंग और फिर "चेंज सोर्स/डेस्ट चेकिंग"। मैं सुनिश्चित करूंगा कि चेकिंग अक्षम है। जब तक मैं ऐसा नहीं करता, तब तक बहुत कुछ संभव नहीं होगा।
अब मेरे SSH सत्र पर। जैसे ही यह शुरू होता है, मुझे OpenVPN EULA लाइसेंस समझौते का सामना करना पड़ता है, और फिर सेटअप विज़ार्ड। यदि आपको बाद में कोई सेटिंग बदलने की आवश्यकता है तो आप विज़ार्ड को फिर से इस कमांड का उपयोग करके चला सकते हैं:
sudo ovpn-init — ec2.विज़ार्ड के अधिकांश डिफ़ॉल्ट ठीक काम करेंगे, लेकिन यह जल्दी से समझाने लायक है कि क्या हो रहा है। यहाँ प्रश्न हैं और जहां आवश्यक हो कुछ रंगीन टिप्पणी:
प्राथमिक एक्सेस सर्वर नोड? हाँ [यदि आप बैकअप या फेलओवर नोड सेट कर रहे थे तो आप नहीं उत्तर देंगे।] एडमिन वेब UI द्वारा उपयोग किए जाने वाले नेटवर्क इंटरफेस और IP पते को निर्दिष्ट करें [1 — सभी इंटरफेस के लिए; बाद में स्टेटिक में बदला जा सकता है।] एडमिन वेब UI के लिए पोर्ट नंबर निर्दिष्ट करें [डिफ़ॉल्ट] OpenVPN डेमन के लिए TCP पोर्ट नंबर निर्दिष्ट करें [डिफ़ॉल्ट] क्या क्लाइंट ट्रैफिक को डिफ़ॉल्ट रूप से VPN के माध्यम से रूट किया जाना चाहिए? [नहीं--हम यहां उस तरह का VPN नहीं बना रहे हैं। हम जो कर रहे हैं वह केवल रिमोट क्लाइंट को सुरक्षित और सुरक्षित रूप से हमारे VPC में लाने के बारे में है। वही क्लाइंट DNS ट्रैफिक पर लागू होता है।] क्या क्लाइंट DNS ट्रैफिक को डिफ़ॉल्ट रूप से VPN के माध्यम से रूट किया जाना चाहिए? [नहीं] स्थानीय प्रमाणीकरण आंतरिक DB के माध्यम से उपयोग करें? [नहीं — उपयोगी हो सकता है, लेकिन हम सरलता के लिए Linux/AWS प्रमाणीकरण का उपयोग करेंगे।] क्या निजी सबनेट डिफ़ॉल्ट रूप से क्लाइंट के लिए सुलभ होने चाहिए? [हाँ — आखिरकार VPN का यही पूरा उद्देश्य है।] "openvpn" के रूप में एडमिन UI में लॉगिन करें? [हाँ] OpenVPN एक्सेस सर्वर लाइसेंस कुंजी प्रदान करें [परीक्षण के लिए अनावश्यक।]जब विज़ार्ड पूरा हो जाता है, तो मुझे कुछ कनेक्शन जानकारी दिखाई जाती है और नेटवर्क टाइम डेमन NTP इंस्टॉल करने की सलाह दी जाती है। इस Ubuntu बॉक्स पर यह आवश्यक नहीं होगा, क्योंकि यह डिफ़ॉल्ट रूप से पहले से इंस्टॉल और चल रहा है।
जैसा कि मैंने पहले उल्लेख किया था, मुझे openvpn उपयोगकर्ता को एक पासवर्ड देना होगा ताकि मैं इसका उपयोग वेब GUI में लॉग इन करने के लिए कर सकूं। मैं इसे sudo के साथ passwd कमांड का उपयोग करके करता हूं।
sudo passwd openvpnवह सभी सर्वर-साइड सामान है जिसकी हमें आवश्यकता होगी। अब मैं ब्राउज़र का उपयोग करके वेब GUI में लॉग इन करने जा रहा हूँ। मैं हमारे सर्वर के सार्वजनिक IP पते का उपयोग सुरक्षित https प्रीफिक्स के साथ करता हूं, उसके बाद स्लैश और एडमिन।
https://<PublicIPAddress>/adminआपको "आपका कनेक्शन निजी नहीं है" चेतावनी मिलेगी क्योंकि हम सर्टिफिकेट अथॉरिटी द्वारा प्रदान किए गए सर्टिफिकेट के बजाय सेल्फ-साइन सर्टिफिकेट का उपयोग कर रहे हैं।

यह हमारे लिए कोई समस्या नहीं है, क्योंकि हम केवल अपने VPN को अपनी कंपनी के भीतर के चुनिंदा उपयोगकर्ताओं के लिए उजागर कर रहे हैं, और उन्हें हमारे सर्टिफिकेट पर भरोसा करने में सक्षम होना चाहिए। इसलिए मैं चेतावनी के माध्यम से क्लिक करूंगा, साइन इन करूंगा, और EULA से सहमत होऊंगा।
OpenVPN एडमिन कंसोल द्वारा प्रदान की जाने वाली सुविधाओं का पता लगाने के लिए बेझिझक कुछ समय बिताएं।

VPN क्लाइंट सेट करना
हालांकि, अभी मैं क्लाइंट UI पेज खोलने जा रहा हूँ, वेब एक्सेस पते का उपयोग करके जो हमें पहले दिखाया गया था, लेकिन इस बार स्लैश एडमिन के बिना। यह एक लॉगिन स्क्रीन से ज्यादा कुछ नहीं है जहां आप पहले की तरह उसी openvpn उपयोगकर्ता का उपयोग करके प्रमाणित कर सकते हैं। (आप हमेशा एडमिन कंसोल में नए उपयोगकर्ता बना सकते हैं।)
लॉगिन स्क्रीन के पीछे, प्लेटफॉर्म के किसी भी पर OpenVPN क्लाइंट ऐप इंस्टॉल करने के लिए निर्देशों के साथ लिंक का सिर्फ यह सेट है। अंतिम लिंक, हालांकि, "योरसेल्फ" कहलाता है।

इसे क्लिक करने पर आपको client.ovpn नामक एक फ़ाइल डाउनलोड और सेव करने के लिए कहा जाएगा। इस फ़ाइल में सर्वर से मेल खाने वाली कॉन्फ़िगरेशन सेटिंग्स और वास्तविक कुंजी होती हैं जिनका उपयोग हम प्रमाणित करने के लिए करेंगे। आप निश्चित रूप से इस फ़ाइल को सावधानी से संभालना चाहेंगे ताकि यह गलत हाथों में न पड़ जाए। इसमें अनएन्क्रिप्टेड कनेक्शन पर सादे ईमेल के माध्यम से इसे भेजना शामिल नहीं होगा।
मैं फ़ाइल को स्थानीय रूप से खोलूंगा और सामग्री को कॉपी करूंगा। फिर, मेरे स्थानीय नेटवर्क में चल रहे लिनक्स वर्चुअल मशीन के भीतर एक शेल में, मैं client.ovpn नामक एक नई फ़ाइल बनाऊंगा और सामग्री पेस्ट करूंगा। यदि आपने पहले क्लाइंट UI में "OpenVPN फॉर लिनक्स" लिंक पर क्लिक किया था, तो आपने देखा होगा कि एकमात्र अतिरिक्त कदम Apt पैकेज मैनेजर का उपयोग करके OpenVPN इंस्टॉल करना था — या Yum यदि आप CentOS या रेड हैट मशीन पर हैं। खैर, इसमें सिर्फ एक कमांड लगेगा। जब यह अपना काम कर लेगा, तो हम पूरी तरह तैयार होंगे।
nano client.ovpnsudo apt updatesudo apt install openvpnअब हम VPN कनेक्शन खोलेंगे। रूट के रूप में — sudo का उपयोग करके — मैं config फ्लैग के साथ client.ovpn कॉन्फ़िगरेशन फ़ाइल की ओर इशारा करते हुए openvpn टाइप करूंगा जिसे मैंने अभी बनाया है।
sudo openvpn — config client.ovpnजब प्रमाणित करने के लिए कहा जाए, तो सर्वर पर आपके द्वारा पहले बनाए गए पासवर्ड के साथ openvpn खाते का उपयोग करें।
अब मैं अपने स्थानीय क्लाइंट पर एक दूसरा शेल सत्र खोलूंगा ताकि मैं OpenVPN सर्वर में उसके स्थानीय IP पते का उपयोग करके ssh करने का प्रयास कर सकूं — कुछ ऐसा जो एक कामकाजी VPN कनेक्शन के बिना असंभव होगा।
पहले हालांकि, सभी सक्रिय नेटवर्क इंटरफेस को सूचीबद्ध करने के लिए ip a चलाएं।
ip aअपने स्थानीय नेटवर्क के अलावा, आपको tun0 नामक एक भी देखना चाहिए। यह इंटरफेस OpenVPN द्वारा बनाया गया था और आमतौर पर 172.16.x.x रेंज में होगा।
मैं अपने निजी कुंजी का उपयोग करके — जो निश्चित रूप से स्थानीय रूप से मौजूद होनी चाहिए — और सर्वर के निजी IP पते का उपयोग करके रिमोट सर्वर में ssh करूंगा। यदि यह काम करता है, तो आपके पास एक VPN होगा!
ssh -i KeyPairName.pem openvpnas@<PrivateIPAddress>अंत में, मैं प्रदर्शित करूंगा कि VPN, जैसा कि वर्तमान में कॉन्फ़िगर किया गया है, हमें हमारे Amazon VPC के भीतर अन्य निजी संसाधनों तक पहुंचने की अनुमति देगा। यह उपयोगी हो सकता है यदि, उदाहरण के लिए, आपके पास VPC में चल रहा एक डेटाबेस इंस्टेंस है जिसे आप सार्वजनिक नेटवर्क में उजागर नहीं कर सकते।
मैं एक मानक Ubuntu EC2 इंस्टेंस लॉन्च करने जा रहा हूँ लेकिन मैं इसे एक सार्वजनिक IP नहीं दूंगा। मैं चीजों को सरल रखने के लिए उसी us-east-1b सबनेट को निर्दिष्ट करूंगा जिसका उपयोग हमने OpenVPN सर्वर के लिए किया था। मैं जिस सिक्योरिटी ग्रुप का उपयोग करूंगा वह पोर्ट 22 के माध्यम से SSH एक्सेस की अनुमति देगा लेकिन और कुछ नहीं।
एक बार यह चलने के बाद, मैं इसके निजी IP पते को नोट करूंगा और अपने स्थानीय क्लाइंट पर वापस जाऊंगा। एक बार जब मुझे यकीन हो जाएगा कि इंस्टेंस पूरी तरह से लॉन्च हो गया है, तो मैं उसी निजी कुंजी, "उबंटू" उपयोगकर्ता नाम — चूंकि यह सामान्य Ubuntu EC2 इंस्टेंस के लिए डिफ़ॉल्ट है — और मैंने अभी कॉपी किए गए निजी पते का उपयोग करके ssh करूंगा।
फिर से। यदि यह काम करता है, तो आपके पास अपने AWS निजी संसाधनों में एक पूरी तरह से कॉन्फ़िगर किया गया VPN कनेक्शन होगा। इस पल का आनंद लें।
जब आप उनका उपयोग कर लें तो अपने सभी सर्वरों को बंद करना और अपने इलास्टिक IP पते को रिलीज करना न भूलें। आप अनावश्यक रूप से लागत नहीं उठाना चाहते।
यह लेख मेरे नए प्लुरलसाइट कोर्स, "कनेक्टिंग ऑन-प्रेम रिसोर्सेज टू योर AWS इन्फ्रास्ट्रक्चर" के एक भाग से अनुकूलित किया गया है। मेरे बूटस्ट्रैप IT साइट पर इससे बहुत अधिक है, जिसमें मेरी किताब, लिनक्स इन एक्शन, और एक हाइब्रिड कोर्स लिनक्स इन मोशन के लिंक शामिल हैं जो दो घंटे से अधिक वीडियो और लिनक्स इन एक्शन के टेक्स्ट का लगभग 40% से बना है।