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-сервери для пришвидшення перегляду веб-сторінок у різних операційних системах.