Я пытаюсь настроить BIND, чтобы он улавливал все запросы к нему и указывал их на определенный набор серверов NS и конкретную запись A.
У меня около 500 доменов, и я добавляю новые по 10-15 в день, поэтому я не хочу явно добавлять зону для каждого домена.
Моя текущая настройка: в моем named.conf у меня есть представление (с именем external) со следующей зоной в нем:
zone "." {
type master;
file "ext.zone";
};
Это соответствует всем запросам.
ext.zone - это:
$TTL 3600 @ IN SOA . root.nsdomain.com. ( 1 ; Serial 3600 ; Refresh 300 ; Retry 3600 ; Expire 300 ) ; Negative Cache TTL IN NS ns1.example.com IN NS ns2.example.com ns1 IN A 192.0.2.4 ns2 IN A 192.0.2.5 *. IN A 192.0.2.6
Итак, цель: для всех NS-запросов возвращать ns1.example.com
и ns2.example.com
для всех запросов A, кроме тех, где это ns1.example.com
или ns2.example.com
, возвращение 192.0.2.6
. Для ns1.example.com
возвращение 192.0.2.4
, для ns2.example.com
возвращение 192.0.2.5
.
Это почти работает, единственная проблема в том, что когда я копаюсь, я получаю:
dig @localhost somedomain.example ; > DiG 9.3.6-P1-RedHat-9.3.6-4.P1.el5_5.3 > @localhost somedomain.example ; (1 server found) ;; global options: printcmd ;; Got answer: ;; opcode: QUERY, status: NOERROR, id: 37733 ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2 ;; QUESTION SECTION: ;somedomain.example. IN A ;; ANSWER SECTION: somedomain.example. 3600 IN A 192.0.2.6 // as expected ;; AUTHORITY SECTION: . 3600 IN NS ns1.example.com. // expected, I don't know if the "." at the start is bad, though. . 3600 IN NS ns2.example.com. // see above. ;; ADDITIONAL SECTION: ns1.example.com. 3600 IN A 192.0.2.6 // not expected, this should be 192.0.2.4 ns2.example.com. 3600 IN A 192.0.2.6 // not expected, this should be 192.0.2.5
Как это исправить? Я делаю что-то ужасное? Есть лучший способ сделать это?
Ваше происхождение для зоны .
в соответствии с вашей конфигурацией. Вы создаете записи для ns1.
и ns2.
вместо того ns1.example.com.
и ns2.example.com.
поскольку ns1.example.com
и ns2.example.com
не определены, им соответствует подстановочный знак.
РЕДАКТИРОВАТЬ: вот редактирование вашей конфигурации и зоны:
zone "example.com." {
type master;
file "ext.zone";
};
внешняя зона:
$TTL 3600
@ IN SOA ns1 root (
1 ; Serial
3600 ; Refresh
300 ; Retry
3600 ; Expire
300 ) ; Negative Cache TTL
IN NS ns1
IN NS ns2
IN A 192.0.2.6
ns1 IN A 192.0.2.4
ns2 IN A 192.0.2.5
* IN A 192.0.2.6
Все в зоне относится к имени зоны в названной конфигурации, поэтому добавление второй зоны просто указывает на тот же файл:
zone "example.net." {
type master;
file "ext.zone";
};
Чтобы установить поддомен в bind
вы должны использовать следующий формат:
name.tld. IN A IP # main domain ip
*.name.tld. IN A IP # wildcard subdomains ip
Пример:
mydomain.com. IN A 1.1.1.1
*.mydomain.com. IN A 1.1.1.1
На основе вашей конфигурации ns1.example.com
является 192.0.2.4
и ns2.example.com
является 192.0.2.5
. Вам необходимо настроить разрешение имен серверов NS в example.com
zone, чтобы получить правильные IP-адреса.
Надеюсь, я ясно выражаюсь. Вернись ко мне, если тебе понадобится дополнительная информация.
Подстановочные знаки DNS могут вызвать проблемы!
поэтому я не хочу явно добавлять зону для каждого домена.
Есть много вариантов - от сценариев SHELL до DNS-серверов на базе SQL.
UPD. (2019-11): Итак, как я уже сказал 8 лет назад, Сценарий SHELL - это способ пойти, и это было подтверждено предложенным решением принятого ответа «добавление записи в зону» - ясно не на основе использования подстановочных знаков. ;-)
В 2019 году еще проще найти ресурсы, объясняющие недостатки подстановочных знаков DNS, и хотя большинство из них были написаны «на заре Интернета», они по-прежнему имеют определенную ценность. Для е. g., RFC1912 упоминает несколько вещей, связанных с использованием подстановочных знаков DNS. Основная проблема четко объясняется как «…
Подстановочные знаки MX могут быть плохими, потому что они делают некоторые операции успешными, а вместо этого должны терпеть неудачу. … »
В нем также есть некоторые примеры из реальной жизни, немного старомодные.