Установка systemd-resolved в Arch Linux
Настраиваем режим stub
Добавляем в автозапуск systemd-resolved:
systemctl enable systemd-resolvedПредварительно отключаем systemd-resolved:
systemctl stop systemd-resolvedСоздаем символьную ссылку:
ln -sf ../run/systemd/resolve/stub-resolv.conf /etc/resolv.confЦелевой путь символической ссылки, содержащий ../ в начале, является путём относительно расположения символической ссылки, а не относительно текущего рабочего каталога.
Файл-заглушка /run/systemd/resolve/stub-resolv.conf содержит 127.0.0.53 в качестве единственного DNS-сервера на котором собственно и работает.
Запускаем systemd-resolved:
systemctl start systemd-resolvedПроверяем текущие настройки resolver:
resolvectl statusВключаем DNSSEC
Если кратко, то родительские DNS записи содержат информацию о дочерних и зоны более высокого уровня могут подтвержать, что данный домен принадлежит данному серверу. Таким образом если DNS сервер у которого вы получается записи попытается вас обмануть, то эти записи будут отклонены. DNSSEC не шифрует трафик, только предоставляет доказательство владения доменом указаным ip.
Для Шифрования используется DNSOverTLS (DoT) и DNSOverHTTPS (DoH).
Также стоит заменить dns провайдера на тот, которому мы доверяем.
nano /etc/systemd/resolved.conf[Resolve]
DNSSEC=trueПроверяем
Проверяем работает ли DNSSEC, отправив запрос к домену с неправильной подписью:
resolvectl query badsig.go.dnscheck.toolsbadsig.go.dnscheck.tools: resolve call failed: DNSSEC validation failed: invalidЗатем проверяем домен, подпись которого в порядке:
resolvectl query go.dnscheck.toolsgo.dnscheck.tools: 2604:a880:400:d0::256e:b001 -- link: enp2s0
142.93.10.179 -- link: enp2s0
-- Information acquired via protocol DNS in 122.2ms.
-- **Data is authenticated: yes**; Data was acquired via local or encrypted transport: no
-- Data from: networkData is authenticated должна вернуться со значением yes.
Исправление DNSEC signature-expired
Включаем DNS через TLS
Требуется для того, чтобы провайдер не знал какой домен мы запрашиваем. Это имеем мало смысла, если после мы стучимся к полученному ip адресу. Но при использовании VPN мы всегда обращаемся к одним и тем же серверам никак не связанным с запрашиваемыми ip адресами и поэтому в этом случае стоит включить DNSOverTLS, чтобы не скопрометировать перед провайдером сайты к которым мы хотим получить доступ.
Разумеется VPN провайдер или провайдер предоставляющий VDS для VPN будет знать к каким сайтам мы обращаемся, но так как VPN зачастую используется для доступа из за рубежа, то это хорошая защита от слежки со стороны государства.
Без DNSSEC мы все еще подвержены угрозе недобросовестного dns провайдера.
Также стоит заменить DNS провайдера на тот, которому мы доверяем.
nano /etc/systemd/resolved.conf[Resolve]
DNSOverTLS=yesПроверяем
ngrep port 53Должен ничего не выдавать:
interface: wlo1 (192.168.1.0/255.255.255.0)
filter: ( port 53 ) and ((ip || ip6) || (vlan && (ip || ip6)))Так как DNS over TLS всегда используется порт 853.
ngrep port 853interface: wlo1 (192.168.1.0/255.255.255.0)
filter: ( port 853 ) and ((ip || ip6) || (vlan && (ip || ip6)))
#
T 192.168.1.2:37570 -> 8.8.8.8:853 [S] #1
...Ссылки
Настройка кеширования DNS с помощью systemd-resolved - База знаний РЕД ОС