Я реализую решение для балансировки нагрузки 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
Попробуйте эту конфигурацию 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;
является настройкой по умолчанию, поэтому вам даже не нужно вводить ее.