Я хотел убедиться, что мой сервер использует DNSSEC и DNS-over-TLS, поэтому я зашел в /etc/systemd/resolved.conf и добавил следующее:
[Resolve]
DNS=9.9.9.9
FallbackDNS=149.112.112.112
DNSSEC=true
DNSOverTLS=opportunistic
Я использовал общедоступные DNS-серверы Quad9 (9.9.9.9 и 149.112.112.112), в котором есть как DNSSEC, так и DNSOverTLS. Чтобы убедиться, что все работает правильно, я перезапустил systemd (используя systemctl restart systemd-resolved.service
), а затем запустил systemd-resolve --status
. Вот соответствующие части моего вывода:
Global
DNS Servers: 9.9.9.9
Link 3 [DEVICE_NAME]
DNSSEC Setting: yes
DNSSEC Supported: yes
DNS Servers: 8.26.56.26
8.20.247.20
Как видно, Quad9 DNS отображается в Global, но настройки DNS из /etc/netplan/01-netcfg.yaml
по-прежнему отображаются в Link 3 DNS-серверы netplan принадлежат Comodo и на момент написания не поддерживают ни DNS-over-TLS, ни DNSSEC .Так почему же systemd-resolved говорит, что DNSSEC поддерживается?
Тем не менее, простое решение - обновить 01-netcfg.yaml, чтобы также использовать DNS-серверы Quad9, но мне это не нравится, потому что теперь есть два места с одинаковыми настройками, и я не уверен, какое из них (или оба иметь значение). Чтобы понять это, мне нужно понять, как systemd-resolved выполняет поиск DNS, если нет локального кеша. Чтение документации , похоже, подразумевает, что он проверяет глобальный DNS и DNS netplan одновременно. В этом случае, не приведет ли Quad9 в список как глобальный DNS-сервер, так и DNS-сервер netplan, к дублированию поиска?
Не лучше ли полностью удалить глобальный DNS, закомментировав DNS = 9.9.9.9
и FallbackDNS = 149.112.112.112
в resolved.conf? Или лучше удалить DNS, указанный в 01-netcfg.yaml (я не знаю, как и возможно ли это)?
Я решил провести несколько экспериментов, чтобы понять поведение systemd.Я начал с запуска sudo tcpdump -i [ИМЯ_УСТРОЙСТВА], порт не 22
, чтобы я мог отслеживать весь сетевой трафик (кроме сеанса ssh на порту 22). На другом ssh-терминале я выполнил nslookup example.com
, используя каждый раз другой веб-сайт, чтобы он не использовал свой кеш. Вот результаты при следующих настройках:
Настройки 1 (Разные глобальные и DNS-серверы устройств)
resolved.conf
DNS=9.9.9.9
FallbackDNS=149.112.112.112
01-netcfg.yaml
[DEVICE_NAME]:
...
nameservers:
addresses: [8.26.56.26, 8.20.247.20]
Результат:
... [SERVER_NAME] > dns9.quad9.net.domain ... A? [EXAMPLE.COM] (63)
... [SERVER_NAME] > ns1.recursive.dnsbycomodo.com.domain ... A? [EXAMPLE.COM] (63)
... dns9.quad9.net.domain > [SERVER_NAME] ... A [IP_ADDRESS] (56)
... [SERVER_NAME] > dns9.quad9.net.domain ... SOA? [EXAMPLE.COM] (63)
... ns1.recursive.dnsbycomodo.com.domain > [SERVER_NAME] ... A [IP_ADDRESS] (108)
... [SERVER_NAME] > ns1.recursive.dnsbycomodo.com.domain ... SOA? [EXAMPLE.COM] (63)
...
Это были только первые несколько строк, запросов было намного больше, но, как видно, systemd-resolve запрашивает записи ОБА с глобального (Quad9) и устройства (Comodo) DNS-серверов. Поскольку это повторяющаяся активность, я закомментировал серверы имен устройств, чтобы посмотреть, что произойдет.
Настройки 2 (глобальные DNS-серверы и DNS-серверы без устройств)
resolved.conf
DNS=9.9.9.9
FallbackDNS=149.112.112.112
01-netcfg.yaml
[DEVICE_NAME]:
...
# nameservers:
# addresses: [8.26.56.26, 8.20.247.20]
Результат:
... [SERVER_NAME] > dns9.quad9.net.domain ... A? [EXAMPLE.COM] (59)
... dns9.quad9.net.domain > [SERVER_NAME] ... A [IP_ADDRESS] (52)
... [SERVER_NAME] > dns9.quad9.net.domain ... SOA? [EXAMPLE.COM] (59)
...
Это намного лучше. На этот раз он запрашивает только с глобального DNS-сервера (Quad9), и ошибки нет. Что произойдет, если я назначу Quad9 в качестве глобального DNS-сервера и DNS-сервера устройства?
Настройки 3 (одинаковые глобальные DNS-серверы и DNS-серверы устройства)
resolved.conf
DNS=9.9.9.9
FallbackDNS=149.112.112.112
01-netcfg.yaml
[DEVICE_NAME]:
...
nameservers:
addresses: [9.9.9.9, 149.112.112.112] #changed this
Результат:
... [SERVER_NAME] > dns9.quad9.net.domain ... A? [EXAMPLE.COM] (59)
... [SERVER_NAME] > dns9.quad9.net.domain ... A? [EXAMPLE.COM] (59)
... dns9.quad9.net.domain > [SERVER_NAME] ... A [IP_ADDRESS] A [2nd IP_ADDRESS] RRSIG (363)
... [SERVER_NAME] > dns9.quad9.net.domain ... DNSKEY? [EXAMPLE.COM] (59)
... dns9.quad9.net.domain > [SERVER_NAME] ... A [IP_ADDRESS] A [2nd IP_ADDRESS] RRSIG (363)
... [SERVER_NAME] > dns9.quad9.net.domain ... DNSKEY? [EXAMPLE.COM] (59)
... dns9.quad9.net.domain > [SERVER_NAME] ... DNSKEY, DNSKEY, DNSKEY, DNSKEY, RRSIG (1435)
...
Итак, первые два А? запросы отстояли друг от друга на микросекунды. Далее я обычно вижу два запроса для каждого типа записи и обычно два ответа (хотя иногда и нет). Это говорит о том, что даже если IP-адреса для устройства и глобальные одинаковы, он будет обрабатывать их отдельно и дважды запрашивать DNS для записей. Итак, урок усвоен; не делай этого.
Основываясь на этих результатах, я собираюсь удалить все объявления DNS в 01-netcfg.yaml, и полагаться только на глобальные настройки (Настройки 2 из экспериментов). Надеюсь, если кто-то еще столкнется с этим, этот ответ избавит их от необходимости проводить эти эксперименты.