استمرار
المقال حول كيف تمكنت من تنظيم نفق VPN مباشر بين جهازي كمبيوتر موجودين خلف موفري NAT. وصفت المقالة الأخيرة عملية تنظيم اتصال باستخدام جهة خارجية - وسيط (VPS مستأجر يعمل كشيء مثل خادم STUN وجهاز إرسال بيانات العقدة للاتصال). في هذه المقالة ، سوف أخبرك بكيفية الاستغناء عن VPS ، ولكن بقي الوسطاء وكانوا خادم STUN و Yandex.Disk ...

مقدمة
بعد قراءة تعليقات آخر مشاركة ، أدركت أن العيب الرئيسي للتنفيذ هو استخدام وسيط - طرف ثالث (VPS) أشار إلى المعلمات الحالية للعقدة حيث وكيفية الاتصال. نظرًا لتوصيات استخدام STUN (هناك
الكثير منها ) لتحديد معلمات الاتصال الحالية. بادئ ذي بدء ، قررت إلقاء نظرة على محتويات الحزم باستخدام TCPDump عندما كان خادم STUN يعمل مع العملاء وتلقى محتوى غير قابل للقراءة تمامًا. غوغلينغ البروتوكول جاء عبر
مقال يصف البروتوكول . أدركت أنه لا يمكنني تنفيذ الطلب على خادم STUN بنفسي ووضع الفكرة في "المربع البعيد".
نظرية
اضطررت مؤخرًا إلى تثبيت خادم STUN على دبيان من خلال حزمة
وفي التبعيات رأيت حزمة العميل الصاعقة ، ولكن بطريقة ما لم تعلق أي أهمية على هذا. لكن في وقت لاحق ، تذكرت عن حزمة العملاء الصاعقة وقررت أن أعرف كيف تعمل ، عن طريق googling و Poindeksiv التي تلقيتها:
استجابة لذلك ، تلقيت:
الإصدار STUN العميل 0.97
تم فتح المنفذ 21234 مع رقم 3
فتح منفذ 21235 مع 4 يوم
ترميز رسالة الصاعقة:
ترميز ChangeRequest: 0
بصدد إرسال msg of len 28 إلى 216.93.246.18 think478
ترميز رسالة الصاعقة:
ترميز ChangeRequest: 4
بصدد إرسال msg of len 28 إلى 216.93.246.18 think478
ترميز رسالة الصاعقة:
ترميز ChangeRequest: 2
بصدد إرسال msg of len 28 إلى 216.93.246.18 think478
تلقى رسالة صاعقة: 92 بايت
MappedAddress = <My IP>: 2885
SourceAddress = 216.93.246.18//478
ChangedAddress = 216.93.246.17lla479
سمة غير معروفة: 32800
ServerName = Vovida.org 0.98-CPC
الرسالة المستلمة من النوع 257 معرف = 1
ترميز رسالة الصاعقة:
ترميز ChangeRequest: 0
بصدد إرسال رسالة ms l of 28 إلى 216.93.246.17lla478
ترميز رسالة الصاعقة:
ترميز ChangeRequest: 4
بصدد إرسال msg of len 28 إلى 216.93.246.18 think478
ترميز رسالة الصاعقة:
ترميز ChangeRequest: 2
بصدد إرسال msg of len 28 إلى 216.93.246.18 think478
ترميز رسالة الصاعقة:
ترميز ChangeRequest: 0
بصدد إرسال رسالة ms l of 28 إلى <My IP>: 2885
تلقى رسالة صاعقة: 28 بايت
ChangeRequest = 0
رسالة مستلمة من النوع 1 معرف = 11
ترميز رسالة الصاعقة:
ترميز ChangeRequest: 0
بصدد إرسال رسالة ms l of 28 إلى 216.93.246.17lla478
ترميز رسالة الصاعقة:
ترميز ChangeRequest: 4
بصدد إرسال msg of len 28 إلى 216.93.246.18 think478
ترميز رسالة الصاعقة:
ترميز ChangeRequest: 2
بصدد إرسال msg of len 28 إلى 216.93.246.18 think478
تلقى رسالة صاعقة: 92 بايت
MappedAddress = <My IP>: 2885
SourceAddress = 216.93.246.17lla479
ChangedAddress = 216.93.246.18 {478
سمة غير معروفة: 32800
ServerName = Vovida.org 0.98-CPC
الرسالة المستلمة من النوع 257 معرف = 10
ترميز رسالة الصاعقة:
ترميز ChangeRequest: 4
بصدد إرسال msg of len 28 إلى 216.93.246.18 think478
ترميز رسالة الصاعقة:
ترميز ChangeRequest: 2
بصدد إرسال msg of len 28 إلى 216.93.246.18 think478
ترميز رسالة الصاعقة:
ترميز ChangeRequest: 4
بصدد إرسال msg of len 28 إلى 216.93.246.18 think478
ترميز رسالة الصاعقة:
ترميز ChangeRequest: 2
بصدد إرسال msg of len 28 إلى 216.93.246.18 think478
ترميز رسالة الصاعقة:
ترميز ChangeRequest: 4
بصدد إرسال msg of len 28 إلى 216.93.246.18 think478
ترميز رسالة الصاعقة:
ترميز ChangeRequest: 2
بصدد إرسال msg of len 28 إلى 216.93.246.18 think478
ترميز رسالة الصاعقة:
ترميز ChangeRequest: 4
بصدد إرسال msg of len 28 إلى 216.93.246.18 think478
ترميز رسالة الصاعقة:
ترميز ChangeRequest: 2
بصدد إرسال msg of len 28 إلى 216.93.246.18 think478
ترميز رسالة الصاعقة:
ترميز ChangeRequest: 4
بصدد إرسال msg of len 28 إلى 216.93.246.18 think478
ترميز رسالة الصاعقة:
ترميز ChangeRequest: 2
بصدد إرسال msg of len 28 إلى 216.93.246.18 think478
اختبار I = 1
اختبار الثاني = 0
اختبار الثالث = 0
اختبار I (2) = 1
هو نات = 1
تعيين IP نفسه = 1
دبوس الشعر = 1
منفذ الحفظ = 0
الأساسي: رسم الخرائط المستقلة ، تصفية المنفذ التابع ، منفذ عشوائي ، سوف دبوس الشعر
قيمة الإرجاع هي 0x000006
سلسلة مع القيمة
MappedAddress = <My IP>: 2885
فقط ما تحتاجه! عرض الحالة الحالية للاتصال على منفذ UDP المحلي 21234. ولكن هذه ليست سوى نصف المعركة ، نشأ السؤال حول كيفية نقل هذه البيانات إلى مضيف بعيد وإنشاء اتصال VPN. باستخدام بروتوكول البريد ، ربما برقية؟! هناك العديد من الخيارات وقررت استخدام Yandex.Disk ، حيث صادفت
مقالًا حول كيفية عمل Curl من خلال WebDav مع Yandex.Disk . بعد التفكير في التنفيذ ، جئت إلى هذا المخطط:
- للإشارة إلى أن العقد جاهزة لتأسيس اتصال عن طريق وجود ملف معين مع طابع زمني على Yandex.disk ؛
- إذا كانت العقد جاهزة ، فاحصل على المعلمات الحالية من خادم STUN ؛
- تحميل المعلمات الحالية إلى Yandex.Disk ؛
- تحقق من توفر وقراءة معلمات موقع بعيد من ملف على Yandex.Disk ؛
- تأسيس اتصال بمضيف بعيد باستخدام OpenVPN.
ممارسة
بعد قليل من التفكير ، مع مراعاة تجربة المقالة السابقة ، كتبت نصًا سريعًا. سنحتاج:
في الواقع السيناريو نفسه:
الخيار الأولي
لتشغيل البرنامج النصي الذي تحتاجه:
- انسخ إلى الحافظة والصقها في المحرر ، على سبيل المثال:
- تحديد اسم المستخدم وكلمة المرور من Yandex.Disk.
- في الحقل "--ifconfig 10.45.54. (1 أو 2) 255.255.255.252" حدد عنوان IP الداخلي للواجهة
- إنشاء secret.key باستخدام الأمر:
- اجعل البرنامج قابل للتنفيذ:
- قم بتشغيل البرنامج النصي:
حيث nZbVGBuX5dtturD هو معرف الاتصال الذي تم إنشاؤه هنا
على العقدة البعيدة ، قم بالشيء نفسه باستثناء إنشاء secret.key واتصال المعرّف ، يجب أن يكونا متطابقين.
نسخة محدثة (للتشغيل الصحيح ، يجب مزامنة الوقت):
cat vpn10.sh
لتشغيل البرنامج النصي الذي تحتاجه:
- انسخ إلى الحافظة والصقها في المحرر ، على سبيل المثال:
- حدد تسجيل الدخول (السطر الثاني) وكلمة المرور من Yandex.Disk (السطر الثالث).
- تحديد عنوان IP الداخلي للنفق (الخط الرابع).
- اجعل البرنامج قابل للتنفيذ:
- قم بتشغيل البرنامج النصي:
حيث nZbVGBuX5dtturD هو معرف الاتصال الذي تم إنشاؤه هنا
على العقدة البعيدة ، قم بالشيء نفسه ، وحدد عنوان IP الداخلي المقابل لاتصال النفق والمعرف.
لبدء البرنامج النصي عند بدء التشغيل ، استخدم الأمر "nohup / <path to script> /vpn10.sh nZbVGBuX5dtturD> /var/log/vpn10.log 2> / dev / null &" الموجود في الملف /etc/rc.local
استنتاج
يعمل البرنامج النصي ، الذي تم اختباره على Ubuntu 18.04 و Debian 9. ، يمكنك استخدام أي خدمة أخرى كجهاز إرسال ، ولكن للتجربة ، استخدمت Yandex.Disk.
في أثناء التجارب ، تبين أن بعض أنواع موفري NAT لا تسمح بالاتصال. في الغالب مع مشغلي شبكات الهاتف المحمول حيث يتم حظر السيول.
أخطط للانتهاء من حيث:
- الجيل التلقائي من secret.key في كل مرة تبدأ ، تشفير ونسخ إلى Yandex.Disk لنقل إلى مضيف بعيد (تؤخذ في الاعتبار في الإصدار المحدث)
- تعيين عناوين IP للواجهة تلقائيًا
- تشفير البيانات قبل التحميل على Yandex.Disk
- رمز التحسين
قد يكون هناك IPv6 في كل منزل!