[0001] tiny-rens - DoH DNS server _____________________________________________________________ Очень простая реализация DNS сервера, которая проксирует DNS пакеты через https (DoH). Поток: ~ValgrindLLVM/tiny-rens. * tiny-rens - DoH DNS server ......................... [0001] * Зачем? ............................................. [0002] * Использование ...................................... [0003] * Настройка и запуск ............................... [0004] * OpenRC сервис .................................... [0005] * Настройка resolvconf ............................. [0006] * Проблемы ........................................... [0007] * Вывод .............................................. [0008] [0002] Зачем? _____________________________________________________________ Если очень кратко: моя религия не позволяет мне использовать systemd-resolved, а DoH dns server хочется... В нашей любимой стране обычно подменяют данные в незащищённых DNS пакетах, в итоге на некоторые ресурсы нельзя зайти даже с VPN. Да, в браузерах, например Firefox, можно включить DoH прямо в настройках, но: 1. Это работает только в браузере. Разные приложение, которые используют системную конфигурацию DNS, всё ещё не смогут получить правильный DNS record. 2. Ну найди эту настройку в qutebrowser. [0003] Использование _____________________________________________________________ Если вы решили отказаться от нормального systemd-resolved, то вы явно не используете systemd. В моём случае это OpenRC. У меня уже стоит openresolv, поэтому /etc/resolv.conf контролируется resolvconf. --[0004] Настройка и запуск -------------------------------- По сути tiny-rens не имеет нормальной настройки, ну разве через аргументы командной строки... По умолчанию он запускается на 127.0.0.51:53 и использует в качестве DNS сервера 1.1.1.1 (cloudflare). DNS сервер должен поддерживать DoH. +--------------------------------------------------------+ | $ tiny-rens -h | | Usage: bin/tiny-rens [port | -] [hostname | -] | | [dnsserver | -] | | bin/tiny-rens [--help | -h] | | Default: port=53 hostname=127.0.0.51 | | dnsserver=1.1.1.1 | | Version: 1.0.0 | | Author: ValgrindLLVM | +--------------------------------------------------------+ :53 является стандартным портом для DNS серверов, а так же его можно использовать только из под рута. Не рекомендовал бы что-то менять, кроме DNS сервера, если вам почему-то не нравится cloudflare. Вот так можно запустить tiny-rens на другом DNS сервере: +--------------------------------------------------------+ | # tiny-rens - - 9.9.9.9 | | Started DNS server on 127.0.0.51:53 | +--------------------------------------------------------+ --[0005] OpenRC сервис ------------------------------------- Если вы используете runit, то сочувствую. +--------------------------------------------------------+ | /etc/init.d/tiny-rens [755] | +--------------------------------------------------------+ | | | #!/sbin/openrc-run | | | | description="Tiny version of ReNS DNS server" | | | | rc_need="loopback" | | | | command="/path/to/tiny-rens" | | command_args="- - 8.8.8.8" | | command_background=true | | pidfile="/var/run/${RC_SVCNAME}.pid" | | | +--------------------------------------------------------+ Не забудьте сделать файл доступным к запуску и можно добавить сервис на runlevel default: +--------------------------------------------------------+ | # rc-update add tiny-rens default | | * service tiny-rens added to runlevel default | | # rc-service tiny-rens start | | * Starting tiny-rens ... [ ok ]| +--------------------------------------------------------+ --[0006] Настройка resolvconf ------------------------------ По сути, можно сразу написать в /etc/resolv.conf нужный dns сервер (по умолчанию nameserver 127.0.0.51), но вероятно у вас стоит openresolv и resolvconf, поэтому нужно проделать минимальную конфигурацию. Тут я привиду пример файла, у вас он может быть другой. Нужно добавить последнию строчку с новым dns сервером. +--------------------------------------------------------+ | /etc/resolvconf.conf | +--------------------------------------------------------+ | | | resolv_conf=/etc/resolv.conf | | name_servers=127.0.0.51 | | | +--------------------------------------------------------+ Далее, обновляем конфигурацию resolvconf: +--------------------------------------------------------+ | # resolvconf -u | +--------------------------------------------------------+ Готово. Теперь вы можете наслаждаться одним из худших DNS серверов в мире. [0007] Проблемы _____________________________________________________________ Наверное, основной проблемой tiny-rens (да и в принципе DoH DNS серверов) является производительность. Используя cURL тратится много времени на запрос к серверу, что вместе с отсутствием кеша сильно понижает производительность. В readme.md на гитхабе я привёл пример 262 против 50 мс. Лично у меня запросы на обычные DNS сервера делаются за 70-110мс, когда на tiny-rens выходит около 220мс. Возможно, кеширование решило бы проблему, но оно есть только в ReNS, пост о котором я когда-нибудь сделаю. [0008] Вывод _____________________________________________________________ tiny-rens достаточно маленький и при этом очень долгий DNS сервер. По возможности лучше использовать systemd-resolved или аналоги.