Gateway
الاكتشاف ووسائل النقل
لدى OpenClaw مشكلتان مترابطتان لكنهما متمايزتان في الاكتشاف:
- التحكم عن بُعد للمشغّل: تطبيق شريط القوائم في macOS الذي يتحكم في Gateway يعمل في مكان آخر.
- إقران Node: عثور iOS/Android (والعُقد المستقبلية) على Gateway وإقرانها بأمان.
توجد جميع وظائف اكتشاف الشبكة والإعلان ضمن Node Gateway
(openclaw gateway)؛ أما العملاء (تطبيق Mac وiOS) فهم مستهلكون فقط.
المصطلحات
- Gateway: عملية واحدة طويلة التشغيل تملك الحالة (الجلسات، والإقران، وسجل العُقد) وتشغّل القنوات. تستخدم معظم الإعدادات عملية واحدة لكل مضيف؛ ويمكن إعداد عدة بوابات معزولة.
- Gateway WS (مستوى التحكم): نقطة نهاية WebSocket على
127.0.0.1:18789افتراضيًا؛ اربطها بالشبكة المحلية/شبكة Tailscale عبرgateway.bind. - نقل WS المباشر: نقطة نهاية Gateway WS متاحة للشبكة المحلية/شبكة Tailscale (من دون SSH).
- نقل SSH (احتياطي): التحكم عن بُعد من خلال إعادة توجيه
127.0.0.1:18789عبر SSH. - جسر TCP القديم (أُزيل): نقل العُقد الأقدم (راجع بروتوكول الجسر)؛ لم يعد يُعلَن عنه للاكتشاف ولم يعد جزءًا من الإصدارات الحالية.
تفاصيل البروتوكول: بروتوكول Gateway، بروتوكول الجسر (قديم).
سبب وجود النقل المباشر وSSH معًا
- WS المباشر يوفر أفضل تجربة مستخدم على الشبكة نفسها وضمن شبكة Tailscale: اكتشاف تلقائي عبر Bonjour على الشبكة المحلية، ورموز إقران وقوائم تحكم بالوصول تملكها Gateway، ومن دون الحاجة إلى وصول عبر الصدفة.
- SSH هو الخيار الاحتياطي العام: يعمل في أي مكان يتوفر فيه وصول SSH، حتى عبر شبكات غير مترابطة، ويتجاوز مشكلات البث المتعدد/mDNS، ولا يحتاج إلى أي منفذ وارد جديد بخلاف SSH.
مدخلات الاكتشاف
1) Bonjour / DNS-SD
يعمل Bonjour متعدد البث بأفضل جهد ولا يعبر بين الشبكات. يدعم OpenClaw أيضًا
استعراض إشارة Gateway نفسها عبر نطاق DNS-SD واسع النطاق مُهيأ،
بحيث يشمل الاكتشاف كلًا من local. على الشبكة المحلية نفسها ونطاق
DNS-SD أحادي البث مُهيأ للاكتشاف عبر الشبكات.
تعلن Gateway عن نقطة نهاية WS الخاصة بها عبر Bonjour عند تمكين
Plugin المضمّن bonjour؛ ويستعرض العملاء قائمة «اختر Gateway» ويعرضونها،
ثم يخزّنون نقطة النهاية المختارة.
استكشاف الأخطاء وإصلاحها وتفاصيل الإشارة: Bonjour.
تفاصيل إشارة الخدمة
-
نوع الخدمة:
_openclaw-gw._tcp(إشارة نقل Gateway). -
مفاتيح TXT (غير سرية):
المفتاح الملاحظات role=gatewayموجود دائمًا. transport=gatewayموجود دائمًا. displayName=<name>اسم العرض الذي يهيئه المشغّل. lanHost=<hostname>.localلمُعلن mDNS على الشبكة المحلية فقط؛ لا يكتبه DNS-SD واسع النطاق. gatewayPort=18789منفذ Gateway WS وHTTP. gatewayTls=1فقط عند تمكين TLS. gatewayTlsSha256=<sha256>فقط عند تمكين TLS وتوفر بصمة. tailnetDns=<magicdns>تلميح اختياري؛ يُكتشف تلقائيًا عند توفر Tailscale. sshPort=<port>لا يظهر إلا عندما تكون discovery.mdns.mode="full"؛ ويُحذف (القيمة الافتراضية لـSSH هي22) في الوضع الافتراضي"minimal"، سواء في مُعلن الشبكة المحلية أو DNS-SD واسع النطاق.cliPath=<path>يخضع لشرط discovery.mdns.mode="full"نفسه مثلsshPort؛ وهو تلميح للتثبيت البعيد لمسار CLI.يُعرَّف مفتاح TXT باسم
canvasPortفي عقد اكتشاف Plugin لمنفذ مضيف لوحة مستقبلي، لكن لا يعيّن أي مسار برمجي حالي قيمة له، ولذلك لا يُرسل حاليًا مطلقًا.
ملاحظات أمنية:
- سجلات TXT في Bonjour/mDNS غير موثّقة. يجب على العملاء التعامل مع قيم TXT على أنها تلميحات لتجربة المستخدم فقط.
- يجب أن يفضّل التوجيه (المضيف/المنفذ) نقطة نهاية الخدمة المحلولة
(SRV وA/AAAA) على
lanHostأوtailnetDnsأوgatewayPortالواردة عبر TXT. - يجب ألا يسمح تثبيت TLS أبدًا لبصمة
gatewayTlsSha256مُعلَن عنها بتجاوز بصمة مخزنة مسبقًا. - يجب أن تتطلب عُقد iOS/Android تأكيدًا صريحًا لـ«الوثوق بهذه البصمة» قبل تخزين بصمة للمرة الأولى (تحقق خارج النطاق) كلما كان المسار المختار آمنًا/قائمًا على TLS.
التمكين والتعطيل والتجاوز:
- يمكّن
openclaw plugins enable bonjourالإعلان متعدد البث على الشبكة المحلية. - يتحكم
discovery.mdns.modeفيopenclaw.jsonفي بث mDNS:"minimal"(افتراضي)، أو"full"(يضيفcliPath/sshPortإلى كل من إشارة الشبكة المحلية وأي نطاق DNS-SD واسع النطاق)، أو"off"(يعطّل mDNS). - يفرض
OPENCLAW_DISABLE_BONJOUR=1تعطيل الإعلان؛ كما تعطّلهdiscovery.mdns.mode="off"بصورة مستقلة. تمثلOPENCLAW_DISABLE_BONJOUR=0اشتراكًا صريحًا يتجاوز التعطيل التلقائي للـPlugin داخل حاوية مكتشفة (Docker أو containerd أو Kubernetes أو LXC)؛ ولا يتجاوزdiscovery.mdns.mode="off". يبدأ Plugin المضمّنbonjourتلقائيًا على مضيفي macOS (enabledByDefaultOnPlatforms: ["darwin"]) ويُعطّل تلقائيًا داخل الحاويات المكتشفة؛ أما عمليات النشر على Linux وWindows وغيرها من البيئات المحوّاة فتحتاج إلى تنفيذplugins enable bonjourصراحةً. - يتحكم
gateway.bindفي~/.openclaw/openclaw.jsonفي وضع ربط Gateway. - يتجاوز
OPENCLAW_SSH_PORTمنفذ SSH المُعلَن عنه (ولا يسري إلا عندما تكونdiscovery.mdns.mode="full"). - ينشر
OPENCLAW_TAILNET_DNSتلميحtailnetDns(MagicDNS). - يتجاوز
OPENCLAW_CLI_PATHمسار CLI المُعلَن عنه.
2) شبكة Tailscale (عبر الشبكات)
لن يفيد Bonjour مع بوابات موجودة على شبكات مادية مختلفة. الهدف المباشر الموصى به هو اسم Tailscale MagicDNS (المفضّل) أو عنوان IP ثابت ضمن شبكة Tailscale.
إذا اكتشفت Gateway أنها تعمل ضمن Tailscale، فإنها تنشر
tailnetDns كتلميح اختياري للعملاء (بما في ذلك الإشارات واسعة النطاق).
يفضّل تطبيق macOS أسماء MagicDNS على عناوين IP الخام لـTailscale عند
اكتشاف Gateway، ويظل ذلك موثوقًا عند تغير عناوين IP لشبكة Tailscale (إعادة تشغيل
العُقد أو إعادة تعيين CGNAT)، لأن MagicDNS يحلّ الاسم تلقائيًا إلى عنوان IP الحالي.
بالنسبة إلى إقران عُقد الأجهزة المحمولة، لا تخفف تلميحات الاكتشاف أمان النقل أبدًا على مسارات شبكة Tailscale/المسارات العامة:
- لا تزال iOS/Android تتطلب مسار اتصال أولي آمنًا عبر شبكة Tailscale/المسار العام
(
wss://أو Tailscale Serve/Funnel). - عنوان IP خام مكتشف ضمن شبكة Tailscale هو تلميح توجيه، وليس إذنًا باستخدام
ws://بعيد بنص صريح. - يظل الاتصال المباشر عبر
ws://على الشبكة المحلية الخاصة مدعومًا. - لأبسط مسار Tailscale على عُقد الأجهزة المحمولة، استخدم Tailscale Serve كي يُحل كل من الاكتشاف والإعداد إلى نقطة نهاية MagicDNS الآمنة نفسها.
3) هدف يدوي / SSH
عندما لا يتوفر مسار مباشر (أو يكون المباشر معطّلًا)، يمكن للعملاء دائمًا الاتصال عبر SSH من خلال إعادة توجيه منفذ Gateway على local loopback. راجع الوصول عن بُعد.
اختيار النقل (سياسة العميل)
- إذا كانت نقطة نهاية مباشرة مقترنة مُهيأة ويمكن الوصول إليها، فاستخدمها.
- وإلا، إذا عثر الاكتشاف على Gateway في
local.أو النطاق واسع النطاق المُهيأ، فاعرض خيار «استخدام Gateway هذه» بنقرة واحدة واحفظها بوصفها نقطة النهاية المباشرة. - وإلا، إذا كان DNS/IP لشبكة Tailscale مُهيأ، فجرّب الاتصال المباشر. بالنسبة إلى عُقد الأجهزة المحمولة على
مسارات شبكة Tailscale/المسارات العامة، يعني الاتصال المباشر نقطة نهاية آمنة، وليس
ws://بعيدًا بنص صريح. - وإلا، فارجع إلى SSH.
الإقران والمصادقة (النقل المباشر)
Gateway هي مصدر الحقيقة لقبول العُقد/العملاء:
- تُنشأ طلبات الإقران وتُعتمد أو تُرفض في Gateway (راجع إقران Gateway).
- تفرض Gateway المصادقة (الرمز/زوج المفاتيح)، والنطاقات/قوائم التحكم بالوصول (فهي ليست وكيلًا خامًا لكل طريقة)، وحدود المعدّل.
المسؤوليات حسب المكوّن
- Gateway: تعلن إشارات الاكتشاف، وتملك قرارات الإقران، وتستضيف نقطة نهاية WS.
- تطبيق macOS: يساعدك في اختيار Gateway، ويعرض مطالبات الإقران، ويستخدم SSH كخيار احتياطي فقط.
- عُقد iOS/Android: تستعرض Bonjour للتسهيل، وتتصل بـGateway WS المقترنة.