Як налаштувати кешування DNS за допомогою dnsmasq на Ubuntu

Dnsmasq може використовуватися для кешування DNS-запитів в операційних системах Linux, хоча налаштування може здатися дещо складним.

Кешування DNS суттєво прискорює процес пошуку DNS, який перетворює доменне ім’я вебсайту на відповідну IP-адресу. За наявності декількох користувачів у вашій мережі, що часто відвідують один і той же вебсайт, локальний кеш DNS може значно зменшити час завантаження інтернет-ресурсів.

Спочатку розглянемо, що саме являє собою кешування DNS.

Що таке кешування DNS?

DNS використовується в інтернеті для відстеження всіх публічних вебсайтів та їхніх IP-адрес, подібно до телефонного довідника. Це позбавляє нас від необхідності пам’ятати IP-адреси кожного сайту, що є необхідним для взаємодії мережі з веб-ресурсами.

Кожного разу, коли ви запитуєте вебсторінку у пошуковій системі, цей процес відбувається “за лаштунками”.

Хоча ваша система має доступ до численних зовнішніх DNS-серверів, централізоване управління DNS може сповільнювати передачу та розв’язання адрес. Саме тут на допомогу приходить кешування DNS.

Кеш DNS обробляє ідентифікаційні дані для нещодавніх і часто відвідуваних доменів, перед відправкою запиту в інтернет, що значно прискорює процес.

Звернення до DNS-сервера відбувається щоразу, коли потрібно перетворити доменне ім’я на IP-адресу. Це може створити додаткове навантаження на DNS-сервер, особливо під час великої кількості одночасних запитів до вебсайту.

Кеш DNS використовується для скорочення кількості DNS-запитів та часу відповіді. Вирішені IP-адреси разом з інформацією про хост зберігаються локально. Замість ініціювання нового DNS-запиту, результат береться з кешу DNS при наступній необхідності розпізнання IP-адреси або доменного імені.

Як кешування DNS допомагає усувати періодичні проблеми з розв’язанням DNS на екземплярах Amazon EC2?

Більшість систем Linux не використовують локальний кеш DNS. Це означає, що всі DNS-запити надсилаються безпосередньо до авторитетного DNS-резолвера, наданого Amazon, який має обмеження на кількість одночасних запитів. Проблеми з розв’язанням DNS виникають, коли надходить велика кількість запитів.

Розгортання локального кешу DNS у системі допоможе зменшити використання процесора та мережі, а також уникнути помилок розв’язання DNS. Локальний кеш DNS відповідає на запити до зовнішніх DNS-ресурсів, таких як Amazon RDS та S3.

Протокол DHCP використовується екземплярами Amazon EC2, підключеними до Amazon VPC, для запиту адреси DNS-сервера при запуску.

Коли ви використовуєте Amazon VPC для створення приватної віртуальної хмари, Route 53 DNS Resolver ефективно використовує резолвер у VPC для відповіді на DNS-запити екземплярів EC2, які працюють у локальних веб-адресах Amazon VPC і записах у приватно адміністрованих зонах. Резолвер проводить повторний пошук на загальнодоступних DNS-серверах для всіх інших веб-адрес.

Кеш DNS слугує тимчасовим записом попередніх DNS-запитів, які наша система може швидко перевірити при спробі доступу до вебсайту. Він веде журнал кожного наявного та наступного сеансу. Цей кеш DNS полегшує визначення домену та запобігає помилкам з екземплярами Amazon EC2 Linux.

Багато користувачів зазвичай використовують сервіс Amazon Route 53 для DNS під час роботи з AWS. Він простий у використанні та відносно недорогий. Однак є ряд причин, які можуть підштовхнути користувача до використання локального DNS-сервера.

Хоча bind9 залишається чудовим варіантом для налаштування локального кеш-сервера DNS, dnsmasq набагато простіший у встановленні та конфігурації як на екземплярах EC2, так і на локальних машинах.

Що таке dnsmasq?

DNSmasq – це інструмент для Linux, який підтримує DNS, DHCP, TFTP та кешування DNS. Він є компактним і легким, що робить його ідеальним для мереж та брандмауерів з обмеженими ресурсами.

Він надзвичайно простий у встановленні та налаштуванні. Для налаштування DNS та DHCP для підмереж, dnsmasq є гнучким і практичним рішенням.

Ці призначені DHCP ідентифікатори та пов’язані з ними інструкції можуть бути налаштовані для кожного сервера або головного контролера. Dnsmasq підтримує як динамічні, так і статичні параметри DHCP. Він є портативним і може керувати DNS та DHCP принаймні для 1000 клієнтів.

Коли надходить DNS-запит, dnsmasq або відповідає з локального кешу, або пересилає його на авторитетний DNS-сервер. Крім відповіді на DNS-запити про адреси з конфігурацією DHCP, він перевіряє вміст файлу /etc/hosts для визначення імен локальних хостів, яких немає в публічному DNS.

Використання dnsmasq замість вбудованого кешу DNS браузера значно покращує продуктивність перегляду вебсторінок. Він ідеально підходить для інтегрованого середовища з обмеженими ресурсами, оскільки його легко налаштувати і він займає мало місця на диску.

Особливості dnsmasq

  • Інтегрувати внутрішні DNS-сервери з dnsmasq просто, налаштувавши його для пересилання конкретних запитів на розв’язання доменних імен на певні авторитетні сервери.
  • З налаштованим локальним DNS-сервером зменшується навантаження на сервер і підвищується надійність.
  • Налаштування DNS для кінцевих точок із підтримкою брандмауера є досить простим і не залежить від DNS, який використовує інтернет-провайдер.
  • Якщо порт, підключений до інтернету, недоступний під час перевірки DNS на комп’ютері, операція пошуку буде миттєво припинена.
  • За допомогою запитів PPP (протокол точка-точка) або DHCP dnsmasq можна налаштувати на періодичне отримання даних безпосередньо з основного сервера вирішення домену.

Встановлення

Перед встановленням та налаштуванням утиліти dnsmasq необхідно вимкнути службу, яка конфліктує з dnsmasq в системі.

systemctl stop systemd-resolved

Також можна замаскувати її, щоб запобігти автоматичному запуску при перезавантаженні.

systemctl mask systemd-resolved

Встановлення dnsmasq – це перший крок після відключення systemd-resolved. Dnsmasq вже встановлено в більшості дистрибутивів Linux. Якщо ні, то ви можете встановити його вручну. Відкрийте командний термінал та виконайте команду:

sudo apt-get install dnsmasq

Якщо ви використовуєте yum, то виконайте наступну команду:

sudo yum install -y dnsmasq

Ця команда автоматично встановить інструмент та запустить dnsmasq у фоновому режимі.

Після успішного встановлення, ви можете перевірити стан dnsmasq за допомогою наступної команди:

systemctl status dnsmasq

Якщо статус вказує “active (running)”, це означає, що інсталяцію виконано і налаштовано на порт 53. Якщо статус “inactive (dead)”, необхідно перезапустити машину Ubuntu і dnsmasq. Це вирішить проблему.

Конфігурація

Тепер dnsmasq готовий до налаштування як локальний кеш-сервер DNS. Файл конфігурації за замовчуванням знаходиться за шляхом /etc/dnsmasq.conf. Цей файл необхідно змінити для налаштування dnsmasq.

Використайте наступну команду для відкриття та редагування файлу конфігурації:

nano /etc/dnsmasq.conf

Файл конфігурації може бути змінений тільки з правами root. Очистіть весь вміст файлу, включаючи коментарі, та скопіюйте, вставте та збережіть наступні налаштування:

port=53
domain-needed
bogus-priv
listen-address=127.0.0.1
expand-hosts
domain=geek-demo.com
cache-size=1000

Розглянемо призначення кожного з параметрів:

  • port – вказує порт, який dnsmasq використовуватиме для отримання DNS-запитів.
  • domain-needed – пересилає лише доменні імена на вищестоящий DNS-сервер.
  • bogus-priv – запобігає переадресації домену та порту.
  • listen-address – визначає адресу сервера імен. Зазвичай локальний хост використовується за замовчуванням для налаштування локального DNS-сервера.
  • domain – налаштовує домени, які dnsmasq додає до коротких ідентифікаторів.
  • cache-size – максимальний розмір кешу DNS у пам’яті.

Після внесення змін збережіть і закрийте файл конфігурації. Наступним кроком є редагування файлу /etc/resolv.conf для додавання адреси локального хосту. Використайте наступну команду для відкриття в nano редакторі:

nano /etc/resolv.conf

Тут ви можете знайти всі сервери імен, які ваша система використовує для розв’язання адрес. Додайте в цей список адресу зворотного зв’язку. Додайте “nameserver 127.0.0.1” у перший рядок і збережіть файл.

Збережіть та вийдіть з конфігураційного файлу. Для застосування змінених налаштувань перезапустіть утиліту dnsmasq:

systemctl restart dnsmasq

Тестування локального сервера кешування DNS

Перевірити локальний DNS-сервер досить просто. Відкрийте командний рядок та використовуйте команду dig для перевірки кешування DNS. При першому виконанні команди dig результат буде звичайним.

┌──(root💀kali)-[/home/writer]
└─# dig techukraine.net.com                                                                                     1 ⚙

; <<>> DiG 9.18.0-2-Debian <<>> techukraine.net.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 623
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;techukraine.net.com.                 IN      A

;; ANSWER SECTION:
techukraine.net.com.          227     IN      A       172.66.43.163
techukraine.net.com.          227     IN      A       172.66.40.93

;; Query time: 31 msec
;; SERVER: 127.0.0.1#53(127.0.0.1) (UDP)
;; WHEN: Sat Oct 15 07:52:49 EDT 2022
;; MSG SIZE  rcvd: 74

Зверніть увагу, що час запиту складає близько 31 мс для отримання даних з вищестоящого сервера імен. Виконайте ту саму команду dig ще раз, і ви помітите значне зменшення часу запиту.

┌──(root💀kali)-[/home/writer]
└─# dig techukraine.net.com                                                                                     1 ⚙

; <<>> DiG 9.18.0-2-Debian <<>> techukraine.net.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21942
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;techukraine.net.com.                 IN      A

;; ANSWER SECTION:
techukraine.net.com.          281     IN      A       172.66.40.93
techukraine.net.com.          281     IN      A       172.66.43.163

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1) (UDP)
;; WHEN: Sat Oct 15 07:58:10 EDT 2022
;; MSG SIZE  rcvd: 74

Тепер час запиту становить 0 мс. Це тому, що після першого пошуку dnsmasq зберіг дані, і всі наступні пошуки були миттєвими завдяки кешу. Перезапуск dnsmasq необхідний для видалення збереженого кешу DNS.

Підсумок

У цій статті ми розглянули процес встановлення та налаштування dnsmasq для роботи як локального DNS-сервера. Можливо, вам також буде цікаво дізнатися, як змінити DNS-сервери для пришвидшення перегляду веб-сторінок у різних операційних системах.