Konfiguracja Binda
Przed chwilą spotkałem się z sytuacją, kiedy to właściciel serwera DNS skarżył się na ogromną ilość logów generowaną w krótkim okresie czasu, co doprowadza do niestabilnego działania Binda. Moim podejrzeniem jest, że jego serwer jest używany jako cache dns dla przypadkowych klientów. Poniżej postaram się przedstawić konfigurację serwera DNS (bind 9) obsługującego zarówno domeny (lemat.priv.pl) jak i cache dla sieci lokalnej (za NATem).
Pierwsza rzecz jaką robimy to tworzymy dwa widoki w named.conf - sieć lokalna "internal" i cała reszta "external":
view "internal" { match-clients { 192.168.0.0/24; 127.0.0.0/8; }; allow-query { 192.168.0.0/24; 127.0.0.0/8; }; allow-transfer { none; }; allow-notify { none; }; allow-recursion { 192.168.0.0/24; 127.0.0.0/8; }; recursion yes; zone "." { type hint; file "named.ca"; }; zone "0.0.127.in-addr.arpa" { type master; file "named.local"; }; zone "0.168.192.in-addr.arpa" { type master; file "named.192.168.0"; }; zone "lemat.priv.pl" { notify no; type master; file "intern.lemat.priv.pl"; }; }; view "external" { match-clients { any; }; recursion no; allow-query { none; }; allow-transfer { key "ns1-ns3"; }; allow-notify { key "ns1-ns3"; }; zone "lemat.priv.pl" { type master; notify yes; file "extern.lemat.priv.pl"; allow-query { any; };
};
};
Czemu to robimy - chodzi o to, aby sieć wewnętrzna - tu na przykładzie 192.168.0.0/24 oraz sam serwer 127.0.0.1:
- miała większe uprawnienia niż sieć zewnętrzna
- miała inną konfigurację stref oraz miała ich więcej
Ważna jest kolejność, najpierw "internal", potem "external" - bo zakres IP w opcji match-clients dla internal jest podzbiorem tej samej opcji w external. Można oczywiście zamienić miejscami i w external wykluczyć (match-clients { !192.168.0.0/24; any; };) sieć wewnętrzną.
A teraz kilka słów wytłumaczenia:
- match-clients zawiera zakresy IP, które dokonują podziału na sieć wewnętrzną i resztę świata.
- allow-query w tym przypadku "internal" identyczne jak match-clients definiuje kto uzyska odpowiedź na swoje pytania. W przypadku "external" najpierw jest "none" a potem w definicji konkretnej strefy jest "all". Od binda 9.4.2 w górę ma to znaczenie.
- allow-transfer i allow-notify zawiera adresy IP albo klucze dla secondary DNSa (o tym napiszę później).
- allow-recursion i recursion yes/no definiuje zachowanie serwera DNS jeżeli nie znajdzie w keszu odpowiedzi. Przy włączonym recursion serwer sam jej poszuka. Przy wyłączonym powie tylko gdzie klient powinien poszukać - zwalenie roboty na inny serwer oczywiście odciąży nasz i ma znaczenie dla bezpieczeństwa naszego serwera.
Strefy w danych widokach - jak widać w internal jest ich więcej, przede wszystkim jest tam strefa typu hint ".", co pozwoli klientowi znaleźć główne serwery DNS jeżeli nasz nie będzie mu wystarczał. Następnie są tam domeny odwrotne dla sieci lokalnych i localhosta - to nie powinno być widoczne z seci zewnętrznych prawda? Na końcu jest strefa domeny lemat.priv.pl - zauważcie, że wprawdzie w external też jest ta domena, ale różni się ona nazwa pliku strefy.
Dla internal:
$TTL 86400 ; 1 day @ IN SOA ns1.lemat.priv.pl. root.lemat.priv.pl. ( 2007010500 ; Serial 86400 ; Refresh 24h 3600 ; Retry 1h 604800 ; Expire 1 week 86400 ) ; Minimum 1 day IN NS ns1 IN A 192.168.0.1 IN MX 10 mail IN TXT "v=spf1 mx -all" ns1 IN A 192.168.0.1 ns2 IN A 83.17.15.82 athlon IN A 192.168.0.1 www CNAME @ mail IN A 192.168.0.1 arch IN A 192.168.0.2 ubuntu IN A 192.168.0.12
Dla external:
$TTL 86400 ; 1 day @ 86400 IN SOA ns1.lemat.priv.pl. root.lemat.priv.pl. ( 2007011600 ; Serial 86400 ; Refresh 12h 900 ; Retry 15min 604800 ; Expire 1 week 86400 ) ; Minimum 1 day 604800 IN NS ns1 604800 IN NS ns2 IN A 83.19.156.142 7200 IN MX 10 mail 604800 IN TXT "v=spf1 mx -all" * 604800 IN TXT "v=spf1 -all" ns1 604800 IN A 83.19.156.142 ns2 604800 IN A 83.17.15.82 mail 7200 IN A 83.19.156.142 www CNAME @
Jak widać plik dla sieci wewnętrznej zawiera podobne wpisy jak przy external, ale jest ich więcej - dochodzą hosty w sieci lokalnej. Oraz ich rekordy A są lokalne.
Komentarze:
Mam problem, o którym wspominasz. Mimo konfiguracji szczelnej tak mi się wydaje. Serwer generuje dużą ilość logów informujących o niezrealizowanym zapytaniu co spowalnia działanie bind'a.
Skorzystałem z Twojego opisu. Zrobiłem widoki.
Nic się nie zmieniło. Może coś podpowiesz ?
Pozdrawiam
PiotrW