[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 <[email protected]>         |
  +--------------------------------------------------------+

  :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
или аналоги.