جهازك خلف NAT لمشغّل الاتصالات، ويستطيع فتح اتصالات صادرة، ويشغّل خادم SSH لا يمكن لأحد الوصول إليه. يُصاغ الطلب الوارد عادةً بعبارة "أعطِه شبكة VPN"، وهو جواب واحد بين عدة أجوبة. قبل أن تقبله، حدّد ما إذا كنت تحتاج منفذ TCP إداريًا واحدًا أم مسارًا موجّهًا إلى شبكة فرعية كاملة، لأن تلك مشاريع مختلفة بتعرض مختلف.

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

ثلاثة شروط تحسم الاختيار

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

ConditionReverse tunnel fitsSomething else is needed
How many services must be reachable?One, or a small fixed set on loopbackAnything that needs many ports or dynamic discovery
Who connects, and how are they authenticated?Named administrators with their own hub accountsThird parties, or anything needing per-flow audit you do not control
Does the device's own LAN need to be reachable?NoYes, so a routed VPN or a managed platform is the honest answer

الصف الثالث هو ما يتجادل الناس حوله. النفق إلى منفذ SSH في جهاز لا يضع جيرانه على شبكتك، ولا ينبغي أن يُظهر كأنه يفعل ذلك عبر سلسلة من عمليات إعادة التوجيه الإضافية. إن كان المطلوب فعلًا هو الشبكة المحلية، فقل ذلك وصمّمها بدلًا من ذلك.

جانب المحور: حساب مرحّل محدود

امنح كل جهاز حسابه المرحّل الخاص مع مصادقة المفتاح العام وبلا جلسة تفاعلية. Match كتلة مقيدة بذلك الحساب تُبقي التصريح صغيرًا، ويبقى المفتاح الخاص على الجهاز حيث ينتمي.

Match User relay-dev-7
    AuthenticationMethods publickey
    PubkeyAuthentication yes
    AllowTcpForwarding remote
    PermitListen 127.0.0.1:21022
    GatewayPorts no
    MaxSessions 0
    PermitTTY no
    X11Forwarding no
    AllowAgentForwarding no

MaxSessions 0 هي السطر المثير للاهتمام. إنها ترفض جلسات الصدفة والأنظمة الفرعية مع السماح بإعادة التوجيه التي يحتاجها الجهاز، لذلك لا يمكن تحويل مفتاح مسروق إلى تسجيل دخول تفاعلي. PermitListen تثبّت عنوان المستمع ومنفذه على جانب المحور، و GatewayPorts no تُبقيه على الاسترجاع بدلًا من فتحه للشبكة التي يقع عليها المحور.

اختبر الإعداد الفعلي قبل إعادة التحميل، وأبقِ جلسة ثانية مفتوحة أثناء ذلك. Match كتلة تنطبق على الجميع عن غير قصد، أو خطأ مطبعي في اسم خيار، هي الطريقة الكلاسيكية لتقفل نفسك خارج الخادم الذي تحصّنه. أفرغ الإعداد الجاري واقرأ الخيارات مجددًا بدلًا من الوثوق بالملف الذي كتبته للتو. لاحظ أن دعم الخيارات يختلف بين الإصدارات، فقد يُتجاهل سطر مقبول في خادم أحدث ببساطة في خادم أقدم.

جانب الجهاز: إعادة توجيه تفشل بصوت عالٍ

يفتح الجهاز الاتصال ويطلب المستمع. العنوانان في وسيط -R يعنيان شيئين مختلفين، وقراءتهما من اليسار إلى اليمين أسرع طريقة لتذكر أيهما أي.

ssh -NT \
    -o ExitOnForwardFailure=yes \
    -o ServerAliveInterval=30 \
    -o ServerAliveCountMax=3 \
    -R 127.0.0.1:21022:127.0.0.1:22 \
    [email protected]

الزوج الأيسر هو حيث ينبغي أن يستمع المحور. الزوج الأيمن هو ما يتصل به الجهاز عند وصول طلب، ويُحلّ من جانب الجهاز نفسه. تبديلهما ينتج نفقًا يظهر بسلامة ويعيد التوجيه إلى المكان الخطأ، وهو أسوأ من الفشل.

ExitOnForwardFailure=yes يجعل الأمر يخرج عندما يتعذر إنشاء المستمع المطلوب، فتعيد حلقة إعادة التشغيل إخبارك بالحقيقة بدلًا من ترك جلسة نصف عاملة. لا يقول شيئًا عن صحة خدمة SSH المحلية لاحقًا، لذا اقرنه بمدير عمليات وباختبار اتصال حقيقي من حين لآخر.

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

وصول المسؤول عبر المحور

يمكن للمسؤول الذي يملك حسابًا عاديًا على المحور أن يقفز عبره إلى المنفذ المعاد توجيهه. لا يُستخدم الحساب المرحّل لهذا الغرض، وهذا هو بيت القصيد من إبقائهما منفصلين.

ssh -J [email protected] -o HostKeyAlias=device-7 \
    -p 21022 [email protected]

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

تولَّ إدارة دورة الحياة

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

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

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

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