كيفية الإعلان عن خدمة باستخدام Bonjour عبر الشبكات الفرعية؟

StackOverflow https://stackoverflow.com/questions/3752837

سؤال

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

أشعر بالفضول حول كيفية الإعلان عن خدمة Bonjour بسيطة لشبكة فرعية مختلفة. على وجه التحديد ، أحاول كتابة خدمة شبكة تعمل على سطح المكتب الخاص بي متصل عبر Ethernet. يعمل العميل على جهاز محمول (iPhone/iPad) متصل عبر WiFi. في إعداد شبكتي ، يكون WiFi على شبكة فرعية مختلفة عن Ethernet. ومع ذلك ، كلاهما وراء جدار الحماية. لا أحتاج إلى الإعلان خارج جدار الحماية ، أريد ببساطة أن يكون عملاء WiFi قادرين على رؤية الخدمات التي يتم الإعلان عنها بواسطة خادم Ethernet Connected.

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

هل كانت مفيدة؟

المحلول

هذا ليس سؤالًا نموذجيًا للبرمجة ، لكنني أرى أنه عقبة كبيرة في اختبار الكود المستند إلى Bonjour.

يدعم Bonjour آليتين للخوادم لإبلاغ العملاء بوجودهم ، البث المتعدد على الشبكة المحلية أولاً ، DNS الثانية.

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

تتمتع DNS برفاهية العمل عبر أجهزة التوجيه (الإنترنت) ، ولكنها تتطلب تكوينها بشكل صحيح والعملاء باستخدام هذا الأسماء.

أعتقد أن لديك خيارين فقط.

  1. أعلن عن خدمة Bonjour الخاصة بك على شبكة WiFi
  2. تكوين DNS الخاص بك

في الحالة الأولى ، من المهم أن ندرك أن الخدمة لا يجب الإعلان عنها بالضرورة من خلال تطبيقك الخاص الذي يعمل على جهاز Mac. يمكنك استخدام الأداة المساعدة dns-sd لتسجيل أي عنوان/منفذ IP كخدمة Bonjour على الشبكة. لكي تعمل هذا ، فأنت بحاجة إلى جهاز (Mac ، Linux) متصل بشبكة WiFi ، وتشغيله dns-sd هناك بطريقة مماثلة لهذا:

dns-sd -P "Stack Overflow" _http._tcp . 80 stackoverflow.com 69.59.196.211

هذا من شأنه أن يسجل خدمة "HTTP" مع الاسم "Stack Overflow" كخدمة Bonjour. تحقق من ذلك - قم بتشغيله في Terminal وتحقق من إشارات Safari تحت Bonjour. بنفس الطريقة التي يمكنك بها تسجيل طلبك.

لسوء الحظ ، تحتاج إلى تشغيل هذا على جهاز متصل بشبكة WiFi. هذا يعني أن تطبيق MAC الخاص بك سيعلن على شبكة Ethernet الخاصة به ، dns-sd الإعلان على wifi.

الخيار الثاني مخيف بعض الشيء ، لكنه ليس مشكلة كبيرة إذا كنت على استعداد لتسخين بعض الإدارة.

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

b._dns-sd._udp  IN PTR @   ;  b = browse domain
lb._dns-sd._udp IN PTR @   ; lb = legacy browse domain
_icool._tcp  PTR iCool\ App\ Service._http._tcp
iCool\ App\ Service._http._tcp     SRV 0 0 8888 macpro.domain.com.

يخبر الخطان الأوليان العملاء (أجهزة iOS في حالتك) بأنه يتم تمكين Bonjour لهذا المجال. يخبر السطر الثالث للعملاء أن هناك خدمة "خدمة تطبيق ICOOL" من النوع icool متوفرة. يخبر السطر الرابع بالعنوان الحالي للعملاء ومنفذ الخدمة.

سيبحث العملاء عن إدخالات DNS الخاصة بهم (أو الحصول عليها عبر DHCP) "مجالات البحث". تحقق من إعدادات الشبكة الخاصة بك.

يمكنك تشغيل SameServer على جهاز Mac الخاص بك ، أو بعض Linux Box ، أو يمكنك استخدام خدمات مثل Dyndns.com.

أتمنى أن يساعدك هذا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top