تنظیم DNS در اوبونتو با Netplan و resolved

برای تنظیم DNS در اوبونتو، آدرس سرورهای DNS را در فایل Netplan (بخش nameservers) می‌نویسید و با sudo netplan apply اعمال می‌کنید. برای دیدن وضعیت فعلی از resolvectl status و برای آزمایش یک نام از resolvectl query example.com استفاده کنید. فایل /etc/resolv.conf در اوبونتو به‌طور پیش‌فرض فقط به 127.0.0.53 اشاره می‌کند، یعنی سرویس systemd-resolved واسطه است و تنظیم دستی آن فایل ماندگار نیست.

این راهنما برای Ubuntu 20.04، 22.04 و 24.04 است که از systemd-resolved و Netplan استفاده می‌کنند. اگر IP ثابت هم لازم دارید، تنظیمات شبکه لینوکس را ببینید. برای فهم رکوردهایی که DNS برمی‌گرداند هم انواع رکورد DNS مفید است.

چطور DNS در اوبونتو کار می‌کند؟

برنامه‌ها نام دامنه را از سیستم می‌پرسند، سیستم از کش داخلی systemd-resolved، و آن از سرورهای DNS تنظیم‌شده. نمای کلی:

resolvectl status
ls -l /etc/resolv.conf
cat /etc/resolv.conf

در resolvectl status برای هر کارت شبکه، سرورهای DNS و دامنه جست‌وجو را می‌بینید. فایل /etc/resolv.conf معمولاً لینک نمادین به /run/systemd/resolve/stub-resolv.conf است و nameserver 127.0.0.53 دارد. این رفتار عادی است و اشتباه نیست.

تنظیم DNS در اوبونتو با Netplan

فایل تنظیم در /etc/netplan/ است (نام مثل 00-installer-config.yaml یا 50-cloud-init.yaml). نمونه با IP ثابت:

network:
  version: 2
  ethernets:
    ens3:
      dhcp4: false
      addresses:
        - 203.0.113.10/24
      routes:
        - to: default
          via: 203.0.113.1
      nameservers:
        addresses: [1.1.1.1, 8.8.8.8]
        search: [example.local]

نام کارت، آدرس‌ها و DNSها نمونه‌اند. برای تنظیم فقط DNS روی DHCP، dhcp4: true را نگه دارید و nameservers را اضافه کنید؛ سرورهای DHCP هم می‌توانند DNS بدهند و مقدار دستی هم‌زمان استفاده می‌شود. اعمال تغییر:

sudo netplan try
sudo netplan apply

دستور netplan try تنظیم را موقت اعمال می‌کند و اگر تأیید نکنید پس از ۱۲۰ ثانیه برمی‌گرداند؛ برای سرور راه دور بسیار ایمن‌تر است، چون اگر تنظیم اشتباه باشد از دسترسی بیرون نمی‌مانید. فایل YAML به فاصله حساس است و Tab خطا می‌دهد.

تنظیم سراسری در resolved.conf

برای تنظیم DNS مستقل از کارت شبکه:

sudo nano /etc/systemd/resolved.conf
[Resolve]
DNS=1.1.1.1 8.8.8.8
FallbackDNS=9.9.9.9
Domains=example.local
DNSSEC=no

بعد:

sudo systemctl restart systemd-resolved
resolvectl status

مقدار FallbackDNS فقط وقتی استفاده می‌شود که هیچ DNS دیگری در دسترس نباشد. گزینه DNSSEC=allow-downgrade یا yes اعتبارسنجی امضای DNS را فعال می‌کند ولی با بعضی سرورها مشکل می‌دهد؛ اگر نیاز ندارید no نگه دارید.

آزمایش و عیب‌یابی تنظیم DNS در اوبونتو

resolvectl query example.com
resolvectl statistics
resolvectl flush-caches
dig example.com @1.1.1.1
dig +short example.com
nslookup example.com

مقایسه جواب resolvectl query با dig @سرور-مشخص نشان می‌دهد مشکل از سیستم محلی است یا از سرور DNS. ابزار بررسی DNS دامنه رکوردهای دامنه را از بیرون نشان می‌دهد، تا بفهمید دامنه واقعاً درست تنظیم شده یا نه. اگر ping با IP کار می‌کند ولی با نام نه، مشکل DNS است.

DNS داخلی و دامنه جست‌وجو

در شبکه سازمانی که DNS داخلی دارید (مثلاً کنترلر دامنه ویندوز)، آدرس آن را بنویسید و دامنه جست‌وجو را اضافه کنید تا نام کوتاه سرورها حل شود:

nameservers:
  addresses: [10.0.0.10, 10.0.0.11]
  search: [corp.example.local]

برای دامنه‌های داخلی که فقط DNS داخلی می‌شناسد، DNS عمومی را به‌عنوان اول ننویسید؛ جواب NXDOMAIN می‌گیرید. اگر هم DNS داخلی و هم عمومی لازم است، DNS داخلی را اول و عمومی را بعدتر بنویسید، یا از Split DNS با resolvectl domain استفاده کنید.

تغییر موقت DNS برای آزمایش

sudo resolvectl dns ens3 9.9.9.9
sudo resolvectl domain ens3 '~.'
resolvectl status ens3

این تغییر با راه‌اندازی مجدد یا اعمال دوباره netplan پاک می‌شود و برای آزمایش سریع مناسب است. برای برگرداندن: sudo resolvectl revert ens3.

اگر می‌خواهید systemd-resolved را کنار بگذارید

معمولاً لازم نیست، ولی اگر یک سرور DNS محلی (مثل dnsmasq یا Unbound) روی پورت 53 اجرا می‌کنید، با stub resolver تداخل پیدا می‌کند. راه کم‌ریسک‌تر این است که stub را در resolved.conf با DNSStubListener=no خاموش کنید و به‌جای حذف سرویس، فقط resolv.conf را به /run/systemd/resolve/resolv.conf لینک کنید. پیش از تغییر، تنظیم فعلی را یادداشت کنید و دسترسی کنسول سرور را داشته باشید.

خطاهای رایج

نشانهعلت و راه حل
ping با IP کار می‌کند، با نام نهDNS تنظیم نشده یا در دسترس نیست؛ resolvectl status را ببینید
Temporary failure in name resolutionسرویس resolved متوقف است یا DNS مسدود؛ systemctl status systemd-resolved
تغییر /etc/resolv.conf بعد از ری‌استارت پاک می‌شودفایل لینک است؛ از Netplan یا resolved.conf استفاده کنید
نام داخلی حل نمی‌شودDNS داخلی اول نیست یا دامنه جست‌وجو اضافه نشده
جواب قدیمی می‌دهدکش؛ resolvectl flush-caches
netplan apply ارتباط را قطع کردتنظیم اشتباه؛ همیشه netplan try و دسترسی کنسول

سوالات متداول

کدام DNS بهتر است؟

به نیاز بستگی دارد: DNS ارائه‌دهنده سرور معمولاً نزدیک‌تر و سریع‌تر است، DNS عمومی مثل Cloudflare (1.1.1.1) یا Google (8.8.8.8) پایدار و رایج. برای شبکه سازمانی، DNS داخلی با فوروارد به عمومی مناسب است.

فرق DNS و search domain چیست؟

DNS سرور پاسخ‌دهنده است. search domain پسوندی است که به نام‌های کوتاه (مثل server1) اضافه می‌شود تا server1.corp.example.local پرسیده شود.

چرا همیشه 127.0.0.53 می‌بینم؟

آدرس stub resolver محلی است. systemd-resolved درخواست را به DNSهای واقعی می‌فرستد. DNSهای واقعی را با resolvectl status ببینید.

آیا تغییر DNS روی سایت میزبانی‌شده اثر دارد؟

DNS سرور فقط نام‌هایی را که سرور می‌پرسد حل می‌کند و روی رکوردهای دامنه سایت شما اثری ندارد. رکوردهای دامنه در پنل DNS دامنه تنظیم می‌شوند.

منابع

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *