Розгортання Unbound DNS на VPS для приватного та швидкого інтернету
TL;DR
У цьому посібнику ми крок за кроком налаштуємо власний рекурсивний DNS-сервер Unbound на вашому VPS. Це дозволить вам значно підвищити конфіденційність ваших інтернет-запитів, обходячи публічні DNS-провайдери, такі як Google DNS або Cloudflare, і безпосередньо взаємодіючи з кореневими серверами DNS. У результаті ви отримаєте швидший, безпечніший та приватніший доступ до інтернету, повністю контролюючи свої DNS-запити.
- Встановлення та базове налаштування Unbound на операційній системі Ubuntu 24.04 LTS.
- Конфігурація Unbound для виконання рекурсивних запитів та валідації DNSSEC.
- Підвищення безпеки VPS за допомогою UFW, SSH-ключів та Fail2ban.
- Оптимізація продуктивності Unbound для швидкого розв'язання доменних імен.
- Рекомендації щодо резервного копіювання та обслуговування вашого DNS-сервера.
- Відповіді на поширені запитання та усунення типових проблем.
Що ми налаштовуємо і навіщо
Ми будемо розгортати Unbound – високопродуктивний, валідуючий, рекурсивний та кешуючий DNS-сервер – на вашому власному VPS. Основне завдання Unbound полягає у розв'язанні доменних імен (наприклад, example.com в IP-адресу 93.184.216.34) без звернення до сторонніх DNS-провайдерів. Замість цього Unbound безпосередньо запитує кореневі DNS-сервери, а потім авторитетні сервери для кожного домену, будуючи ланцюжок довіри та виконуючи валідацію DNSSEC.
Що отримає читач у підсумку:
- Підвищена приватність: Ваші DNS-запити не проходитимуть через сервери Google, Cloudflare, вашого інтернет-провайдера або інших компаній, які можуть збирати дані про вашу активність. Unbound безпосередньо спілкується з кореневими серверами, виключаючи посередників.
- Покращена безпека: Unbound підтримує DNSSEC (Domain Name System Security Extensions), що дозволяє криптографічно перевіряти справжність DNS-відповідей. Це захищає від підміни DNS (DNS spoofing) та інших атак, забезпечуючи, що ви завжди підключаєтеся до правильного сервера.
- Збільшена швидкість: Після початкового запиту Unbound кешує відповіді. Це означає, що повторні запити до тих самих доменів розв'язуватимуться значно швидше, оскільки інформація вже зберігається на вашому VPS. Крім того, пряме спілкування з кореневими серверами може бути швидшим, ніж через перевантажені публічні DNS-сервери.
- Повний контроль: Ви повністю контролюєте процес розв'язання імен, можете налаштовувати чорні списки (ad-blocking), білі списки та інші правила, адаптуючи DNS-сервер під свої потреби.
Які альтернативи є (cloud-managed vs self-hosted):
Існує кілька підходів до DNS. Ви можете використовувати:
- Публічні DNS-сервери: Наприклад, Google DNS (8.8.8.8), Cloudflare DNS (1.1.1.1), OpenDNS. Вони прості у використанні, але ви довіряєте свої запити третій стороні, яка може їх логувати або використовувати для аналізу трафіку. Це найпростіший, але найменш приватний варіант.
- DNS-сервери вашого інтернет-провайдера: Це стандартний варіант за замовчуванням. Часто вони повільні, не підтримують DNSSEC і, звичайно ж, ваш провайдер має повний доступ до ваших DNS-запитів.
- Cloud-managed DNS-сервіси (для хостингу доменів): Такі як AWS Route 53, Cloudflare DNS (для хостингу домену), DigitalOcean DNS. Це сервіси для керування DNS-записами ваших власних доменів, а не для розв'язання вихідних запитів з вашого пристрою.
- Self-hosted DNS-сервери (наприклад, Unbound на VPS): Це підхід, який ми будемо використовувати. Він вимагає початкового налаштування, але дає максимальний контроль, приватність та безпеку. Ви самі є своїм DNS-провайдером.
Чому self-hosted на VPS:
Вибір self-hosted Unbound на VPS обумовлений прагненням до максимальної приватності та безпеки. VPS надає вам виділене середовище, де ви можете налаштувати Unbound саме так, як вам потрібно, без будь-яких обмежень чи компромісів з боку сторонніх провайдерів. Це ідеальне рішення для тих, хто цінує незалежність і хоче побудувати свою інфраструктуру з урахуванням високих стандартів безпеки та конфіденційності. VPS забезпечує надійність, стабільність та достатньо ресурсів для роботи Unbound 24/7.
Який VPS-конфіг потрібен для цього завдання
Unbound — це досить легковесне програмне забезпечення, тому для його роботи не потрібні потужні ресурси. Однак, щоб забезпечити стабільну та швидку роботу, особливо якщо ви плануєте використовувати його для кількох пристроїв або з високим навантаженням, варто врахувати кілька моментів.
Мінімальні вимоги:
- CPU: 1 ядро. Unbound не є CPU-інтенсивним додатком.
- RAM: 512 МБ. Для базової роботи та кешування цього достатньо. Якщо ви плануєте кешувати дуже багато записів або використовувати його для великої мережі, можна розглянути 1 ГБ.
- Диск: 10-20 ГБ NVMe/SSD. Unbound практично не використовує дисковий простір, але для операційної системи, логів та інших системних файлів такий обсяг буде оптимальним. NVMe або SSD забезпечать швидке завантаження системи та операції з файлами.
- Мережа: 100 Мбіт/с або 1 Гбіт/с. DNS-запити дуже легкі, тому навіть 100 Мбіт/с буде більш ніж достатньо. Важливіша стабільність каналу та низький пінг до кореневих DNS-серверів.
Конкретний VPS-план для завдання:
Для більшості користувачів, які розгортають Unbound для особистого використання або для невеликої команди, ідеальним буде VPS з конфігурацією:
- 1 vCPU
- 1 ГБ RAM
- 20-40 ГБ NVMe/SSD диска
- 1 Гбіт/с мережевий порт
Такої конфігурації буде достатньо для обробки тисяч DNS-запитів на секунду, забезпечення великого кешу та стабільної роботи. Ви можете розглянути VPS із зазначеними характеристиками, щоб отримати надійну платформу для вашого Unbound сервера.
Коли потрібен dedicated, а не VPS:
Dedicated сервер для Unbound зазвичай не потрібен, якщо тільки ви не плануєте:
- Обслуговувати десятки тисяч користувачів з дуже високим навантаженням.
- Використовувати цей же сервер для інших дуже ресурсоємних завдань, які вимагають гарантованої продуктивності (наприклад, великі ігрові сервери, високонавантажені бази даних).
- Вимоги до фізичної ізоляції та максимальної безпеки, які не може забезпечити віртуалізація.
У більшості випадків, навіть для корпоративного використання, потужного VPS буде більш ніж достатньо.
Локація: на що впливає
Вибір локації VPS для Unbound впливає на дві ключові речі:
- Пінг до вас: Чим ближче VPS до вашого фізичного місцезнаходження, тим нижчою буде затримка при зверненні до вашого Unbound сервера. Це безпосередньо впливає на швидкість розв'язання DNS-запитів.
- Пінг до кореневих DNS-серверів: Unbound звертатиметься до кореневих серверів DNS по всьому світу. Якщо ваш VPS знаходиться в регіоні з хорошою зв'язністю з глобальною інтернет-інфраструктурою, це забезпечить швидші відповіді від кореневих серверів і, відповідно, швидше початкове розв'язання імен.
Рекомендується вибирати локацію, яка знаходиться географічно близько до основних споживачів вашого DNS-сервера (наприклад, до вас або вашої команди) та має хорошу зв'язність з великими інтернет-вузлами.
Підготовка сервера
Перед встановленням Unbound необхідно виконати базове налаштування вашого VPS, щоб забезпечити безпеку та стабільність роботи. Ми будемо використовувати операційну систему Ubuntu 24.04 LTS, як одну з найпопулярніших та підтримуваних.
1. Підключення по SSH
Спочатку підключіться до вашого нового VPS через SSH. Використовуйте дані, надані вашим провайдером (IP-адреса, ім'я користувача root та пароль).
ssh root@ВАШ_IP_АДРЕС
Після першого підключення вам, ймовірно, знадобиться змінити пароль root.
2. Оновлення системи
Завжди починайте з оновлення списку пакетів та самої системи, щоб переконатися, що у вас встановлені найсвіжіші версії ПЗ та патчі безпеки.
sudo apt update # Оновлення списку пакетів
sudo apt upgrade -y # Оновлення всіх встановлених пакетів до останніх версій
sudo apt autoremove -y # Видалення непотрібних пакетів, які були встановлені як залежності і більше не потрібні
3. Створення нового користувача та налаштування sudo
Робота під користувачем root небезпечна. Створимо нового користувача з обмеженими правами та додамо його до групи sudo.
adduser ВАШЕ_ІМ'Я_КОРИСТУВАЧА # Створення нового користувача. Дотримуйтесь інструкцій для встановлення пароля та інформації.
usermod -aG sudo ВАШЕ_ІМ'Я_КОРИСТУВАЧА # Додавання користувача до групи sudo, щоб він міг виконувати команди з правами root.
Тепер вийдіть із сесії root та увійдіть під новим користувачем:
exit
ssh ВАШЕ_ІМ'Я_КОРИСТУВАЧА@ВАШ_IP_АДРЕС
Щоб перевірити, що sudo працює, спробуйте виконати команду:
sudo apt update
Якщо запитає ваш пароль, значить все налаштовано правильно.
4. Налаштування SSH-ключів (рекомендується)
Для підвищення безпеки вимкніть вхід за паролем та використовуйте лише SSH-ключі. Спочатку згенеруйте ключ на вашій локальній машині, якщо у вас його ще немає:
ssh-keygen -t rsa -b 4096 # На вашій локальній машині
Потім скопіюйте публічний ключ на ваш VPS:
ssh-copy-id ВАШЕ_ІМ'Я_КОРИСТУВАЧА@ВАШ_IP_АДРЕС # На вашій локальній машині
Після успішного копіювання, відредагуйте конфігурацію SSH на VPS для відключення автентифікації за паролем.
sudo nano /etc/ssh/sshd_config
Знайдіть та змініть наступні рядки (або додайте, якщо відсутні):
# Заборонити вхід під root
PermitRootLogin no
# Дозволити тільки автентифікацію за ключем
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no
Збережіть зміни (Ctrl+O, Enter) та вийдіть (Ctrl+X). Перезапустіть службу SSH:
sudo systemctl restart sshd
Тепер ви зможете входити лише за допомогою вашого SSH-ключа.
5. Встановлення та налаштування брандмауера (UFW)
UFW (Uncomplicated Firewall) — це простий у використанні інтерфейс для iptables. Він дозволить обмежити доступ до вашого сервера лише необхідними портами.
sudo apt install ufw -y # Встановлення UFW
sudo ufw allow ssh # Дозволити SSH (порт 22 за замовчуванням)
sudo ufw allow 53/udp # Дозволити DNS-трафік (порт 53 UDP)
sudo ufw allow 53/tcp # Дозволити DNS-трафік (порт 53 TCP, для великих відповідей та зонних трансферів)
sudo ufw enable # Увімкнення брандмауера. Підтвердіть 'y'.
sudo ufw status # Перевірка статусу брандмауера
Переконайтеся, що SSH дозволено до увімкнення UFW, інакше ви можете втратити доступ до сервера.
6. Встановлення Fail2ban
Fail2ban захищає сервер від атак методом перебору (brute-force) шляхом блокування IP-адрес, з яких надходить занадто багато невдалих спроб входу.
sudo apt install fail2ban -y # Встановлення Fail2ban
sudo systemctl enable fail2ban # Увімкнення автоматичного запуску при старті системи
sudo systemctl start fail2ban # Запуск служби
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local # Створення локального файлу конфігурації
sudo nano /etc/fail2ban/jail.local # Редагування файлу
У файлі jail.local переконайтеся, що секція [sshd] активна (enabled = true) і, за бажанням, налаштуйте bantime (час блокування) та findtime (період для виявлення невдалих спроб) на ваш розсуд. Для Unbound можна налаштувати власну "в'язницю", але це більш розширене налаштування і не є критичним для базового розгортання.
# Приклад налаштувань у jail.local
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
Збережіть зміни та перезапустіть Fail2ban:
sudo systemctl restart fail2ban
Тепер ваш сервер готовий до встановлення Unbound.
Встановлення ПЗ — покроково
На цьому етапі ми встановимо сам Unbound DNS-сервер. Ми будемо використовувати офіційні репозиторії Ubuntu, оскільки вони надають стабільні та перевірені версії.
Передбачається, що на момент 2026 року в репозиторіях Ubuntu 24.04 LTS (Noble Numbat) буде доступна версія Unbound 1.19.x або новіша. Ми орієнтуємося на Unbound 1.19.0 як на актуальну стабільну версію.
1. Встановлення Unbound
Unbound доступний у стандартних репозиторіях Ubuntu. Встановимо його за допомогою apt.
sudo apt update # Переконаємося, що список пакетів актуальний
sudo apt install unbound -y # Встановлення пакета Unbound
Після встановлення Unbound автоматично запускається як служба та налаштований на прослуховування локального інтерфейсу (127.0.0.1).
2. Перевірка статусу служби Unbound
Переконаємося, що Unbound успішно встановлений та працює.
sudo systemctl status unbound # Перевірка статусу служби Unbound
Вивід повинен показати active (running). Якщо ні, перевірте логи командою sudo journalctl -u unbound.
3. Завантаження актуальних кореневих підказок (root hints)
Unbound потребує актуального списку кореневих DNS-серверів для виконання рекурсивних запитів. Цей файл називається root.hints або named.cache. Зазвичай він встановлюється разом з пакетом, але його важливо регулярно оновлювати.
sudo unbound-anchor -a /var/lib/unbound/root.key # Ініціалізація та завантаження ключа DNSSEC для кореневих серверів
Ця команда завантажує та перевіряє кореневий ключ DNSSEC (DNSSEC Trust Anchor) та оновлює файл root.hints, якщо це необхідно. Це критично важливо для валідації DNSSEC.
4. Налаштування Unbound для роботи в режимі рекурсивного резолвера
За замовчуванням Unbound налаштований на прослуховування лише локального інтерфейсу. Щоб він міг відповідати на запити з інших пристроїв у вашій мережі або з інтернету (якщо ви вирішите його так використовувати), необхідно змінити конфігурацію.
Відкрийте основний конфігураційний файл Unbound:
sudo nano /etc/unbound/unbound.conf
У цьому файлі зазвичай є секція server:. Ми будемо додавати або змінювати параметри всередині цієї секції. Знайдіть або додайте наступні рядки:
# Додаткові налаштування будуть додані в /etc/unbound/unbound.conf.d/
# Створимо новий файл для наших налаштувань, щоб не змінювати основний
Найкращою практикою є створення окремого файлу конфігурації в директорії /etc/unbound/unbound.conf.d/, який буде автоматично включений до основного конфігураційного файлу unbound.conf. Це спрощує управління та оновлення.
sudo nano /etc/unbound/unbound.conf.d/custom-settings.conf # Створення нового файлу конфігурації
Додайте наступний вміст до /etc/unbound/unbound.conf.d/custom-settings.conf:
server:
# Вказуємо IP-адресу, яку Unbound буде прослуховувати.
# 0.0.0.0 означає всі доступні мережеві інтерфейси.
# Якщо у вас кілька IP, можна вказати конкретний: interface: ВАШ_IP_АДРЕС
interface: 0.0.0.0@53
# Дозволяємо запити тільки з певних мереж.
# Замініть на вашу локальну мережу або IP-адреси, яким ви довіряєте.
# Наприклад, для всієї локальної мережі 192.168.1.0/24: access-control: 192.168.1.0/24 allow
# Якщо ви хочете, щоб Unbound був доступний з інтернету (НЕ РЕКОМЕНДУЄТЬСЯ БЕЗ ДОДАТКОВОГО ЗАХИСТУ):
# access-control: 0.0.0.0/0 allow
access-control: 127.0.0.1/32 allow # Дозволяємо localhost
access-control: ::1/128 allow # Дозволяємо localhost IPv6
# Встановлюємо розмір кешу DNS-записів. 128MB - хороший баланс для VPS.
# Може бути збільшений до 256MB або 512MB при наявності достатнього RAM.
rrset-cache-size: 128m
msg-cache-size: 64m
# Увімкнення валідації DNSSEC. Вкрай рекомендується для безпеки.
# Unbound буде перевіряти справжність DNS-відповідей.
auto-trust-anchor-file: "/var/lib/unbound/root.key"
# Увімкнення логування. Корисно для налагодження.
# log-queries: yes # Логувати всі запити (може бути дуже багато)
# log-replies: yes # Логувати всі відповіді (може бути дуже багато)
# Встановлення мінімального TTL для відповідей.
# Дозволяє уникнути занадто коротких TTL, які можуть бути встановлені зловмисниками.
cache-min-ttl: 3600 # 1 година
# Встановлення максимального TTL для відповідей.
# Запобігає занадто довгому кешуванню застарілих записів.
cache-max-ttl: 86400 # 24 години
# Примусове використання TCP для запитів до кореневих серверів, якщо UDP не вдається.
# Це може бути корисно для обходу деяких обмежень або проблем з UDP.
harden-glue: yes
harden-dnssec-stripped: yes
harden-below-nxdomain: yes
harden-referral-path: yes
# Відключення IPv6, якщо не використовується, для економії ресурсів та спрощення.
# do-ip6: no
# Увімкнення відповіді з DNSSEC-інформацією для клієнтів.
do-daemonize: yes
do-not-query-address: 127.0.0.1/8
do-not-query-address: ::1/128
hide-version: yes # Приховати версію Unbound
# use-syslog: yes # Відправляти логи в syslog
# verbosity: 1 # Рівень деталізації логів (0-5, 1 - за замовчуванням)
Збережіть зміни (Ctrl+O, Enter) та вийдіть (Ctrl+X).
5. Перевірка конфігурації та перезапуск Unbound
Перед перезапуском служби завжди перевіряйте синтаксис конфігураційного файлу, щоб уникнути помилок.
sudo unbound-checkconf # Перевірка синтаксису конфігураційних файлів Unbound
Якщо команда не видає помилок, значить конфігурація коректна. Тепер перезапустіть службу Unbound, щоб застосувати зміни.
sudo systemctl restart unbound # Перезапуск служби Unbound
Переконайтеся, що Unbound знову запущений та працює:
sudo systemctl status unbound
6. Тестування Unbound
Тепер, коли Unbound налаштований, протестуємо його роботу. Для цього можна використовувати утиліти dig або drill. Спочатку встановіть dnsutils, якщо вони ще не встановлені.
sudo apt install dnsutils -y # Встановлення утиліти dig
Виконайте запит до вашого Unbound сервера (який тепер прослуховує 0.0.0.0 або ваш публічний IP):
dig @127.0.0.1 example.com # Запит до локального Unbound
dig @ВАШ_IP_АДРЕС example.com # Запит до Unbound через зовнішній IP (якщо ви дозволили доступ)
У відповіді ви повинні побачити IP-адресу example.com. Важливо, щоб у секції ANSWER SECTION були присутні записи, а в секції FLAGS був прапор ad (authentic data), що вказує на успішну валідацію DNSSEC.
Якщо ви хочете перевірити, що Unbound дійсно робить рекурсивний запит, очистіть його кеш та запитайте домен, який ви раніше не запитували:
sudo unbound-control reload # Очистка кеша Unbound
dig @127.0.0.1 newdomain.com # Замініть на будь-який домен, який ви не запитували
Якщо все працює, Unbound готовий до використання!
Конфігурація
Конфігурація
Після базової інсталяції Unbound ми можемо заглибитися в його конфігурацію для максимальної приватності, безпеки та продуктивності. Ми продовжимо використовувати файл /etc/unbound/unbound.conf.d/custom-settings.conf для наших налаштувань.
1. Розширення налаштувань приватності та безпеки
Додайте наступні параметри до секції server: вашого custom-settings.conf.
sudo nano /etc/unbound/unbound.conf.d/custom-settings.conf
Приклади додаткових параметрів:
server:
# ... (попередні налаштування) ...
# Посилення приватності
# Приховати інформацію про версію Unbound (вже додано раніше)
hide-version: yes
# Приховати ID сервера у відповідях CH TXT ID.SERVER
hide-identity: yes
# Приховати версію сервера у відповідях CH TXT VERSION.SERVER
hide-trustanchor: yes
# Вимкнути відповіді на запити CH TXT hostname.bind, version.bind тощо.
# Це запобігає розкриттю інформації про ваш сервер.
# private-address: 192.168.0.0/16 # Приклад: всі адреси в цій мережі вважаються приватними
# private-address: 10.0.0.0/8
# private-address: 172.16.0.0/12
# private-address: fd00::/8 # Приватні адреси IPv6
# Відхиляти запити до приватних IP-адрес, якщо вони не дозволені явно
# Це запобігає атакам, коли зловмисник намагається використовувати ваш DNS для внутрішніх мереж.
do-not-query-address: 10.0.0.0/8
do-not-query-address: 172.16.0.0/12
do-not-query-address: 192.168.0.0/16
do-not-query-address: 169.254.0.0/16
do-not-query-address: ::1/128
do-not-query-address: fc00::/7
do-not-query-address: fe80::/10
# Відхиляти запити до локальних хостів (якщо ви не хочете, щоб Unbound їх розв'язував)
# local-zone: "localhost." refuse
# local-zone: "127.in-addr.arpa." refuse
# Додаткові налаштування безпеки для DNSSEC
# Відхиляти відповіді, які не відповідають DNSSEC, якщо для домену має бути підпис.
harden-dnssec-stripped: yes
# Відхиляти відповіді, які містять клейові записи для доменів, що знаходяться нижче зони.
harden-glue: yes
# Відхиляти відповіді, які вказують на неіснуючі домени (NXDOMAIN) нижче зони.
harden-below-nxdomain: yes
# Відхиляти відповіді, які вказують на кореневий сервер як реферер.
harden-referral-path: yes
# Встановлення кількості потоків для обробки запитів.
# Зазвичай дорівнює кількості ядер CPU вашого VPS.
num-threads: 1 # Для VPS з 1 vCPU
# Збільшення кількості дескрипторів файлів.
# Важливо для високозавантажених серверів.
outgoing-range: 8192 # Максимальна кількість вихідних запитів
num-queries-per-thread: 4096 # Максимальна кількість запитів на потік
# Увімкнення агресивного кешування NSEC.
# Дозволяє Unbound кешувати інформацію про відсутність доменів, що прискорює відповіді для неіснуючих доменів.
aggressive-nsec: yes
# Попереднє вибіркове завантаження (prefetching) DNS-записів.
# Unbound оновлюватиме записи в кеші до закінчення їхнього TTL, що покращує продуктивність.
prefetch: yes
prefetch-key: yes
# Збільшення буфера для UDP-відповідей.
# Корисно для DNSSEC, де відповіді можуть бути великими.
edns-buffer-size: 1232 # Рекомендоване значення для запобігання фрагментації
Збережіть зміни та перевірте конфігурацію:
sudo unbound-checkconf
sudo systemctl restart unbound
2. Налаштування блокування реклами та шкідливих доменів (Ad-blocking)
Ви можете використовувати Unbound для блокування реклами та шкідливих доменів, використовуючи списки блокування. Це робиться шляхом додавання local-zone з типом refuse або redirect.
Створимо новий файл для списків блокування:
sudo nano /etc/unbound/unbound.conf.d/adblock.conf
Додайте наступний вміст. Це приклад, вам потрібно буде регулярно оновлювати цей список або використовувати скрипт для його автоматичного оновлення.
server:
# Заблокувати відомий рекламний домен
local-zone: "doubleclick.net" refuse
local-zone: "adservice.google.com" refuse
local-zone: "tracking.example.com" refuse
# Перенаправити на локальний IP (наприклад, 0.0.0.0 або 127.0.0.1)
local-zone: "ads.example.com" redirect
local-data: "ads.example.com A 0.0.0.0"
# Можна використовувати більш обширні списки.
# Приклад:
# include: "/etc/unbound/unbound.conf.d/blocklists/ads.conf"
# include: "/etc/unbound/unbound.conf.d/blocklists/malware.conf"
Для автоматизації можна створити скрипт, який завантажуватиме списки з публічних джерел (наприклад, AdGuard DNS filter, OISD) та форматуватиме їх для Unbound. Приклад скрипта (розмістіть його в /usr/local/bin/update-unbound-blocklist.sh):
#!/bin/bash
# Шлях до файлу блокування Unbound
BLOCKLIST_FILE="/etc/unbound/unbound.conf.d/adblock_generated.conf"
# URL джерела списку блокування (наприклад, OISD Basic)
# На 2026 рік цей URL може змінитися, перевірте актуальність
BLOCKLIST_URL="https://raw.githubusercontent.com/oisddev/oisd/main/abp/basic.txt"
echo "server:" > "$BLOCKLIST_FILE"
echo " # Generated by update-unbound-blocklist.sh on $(date)" >> "$BLOCKLIST_FILE"
echo " # Source: $BLOCKLIST_URL" >> "$BLOCKLIST_FILE"
# Завантаження списку та перетворення у формат Unbound
# Пропускаємо коментарі та порожні рядки, додаємо "refuse"
curl -s "$BLOCKLIST_URL" | grep -v '^!' | grep -v '^$' | while read -r domain; do
# Видаляємо префікс '||' та суфікс '^' або інші ABP-специфічні символи
domain=$(echo "$domain" | sed -e 's/^||//' -e 's/\^$//' -e 's/\$//')
# Фільтруємо порожні рядки після обробки
if [[ -n "$domain" ]]; then
echo " local-zone: \"$domain\" refuse" >> "$BLOCKLIST_FILE"
fi
done
echo "Generated Unbound blocklist: $BLOCKLIST_FILE"
# Перевірка конфігурації Unbound
sudo unbound-checkconf
# Перезапуск Unbound для застосування змін, якщо перевірка успішна
if [ $? -eq 0 ]; then
sudo systemctl restart unbound
echo "Unbound restarted successfully."
else
echo "Unbound configuration check failed. Not restarting."
fi
Зробіть скрипт виконуваним:
sudo chmod +x /usr/local/bin/update-unbound-blocklist.sh
І запустіть його:
sudo /usr/local/bin/update-unbound-blocklist.sh
Потім включіть цей згенерований файл у ваш custom-settings.conf:
server:
# ...
include: "/etc/unbound/unbound.conf.d/adblock_generated.conf"
Збережіть та перезапустіть Unbound.
3. Перевірка працездатності
Для перевірки працездатності та ефективності Unbound використовуємо dig.
Перевірка DNSSEC:
dig @ВАША_IP_АДРЕСА dnssec-failed.org # Домен, який має викликати помилку DNSSEC
У відповіді ви повинні побачити SERVFAIL, що означає, що Unbound успішно виявив проблему з DNSSEC і відмовився розв'язувати домен.
Перевірка блокування реклами:
dig @ВАША_IP_АДРЕСА doubleclick.net # Запит до заблокованого домену
Ви повинні отримати відповідь NXDOMAIN (неіснуючий домен) або, якщо ви використовували redirect, то 0.0.0.0 або 127.0.0.1.
Перевірка швидкості кешування:
dig @ВАША_IP_АДРЕСА example.com # Перший запит
dig @ВАША_IP_АДРЕСА example.com # Другий запит
Зверніть увагу на час виконання запиту (Query time) у виводі. Другий запит має бути значно швидшим за перший, оскільки відповідь буде взята з кешу.
Healthcheck:
Можна використовувати просту команду ping або curl, якщо ваш Unbound прослуховує зовнішній IP, але для перевірки DNS-сервера найкраще підходять dig або nslookup.
Для більш детального моніторингу можна налаштувати експорт метрик Unbound в Prometheus або іншу систему моніторингу, але це виходить за рамки цього посібника.
4. Налаштування системи для використання Unbound
Щоб ваші пристрої використовували Unbound, ви можете змінити налаштування DNS у вашій операційній системі або на маршрутизаторі. Рекомендується налаштувати маршрутизатор, щоб усі пристрої у вашій мережі автоматично використовували Unbound.
Налаштування на Linux (приклад):
sudo nano /etc/resolv.conf # Редагування файлу resolv.conf (часто перезаписується)
Додайте або змініть рядок nameserver на IP вашого VPS:
nameserver ВАША_IP_АДРЕСА
nameserver 127.0.0.1 # Якщо ви тестуєте Unbound на тому ж VPS
Для більш постійного налаштування використовуйте netplan (Ubuntu Server) або systemd-resolved:
# Приклад для Netplan (Ubuntu Server 24.04)
sudo nano /etc/netplan/00-installer-config.yaml
Змініть секцію nameservers:
network:
ethernets:
enp0s3: # Назва вашого мережевого інтерфейсу
dhcp4: no
addresses:
- 192.168.1.10/24 # Ваш статичний IP
routes:
- to: default
via: 192.168.1.1 # IP вашого шлюзу
nameservers:
addresses: [ВАША_IP_АДРЕСА, 8.8.4.4] # Додайте ваш Unbound та резервний DNS
version: 2
sudo netplan try
sudo netplan apply
Налаштування на Windows/macOS:
У налаштуваннях мережевого адаптера змініть бажаний DNS-сервер на IP-адресу вашого VPS. Додайте резервний DNS-сервер (наприклад, 8.8.4.4), щоб мати запасний варіант, якщо ваш VPS буде недоступний.
Налаштування на роутері:
Увійдіть до панелі керування вашого роутера і в розділі налаштувань WAN/LAN або DHCP-сервера вкажіть IP-адресу вашого Unbound VPS як основний DNS-сервер. Це найзручніший спосіб для застосування Unbound до всіх пристроїв у вашій домашній мережі.
Резервне копіювання та обслуговування
Надійна робота будь-якого сервера неможлива без регулярного резервного копіювання та планового обслуговування. Unbound, хоча й не зберігає критично важливі дані, вимагає резервного копіювання своїх конфігураційних файлів та кореневих підказок.
1. Що резервувати
- Конфігураційні файли Unbound:
/etc/unbound/unbound.confта всі файли в/etc/unbound/unbound.conf.d/. Це включає ваші користувацькі налаштування, списки блокування тощо. - Кореневі підказки та DNSSEC-ключі:
/var/lib/unbound/root.keyта/var/lib/unbound/root.hints. Хоча їх можна відновити за допомогоюunbound-anchor, мати їх у резервній копії не завадить.
2. Простий скрипт авторезервування
Ми створимо простий скрипт, який архівуватиме необхідні файли та надсилатиме їх у безпечне місце. Як приклад, використаємо tar для архівування та rsync для копіювання на інший сервер або в хмарне сховище (наприклад, S3-сумісне).
Створіть директорію для резервних копій та сам скрипт:
sudo mkdir -p /var/backups/unbound
sudo nano /usr/local/bin/backup-unbound.sh
Вміст /usr/local/bin/backup-unbound.sh:
#!/bin/bash
# Каталог для тимчасових резервних копій
BACKUP_DIR="/var/backups/unbound"
# Ім'я файлу резервної копії
TIMESTAMP=$(date +%Y%m%d-%H%M%S)
BACKUP_FILE="$BACKUP_DIR/unbound_config_$TIMESTAMP.tar.gz"
# Каталоги та файли для резервного копіювання
CONFIG_FILES="/etc/unbound /var/lib/unbound/root.key"
# Видалення старих резервних копій (наприклад, старших за 7 днів)
find "$BACKUP_DIR" -type f -name "unbound_config_*.tar.gz" -mtime +7 -delete
# Створення архіву
sudo tar -czvf "$BACKUP_FILE" $CONFIG_FILES
# Перевірка, чи архів створено
if [ $? -eq 0 ]; then
echo "Резервну копію Unbound створено: $BACKUP_FILE"
# Куди зберігати (зовнішній S3 / окремий VPS)
# Приклад для rsync на інший сервер (потрібен SSH-ключ без пароля)
# Замініть USER, REMOTE_HOST, REMOTE_PATH на ваші дані
# rsync -avz "$BACKUP_FILE" USER@REMOTE_HOST:REMOTE_PATH/
# Приклад для AWS S3 CLI (потребує встановленого та налаштованого AWS CLI)
# aws s3 cp "$BACKUP_FILE" s3://YOUR_S3_BUCKET_NAME/unbound-backups/
# Для демонстрації просто залишаємо локально
echo "Резервну копію збережено локально за адресою $BACKUP_FILE"
else
echo "Не вдалося створити резервну копію Unbound."
fi
Зробіть скрипт виконуваним:
sudo chmod +x /usr/local/bin/backup-unbound.sh
Перевірте його роботу:
sudo /usr/local/bin/backup-unbound.sh
ls -l /var/backups/unbound/
3. Налаштування Cron для автоматичного запуску
Додамо скрипт у розклад cron, щоб він запускався щодня, наприклад, о 3:00 ночі.
sudo crontab -e
Додайте наступний рядок у кінець файлу:
0 3 * * * /usr/local/bin/backup-unbound.sh > /dev/null 2>&1
Цей рядок означає: о 3 годині 0 хвилин кожного дня тижня та місяця запускати скрипт, перенаправляючи весь вивід у /dev/null (щоб не отримувати листи на пошту root).
4. Куди зберігати (зовнішній S3 / окремий VPS)
Зовнішнє S3-сумісне об'єктне сховище: Це найнадійніший та масштабований варіант. Використовуйте aws cli або rclone для завантаження резервних копій. Вам потрібно буде налаштувати облікові дані та права доступу.
# Приклад для rclone (потребує попереднього налаштування rclone config)
# rclone copy "$BACKUP_FILE" remote_s3_alias:your-bucket/unbound-backups/
Окремий VPS: Ви можете використовувати rsync або scp для копіювання резервних копій на інший ваш VPS. Переконайтеся, що на цільовому VPS є достатньо місця та налаштовано SSH-доступ без пароля для користувача, від імені якого запускається скрипт резервного копіювання.
Важливо: Ніколи не зберігайте резервні копії на тому ж VPS, який ви резервуєте. У разі збою диска або компрометації сервера ви втратите і дані, і резервні копії.
5. Оновлення: rolling vs maintenance window
Підтримка Unbound та операційної системи в актуальному стані є критично важливою для безпеки. Однак процес оновлення може тимчасово перервати роботу DNS-сервера.
- Rolling updates (безперервні оновлення): Для Unbound це означає автоматичне оновлення пакетів системи без виділеного вікна обслуговування. Це зручно, але є ризик, що оновлення може спричинити тимчасовий збій або вимагати ручного втручання. Для критично важливих систем краще уникати повністю автоматичних оновлень.
- Maintenance window (вікно обслуговування): Рекомендований підхід. Заплануйте регулярний час (наприклад, раз на місяць) для оновлення системи. У цей час ви можете вручну запустити оновлення, перевірити логи та переконатися, що Unbound коректно перезапустився.
Процедура оновлення:
sudo apt update # Оновлення списку пакетів
sudo apt upgrade -y # Встановлення оновлень. Unbound буде перезапущено автоматично, якщо його пакет оновиться.
sudo apt autoremove -y # Видалення непотрібних пакетів
sudo unbound-anchor -a /var/lib/unbound/root.key # Оновлення кореневих підказок та DNSSEC-ключів
sudo systemctl status unbound # Перевірка статусу Unbound після оновлення
Також рекомендується періодично перевіряти офіційний сайт Unbound або репозиторій проєкту на GitHub щодо виходу нових версій та важливих змін у конфігурації.
Рекомендація: Якщо ваш Unbound є єдиним DNS-сервером для ваших пристроїв, розгляньте можливість використання другого, резервного DNS-сервера (наприклад, 8.8.4.4 або 1.1.1.1) у налаштуваннях вашої системи/роутера. Це забезпечить безперебійний доступ до інтернету під час обслуговування вашого VPS.
Усунення несправностей + FAQ
У цьому розділі ми розглянемо типові проблеми, з якими можна зіткнутися при розгортанні Unbound, та надамо відповіді на поширені запитання.
1. Unbound не запускається або видає помилку
Причина: Найчастіше це пов'язано з помилками в конфігураційному файлі або конфліктом портів.
Що перевірити:
- Конфігурація: Виконайте
sudo unbound-checkconf. Ця команда перевірить синтаксис ваших конфігураційних файлів. Якщо є помилки, вона вкаже на рядок і файл. - Логи: Перевірте системні логи Unbound:
sudo journalctl -u unbound -f. Це покаже останні записи логів, пов'язані з Unbound, які можуть вказати на причину збою (наприклад, "address already in use"). - Конфлікт портів: Переконайтеся, що порт 53 (UDP/TCP) не зайнятий іншим процесом. Використовуйте
sudo lsof -i :53абоsudo netstat -tulnp | grep 53.
Як виправити: Виправте помилки в конфігурації згідно з виводом unbound-checkconf. Якщо порт зайнятий, або змініть порт для Unbound (менш бажано), або зупиніть іншу службу, яка його використовує.
2. DNS-запити не розв'язуються або дуже повільні
Причина: Проблеми з мережевим з'єднанням, неправильні налаштування брандмауера або проблеми з DNSSEC.
Що перевірити:
- Брандмауер: Переконайтеся, що UFW (або інший брандмауер) дозволяє вхідні з'єднання на порт 53 (UDP та TCP) з IP-адрес ваших клієнтів.
sudo ufw status verbose. - Мережеве з'єднання: Переконайтеся, що ваш VPS має доступ до інтернету та може дістатися до кореневих DNS-серверів. Спробуйте
ping 1.1.1.1абоping google.comз вашого VPS. - Налаштування клієнта: Переконайтеся, що на вашому пристрої або роутері як DNS-сервер вказано IP-адресу вашого VPS.
- DNSSEC: Якщо Unbound налаштований на DNSSEC, але є проблеми з довіреними якорями або підписами, це може викликати
SERVFAIL. Перевіртеsudo unbound-anchor -a /var/lib/unbound/root.key.
Як виправити: Відкрийте необхідні порти в брандмауері. Перевірте налаштування мережі VPS. Переконайтеся, що клієнти правильно налаштовані. Оновіть кореневі DNSSEC-ключі.
3. Блокування реклами не працює
Причина: Неправильні списки блокування або Unbound не завантажив їх.
Що перевірити:
- Файл блокування: Переконайтеся, що файл
adblock_generated.conf(або ваш користувацький файл) існує та містить потрібні записи. - Включення файлу: Перевірте, що в
/etc/unbound/unbound.conf.d/custom-settings.confє рядокinclude: "/etc/unbound/unbound.conf.d/adblock_generated.conf". - Перезапуск Unbound: Переконайтеся, що Unbound було перезапущено після зміни файлів блокування.
- TTL кешу: Можливо, домени, які ви намагаєтеся заблокувати, вже закешовані. Спробуйте очистити кеш:
sudo unbound-control reload.
Як виправити: Виправте шляхи до файлів, перезапустіть Unbound. Оновіть списки блокування та переконайтеся, що вони у правильному форматі.
4. Який VPS-конфіг мінімально підійде?
Для Unbound, який є досить легкою програмою, мінімально підійде VPS з 1 vCPU, 512 МБ RAM та 10-20 ГБ SSD/NVMe диска. Цієї конфігурації буде достатньо для особистого використання або для обслуговування невеликої домашньої мережі. Важливіше стабільність мережевого з'єднання та низький пінг до кореневих DNS-серверів, ніж надлишкові обчислювальні ресурси.
5. Що обрати — VPS чи dedicated для цього завдання?
Для розгортання Unbound DNS у переважній більшості випадків VPS є оптимальним вибором. Unbound не вимагає значних ресурсів CPU або RAM, і VPS легко справляється з навантаженням навіть від кількох сотень користувачів. Dedicated сервери зазвичай надлишкові для цього завдання і виправдані лише у випадку вкрай високого навантаження (десятки тисяч запитів на секунду), необхідності фізичної ізоляції для відповідності суворим нормативним вимогам або якщо цей сервер буде використовуватися для інших, значно більш ресурсоємних завдань.
6. Чи можна використовувати Unbound для DNS-over-TLS (DoT) або DNS-over-HTTPS (DoH) для клієнтів?
Unbound у базовій конфігурації, описаній у цьому посібнику, працює як традиційний рекурсивний DNS-сервер по UDP/TCP на порту 53. Для надання DNS-over-TLS або DNS-over-HTTPS клієнтам потрібне додаткове налаштування. Unbound підтримує вихідні запити по DoT до апстрім-серверів, але для обслуговування DoT/DoH клієнтів зазвичай потрібен проксі-сервер (наприклад, Nginx, Caddy) або спеціалізоване ПЗ (наприклад, Stubby для DoT, або спеціалізовані DoH-сервери), яке слухатиме запити по HTTPS/TLS та перенаправлятиме їх на локальний Unbound. Це складніше налаштування і виходить за рамки цього базового посібника.
7. Як моніторити роботу Unbound?
Для базового моніторингу використовуйте sudo systemctl status unbound для перевірки статусу служби та sudo journalctl -u unbound -f для перегляду логів. Для більш просунутого моніторингу можна використовувати unbound-control status для отримання поточного стану та статистики кешу. Для збору метрик та візуалізації можна налаштувати експорт метрик Unbound у Prometheus за допомогою unbound_exporter та відображати їх у Grafana. Це дозволить відстежувати навантаження, кількість запитів, попадання в кеш та інші важливі показники продуктивності.
8. Як забезпечити високу доступність Unbound?
Для забезпечення високої доступності одного Unbound сервера недостатньо. Вам потрібно буде розгорнути щонайменше два Unbound сервери на різних VPS у різних дата-центрах. Потім ви можете налаштувати їх у режимі Active-Passive або Active-Active, використовуючи Anycast DNS, або просто надати клієнтам IP-адреси обох серверів як основний та резервний DNS. Це гарантує, що навіть якщо один сервер вийде з ладу, другий продовжить обробляти DNS-запити.
Висновки та наступні кроки
Висновки та наступні кроки
Ми успішно розгорнули та налаштували Unbound DNS-сервер на вашому VPS, перетворивши його на потужний інструмент для забезпечення приватного, безпечного та швидкого доступу до інтернету. Тепер ви контролюєте свої DNS-запити, обходячи сторонніх посередників і захищаючись від підміни DNS за допомогою DNSSEC. Це важливий крок до створення власної незалежної та захищеної інтернет-інфраструктури.
Куди рухатися далі для подальшої оптимізації та масштабування:
- Інтеграція з локальною мережею: Налаштуйте ваш домашній маршрутизатор або DHCP-сервер так, щоб він автоматично видавав IP-адресу вашого Unbound VPS як основний DNS-сервер для всіх пристроїв у вашій мережі. Це забезпечить централізоване використання вашого приватного DNS.
- Розширене блокування: Автоматизуйте оновлення списків блокування реклами та шкідливих доменів за допомогою скриптів та
cron, як було описано раніше. Вивчіть різні списки блокування (наприклад, OISD, AdGuard Home lists) і виберіть ті, які найкращим чином відповідають вашим потребам. - Моніторинг та логування: Налаштуйте більш детальний моніторинг Unbound за допомогою
unbound-controlдля отримання статистики та розгляньте можливість інтеграції з Prometheus/Grafana для візуалізації продуктивності та стану сервера. Це допоможе вам оперативно реагувати на будь-які проблеми та оптимізувати роботу.