WireGuard и systemd-resolved
Сегодня столкнулись с еще одной трудно диагностируемой ситуацией. Дано – WireGuard клиент на Debian в филиале, соединяется с WireGuard сервером на Ubuntu в основном офисе.
Коллега попытался перенаправить DNS-запросы на сервер основного офиса, указав в конфиге клиента опцию:
DNS = 192.168.10.53
Которая указывала на DNS-сервер офиса. И вроде бы даже все получилось. Но очень быстро выяснилось, что сломалось разрешение имен на самом сервере.
На любую попытку что-то пропинговать система сообщала:
Временный сбой в разрешении имен
Достаточно быстро выяснилось, что разрешение имен ломается только если поднят WireGuard-интерфейс.
Далее последовали попытки разобраться в ситуации, но безуспешные. За разрешение имен в современных системах отвечает служба systemd-resolved, которая поднимает на 127.0.0.1 локальный кеширующий DNS и направляет все запросы приложений на него.
Реальные же запросы systemd-resolved обрабатывает согласно внутренним правилам, в зависимости от настроек службы и запрашиваемых имен.
Решение гибкое, универсальное, удобное. Но после старта WG-интерфейса служба полностью переставала работать.
Анализ показал, что если в настройках интерфейса WireGuard указана опция DNS, то адрес добавлялся в файл настроек systemd-resolved, причем добавлялся корректно.
После чего systemd-resolved отказывается работать и не может достучаться не только на этот сервер, но и на остальные указанные сервера, хотя они доступны с самого узла напрямую. И команда nslookup с явным указанием сервера прекрасно имена разрешает.
Как только мы убирали из конфига WireGuard опцию DNS и перезапускали службу - systemd-resolved тут же оживал, без всяких перезапусков или иных действий с ним.
Беглый поиск по интернету показал, что проблема не нова и известна. Скорее всего это баг, только вот чей.
Поэтому не используйте опцию DNS в настройках WireGuard интерфейса на системах с systemd-resolved, либо отказывайтесь от использования последнего.
Post #5258
2.72K