Generalnie zawsze mnie irytowało rozwiązywanie domenek przez binda na moim serwerze. Niby SDI, niby 115k2, a jednak jak miałem korzystać z modemu 33k6 to jakoś szybciej się nazwy domen rozwiązywały na komputerach klienckich. Zacząłem się zastanawiać. Co jest odpowiedzialne za resolvowanie nazw na serwerze? Wiadomo, resolv.conf. Usiadłem i zaczełem się zastanawiać…
search wiosenna.com nameserver 127.0.0.1 nameserver 194.204.159.1 nameserver 194.204.152.34
Hm… Czyli najpierw lokalny bind, później "kochane" ns’y tpsy… A jak rozwiązuje sobie domeny spoza świata lokalny bind? Używa resolv.conf? Hm… Chyba nie… Oki, wycinamy z resolv.conf ipki, SIGHUP w named’a i jedziemy. # dig wiosenna.com @0 … Zadziałało, więc już mamy pewność że to nie resolv.conf. So what?
zone "." in {
type hint;
file "root.cache";
};
Czyli 13 ROOT-SERVERS… Popingujmy je. Wiem, mogą mieć zablokowane możliwości pingowania… Z 13 które ja miałem w fabrycznym root.cache odpowiedziało 5:
64 bytes from 192.33.4.12: icmp_seq=0 ttl=242 time=250.402 ms 64 bytes from 192.203.230.10: icmp_seq=0 ttl=53 time=311.281 ms 64 bytes from 192.5.5.241: icmp_seq=0 ttl=54 time=310.181 ms 64 bytes from 192.112.36.4: icmp_seq=0 ttl=240 time=280.216 ms 64 bytes from 198.32.64.12: icmp_seq=0 ttl=242 time=340.989 ms
W przypadku dns i dns2 tpsa.pl czasy te są około 30-40 ms… Więc 10 razy szybciej. Jaki z tego morał? Standardowy Bind skonfigurowany jest na ROOT-SERVERS, co w dzisiejszych czasach raczej nie wróży nam zbyt szybkiej pracy. Nie wierzącym polecam odpalenie iptrafa albo innego ustrojstwa i monitorowanie połączeń UDP. Bind ma głęboko w nosie resolv.conf, co w sumie jest bardzo logiczne. Więc należy jakoś zmusić by korzystał z bliższych ns’ów niż ROOT-SERVERS (naprawdę, dns.tpsa.pl wcale nie jest taki makabryczny). Zmodyfikować mu root.cache? Podobno można, u mnie to słabo pomogło. A może przedefiniować mu strefę "."? To już bardziej logiczne. Pół godziny studiowania wyniku komendy ‘man named.conf’ nasunął mi pewne wnioski. So, usuwamy strefę "." z /etc/named.conf i wpisujemy zamiast niej coś takiego:
zone "." IN {
type forward;
forward only;
forwarders { 194.204.159.1; 194.204.152.34; };
check-names ignore;
// Uwaga! Opcja check-names jest obsługiwana tylko
// przez Bind'a 8.x. W Bindzie 9.x nie jest ona wymagana!
};
Tak zupełnie BTW. ostatnio się zorientowałem że w Bind 9.x (dokładnie 9.2.1 z PLD) można to prościej. Wystarczy w sekcji options { } dopisać (bez konieczności defioniowania strefy ".":
options {
forwarders { 194.204.159.1; 194.204.152.34; };
}
W miejsce 194.204… Należy wpisać IPki serwerów dns z których chcemy korzystać. Polecam ns1.ikp.pl - niestety nie wszystkich on lubi ;). Istnieje także dns.tpi.pl - działa jak narazie całkiem cacy. Dobra. Mniam! Mimo tego iż wygląda na to że bind nie cachuje nic z forwardowanych zapytań (przynajmniej ja tak wnioskowałem), to jednak pamięta wpisy o które się odpytywaliśmy :-). HUPnełem named’a znowu, odpytałem się któryś z root servers o domenkę unroutable.net: Total query time: 5319 msec - no i teraz sobie wyobraź(cie) ile czasu trwało odpytanie root-server’s… Błe… A później się dziwie że mi nie rozwiązuje domenek a przez modem jak ustawiam dns’y providera to prawie odrazu. A wogóle po co mi to? Otóż uparłem się iż w sieci lokalnej będę korzystał z DNS’a na serwerze od maskarady ;)… Po kilku chwilach namysłu z resolv.conf wyciełem wszystkie ipki poza 127.0.0.1 - po co lokalny resolver ma puszczać coś poza serwer?