Как настройки в systemd-resolved влияют на настройки netplan?

Я хотел убедиться, что мой сервер использует 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 (я не знаю, как и возможно ли это)?

0
задан 6 January 2020 в 13:41

1 ответ

Я решил провести несколько экспериментов, чтобы понять поведение 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 из экспериментов). Надеюсь, если кто-то еще столкнется с этим, этот ответ избавит их от необходимости проводить эти эксперименты.

2
ответ дан 31 January 2020 в 17:41

Другие вопросы по тегам:

Похожие вопросы: