Проблемы с запуском нескольких DNS-серверов BIND за одним общедоступным IP-адресом

Я реализую решение для балансировки нагрузки DNS-запросов между несколькими рекурсивными DNS-серверами привязки для увеличения лимита QPS

Каждая виртуальная машина centos имеет пространство имен gi, настроенное с помощью обратной связи для ns, установленного на один общедоступный IP-адрес DNS

. Каждый DNS-сервер объявляет один и тот же IP-адрес DNS моей сети через пиринги bgp, настроенные на моем маршрутизаторе quagga

, все входящие запросы балансируются через ядро сети использует функцию максимальных путей bgp

Однако только один DNS-сервер Bind будет запрашивать IP-адрес DNS, другой просто вернет servfail (это не статично, если я убью bgp-пиринги на Server1, запросы будут успешными, то же самое происходит, если я убиваю пиринги на Server2)однако они не будут работать в тандеме.

Я заметил одну вещь: если я делаю

ip netns exec gi dig @DNSIP +trace

ip netns exec gi dig @DNSIP  cloudflare.com +trace

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-16.P2.el7_8.6 <<>> @DNSIP cloudflare.com +trace
; (1 server found)
;; global options: +cmd
.           509520  IN  NS  e.root-servers.net.
.           509520  IN  NS  c.root-servers.net.
.           509520  IN  NS  f.root-servers.net.
.           509520  IN  NS  j.root-servers.net.
.           509520  IN  NS  b.root-servers.net.
.           509520  IN  NS  i.root-servers.net.
.           509520  IN  NS  h.root-servers.net.
.           509520  IN  NS  m.root-servers.net.
.           509520  IN  NS  k.root-servers.net.
.           509520  IN  NS  a.root-servers.net.
.           509520  IN  NS  l.root-servers.net.
.           509520  IN  NS  d.root-servers.net.
.           509520  IN  NS  g.root-servers.net.
.           509520  IN  RRSIG   NS 8 0 (didn't include the key)

, тогда как Server2 не возвращает RRSIG, даже если оба файла named.conf имеют dnssec-enable yes и dnssec-validation yes

ip netns exec gi dig @DNSIP  cloudflare.com +trace

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-16.P2.el7_8.6 <<>> @DNSIP cloudflare.com +trace
; (1 server found)
;; global options: +cmd
.           518400  IN  NS  c.root-servers.net.
.           518400  IN  NS  k.root-servers.net.
.           518400  IN  NS  g.root-servers.net.
.           518400  IN  NS  d.root-servers.net.
.           518400  IN  NS  a.root-servers.net.
.           518400  IN  NS  j.root-servers.net.
.           518400  IN  NS  e.root-servers.net.
.           518400  IN  NS  h.root-servers.net.
.           518400  IN  NS  f.root-servers.net.
.           518400  IN  NS  i.root-servers.net.
.           518400  IN  NS  m.root-servers.net.
.           518400  IN  NS  b.root-servers.net.
.           518400  IN  NS  l.root-servers.net.

Моя конфигурация dnssec выглядит следующим образом:

    dnssec-enable no;
    dnssec-validation no;

    /* Path to ISC DLV key */
    bindkeys-file "/etc/named.iscdlv.key";

    managed-keys-directory "/var/named/dynamic";

Если я отключу dnssec в моем файле named.conf, DNS-серверы будут работать в тандеме, и я могу достичь своей целевой цели в 20 000 запросов в секунду, однако с включенным dnssec это не сработает.

Кто-нибудь сталкивался с подобной проблемой раньше, является ли это ограничением BIND за одним PublicIP? или, как я подозреваю, проблема с настройкой DNSSEC

2
задан 11 November 2020 в 10:28
1 ответ

Попробуйте эту конфигурацию DNSsec на всех ваших преобразователей DNS:

options {
   //dnssec-enable no; - remove the line, the option has been obsoleted
   dnssec-validation auto;
}

Параметры dnssec-enable устарели (см. ARM, стр. 156), а также устарела проверка DNSsec lookaside (DLV) (см. ARM, стр. 156).

Я не думаю, что для рекурсивных распознавателей вам нужно что-то еще.

Обратите внимание, что dnssec-validation auto; является настройкой по умолчанию, поэтому вам даже не нужно вводить ее.

2
ответ дан 30 November 2020 в 15:34

Теги

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