Pěkný popis s obrázky najdete na stránkách Dana Kaminského, včetně chyb, které objevil.
nameserver 2a02:4::dead:beef nameserver 195.113.257.14 search kgb.edu
Někteří uživatelé mají na svém notebooku spuštěný svůj rekurzivní server (PowerDNS?), čert ví proč.
Vyzkoušejte si práci s dig(1); nezapomeňte, že existuje i zkompilovaný pro Windows.
# emerge -Kav bind-tools
# yum install bind-utils
$ dig nix.cz $ dig -t aaaa nix.cz @8.8.8.8 $ dig -t any staff.cesnet.cz $ dig -x 8.8.8.8 $ dig +short ausfahrt.de $ dig +trace +recurse www.ms.mff.cuni.cz $ dig -c ch -t txt version.bind. $ dig -c ch -t txt id.server. $ export NEXT=storkhole.cz $ while true; do NEXT=$(dig +short -t nsec $NEXT | cut -d" " -f1); echo $NEXT; done $ dig -t axfr mff.cuni.cz @ns.ms.mff.cuni.cz. $ dig -t ixfr=NUM mff.cuni.cz @ns.ms.mff.cuni.cz. $ dig +nssearch mff.cuni.cz
nameserver 99.145.275.244
domain potazmo.cz
search potazmo.cz
lookup file bind
family inet6 inet4
options tcp
1 1 1 1 1 1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ID | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ |QR| Opcode |AA|TC|RD|RA| Z | RCODE | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | QDCOUNT | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ANCOUNT | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | NSCOUNT | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ARCOUNT | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
Note that the contents of the answer section may have multiple owner names because of aliases. The AA bit corresponds to the name which matches the query name, or the first owner name in the answer section.
;; Truncated, retrying in TCP mode.
0, NoError | No error condition |
1, FormErr | Format error - The name server was unable to interpret the query. |
2, ServFail | Server failure - The name server was unable to process this query due to a problem with the name server. |
3, NXDomain | Name Error - Meaningful only for responses from an authoritative name server, this code signifies that the domain name referenced in the query does not exist. |
4, NotImp | Not Implemented - The name server does not support the requested kind of query. |
5, Refused | Refused - The name server refuses to perform the specified operation for policy reasons. For example, a name server may not wish to provide the information to the particular requester, or a name server may not wish to perform a particular operation (e.g., zone transfer) for particular data. |
RFC 2136 | Dynamic DNS Updates |
---|---|
6, YXDomain | Name Exists when it should not |
7, YXRRSet | RR Set Exists when it should not |
8, NXRRSet | RR Set that should exist does not |
9, NotAuth | Server Not Authoritative for zone |
10, NotZone | Name not contained in zone |
Spojit rekurzivní a autoritativní část do jednoho programu je lákavé, ale implementace se typicky dost liší. DNS není jen o tom rozparsovat paket a sesmolit odpověď!
Napsat autoritativní server je výrazně jednodušší než napsar rekurzor. Autoritativní servery musejí být výrazně odolnější
(DNS amplification), protože (by definition) musejí být dostupné celému světu.
Není dobré rate-limitovat hloupě.
Rekurzivní servery musejí mít konektivitu s rychlou odezvou do všech částí sítě. Doporučuje se jich mít více, geograficky
oddělených a na různém software.
If DNS doesn't work, pretty much nothing else does.
Pro vlastence a experimentátory (a příznivce GPLv3).
server: interface: 0.0.0.0 access-control: 172.16.NN.0/24 allow access-control: 192.168.NN.0/24 allow access-control: 192.168.NN+100.0/24 allow ### privatni reverzy v AS112 ### neleakujte privatni adresy do internetu! # private-domain: "domena.swi" # local-zone: "168.192.in-addr.arpa." nodefault stub-zone: name: "doména.swi" stub-addr: 172.15.259.1 stub-zone: name: "259.168.192.in.addr.arpa" stub-addr: 172.15.259.1 # pokud máte na druhém konci povolené rekurze (a jsou potřeba) forward-zone: name: "swi" forward-addr: 172.16.0.1
# emerge -av bind
# yum install bind-chroot # less /etc/sysconfig/named
acl moji-klienti { ... }; options { recursion yes; allow-recursion { moji-klienti; }; }; zone "." { type hint; file "etc/root.hint"; }; |
options { forward only; forwarders { ip1; ip2; ip3; }; }; zone "doména.swi" { type forward; forwarders { 192.0.2.1; }; }; zone "2.0.192.in-addr.arpa" { type forward; forwarders { 192.0.2.1; }; }; |
server: ip-address: 192.0.2.259 zone: name: "moje.zona.cz" zonefile: "soubor.s.moji.zonou" # /var/nsd/zones/ # podle toho, co chci za funkcionalitu (master/slave) # notify/allow-notify/request-xfr/provide-xfr/
# nsd-control start # nsd-control stop # nsd-control reload # nsd-control write doména.swi # nsd-control notify doména.swi
nsd-control(8) - vzdálené ovládání a sledování běhu (nastavení v sekci SET UP)
/var/named/; flagy v rc.conf.local(5)
/var/named/chroot/; flagy v /etc/sysconfig/named
/var/bind/; flagy v /etc/conf.d/named; dá to dost práce :-(
allow-transfer, match-clients, allow-recursion umí používat acl {};, ale also-notify je neumí!
options { listen-on { 192.168.77.7; } listen-on-v6 { 2002:C3P0:R2D2:123::7; }; allow-recursion { any; }; allow-update { none; }; allow-transfer { masteri; spravcovske-pocitace; }; forwarders { 172.16.0.1; }; query-source 192.168.77.7; dnssec-enable no; };
# klíč s názvem "rndc-key" vygenerujete pomocí rndc-confgen(8) include "/etc/rndc.key"; # typicky bývá přednastavené a není potřeba měnit! controls { inet 127.0.0.1 port 953 allow { localnets; localhost; } keys { "muj-rndc-klic"; }; };
logging { # ještě-víc-lame servery než BIND channel lame-servers { null; }; };
zone "potazmo.swi." IN { type master; file "master/potazmo.swi"; allow-transfer { slavens.kolega.swi; druhy.potazmo.swi; }; notify yes; }; view "blbouni" { match-clients { blbec.kotec.edu; blbeček.domeček.gov; }; recursion yes; server 8.8.8.8 { bogus yes; } zone "chytráci.bl" { type master; file "master/chytráci.bl"; } }
zone "zakaznik1.org." IN { type master; file "master/zakaznik1/zakaznik1.org"; }; zone "zakaznik1.stara.domena." IN { type slave; file "slave/zakaznik1/zakaznik1.stara.domena"; masters { 172.16.42.304; 2.20.22.202; }; }; zone "2.0.192.in-addr.arpa." IN { type master; file "master/rev.192.0.2"; }; zone "f.e.e.b.d.a.e.d.0.0.a.2.IP6.ARPA." IN { type master; file "master/rev.2a00.dead.beef"; };
$ORIGIN pelikan.swi. $TTL 1h @ IN SOA dns-hlavni.pelikan.swi. martin.pelikan.swi. ( 2011110301 ; seriové číslo 1h ; jak často musí slave provádět refresh (máme NOTIFY) 10m ; jak dlouho musí slave počkat před update retry 3w ; expirace autoritativity odpovědí ze slave 1h ; jak dlouho budou ostatní resolvery cachovat NXdomain (RFC 2308) ); @ IN NS dns-hlavni @ IN NS dns-zalozni dns-hlavni IN A 172.16.259.13 dns-zalozni IN A 192.168.259.13 (zbytek zóny)manuál k zónovým souborům u BIND
# named-checkconf -t /var/named/ # nsd-checkconf /etc/nsd.conf # unbound-checkconf # named-checkzone <název zóny> <soubor se zónou> # rndc reload # nsd-control reload
$ORIGIN 2.0.192.IN-ADDR.ARPA. ; rekneme, ze chceme oddelegovat 192.0.2.128/25: 128/25 IN NS nas.name.server. 129 IN CNAME 129.128/25 130 IN CNAME 130.128/25 ... 255 IN CNAME 255.128/25a potom už jen nastavíme novou zónu někde jinde:
$ORIGIN 128/25.2.0.192.IN-ADDR.ARPA. (soa, ns) 129 IN PTR muj-server1.moje.domena. 130 IN PTR muj-server2.moje.domena. ...
dig -t axfr <zóna> @<odkud>
# dnssec-keygen -nHOST -ahmac-sha1 -b128 <nazev-klice>
key muj-klic { algorithm hmac-sha1; secret "blem"; }; zone "moje-zona" { allow-transfer { key muj-klic; 172.16.266.12; }; }; server 10.1.2.3 { keys { muj-klic; }; };
/etc/nsd.conf: key: name: "muj-klic" algorithm: hmac-sha1 secret: "blem" zone: provide-xfr <odkud> muj-klic provide-xfr <odkud2> NOKEY
#!/bin/sh KEYGEN=/usr/sbin/dnssec-keygen SIGNER=/usr/sbin/dnssec-signzone /bin/rm -f "K$1"* echo -e "g/generated-[ZK]SK\$/d\nw\nq\n" | /bin/ed -s $1 # !!! /dev/random tady z nakyho duvodu nefunguje ani po hodne I/O operacich ZSK=`${KEYGEN} -a RSASHA1 -b 1280 -n ZONE -r /dev/urandom $1` KSK=`${KEYGEN} -a RSASHA1 -b 2048 -n ZONE -r /dev/urandom -f KSK $1` echo "\$include ${ZSK}.key ; generated-ZSK" >> $1 echo "\$include ${KSK}.key ; generated-KSK" >> $1 ${SIGNER} -o $1 -k ${KSK} $1 ${ZSK}.key /usr/bin/scp "keyset-$1"* server1:~/ /usr/bin/scp "keyset-$1"* server2:~/(v praxi má jeden KSK delší platnost)
sleuth https://www.dns-oarc.net/tools/dsc common errors rfc1912 (jen 14 stranek, to zvladnete! :-)) cache snooping - odpovidat na no-RD pakety zaznama z cache, nebo ne? IDN -- vizte peterku dnscurve