SYSTEMD.DNSSD(5) systemd.dnssd SYSTEMD.DNSSD(5)

systemd.dnssd - پیکربندی DNS-SD

network_service.dnssd

راه‌اندازی DNS-SD توسط systemd-resolved(8) انجام می‌شود.

فایل اصلی سرویس شبکه باید دارای پسوند .dnssd باشد؛ سایر پسوندها نادیده گرفته می‌شوند.

فایل‌های .dnssd از فایل‌های واقع در دایرکتوری‌های شبکه سیستمی /usr/lib/systemd/dnssd و /usr/local/lib/systemd/dnssd، دایرکتوری شبکه زمان اجرای موقت /run/systemd/dnssd و دایرکتوری شبکه مدیریت محلی /etc/systemd/dnssd خوانده می‌شوند. تمام فایل‌های پیکربندی صرف‌نظر از دایرکتوری محل قرارگیری‌شان، به صورت یکپارچه بر اساس ترتیب واژه‌نگاری (lexicographic) مرتب و پردازش می‌شوند. با این حال، فایل‌های با نام یکسان جایگزین یکدیگر می‌شوند. فایل‌های موجود در /etc/ بالاترین اولویت را دارند، فایل‌های موجود در /run/ بر فایل‌های با نام مشابه در /usr/lib/ مقدم هستند. در صورت نیاز می‌توان از این سازوکار برای بازنویسی یک فایل پیکربندی ارائه‌شده توسط سیستم با یک فایل محلی استفاده کرد.

همراه با فایل سرویس شبکه foo.dnssd، ممکن است یک دایرکتوری قطعه تکمیلی (drop-in) به نام foo.dnssd.d/ وجود داشته باشد. تمام فایل‌های با پسوند ".conf" از این دایرکتوری پس از تجزیه خود فایل، تجزیه خواهند شد. این امر برای تغییر دادن یا افزودن تنظیمات پیکربندی، بدون نیاز به ویرایش فایل پیکربندی اصلی مفید است. هر فایل قطعه تکمیلی باید دارای سرآیندهای بخش مناسب باشد.

علاوه بر /etc/systemd/dnssd، دایرکتوری‌های قطعه تکمیلی ".d" را می‌توان در دایرکتوری‌های /usr/lib/systemd/dnssd یا /run/systemd/dnssd قرار داد. فایل‌های قطعه تکمیلی در /etc/ بر موارد موجود در /run/ اولویت دارند که آنها نیز به نوبه خود بر موارد موجود در /usr/lib/ یا /usr/local/lib مقدم هستند. فایل‌های قطعه تکمیلی تحت هر یک از این دایرکتوری‌ها، صرف‌نظر از محل قرارگیری فایل اصلی سرویس شبکه، بر آن اولویت دارند.

فایل سرویس شبکه شامل یک بخش [Service] است که یک سرویس شبکه قابل‌کشف را که با ارسال پیام‌های همه‌پخشی Multicast DNS در یک شبکه محلی اعلان می‌شود، مشخص می‌کند.

Name=

نام نمونه‌ای از سرویس شبکه همان‌طور که در بخش ۴.۱.۱ از RFC 6763[1] تعریف شده است، به عنوان مثال "webserver".

این گزینه از بسط ساده مشخص‌کننده‌ها پشتیبانی می‌کند. بسط‌های زیر پشتیبانی می‌شوند:

جدول 1. مشخص‌کننده‌های موجود

مشخص‌کننده مفهوم جزئیات
"%a" معماری رشته کوتاهی که معماری سیستم محلی را مشخص می‌کند. رشته‌ای مانند x86، x86-64 یا arm64. برای فهرست کامل، به معماری‌های تعریف‌شده برای ConditionArchitecture= در systemd.unit(5) مراجعه کنید.
"%A" نسخه تصویر سیستم‌عامل شناسه نسخه تصویر سیستم‌عامل سیستم در حال اجرا، خوانده‌شده از فیلد IMAGE_VERSION= در /etc/os-release. اگر تنظیم نشده باشد، به یک رشته خالی تبدیل می‌شود. برای اطلاعات بیشتر به os-release(5) مراجعه کنید.
"%b" شناسه بوت شناسه بوت سیستم در حال اجرا، قالب‌بندی‌شده به صورت رشته. برای اطلاعات بیشتر به random(4) مراجعه کنید.
"%B" شناسه ساخت سیستم‌عامل شناسه ساخت سیستم‌عامل سیستم در حال اجرا، خوانده‌شده از فیلد BUILD_ID= در /etc/os-release. اگر تنظیم نشده باشد، به یک رشته خالی تبدیل می‌شود. برای اطلاعات بیشتر به os-release(5) مراجعه کنید.
"%H" نام میزبان نام میزبان سیستم در حال اجرا.
"%m" شناسه ماشین شناسه ماشین سیستم در حال اجرا، قالب‌بندی‌شده به صورت رشته. برای اطلاعات بیشتر به machine-id(5) مراجعه کنید.
"%M" شناسه تصویر سیستم‌عامل شناسه تصویر سیستم‌عامل سیستم در حال اجرا، خوانده‌شده از فیلد IMAGE_ID= در /etc/os-release. اگر تنظیم نشده باشد، به یک رشته خالی تبدیل می‌شود. برای اطلاعات بیشتر به os-release(5) مراجعه کنید.
"%o" شناسه سیستم‌عامل شناسه سیستم‌عامل سیستم در حال اجرا، خوانده‌شده از فیلد ID= در /etc/os-release. برای اطلاعات بیشتر به os-release(5) مراجعه کنید.
"%v" انتشار هسته همانند خروجی دستور uname -r.
"%w" شناسه نسخه سیستم‌عامل شناسه نسخه سیستم‌عامل سیستم در حال اجرا، خوانده‌شده از فیلد VERSION_ID= در /etc/os-release. اگر تنظیم نشده باشد، به یک رشته خالی تبدیل می‌شود. برای اطلاعات بیشتر به os-release(5) مراجعه کنید.
"%W" شناسه گونه سیستم‌عامل شناسه گونه (واریانت) سیستم‌عامل سیستم در حال اجرا، خوانده‌شده از فیلد VARIANT_ID= در /etc/os-release. اگر تنظیم نشده باشد، به یک رشته خالی تبدیل می‌شود. برای اطلاعات بیشتر به os-release(5) مراجعه کنید.
"%%" علامت درصد تکی از "%%" به جای "%" برای مشخص کردن یک علامت درصد تکی استفاده کنید.

در نسخه 236 اضافه شد.

Type=

نوع سرویس شبکه همان‌طور که در بخش ۴.۱.۲ از RFC 6763[1] تعریف شده است، به عنوان مثال "_http._tcp".

در نسخه 236 اضافه شد.

SubType=

یک زیرنوع (subtype) از سرویس شبکه همان‌طور که در بخش ۷.۱ از RFC 6763[1] تعریف شده است، به عنوان مثال "_printer".

در نسخه 256 اضافه شد.

Port=

شماره درگاه (پورت) IP سرویس شبکه.

در نسخه 236 اضافه شد.

Priority=

شماره اولویت تنظیم‌شده در رکوردهای منبع SRV مربوط به سرویس شبکه.

در نسخه 236 اضافه شد.

Weight=

شماره وزن تنظیم‌شده در رکوردهای منبع SRV مربوط به سرویس شبکه.

در نسخه 236 اضافه شد.

TxtText=

فهرستی از جفت‌های کلید/مقدار دلخواه جداشده با فاصله که اطلاعات بیشتری را درباره سرویس نام‌برده در رکورد منبع TXT مربوطه انتقال می‌دهند، به عنوان مثال "path=/portal/index.html". کلیدها و مقادیر می‌توانند شامل توالی‌های گریز به سبک C باشند که هنگام خواندن فایل‌های پیکربندی ترجمه می‌شوند.

این گزینه به همراه TxtData= می‌تواند بیش از یک‌بار مشخص شود، که در این صورت چندین رکورد منبع TXT برای سرویس ایجاد خواهد شد. اگر یک رشته خالی به این گزینه اختصاص داده شود، فهرست بازنشانی شده و تمام مقادیر اختصاص‌یافته قبلی بی‌اثر خواهند شد.

در نسخه 236 اضافه شد.

TxtData=

فهرستی از جفت‌های کلید/مقدار دلخواه جداشده با فاصله که اطلاعات بیشتری را درباره سرویس نام‌برده در رکورد منبع TXT مربوطه انتقال می‌دهند که در آن مقادیر رشته‌هایی با کدگذاری base64 هستند و هرگونه داده باینری را نمایش می‌دهند، به عنوان مثال "data=YW55IGJpbmFyeSBkYXRhCg==". کلیدها می‌توانند شامل توالی‌های گریز به سبک C باشند که هنگام خواندن فایل‌های پیکربندی ترجمه می‌شوند.

این گزینه به همراه TxtText= می‌تواند بیش از یک‌بار مشخص شود، که در این صورت چندین رکورد منبع TXT برای سرویس ایجاد خواهد شد. اگر یک رشته خالی به این گزینه اختصاص داده شود، فهرست بازنشانی شده و تمام مقادیر اختصاص‌یافته قبلی بی‌اثر خواهند شد.

در نسخه 236 اضافه شد.

مثال 1. سرویس HTTP

# /etc/systemd/dnssd/http.dnssd
[Service]
Name=%H
Type=_http._tcp
Port=80
TxtText=path=/stats/index.html t=temperature_sensor

با فرض اینکه MulticastDNS بر روی رابط شبکه فعال باشد، این کار کارساز http در حال اجرا بر روی میزبان را در شبکه محلی قابل کشف می‌سازد.

اکنون ابزار کاربردی "resolvectl" باید بتواند سرویس را به نام میزبان حل کند:

$ resolvectl service meteo._http._tcp.local
meteo._http._tcp.local: meteo.local:80 [priority=0, weight=0]
                        169.254.208.106%senp0s21f0u2u4
                        fe80::213:3bff:fe49:8aa%senp0s21f0u2u4
                        path=/stats/index.html
                        t=temperature_sensor
                        (meteo/_http._tcp/local)
-- Information acquired via protocol mDNS/IPv6 in 4.0ms.
-- Data is authenticated: yes

برنامه "Avahi" که روی میزبان دیگری در همان شبکه محلی در حال اجراست نیز باید بتواند این سرویس را ببیند:

$ avahi-browse -a -r
+ enp3s0 IPv6 meteo                                         Web Site             local
+ enp3s0 IPv4 meteo                                         Web Site             local
= enp3s0 IPv6 meteo                                         Web Site             local
   hostname = [meteo.local]
   address = [fe80::213:3bff:fe49:8aa]
   port = [80]
   txt = ["path=/stats/index.html" "t=temperature_sensor"]
= enp3s0 IPv4 meteo                                         Web Site             local
   hostname = [meteo.local]
   address = [169.254.208.106]
   port = [80]
   txt = ["path=/stats/index.html" "t=temperature_sensor"]

systemd(1), systemd-resolved.service(8), resolvectl(1)

1.
RFC 6763
systemd 261.2