Mam:
- wewnętrzny serwer DNS
ns1.internal
z adresem IP192.168.0.4
. - zewnętrzny serwer DNS z zewnętrzną TLD
mydns.example.com
i wewnętrznym adresem IP192.168.0.5
. Jest dostępny zarówno z Internetu (poprzez statyczną regułę NAT), jak iz sieci lokalnej.
Próbuję skonfigurować mój zewnętrzny serwer DNS, aby przekazywał strefę subzone.mydns.example.com
do wewnętrznego serwera DNS. Wewnętrzny serwer DNS jest autorytatywny dla tej strefy.
Ważne: Nie mogę zmodyfikować wewnętrznej konfiguracji serwera DNS. Mogę go jednak przeczytać, jeśli jest to potrzebne do zdiagnozowania problemu.
Plik /etc/named.conf
na zewnętrznym serwerze DNS:
options {
directory "/var/named";
version "get lost";
recursion yes;
allow-transfer {"none";};
allow-query { any; };
allow-recursion { any; };
};
logging{
channel example_log{
file "/var/log/named/named.log" versions 3 size 2m;
severity info;
print-severity yes;
print-time yes;
print-category yes;
};
category default{
example_log;
};
};
// Zones:
zone "mydns.example.com" {
type master;
file "mydns.example.com.zone";
allow-update{none;};
};
zone "subzone.mydns.example.com" {
type forward;
forwarders { 192.168.0.4; };
};
Plik /var/named/mydns.example.com.zone
na zewnętrznym serwerze DNS:
$TTL 1
$ORIGIN mydns.example.com.
@ IN SOA mydns.example.com. root.mydns.example.com. (
2003080800 ; se = serial number
60 ; ref = refresh
60 ; ret = update retry
60 ; ex = expiry
60 ; min = minimum
)
@ IN NS mydns.example.com.
Więc teraz próbuję rozwiązać niektóre rekordy DNS. Wygląda na to, że strefa zewnętrznego serwera działa.
workstation$ dig mydns.example.com NS +tcp +short
mydns.example.com.
Ale strefa przekazana nie działa:
workstation$ dig subzone.mydns.example.com NS +tcp
; <<>> DiG 9.8.1-P1 <<>> subzone.mydns.example.com NS +tcp
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 36887
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;subzone.mydns.example.com. IN NS
;; AUTHORITY SECTION:
mydns.example.com. 1 IN SOA mydns.example.com. root.mydns.example.com. 2003080800 60 60 60 60
;; Query time: 3 msec
;; SERVER: 91.144.182.3#53(91.144.182.3)
;; WHEN: Thu Jul 19 17:27:54 2012
;; MSG SIZE rcvd: 108
Wyniki są identyczne, gdy polecenia te są wykonywane na zdalnym hoście internetowym i na hoście wewnętrznym.
Jeśli spróbuję rozwiązać subzone.mydns.example.com.
z zewnętrznego serwera nazw ORAZ jawnie określić serwer wewnętrzny, otrzymam:
mydns$ dig @192.168.0.4 subzone.mydns.example.com NS
; <<>> DiG 9.3.6-P1-RedHat-9.3.6-16.P1.el5 <<>> @192.168.0.4 subzone.mydns.example.com NS
; (1 server found)
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 87
;; flags: qr aa rd; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 3
;; QUESTION SECTION:
;subzone.mydns.example.com. IN NS
;; ANSWER SECTION:
subzone.mydns.example.com. 3600 IN NS ns1.internal.
;; ADDITIONAL SECTION:
ns1.internal. 3600 IN A 192.168.0.4
;; Query time: 613 msec
;; SERVER: 192.168.0.4#53(192.168.0.4)
;; WHEN: Thu Jul 19 18:20:55 2012
;; MSG SIZE rcvd: 163
Co jest nie tak? Jak skonfigurować strefę DNS przesyłania dalej, aby działała zgodnie z oczekiwaniami?
subzone IN NS mydns.example.com.
(zakładam, że plik strefy ma również rekord A dla @ = mydns.example.com, prawda?)