ملف OpenVPN على أندرويد لا يضيف مسارًا لأن الهاتف لا يحمل عنوانًا على الواجهة الافتراضية، فلا يوجد ما يشير إليه المسار. المسارات تخبر فقط أين يجب أن تذهب الحزم. عنوان النفق يخبر من يكون الهاتف داخل النفق، وعلى العميل توفيره قبل أن توجد الواجهة. افحص الفحوص الأربعة أدناه بالترتيب وتوقف عند أول فشل، لأن تعديل المسارات قبل وجود العنوان يخفي المشكلة الحقيقية.

اقرأ الفشل بالترتيب الذي ينفذه به العميل

VpnService.Builder في أندرويد يفصل بين المفهومين: addAddress() يضع عنوانًا على الواجهة التي يبنيها التطبيق، وaddRoute() يضيف بادئة وجهة، وestablish() يرفض إنشاء الواجهة حتى يضاف عنوان واحد على الأقل. عميل OpenVPN يطابق الملف والخيارات التي يدفعها الخادم على تلك الاستدعاءات نفسها، فاتصال لا يحلل عنوانًا لا يستطيع بناء الواجهة إطلاقًا.

لهذا قد يذكر سطر السجل الذي تقرأه مسارًا بينما السبب يقع خطوة أبكر. لا يصل العميل إلى مرحلة المسار إلا بعد وجود الواجهة؛ وبلا عنوان يفشل الاستدعاء فورًا أو لا يعمل أبدًا. عندما يقول السجل إنه لا يستطيع إضافة مسار، ابدأ من العنوان لا من صياغة المسار.

الفحص 1: هل يضع الخادم عنوانًا في الرد؟

في خدمة OpenVPN الموجّهة يأتي العنوان من مجمع الخادم أو من تخصيص لكل عميل، والطوبولوجيا تحدد شكله. على خادم OpenVPN 2.4 أو أحدث تبدو خدمة بطوبولوجيا الشبكة الفرعية هكذا:

topology subnet
server 10.8.0.0 255.255.255.0
client-config-dir ccd

بهذا الشكل يدفع الخادم شيئًا مثل ifconfig 10.8.0.6 255.255.255.0. ونشر أقدم بـtopology net30 يدفع عنوان نظير بدلًا من ذلك، مثل ifconfig 10.8.0.6 10.8.0.5، فيبدو ملف نُقل بين النموذجين صحيحًا وهو يحمل قناع شبكة خاطئًا.

ابحث في سجل اتصال العميل عن مجموعة الخيارات المدفوعة. إن لم يحو أي سطر ifconfig فلم يرسل الخادم عنوانًا أو رفض العميل الخيار. وعلى خادم يستخدم client-config-dir يجب أن يوجد الملف المسمى باسم الشائع في الشهادة وأن يحمل التخصيص:

# ccd/phone-anna
ifconfig-push 10.8.0.6 255.255.255.0

الفحص 2: هل يحتفظ العميل بالعنوان الذي أعطي له؟

المرشح الواسع جدًا هو السبب الشائع الثاني. pull-filter موجود في OpenVPN 2.4 وما بعده، وعندما تطابق عدة مرشحات الخيار نفسه يفوز آخرها، فيزيل مرشح شامل في النهاية العنوان دون خطأ:

# removes every pushed option, including the address
pull-filter ignore "ifconfig"
pull-filter ignore "route"

ضيّق المرشح على الخيار الذي تريد إزالته فعلًا واترك العنوان وشأنه:

# keeps the pushed address, drops one unwanted LAN route
pull-filter ignore "route 10.60.0.0"

النصيحة بتعطيل كل السحب تأتي عادة من شخص يريد التخلص من مسار واحد. route-nopull هو المفتاح الأضيق: يحتفظ بـ ifconfig وبقية الخيارات المدفوعة ويرفض فقط المسارات المدفوعة وخيارات DHCP. استخدمه عندما يكون هذا ما تريده فعلًا، وأجب عن سؤال العنوان منفصلًا.

الفحص 3: هل العنوان لك كي تكتبه؟

العنونة اليدوية مشروعة فقط عندما يعطيك المشغّل القيمة. وإن كتبت واحدة بنفسك فيجب أن تكون من شبكة عميل VPN الفرعية، وفريدة بين الجلسات النشطة، ومطابقة للطوبولوجيا التي يشغلها الخادم. نسخ عنوان جسر مكتبي أو مضيف على الشبكة المحلية البعيدة يفشل في الأمرين: سيطالب الهاتف بعنوان موجود في مكان آخر، ولن يكون للبوابة طريق عودة إليه.

بادئة الشبكة المحلية البعيدة في المسار هي وجهة، وليست هوية الهاتف أبدًا. المسار إلى 10.60.0.0/24 يقول بلغ تلك الشبكة عبر النفق؛ ولا يقول أي عنوان 10.60.0.x يجب أن يحمله الهاتف، ولا ينبغي أن يحمل أيًا منها. التخصيصات الثابتة مكانها جانب الخادم، حيث لا تتصادم مع المجمع الديناميكي.

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

الفحص 4: هل شيء آخر يحتل مكان النفق؟

يسمح أندرويد بخدمة VPN نشطة واحدة في الوقت نفسه. تطبيق VPN آخر، أو إدخال always-on بقي مفعّلًا لملف لم يعد يعمل، قد يحتل المكان قبل أن يستدعي عميل OpenVPN الدالة establish(). عندها لا تظهر الواجهة أبدًا رغم صلاحية الملف، لذا افصل VPN الآخر وأوقف always-on وأعد الاتصال قبل أن تلمس الملف.

الخدمة التي تصر على جسر إيثرنت هي الطريق المسدود الآخر. تطبيق أندرويد بلا root يستطيع إنشاء نفق IP لا مقطع إيثرنت مجسّر، فلا عنوان تكتبه سيجعل خادم dev tap يعمل؛ على المشغّل تقديم خدمة موجّهة. عند إبلاغك بالمشكلة أضف اسم العميل وإصداره ومجموعة الخيارات المدفوعة والطوبولوجيا والخطوة التي كان يجب أن يظهر فيها العنوان.

إذا نجحت الفحوص الأربعة وكان العنوان موجودًا وفريدًا وبقناع صحيح، صار سؤال المسار عاديًا: أي البادئات يأذن بها الخادم وكيف ينبغي للعميل تحديد نطاقها. سجّل عنوان النفق وقناعه والطوبولوجيا قبل تغيير أي شيء آخر، لأن هذه القيم الثلاث هي ما يحتاجه المشغّل لمقارنته بعرض الخادم.

مقالات ذات صلة