mDNS روی WireGuard: سه دروازه پیش از پاسخ یک همتا
Avahi به یک رابط واجد شرایط، مسیری به گروه و همتایی که مقصد را در اختیار دارد نیاز دارد. سه دروازه، سه بررسی جداگانه و بدون هیچ پخش همزمان.
تنظیم پرچم multicast روی دستگاه WireGuard رابط را برای نرمافزار کشف واجد شرایط میکند و کار پرچم همین است. این پرچم به پروتکل نمیگوید بسته گروه باید کجا برود، و روی دستگاهی با چند همتا هیچ پاسخ روشن واحدی وجود ندارد. سه دروازه جداگانه میان یک daemon در حال اجرا و یک سرویس کشفشده قرار دارند.
آنها را به ترتیب بیازمایید، زیرا عبور از یکی هیچ چیزی درباره بعدی نمیگوید.
دروازه یک: پرچم و سیاست daemon
دستگاه WireGuard در لینوکس بهصورت پیوند نقطهبهنقطه بدون ARP ساخته میشود و بهطور پیشفرض پرچم multicast را ندارد. افزودن پرچم یک تغییر محلی رابط است که هر چیزی که دستگاه را مدیریت میکند انجام میدهد. Avahi دیدگاه خودش را از جهان روی این دارد و سیاست پیشفرضش رابطهای نقطهبهنقطه را کاملاً نادیده میگیرد. بنابراین پیش از حرکت حتی یک بسته، دو آزمون صلاحیت مستقل اعمال میشود.
پس daemon به تصمیمی صریح نیاز دارد، نه صرفاً فرآیندی در حال اجرا. کنترلهای مستند آن شامل allow-interfaces، deny-interfaces و allow-point-to-point است و مورد آخر همان تنظیمی است که مردم از دست میدهند.
بررسیهای زیر پرچمهای پیوند، مسیر multicast و اینکه پیکربندی daemon اصلاً تجزیه میشود یا نه را گزارش میکنند:
ip -d link show wg0
ip route get 224.0.0.251
avahi-daemon --check
daemonی که با موفقیت راهاندازی شده لزوماً سوکتها را روی رابطی که برایتان مهم است باز نکرده است. پیکربندی مؤثرش را بخوانید نه اینکه فرض کنید وضعیت سرویس برابر با پوشش است.
دروازه دو: مسیر به گروه
دروازه دوم مسیریابی معمولی است. بستهای که به 224.0.0.251 آدرسدهی شده مانند هر چیز دیگری از جدول ارسال پیروی میکند و اگر جدول آن را از رابط فیزیکی LAN بیرون بفرستد، هیچ پیکربندی WireGuard آن را تغییر نمیدهد. اول مسیر را درست کنید تا بقیه بررسی کوتاهتر شود. پیش از دست زدن به هر کلید همتا ببینید هسته درباره نشانی گروه چه گزارش میدهد.
| Observation | Gate it belongs to | What it does not prove |
|---|---|---|
Multicast flag present on wg0 | Interface eligibility | The daemon will use the interface |
Route to the group via wg0 | Forwarding | Any peer will receive it |
| Destination inside a peer's allowed list | Peer selection | That peer's network will answer |
بدون مسیر مشخص، هسته به پردازش multicast خود پیوند بازمیگردد و به همین دلیل پیشفرض روی LAN مسطح درست به نظر میرسد و درست همان لحظهای که همان ترافیک گروه باید از یک تونل خارج شود غلط میشود. خطا از سمت فرستنده خاموش است: پرسوجو جایی میرود و پاسخ هرگز نمیرسد.
دروازه سه: WireGuard برای هر بسته یک همتا برمیگزیند
WireGuard همتای خروجی را با جستجوی مقصد در مجموعههای نشانی مجاز انتخاب میکند و مسیر ارسال لینوکس این جستجو را یک بار برای هر بسته انجام میدهد. نتیجه یکی است و بسته برای همان همتا رمزگذاری میشود. همان پیشوند گروه که در فهرستهای مجاز چند همتا ظاهر میشود عضویت یا تکرار ایجاد نمیکند؛ یک جستجوی مبهم میسازد که به یکی از آنها میرسد.
روی یک پیوند اختصاصی دو نقطهای این دقیقاً همان چیزی است که میخواهید، چون برای ترافیک گروهی که آگاهانه حمل میشود یک گیرنده مقصود وجود دارد. روی رابطی با پنج همتا این یک محدودیت است نه یک ویژگی، و اصلاح آن به طراحی تعلق دارد نه به پیکربندی هیچ همتای خاصی.
طراحی پخششونده به یک رله صریح، پیوندهای جداگانه یا مکانیزم کشف کاملاً متفاوتی نیاز دارد. انتشار یک دستور دو نقطهای بهعنوان راهحل چندکاربره چون هر کارخواه میتواند دروازه را ببیند، همان روشی است که این کار اشتباه مستقر میشود.
جهت ورودی بهگونه دیگری بررسی میشود: مبدأ بسته دریافتشده باید درون فهرست مجاز همتای احرازشده باشد. افزودن یک مقصد multicast در آنجا مالکیت مبدأ واقعی فرستنده را جایگزین نمیکند.
بازتاب یک مرز است، نه پل
بازتابدهنده Avahi پیامهای mDNS را میان رابطهایی که انتخاب میکند در لایه کاربرد بازتولید میکند. این یک مرز کشف میان شبکههاست، نه پل اترنت و نه مسیریاب عمومی multicast. دو بازتابدهنده متصل به همان شبکهها بهراحتی حلقهای از اعلانهای تکراری میسازند.
بازتاب همچنین نام سرویسها و فرادادههایشان را به شبکه دیگری تحویل میدهد، که تصمیمی درباره حریم خصوصی است به همان اندازه که تصمیمی درباره مسیریابی. رابطهای انتخابشده را محدود کنید و در جایی که نسخه نصبشده پشتیبانی میکند از فیلترهای سرویس استفاده کنید تا فقط اعلانهایی که کاربر مجاز نیاز دارد از مرز عبور کنند.
کشف و استفاده نتایج جداگانهای میمانند. کارخواه میتواند اعلان سرویسی را ببیند که نشانی اعلامشدهاش از جایی که کارخواه قرار دارد دسترسیناپذیر است، یا سیاست دسترسیاش درگاه آن را رد میکند. پس از ظاهر شدن اعلان، اتصال سرویس را تأیید کنید و اگر برنامه از نام DNS پایدار یا نشانی صریح سرور پشتیبانی میکند، آن را به گسترش کشف پیوند محلی ترجیح دهید. توصیف مسیریابی با کلید رمزنگاری انتخاب همتای مبتنی بر مقصد را پوشش میدهد که همه اینها به آن وابسته است.