Я установил DNS-сервер BIND на centos 7. Я создал запись основной зоны, она следующая:
$ttl 38400 loool.ro. IN SOA ns1.loool.ro. owner.yahoo.com. ( 1421842090 10800 3600 604800 38400 ) loool.ro. IN NS loool.ro. loool.ro. IN A 86.34.156.51 loool.ro. IN MX 10 loool.ro. loool.ro. IN NS ns1.loool.ro. ns1.loool.ro. IN A 86.34.156.51
86.34.156.51 - это общедоступный IP-адрес, через который я могу получить доступ к серверу. Порт 53 открыт, проверяется бесплатным онлайн-чекером портов. Служба named.service прослушивает порт 53. Доменное имя зарегистрировано, и ns1 тоже. Но когда я проверяю с помощью инструмента dnslookup, ответ ns1.loool.ro не приходит, таймаут через 3 секунды.
Конфигурационный файл сервера BIND имеет следующий вид:
options { listen-on port 53 { any; }; #listen-on-v6 port 53 { ::1; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; allow-transfer { none; }; recursion yes; dnssec-enable yes; dnssec-validation yes; dnssec-lookaside auto; /* Path to ISC DLV key */ bindkeys-file "/etc/named.iscdlv.key"; managed-keys-directory "/var/named/dynamic"; pid-file "/run/named/named.pid"; session-keyfile "/run/named/session.key"; also-notify { }; allow-query { any; }; }; logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; zone "." IN { type hint; file "named.ca"; }; zone "loool.ro" { type master; file "/var/named/loool.ro.hosts"; };
Если я проверю с помощью dig с localhost, ответ приходит и исправляет, но с другого хоста не приходит. Если я установил allow-query с любого на localhost, файл messages.log регистрирует отклоненные запросы и IP-адрес, поэтому запросы приходят.
При запуске named.service журнал messages.log показывает следующее:
21 января, 14:31:35 сервер с именем [38627]: используется диапазон портов UDP / IPv4 по умолчанию: [1024, 65535]
21 января, 14:31:35 сервер с именем [38627]: используется диапазон портов UDP / IPv6 по умолчанию: [1024, 65535]
21 января, 14:31:35 сервер с именем [38627]: прослушивание интерфейса IPv4 lo, 127.0.0.1 # 53
21 января, 14:31:35 сервер с именем [38627]: прослушивание интерфейса IPv4 em1, 10.10.10.100 # 53
21 января, 14:31:35 сервер с именем [38627]: прослушивание интерфейса IPv4 em1, 86.34.156.51 # 53
С помощью allow-query = localhost показывает следующее:
Jan 21 14:30:55 servera named[38403]: client 109.99.188.88#54374 (loool.ro): query 'loool.ro/A/IN' denied Jan 21 14:31:08 servera named[38403]: client 74.125.17.211#53668 (loool.ro): query 'loool.ro/AAAA/IN' denied
В чем проблема? Если разрешить-запрос есть, в messages.log нет журнала ошибок. Это будет проблема с сетевой конфигурацией или проблема связана с Linux (порт или selinux) и сервером BIND (misconfig)? Отбрасывает ли BIND запросы?
Копать землю:
loool.ro. 0 IN NS ns1.loool.ro. ;;
Received 71 bytes from 192.162.16.20#53(sec-dns-a.rotld.ro) in 88 ms
loool.ro. 38400 IN A 86.34.156.51
loool.ro. 38400 IN NS ns1.loool.ro.
loool.ro. 38400 IN NS loool.ro.
;; Received 101 bytes from 10.10.10.100#53(ns1.loool.ro) in 1 ms
Как предположил Эндрю Б., я захватил пакеты на локальном хосте (где расположен DNS-сервер), вот результат, надеюсь, кто-нибудь знает, в чем проблема или что здесь не так:
$tcpdump -i em1 -vvv -s 0 -l -n port 53 tcpdump: listening on em1, link-type EN10MB (Ethernet), capture size 65535 bytes 82.79.24.76.14761 > 10.10.10.100.domain: [udp sum ok] 3532 [1au] A? loool.ro. ar: . OPT UDPsize=4096 OK (37) 22:50:49.723204 IP (tos 0x0, ttl 64, id 63258, offset 0, flags [none], proto UDP (17), length 115) 10.10.10.100.domain > 82.79.24.76.14761: [udp sum ok] 3532*- q: A? loool.ro. 1/1/2 loool.ro. [10h40m] A 86.34.156.51 ns: loool.ro. [10h40m] NS ns1.loool.ro. ar: ns1.loool.ro. [10h40m] A 86.34.156.51, . OPT UDPsize=4096 OK (87) 22:50:49.987990 IP (tos 0x0, ttl 64, id 35514, offset 0, flags [DF], proto UDP (17), length 72) 10.10.10.100.52857 > 193.231.100.130.domain: [udp sum ok] 2042+ PTR? 38.124.41.103.in-addr.arpa. (44)
Ваш сервер имен не может быть запрошен из Интернета. Клей присутствует, но это не поможет, если ваш сервер имен не может получить ответы.
Вот конец +trace
вывод аналогичен lVlint67, но с +additional
установлен флаг:
loool.ro. 86400 IN NS ns1.loool.ro.
ns1.loool.ro. 86400 IN A 86.34.156.51
dig: couldn't get address for 'ns1.loool.ro': no more
Клейкая пластинка есть, но что-то еще не так. Если я сам попытаюсь запросить этот сервер имен ...
$ dig @86.34.156.51 loool.ro
; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> @86.34.156.51 loool.ro
; (1 server found)
;; global options: +cmd
;; connection timed out; no servers could be reached
Сервер имен недоступен, поэтому домен мертв для Интернета. Кроме того, у вас определена только одна запись NS. Для надлежащей отказоустойчивости вам понадобятся как минимум два сервера имен, которые расположены в разных физических местах. Веб-сайт регистратора действительно не должен позволять вам применять эту конфигурацию. :(
Я также рекомендую прочитать Следует ли размещать собственные серверы имен?.
iptables может блокировать соединение. Просто разрешите имя через брандмауэр.
iptables -I INPUT 1 -p tcp -m tcp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -I INPUT 2 -p udp -m udp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --sport 53:65535 --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p udp -m udp --sport 53:65535 --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
Похоже, вам не хватает подходящего приклеивать пластинки у вашего регистратора.
$ dig +trace loool.ro
; <<>> DiG 9.9.5 <<>> +trace loool.ro
;; global options: +cmd
. 929 IN NS j.root-servers.net.
. 929 IN NS m.root-servers.net.
. 929 IN NS e.root-servers.net.
. 929 IN NS f.root-servers.net.
. 929 IN NS l.root-servers.net.
. 929 IN NS g.root-servers.net.
. 929 IN NS h.root-servers.net.
. 929 IN NS k.root-servers.net.
. 929 IN NS c.root-servers.net.
. 929 IN NS a.root-servers.net.
. 929 IN NS d.root-servers.net.
. 929 IN NS i.root-servers.net.
. 929 IN NS b.root-servers.net.
. 929 IN RRSIG NS 8 0 518400 20150131050000 20150121040000 16665 . X95MjU0E0exFVnq9oEJBi/Dih/wwyDhI0NoJ10bj1jthr6kjVElQgZTH l9XepwZOzSWiTzBXrhiMCaAd4MBIiDpNVHl5r8P0BAiw7GfB2HAQkEcr WPTcJe9Y0JX6ruSbcD93gWbvd4/rHZXpgB13y6hWJNlY0zHuu7Iqv4h9 H8s=
;; Received 397 bytes from 8.8.8.8#53(8.8.8.8) in 1025 ms
ro. 172800 IN NS dns-at.rotld.ro.
ro. 172800 IN NS dns-ro.denic.de.
ro. 172800 IN NS sns-pb.isc.org.
ro. 172800 IN NS primary.rotld.ro.
ro. 172800 IN NS sec-dns-a.rotld.ro.
ro. 172800 IN NS sec-dns-b.rotld.ro.
ro. 86400 IN NSEC rocks. NS RRSIG NSEC
ro. 86400 IN RRSIG NSEC 8 1 86400 20150131050000 20150121040000 16665 . d0xAIZZ3+EiqsKePxYP/ym8OEvp4bywmHIUTSigk6CUie8512rpuvXM2 vAL5RRuXDdCCG/0nP4bfR6cz0dgN9lTLdJz68kd4nRYZcTsz5ZLZkQ1T zmyiKEzzRK7PAVUTTfMG94NrHzIIBwLTYdhOqHPWHN4TQC8NYf2hJlyQ CqI=
;; Received 613 bytes from 193.0.14.129#53(k.root-servers.net) in 1130 ms
loool.ro. 86400 IN NS ns1.loool.ro.
dig: couldn't get address for 'ns1.loool.ro': no more