مقدمة
الطلب المتزايد على الحروف السحرية VPN وأسبابها ، بعيدًا عن تقنيات الشبكة ، ليس من المثير للاهتمام المزاح.
مرحبا هل انت جيد في الكمبيوتر؟ مساعدتي في VPN؟
في الواقع ، يسعدني أن يبدأ الناس في تعلم أساسيات شبكات الكمبيوتر (ما هو VPN ، وماذا يحدث ، ولماذا تبدأ المواقع المختلفة في الفتح به؟) ، وإذا أمكن ، المساعدة. أحاول الدفع من أجل عمليات التهيئة الذاتية لخوادم VPN الخاصة بي ، لكنني أفهم أنه ليس كل شخص مسؤولاً عن النظام ، لذلك يقترح بعض الأصدقاء شراء خادم وإعطائه إياها للتهيئة.
لكن أي مبرمج يجب أن يكون كسولاً حتى لا يكرر نفس الشيء مراراً. يؤدي تنفيذ نفس الإجراءات مرارًا وتكرارًا إلى شحذ المهارات ، ولكنه يقتل كل اهتمام التطوير والإبداع (والوقت).
وهكذا ، عند إعداد خادم VPN الثالث ، أدركت أنه من الضروري أتمتة كل هذا وجعل المستخدم سهل الاستخدام ، بحيث أنه بعد تعليمات قصيرة يمكن حتى للمستخدم العادي أن يشارك مفتاح ovpn مع صديق أو قريب. والأفضل من ذلك - لتثبيت النظام ، يمكن للمستخدم بشكل مستقل مع الحد الأدنى من المهارات والمعرفة.
لذلك ولد مشروع VPNFace - مجموعة من البرامج النصية للخادم لإدارة مفاتيح المستخدم لخوادم OpenVPN ولوحة تحكم الويب لهم. وبعد بضعة أيام من التطوير ، وجدت نفسي أفكر في أن حوالي 25٪ من الوظائف التي سيتم وضعها لن يطالب بها نفس "المستخدم العادي" هذا مطلقًا ، وتمت إضافة بادئة Lite إلى الاسم ، وتغير المفهوم الرئيسي للمشروع من مصمم للأغراض العامة إلى مصمم ضيق الأفق أداة ، والتي في الوقت نفسه خفضت بشكل ملحوظ من وقت التطوير قبل الإصدار.
بالطبع - حسنًا ، لم يحدث ذلك أبدًا - لماذا مدير OpenVPN آخر؟ لنكون صادقين - فكرت في المشاريع الأخرى لمديري الشبكات الافتراضية الخاصة في بالي عندما كان النواة الرئيسية تعمل بالفعل ، ورأيت كل أنواع الأشياء الصغيرة. في البداية كنت مستاء من أنني كنت غبيًا جدًا ولم أجرِ حتى الحد الأدنى من الدراسة (لأنني لا أحب إنتاج الدراجات) ، ولكن بعد دراسة المشاريع المذكورة أعلاه ، أدركت أن ملكي أيضًا له مكانة خاصة به.
الميزات الرئيسية:
- بساطتها الوظيفية: يتطلب المستخدم العادي ، عند التفاعل مع vpn كمسؤول ، وظائف قليلة فقط - إنشاء مفتاح وقفل وفتح. من غير المحتمل أن يفكر في إنشاء خادم VPN آخر إذا كان لديه خادم يعمل ، أو يتسلق لتغيير بيانات مركز الشهادة. قليل من الناس سيحتاجون إلى الرسوم البيانية المرورية الجميلة ، ووظيفة خادم المؤسسة ، لغرض استخدام برقية بهدوء .
- بساطة البرنامج: البرنامج الوحيد الذي يحتاجه المستخدم هو عميل OpenVPN الرسمي ، والمتوفر على جميع الأنظمة والأجهزة. لوحة التحكم الرئيسية هي تطبيق ويب يعمل في المستعرض. يتم تنفيذ التفويض الإداري بواسطة مفتاح VPN.
- التكوين شبه الثابت: 80 في المائة من المستخدمين يحتاجون إلى نفس الشيء ، ولا يهتمون بعناوين IP الموجودة داخل الشبكات (لا يعرفون حتى أنهم موجودون) ، و 15 ٪ أخرى تتطلب أكثر من ذلك بقليل ، ولكن ، بالمثل ، واحد ونفس أيضا ، 5 ٪ المتبقية يكتبون أشياء متشابهة بأنفسهم ، ينفذون كل ما يحتاجون إليه ، لذلك لا تقلق بشأنهم. ومع ذلك ، يمكن توصيل اللوحة يدويًا بخوادم openvpn بالفعل ، أو تصحيح بيانات الشهادة قبل التثبيت القياسي.
- انفصال مطلق لشركات الاستضافة أو خدمات الجهات الخارجية الأخرى - هناك عدد غير قليل من النسخ المكسورة في النزاعات حول الاستضافة الأكثر سحرية ، ويظل هذا تمامًا لاختيار المستخدم. يعد نظام تشغيل الخادم أكثر أهمية بالنسبة إلى النص البرمجي - فهو مكتوب تحت أنظمة Ubuntu / Debian ، ولكن جميع المضيفين يمتلكونها. سيقف النظام بهدوء في كل من الشبكة المنزلية الداخلية وفي الشركة.
- عملية التثبيت الأكثر بساطة على خادم نظيف تم شراؤه حديثًا: إذا كان هناك شيء يمكن القيام به بدون مشاركة المستخدم ، يتم ذلك باستخدام كود ثابت. لأن لايت. نعم ، لم يكن من الممكن تحقيق المثبت مثل Google Outline ، حيث يتطلب اتصال مستخدم عبر ssh لبدء التثبيت ، وشراء مستقل للخادم ، ولكن كان من الممكن تحقيق تلك المعرفة حول "كيفية الاتصال عبر ssh" كانت واحدة من أصعبها. باستخدام "الإعداد الافتراضي" ، يتم تكوين المستخدم بتكوين "قياسي" دون أي أسئلة.
لوحة التحكم الرئيسية
أثناء التثبيت الافتراضي ، يتم إنشاء ثلاثة خوادم VPN: المسؤول ، والإنترنت ، والظلام - ليس من الصعب التكهن من الأسماء ، فالأول يخدم وصول المشرف إلى الخادم ولوحة التحكم الرئيسية (و ssh ، إذا لزم الأمر) ، والثاني - يطلق المستخدمين فورًا إلى الإنترنت ، والثالثة تأخذ بشفافية كل حركة المرور الممكنة إلى شبكة tor (حركة مرور UDP باستثناء DNS لا تذهب إلى أي مكان ، و DNS يذهب إلى tor)

تقرر إنشاء لوحة التحكم على AngularJS سادس جديد ( أثناء التثبيت ، يتم تنزيل نسخة مجمعة من اللوحة ، لذا فإن المكتبات الزاويّة غير مطلوبة للعمل ). أحب مفهوم تطبيقات الويب ، وأحاول أن أتطور في هذا الاتجاه ، إن أمكن. أردت أيضًا دراسة المواد الزاويّة لفترة طويلة لإنشاء لوحات مشرف Google في مشاريع مختلفة.
يتم تبسيط إدارة المفاتيح ، كما هو موضح بالفعل ، إلى الحد الأدنى:
مفتاح جديد:

قفل المفتاح:

فتح المفتاح:

يعطي زر التنزيل ملف ovpn النهائي للاتصال.
الحد الأدنى لمساعدة المستخدم مضمن في اللوحة:

ويتم تضمين الوثائق المجمعة في المشروع ، والتي ترتفع بشكل افتراضي للشبكة الفرعية الإدارية في المنفذ 81:

يقتصر معنى النسخة Lite أيضًا على دعم اللغة - في الوقت الحالي لا يوجد المشروع بأكمله إلا باللغة الروسية ، ولا يتم حتى وضع التعددية اللغوية في النواة.
جانب الخادم
يتم تشغيل جانب الخادم على nodejs ونصوص bash. لماذا العقدة؟ أنا أحبها ، ولدي الكثير من المشاريع عليها. يبدو أن امتلاك مجموعة vpn-manager فكرة جيدة بالنسبة لي. يقوم البرنامج النصي للتثبيت بسحب مدير إصدار العقدة ، وتثبيت العقدة v10 من خلاله ، وإنشاء ارتباط بالمجلد على مستوى النظام حتى تعمل الخدمات المكتوبة تحت nodejs.
الحزم المثبتة في العقدة هي أيضًا قليلة - إلى الأبد ، خدمة إلى الأبد لإطلاق المشروع كخدمة نظام ، صريحة - لواجهة برمجة تطبيقات الويب ، shelljs - لتنفيذ أوامر وحدة التحكم ، ip - عنوان وشبكة فرعية حاسبة ، الطباشير - إخراج اللون إلى وحدة التحكم. بالطبع ، يمكن اختصار هذه القائمة مع كمالية بساطتها ، لكن قانون آكين الثاني ولد بشكل واضح من العدم (يمكن تطبيق نفس القانون على السؤال "لماذا nodejs؟" وبعض القوانين الأخرى) وعلى الرغم من الرغبة في بساطتها في قضايا أخرى ، هنا قررت عدم التعمق.
يدير البرنامج النصي للخوادم خوادم openvpn من خلال مجموعة من نصوص bash ويتطلب بنية ملف دليل جذر محددة وتكوين ملف openvpn. يتم استخدام ملفين json كقاعدة بيانات ، مما يسمح بما يلي:
- تخلص من التفاعل مع قواعد البيانات مثل mongo / sql والتبعيات والمضاعفات ذات الصلة
- دون أي مشاكل ، قم بإعداد "القواعد" (وهيكل الدلائل والملفات) يدويًا أو عن طريق البرنامج النصي ، عند التثبيت على خادم عمل مهيأ ، حتى عندما يكون المثبت الموجود في المجموعة قد يكون ضارًا ويجب تجنب عملية التثبيت الافتراضية (يتم التحقق من الحاجة إلى التثبيت بدقة لوجود ومحتوى json ملفات قاعدة البيانات)
كانت المكافأة المنفصلة للوحة التحكم كتطبيق ويب مستقل هي فصل وظائف الخادم إلى مجموعة منفصلة من نقاط نهاية http api ، مما يفتح إمكانية لبرامج الطرف الثالث لإدارة مفاتيح المستخدم من خلال طلبات http العادية.
سهل التثبيت (افتراضي)
من المفترض أن يتم تشغيل هذا التثبيت على خوادم جديدة ونظيفة. إذا تم تكوين الخادم بالفعل لبعض المهام - فمن الأفضل الرجوع إلى التثبيت اليدوي (حتى لا تتلف الوظائف الحالية).
يعجبني تثبيت nvm (مدير إصدار العقدة) الذي يحتاج فيه المستخدم إلى تنفيذ أمر واحد فقط في المحطة الطرفية ، والذي يقوم بنسخه من موقع المشروع ، بحيث يعمل المثبت الافتراضي بنفس الطريقة. أثناء تشغيل البرنامج النصي bash لتثبيت بدء التشغيل ، ستطلب الحزمة iptables-persistent من المستخدم حفظ قواعد iptables الحالية.

لا يُحدث اختيار المستخدم أي فرق ، لأنه عند اكتمال التثبيت ، سيعيد الإجراء الأخير تكوين جدار الحماية ، وستستبدل مجموعة القواعد الجديدة التحديد الحالي. في نهاية العمل ، سيطالبك البرنامج النصي بإكمال التثبيت عبر واجهة الويب.

يبدأ تثبيت الويب بتأكيد عنوان IP العام للخادم. بشكل افتراضي ، يأخذ النص البرمجي للويب البيانات من عنوان URL لسلسلة المتصفح. بالتركيز على هذا IP ، يبحث رمز الخادم عن واجهة عنوان الشبكة للتكوين المستقبلي لجدار الحماية وخوادم openvpn.

بعد تلقي بيانات الشبكة ، ينشئ المثبت خادم VPN مسؤول. يستغرق إنشاء مفاتيح التشفير أثناء إعداد الدليل الجذر بعض الوقت ، وخلال التطوير ، على نفس الجهاز ، اختلفت هذه المرة من 1 إلى 15 دقيقة.
عندما يتم إنشاء الخادم وبدء تشغيله ، ينتقل المثبت إلى الخطوة الثانية ، حيث يطالب المستخدم بإنشاء مفتاح مسؤول.

ثم ينتقل إلى وضع الاستعداد لتوصيل المسؤول VPN. من المتوقع أن يتم توصيل vpn على نفس الجهاز الذي يتم التثبيت من خلاله.

عندما يتصل المستخدم بخادم vpn المسؤول ، يصبح متاحًا على العنوان 10.1.0.1 ، ويمر طلب jsonp من صفحة المثبت بنجاح هناك ، والذي يصبح إشارة لإعادة توجيه الصفحة إلى العنوان الداخلي وإكمال التثبيت.

في المرحلة الأخيرة من التثبيت ، يتم إنشاء وتكوين خادمي VPN المتبقيين (الوقت لإنشاء التشفير * 2) و tor و nginx و iptalbles. عند تلقي إشارة لإكمال التثبيت من جانب الخادم ، سيقوم البرنامج النصي بإعادة توجيه الصفحة إلى لوحة التحكم الرئيسية.
التثبيت اليدوي
يتطلب التثبيت اليدوي للوحة التحكم على هيكل عمل خوادم OpenVPN عدة خطوات وهو ممكن من الناحية التقنية من قبل مسؤول Linux (ولا أعتقد أن شخصًا آخر غيرهم قد يحتاج إلى التثبيت اليدوي):
- إعداد بيئة nodejs وفقًا لمتطلبات أمان الخادم الحالي وتنظيم البرنامج النصي بالشكل المطلوب (الخدمة ، الدليل ، إلخ)
- تحضير بنية ملف دلائل البيانات والملقمات ، وإنشاء "قواعد بيانات" json
- إعداد وكيل nginx على لوحة التحكم والوثائق ، إذا لزم الأمر
يمكن العثور على التفاصيل والتفاصيل الفنية في الوثائق الفورية .
في الختام
آمل أن يكون المشروع مفيدًا لشخص ما.
مستودع المشروع
مستودع شفرة مصدر لوحة الويب الزاوي
يتم توزيع المشروع بموجب ترخيص MIT ونشره لدعم حركة DIITITAL RESITANCE.
أفكار تطوير PS فوق السطح - واربط التعددية اللغوية ، وتخلص من اللحظات المشفرة في التعليمات البرمجية ، وأضف وظيفة لإنشاء الخوادم ، وإدارة التوجيه وجدار الحماية ، وتحويل النظام إلى مصمم عالمي ، إلخ. إلخ ، ولكن كيف ومتى سيتم تنفيذ كل هذا؟ بدون دليل ، سيظهر المستقبل.