Dnsmasq
هي اختصار لـ DNS masquerade
هو أداة إعادة توجيه DNS بسيطة وسهلة الاستخدام تستخدم للشبكات الصغيرة.
يمكن إعداده كخادم DNS مؤقت وخادم DHCP.
يدعم بروتوكول IPv4 و IPv6.
عندما يتلقى أي استعلامات DNS فإنه سوف يجيب عليها من ذاكرة التخزين المؤقت الخاصة به (cache) أو يعيد توجيهها إلى خادم DNS اخر.
نظام DNS الفرعي (DNS subsystem):
يتم استخدامه للتخزين المؤقت (caching) لأنواع السجلات المختلفة بما في ذلك A و AAAA و CNAME و PTR.
نظام DHCP الفرعي (DHCP subsystem):
يدعم DHCPv4 و DHCPv6 و BOOTP و PXE
النظام الفرعي لإعلان جهاز التوجيه (Router Advertisement subsystem):
يقدم الإعادات الأساسية لمضيفي IPv6.
يمكن استخدامه بشكل مستقل أو بالاشتراك مع DHCPv6.
سنشرح إعداد خادم local DNS باستخدام Dnsmasq على خادم Ubuntu 20.04.
شاهد خطوات تثبيت واعداد Dnsmasq بالفيديو
المتطلبات الأساسية لتثبيت Dnsmasq
خادم يعمل بنظام التشغيل Ubuntu 20.04.
إعداد كلمة مرور الـ root للخادم.
قم بتحديث حزم النظام إلى أحدث إصدار.
يمكنك تحديث جميع الحزم عن طريق تشغيل الأمر التالي:
apt-get update -y
ستحتاج إلى إيقاف خدمة Systemd-resolved.
يتم استخدام خدمة Systemd-resolved لتحليل اسم الشبكة (name resolution) للتطبيقات.
يمكنك ايقافها عن طريق الأمر التالي:
systemctl disable --now systemd-resolved
قم بإزالة ملف resolv.conf الافتراضي وإنشاء ملف جديد باستخدام تفاصيل خادم DNS المخصص.
يمكنك إزالة ملف resolv.conf الافتراضي باستخدام الأمر التالي:
rm -rf /etc/resolv.conf
أضف خادم Google DNS إلى ملف resolv.conf بالأمر التالي:
echo "nameserver 8.8.8.8" > /etc/resolv.conf
تثبيت Dnsmasq
يمكنك تثبيته بتشغيل الأمر التالي:
apt-get install dnsmasq dnsutils ldnsutils -y
سيتم بدء خدمات Dnsmasq تلقائيًا.
تحقق من حالة Dnsmasq باستخدام الأمر التالي:
systemctl status dnsmasq
ستحصل على النتيجة التالية:
dnsmasq.service - dnsmasq - A lightweight DHCP and caching DNS server
Loaded: loaded (/lib/systemd/system/dnsmasq.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2020-11-02 11:02:01 UTC; 15s ago
Main PID: 17726 (dnsmasq)
Tasks: 1 (limit: 2282)
Memory: 868.0K
CGroup: /system.slice/dnsmasq.service
??17726 /usr/sbin/dnsmasq -x /run/dnsmasq/dnsmasq.pid -u dnsmasq -7 /etc/dnsmasq.d,.dpkg-dist,.dpkg-old,.dpkg-new --local-service --trust-anchor=.,20326,8,2,e>
Nov 02 11:02:12 ubuntu2004 systemd[1]: Starting dnsmasq - A lightweight DHCP and caching DNS server...
Nov 02 11:02:12 ubuntu2004 dnsmasq[17705]: dnsmasq: syntax check OK.
Nov 02 11:02:12 ubuntu2004 dnsmasq[17726]: started, version 2.80 cachesize 150
Nov 02 11:02:12 ubuntu2004 dnsmasq[17726]: DNS service limited to local subnets
Nov 02 11:02:12 ubuntu2004 dnsmasq[17726]: compile time options: IPv6 GNU-getopt DBus i18n IDN DHCP DHCPv6 no-Lua TFTP conntrack ipset auth DNSSEC loop-detect inotify dumpfi>
Nov 02 11:02:12 ubuntu2004 dnsmasq[17726]: reading /etc/resolv.conf
Nov 02 11:02:12 ubuntu2004 dnsmasq[17726]: using nameserver 8.8.8.8#53
Nov 02 11:02:12 ubuntu2004 dnsmasq[17726]: read /etc/hosts - 7 addresses
Nov 02 11:02:12 ubuntu2004 systemd[1]: Started dnsmasq - A lightweight DHCP and caching DNS server.
إعداد Dnsmasq
يمكنك القيام بذلك عن طريق تعديل ملف الإعداد الرئيسي لـ Dnsmasq:
nano /etc/dnsmasq.conf
قم بتغيير الأسطر التالية:
port=53
domain-needed
bogus-priv
listen-address=127.0.0.1,your-server-ip
expand-hosts
domain=dns-example.com
cache-size=1000
احفظ وأغلق الملف.
ستحتاج إلى إضافة عنوان IP للخادم الخاص بك كخادم primary nameserver في ملف resolv.conf.
يمكنك إضافته بالأمر التالي:
nano /etc/resolv.conf
أضف السطر التالي فوق السطر nameserver 8.8.8.8:
nameserver your-server-ip
احفظ وأغلق الملف.
تحقق من الخادم بحثًا عن أخطاء باستخدام الأمر التالي:
dnsmasq --test
ستحصل على النتيجة التالية:
dnsmasq: syntax check OK.
أعد تشغيل خدمة Dnsmasq لتطبيق التغييرات:
systemctl restart dnsmasq
تم بدء تشغيل Dnsmasq على المنفذ 53.
تحقق من ذلك باستخدام الأمر التالي:
ss -alnp | grep -i :53
ستحصل على النتيجة التالية:
udp UNCONN 0 0 0.0.0.0:53 0.0.0.0:* users:(("dnsmasq",pid=41051,fd=4))
udp UNCONN 0 0 [::]:53 [::]:* users:(("dnsmasq",pid=41051,fd=6))
tcp LISTEN 0 32 0.0.0.0:53 0.0.0.0:* users:(("dnsmasq",pid=41051,fd=5))
tcp LISTEN 0 32 [::]:53 [::]:* users:(("dnsmasq",pid=41051,fd=7))
أضافة سجلات DNS إلى خادم Dnsmasq
nano /etc/hosts
أضف السطر التالي:
your-server-ip host1.dns-example.com
احفظ وأغلق الملف.
التحقق من Dnsmasq Server Resolution
يمكنك استخدام الأمر dig للتحقق من DNS resolution:
dig host1.dns-example.com +short
يجب أن ترى عنوان IP الخاص بالخادم:
your-server-ip
يمكنك أيضًا التحقق من DNS resolution الخارجي باستخدام الأمر التالي:
dig howtoforge.com +short
ستحصل على النتيجة التالية:
172.67.68.93
104.26.3.165
104.26.2.165
إعداد Remote Client لاستخدام خادم DNS Dnsmasq
apt-get install dnsutils ldnsutils -y
قم بتعديل الملف /etc/resolv.conf وإدخال خادم Dnsmasq DNS.
nano /etc/resolv.conf
أضف السطر التالي في بداية الملف:
nameserver your-server-ip
احفظ وأغلق الملف.
تحقق من local DNS resolution باستخدام الأمر التالي:
dig host1.dns-example.com
ستحصل على النتيجة التالية:
; DiG 9.9.5-3ubuntu0.4-Ubuntu host1.dns-example.com
;; global options: +cmd
;; Got answer:
;; HEADER opcode: QUERY, status: NOERROR, id: 26401
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;host1.dns-example.com. IN A
;; ANSWER SECTION:
host1.dns-example.com. 0 IN A 45.58.32.165
;; Query time: 301 msec
;; SERVER: 45.58.32.165#53(45.58.32.165)
;; WHEN: Mon Nov 02 16:49:37 IST 2020
;; MSG SIZE rcvd: 66
تحقق من خادم DNS الخاص بك للتخزين المؤقت (caching).
يمكنك التحقق من ذلك باستخدام drill.
قم بتشغيل الأمر التالي:
drill google.com | grep "Query time"
ستحصل على النتيجة التالية:
;; Query time: 290 msec
قم بتشغيل الأمر مرة أخرى للتحقق مما إذا كان التخزين المؤقت يعمل أم لا:
drill google.com | grep "Query time"
يجب أن ترى أن وقت الاستعلام يتناقص الآن إلى 4 مللي ثانية:
;; Query time: 4 msec