1. DNS Benutzung: Klient-Seite 1.1. Konfiguration der DNS Domain Name Service, bind /etc/hosts Wie in HOSTS.TXT: manuelle Einstellung von Rechneradressen und Rechnernamen. Zum Beispiel: 127.0.0.1 localhost.localdomain localhost 111.2.3.4 rechner.beispiel.net /etc/hostname Die Name des eigenen Rechners steht drin. /etc/host.conf Konfigurationsdatei der resolver library. Stellt z. B. die reihenfolge der Auflösungsversuche ein. Wichtigste Schlüsselwörter: order Reihenfolge der Auflösungmethoden multi ob alle oder nur eine Adresse zurückgegeben wird Z. B.: order hosts, bind multi on /etc/nsswitch.conf Eine Datei die die Einstellungen der Systemdatenbanken und Name Service Switch leistet. Hier kann man einstellen, was das resolver library beim Auflösen von Rechnernamen machen soll. /etc/resolv.conf Enthält die IP-Adressen der DNS-Servers, sowie die Name unseres Domains: domain unsere Domainname: so können lokale Rechner auch mit ihre kurze Name benennt werden. search Liste von Domains (auch für Kurzbenennungen). Die Möglichkeiten werden von links nach rechts probiert. nameserver Das ist die wichtigste Option: wenn eine Zeile mit diesem Wort beginnt, enthält sie die IP-Adresse eines DNS-Servers, wie hier: domain beispiel.net nameserver 1.1.1.1 nameserver 2.2.2.2 1.2. DNS-Funktionen in bash-scripts [...]$ host heise.de heise.de has address 193.99.144.80 heise.de mail is handled by 10 relay.heise.de. 1
[...]$ nslookup heise.de Server: 131.188.30.106 Address: 131.188.30.106#53 Non-authoritative answer: Name: heise.de Address: 193.99.144.80 [...]$ 1.3. DNS-Funktionen in der Programmierungssprache PHP gethostbyname(), gethostbynamel(), gethostbyaddr() <?php $ip = gethostbyname('www.met.hu'); echo $ip; echo "Du bist:".gethostbyaddr($remote_addr)."\n\n";?> 1.4. DNS-Funktionen in der Programmierungssprache C gethostbyname(), gethostbyaddr() #include <stdio.h> #include <netdb.h> #include <netinet/in.h> int main(int argc, char *argv[]){ struct hostent *h; if ((h=gethostbyname(argv[1])) == NULL) exit(1); printf("name: %s\n", h->h_name); printf("ip : %s\n",inet_ntoa(*((struct in_addr*)h->h_addr))); return 0; } 1.5. DNS-Funktionen in Java (java.net) static InetAddress getbyname(string host) //Determines the IP address of a host, given the host's name. String gethostname() //Gets the host name for this IP address. 1.6. DNS-Funktionen in Perl ($cname, $aliase, $adr_typ, $laenge, @adrss) = gethostbyname($name); #!/usr/bin/perl $name = "faui05.informatik.uni-erlangen.de"; ($adresse) = (gethostbyname($name))[4]; print(join(".", unpack("c4", $adresse)), "\n"); 2
2. DNS-Server Einstellung 2.1 bind beschaffen Die Abkürzung "bind" steht für Berkeley Internet Name Domain. Die neueste version kann man auch von der Webseite des Internet Systems Consortiums runterladen: http://www.isc.org/index.pl?/sw/bind/ [...]$ wget ftp://ftp.isc.org/isc/bind9/9.3.1/bind-9.3.1.tar.gz Auf diese Seite kann man auch Dokumentation finden. 2.2 bind installieren [...]$ tar -zxvf bind-9.3.1.tar.gz [...]$ cd bind-9.3.1 [...]$./configure; make; make install 2.3 Einstellung von bind Die Konfigurationsdatei hat den Namen /etc/named.conf. Sie hat eine Syntax ähnlich wie die Programmierungssprache C. Exampel: die Einstellungsdatei des Servers sirius.cab.u-szeged.hu: acl cab{ // Access Control List: damit kann man 160.114.54/23; // eine Abkürzung für eine Zone // definieren acl local{ 127/8; // ist gleich: 127.0.0.0-127.255.255.255 // also nur die erste 8 bits sind festgelegt options { directory "/var/named"; allow-query{ local; cab; //wo die DNS-Daten sind //wer den Server benutzen darf #noch eine Möglichkeit: "recursion no" ODER "allow-recursion" logging { category lame-servers { null; // was geloggt wird //don't log these at all zone "." { type hint; file "named.root"; /* Angaben zur root-zone*/ // das benutzt man nur für diese Zone /*dieser Datei enthält die 3
IP-Adressen für die DNS-Servers der root Zone*/ zone "0.0.127.in-addr.arpa"{ type master; // Angaben zur localhost-zone /* das Server hat eine "master" Kopie von die DNS-Daten und ist imstande für andere Server weiterzugeben*/ file "named.local"; // zonefile für localhost zone "u-szeged.hu"{ // Infos zur Zone "u-szeged.hu" type slave; // wir als "slave" haben hier nur eine Kopie file "sec/u-szeged.hu"; masters{ //hier sind die Master-Server aufgelistet 160.114.8.16; notify no; zone "114.160.in-addr.arpa"{ //"Reverse Query" (IP-Adresse > Domainname) type slave; file "sec/u-szeged.hu.rev"; masters{ 160.114.8.16; notify no; 2.4 "zone files": die DNS-Datenbanken Sie befinden sich meistens in /var/named/, oder in /etc/bind/. Zum Beispiel: /var/named/named.root : ; This file holds the information on root name servers needed to ; initialize cache of Internet domain name servers ; (e.g. reference this file in the "cache. <file>" ; configuration file of BIND domain name servers). ; ; formerly NS.INTERNIC.NET. 3600000 IN NS A.ROOT-SERVERS.NET. A.ROOT-SERVERS.NET. 3600000 A 198.41.0.4 ; ; formerly NS1.ISI.EDU. 3600000 NS B.ROOT-SERVERS.NET. B.ROOT-SERVERS.NET. 3600000 A 192.228.79.201 ; ;... ; ; operated by WIDE 4
. 3600000 NS M.ROOT-SERVERS.NET. M.ROOT-SERVERS.NET. 3600000 A 202.12.27.33 ; End of File /var/named/named.local : zonefile für local loopback interface @ IN SOA localhost. root.localhost. ( 1997022700 ; serial 28800 ; refresh 14400 ; retry 3600000 ; expire 86400 ; default_ttl ) @ IN NS localhost. 1 IN PTR localhost. /var/named/u-szeged.hu : zonefile für Zone u-szeged.hu ; BIND version in.named LOCAL-050616.09:53:33 Thu Jun 16 09:53:33 PDT 2005 ; BIND version Generic Patch-5.9-May 2002 ; zone 'u-szeged.hu' last serial 200510271 ; from 160.114.8.16:53 (local 160.114.55.240) using AXFR at Sat Nov 5 18:27:152005 ; NOT TSIG verified $ORIGIN hu. u-szeged 43200 IN SOA huni6.cc.u-szeged.hu. borus.huni6.cc.u-szeged.hu. ( 200511051 86400 14400 2592000 43200 ) 43200 IN NS dns.cc.u-szeged.hu. 43200 IN NS ns2.sztaki.hu. d2251 43200 IN A 160.114.142.251 d2252 43200 IN A 160.114.142.252 d2253 43200 IN A 160.114.142.253 l2254 43200 IN A 160.114.142.254 $ORIGIN u-szeged.hu. www 43200 IN CNAME portal.etr.u-szeged.hu. www2 43200 IN CNAME hermes.cc.u-szeged.hu. zfk 43200 IN MX 100 orion.fwall.u-szeged.hu. 43200 IN MX 200 eos.fwall.u-szeged.hu. 43200 IN MX 300 sol.cc.u-szeged.hu. /var/named/u-szeged.hu.rev : reverse-query zonefile für Zone u-szeged.hu ; BIND version in.named LOCAL-040218.23:52:42 Wed Feb 18 23:52:42 PST 2004 ; BIND version Generic Patch-5.9-May 2002 ; zone '114.160.in-addr.arpa' last serial 200510251 ; from 160.114.8.16:53 (local 160.114.55.240) using AXFR at Thu Oct 27 11:43:432005 ; NOT TSIG verified $ORIGIN 160.in-addr.arpa. 5
114 43200 IN SOA huni6.cc.u-szeged.hu. borus.huni6.cc.u-szeged.hu. ( 200510271 86400 14400 2592000 43200 ) 43200 IN NS dns.cc.u-szeged.hu. 43200 IN NS ns2.sztaki.hu. 43200 IN NS frakk.cs.jgytf.u-szeged.hu. 43200 IN NS huni6.cc.u-szeged.hu. 96 43200 IN NS dns.cc.u-szeged.hu. 43200 IN NS dns1.szote.u-szeged.hu. 97 43200 IN NS dns.cc.u-szeged.hu. 43200 IN NS dns1.szote.u-szeged.hu. 98 43200 IN NS dns.cc.u-szeged.hu. 43200 IN NS dns1.szote.u-szeged.hu. 99 43200 IN NS dns.cc.u-szeged.hu. 43200 IN NS dns1.szote.u-szeged.hu. 2.5 Master Server mit Subdomäne-Delegation named.conf: options { allow-transfer {"none"; zone "example.com" in{ type master; file "master/master.example.com"; // explicitly allow slave allow-transfer {192.168.0.4; // optional - we act as the slave (secondary) for the delegated //domain zone "us.example.com" IN { type slave; file "slave/slave.us.example.com"; masters {10.10.0.24; master/master.example.com: ; zone fragment for example.com ; name servers in the same zone $TTL 2d ; default TTL is 2 days $ORIGIN example.com. @ IN SOA ns1.example.com. hostmaster.example.com. ( 2003080800 ; serial number 2h ; refresh = 2 hours 15M ; update retry = 15 minutes 3W12h ; expiry = 3 weeks + 12 hours 2h20M ; minimum = 2 hours + 20 minutes ) 6
; main domain name servers IN NS ns1.example.com. IN NS ns2.example.com. ; main domain mail servers IN MX 10 mail.example.com. ns1 IN A 192.168.0.3 ns2 IN A 192.168.0.4 mail IN A 192.168.0.5 bill IN A 192.168.0.6 ; sub-domain definitions $ORIGIN us.example.com. @ IN NS ns3.us.example.com. ; the next name server points to ns1 above IN NS ns1.example.com. ; sub-domain address records for name server only - glue record ns3 IN A 10.10.0.24 ; 'glue' record ; the record above could have been written as ; ns3.us.example.com. IN A 10.10.0.24 if it's less confusing Subdomäne named.conf: options { allow-transfer {"none"; zone "us.example.com" in{ type master; file "master/master.us.example.com"; // explicitly allow slave allow-transfer {192.168.0.3; Subdom\"ane master.us.example.com: ; zone fragment for sub-domain us.example.com ; name servers in the same zone $TTL 2d ; default TTL = 2 days $ORIGIN us.example.com. @ IN SOA ns3.us.example.com. hostmaster.us.example.com.( 2003080800 ;serial number 2h ;refresh = 2 hours 15M ;update retry = 15 minutes 3W12h ;expiry = 3 weeks + 12 hours 2h20M ;minimum = 2 hours + 20 minutes 7
) ; sub-domain name servers IN NS ns3.us.example.com. IN NS ns1.example.com. ; see notes below ; sub-domain mail server IN MX 10 mail.us.example.com. ; above record could have been written as ; IN MX 10 mail ; A records for name servers above ns3 IN A 10.10.0.24 ns1.example.com. IN A 192.168.0.3 ; 'glue' record ; A record for mail server above mail IN A 10.10.0.25 ; next record defines our ftp server ftp IN A 10.10.0.28 ; the record above could have been written as ; ftp.us.example.com. A 10.10.0.24 if it's less confusing ; other sub-domain records 2.6 Sicherheitsmassnahme chroot Aus Sicherheitsgründen sollte man bind nicht mit root-privilegen und ganz eingeschränkt laufen lassen: wir brauchen eine neue Benutzer{gruppe} für bind [...]$ groupadd -g 53 named [...]$ useradd -u 53 -g named -c "bind user mit chroot" \ -d /var/named/jail -m named alle wichtige Dateinen und die Verzeichnisstruktur muss kopiert werden: [...]$ cd ~named [...:/var/named/jail]$ mkdir -p {dev,etc,var/run,var/named/slave} [...:/var/named/jail]$ chown named:named var/named/slave [...:/var/named/jail]$ cp -Rav /var/named/data var/named [...:/var/named/jail]$ cp -av /dev/{null,random} dev/ [...:/var/named/jail]$ cp -av \ /etc/{localtime,named.conf,rndc.key} etc/ Zugriffe zur Dateien und Verzeichnisse müssen auch eingestellt werden: [...:/var/named/jail]$ chown root:root. [...:/var/named/jail]$ chmod 0755. [...:/var/named/jail]$ chown named:named var/named/data [...:/var/named/jail]$ chmod 0700 var/named/data [...:/var/named/jail]$ chown named:named var/run So wird letzlich bind mit chroot gestartet: [...]$ /usr/sbin/named -u named -t /var/named/jail \ -c /etc/named.conf 8