Linux.named
Überblick: lokaler DNS Server (via bind)
DNS-Adressen wechseln ganz im Gegensatz zu HTML-Inhalten nicht so
häufig. Deshalb will ich einen Caching-BIND Server einsetzten. Ich
will nicht, dass jede (wiederholte) DNS Anfrage ins Internet rausgepustet
wird! Bis sich alle Datenbanken weltweit angeglichen haben kann schon mal
ein halber Tag vergehen, also können wir auch mit gutem Gewissens DNS-Anfragen-Cache, etwa mit einer Haltbarkeit der cache inhalte von 10 min ?!. Deshalb
ist ein Caching unbedenklich, und auch besonders lohnend, da einige UDP/TCP
Verbindungsaufbau-Vorgänge (Phase der Namensauflösung) nun lokal abgewickelt werden können!
Die Idee liegt nahe, hey man könnte den Linux-Server doch auch als
Name-Server (DNS-relay) einsetzen. Egal welcher Provider dann angewählt ist
(=welcher nameserver auch immer angegeben werden muss) der lokale DNS-Server
leitet alle Anfragen immer an die richtige Adresse (nämlich an den Nameserver
draussen im Internet) weiter. Wie die jeweiligen Namenserver heissen steht ja
in der forwarders-Sektion der named.conf. Die Clients müssexn nix mehr umstellen (im Feld
Nameserver) da Gateway UND Nameserver die gleiche Zieladresse haben. Hier ist die Lösung:
Voraussetzungen
Bei dem DNS Server selbst
- Eigener Hostname ...
a) yast->network services->hostnames b) yast->netword devices->networksettings->Hostnames
- ... und zugehörige Domäne muss gesetzt sein. Hostname ist nach der Standardinstallation "linux" und sollte auf einen sinnvollen Wert geändert werden. Die Domäne des Host sollte in unserem Beispiel auf "pcworld" gesetzt werden (Sorry, dies kommt leider noch aus der Zeit, in der es nur PCs und MACs gab). Sinnvollere Domänennamen sind Firmennamen oder Abteilungsnamen.
- Nameserver Eintrag muss leer bleiben!
Bei den Clients
- Hostname und Domäne setzen.
- Zusätzlich die IP des Nameservers angeben. Rechts daneben steht auch eine Nameserver Domain. Auch diese muss auf "pcworld" gesetzt werden. Damit der client weiss, wie er lokale Namen auflösen soll. Die Internet Namensauflösung würde auch ohne Domain Eintrag klappen.
Konfiguration
Zuerst werden die Pakete [bind9] aus der Serie [n] sowie die [bind9-utils] installiert.
chkconfig --add named
Um so ab und an mal einen "reload" der zonen zu erwingen muss nicht unbedingt der nameserver mit
rcnamed restart
Neu gestartet werden. Es reicht eigentlich mit
rndc reload
dem Nameserver einen freundlichen Hinweis zu geben.
/etc/named.conf
Danach in der Datei "/etc/named.conf" folgende, mit den Pfeilen markierten
Anpassungen eintragen:
ACHTUNG: Bei meinem System wird "named.conf" automatisiert erzeugt. Dazu wird als Vorlage "named.conf.saved.by.dsl0" oder so benutzt. In diesem Fall muss man dort seinen Änderungen machen, da sonst bei ip-up oder ip-down alle wieder überschrieben wird. Lustig oder. Fraglich ist das verhalten natürlich im Zusammenhang mit einer ISDN ausfallverbindung, die über ein andere Interface läuft! Wird dann die Anlage einer "named.config.saved.by.ippp0" oder so nötig??
------------------------------------------------------------------------- options { -> auth-nxdomain no; # The directory statement defines the name server's # working directory directory "/var/lib/named"; # The forwarders record contains a list of servers to # which queries should be forwarded. Enable this line and # modify the IP-address to your provider's name server. # Up to three servers may be listed. # forwarders { 10.11.12.13; 10.11.12.14; }; # forwarders { 194.25.2.129; 212.185.248.148; }; # nur Suse < 11.1 -> forwarders { 217.237.151.161; 217.237.151.33; }; # nur SuSe > 11.0 -> include "/etc/named.d/forwarders.conf"; # Enable the next entry to prefer usage of the name # server declared in the forwarders section. -> # forward first; # The listen-on record contains a list of local network # interfaces to listen on. Optionally the port can be # specified. Default is to listen on all interfaces found # on your system. The default port is 53. # listen-on port 53 { 127.0.0.1; }; -> listen-on port 53 { 127.0.0.1; 192.168.100.181; }; # The listen-on-v6 record enables or disables listening # on IPV6 interfaces. Allowed values are 'any' and 'none' # or a list of addresses. IPv6 can only be used with # kernel 2.4 in this release. listen-on-v6 { any; }; # The next three statements may be needed if a firewall # stands between the local server and the internet. # query-source address * port 53; # transfer-source * port 53; # notify-source * port 53; # The allow-query record contains a list of networks or # IP-addresses to accept and deny queries from. The # default is to allow queries from all hosts. # allow-query { 127.0.0.1; }; -> allow-query { localnets; }; # If notify is set to yes (default), notify messages are # sent to other name servers when the the zone data is # changed. Instead of setting a global 'notify' statement # in the 'options' section, a separate 'notify' can be # added to each zone definition. notify no; }; # The following three zone definitions don't need any modification. # The first one defines localhost while the second defines the # reverse lookup for localhost. The last zone "." is the # definition of the root name servers. zone "localhost" in { type master; file "localhost.zone"; }; zone "0.0.127.in-addr.arpa" in { type master; file "127.0.0.zone"; }; zone "." in { type hint; file "root.hint"; }; # You can insert further zone records for your own domains below. -> zone "pcworld" in { -> notify no; -> type master; -> file "pcworld.zone"; -> allow-query {127.0.0.1; 192.168.100/24; }; -> allow-transfer { none; }; -> }; -> zone "100.168.192.in-addr.arpa" in { -> type master; -> file "192.168.100.zone"; -> }; ---------------------------------------------------------------------
/var/lib/named/~domäne~.zone
- Anlegen der Zonendateien:
Das Verzeichnis, in dem die Zonendateien angelegt werden, wird in der Datei "/etc/named.conf" in der Sektion "options" mit dem Schlüssel "directory" (Standardmäßig ist dies "/var/lib/named/") angegeben
/var/lib/named/pcworld.zone
Vor den Rechnernamen dürfen sich keine Leerzeichen befinden.
$TTL 2D @ IN SOA raib181.pcworld. root.pcworld. ( 2005080303 ; serial 2D ; refresh 4H ; retry 6W ; expiry 1W ) ; minimum IN NS raib181.pcworld. localhost IN A 127.0.0.1 *.Thorsten IN A 192.168.100.11
- Änderungen in der Zonen Datei
Nach einfügen des neuen Rechners (nicht vergessen, den serial um eines zu erhöhen) oder Änderungen müssen leider die betroffenen systeme named und nmb von den Änderungen benachrichtigt werden (das sollte in Zukunft der keepcon sebst-tätig machen):
rndc reload rcnmb restart
/var/lib/named/~SubNetz~.zone
/var/lib/named/192.168.100.zone
Vor den Rechnernummern (Letzter Teil der IP-Adresse) dürfen sich keine Leerzeichen befinden.
$TTL 2D @ IN SOA raib181.pcworld. root.pcworld. ( 2005080303 ; serial 2D ; refresh 4H ; retry 6W ; expiry 1W ) ; minimum 100.168.192.in-addr.arpa. IN NS localhost. 11 IN PTR *.Thorsten.pcworld.
Nun wird mit dem Befehl rcnamed restart die neue DNS-Konfiguration eingelesen und aktiviert
/etc/resolf.conf
Jetzt ist noch in der Datei "/etc/resolv.conf" anzugeben, dass man zur Namensauflösung den lokalen DNS-Server benutzt.
------------------------------------------------------------------------ domain ~domain~ search nameserver 127.0.0.1 ------------------------------------------------------------------------
/etc/sysconfig/network/config
SuSE<11.0
Damit die "/etc/resolv.conf" nicht bei jeder Einwahl wieder ?überschrieben wird muss der Parameter
joe /etc/sysconfig/network/config MODIFY_RESOLV_CONF_DYNAMICALLY="no" MODIFY_NAMED_CONF_DYNAMICALLY="yes" # Dadurch werden die "forwarders" in der"/etc/named.conf" bei jeder Einwahl aktualisiert
Damit wieder alles seine Richtigkeit hat muss nun SuSEconfig ausgeführt werden (nicht sicher, ob das notwendig ist)
SuSEconfig
SuSE>11.0
joe /etc/sysconfig/network/config # die "auto" Policy ermöglicht überhaupt erst Änderungen von Dateien # durch netconfig # NETCONFIG_DNS_POLICY="auto"
# wir wollen, dass /etc/name.d/forwarders.conf automatisch geschrieben # wird. # Nicht vergessen: in named.conf bei den forwardern include "/etc/named.d/forwarders.conf" # NETCONFIG_DNS_FORWARDER="bind"
-> nicht verges