Alle Seiten
Auf dieser Seite werden alle Einzelseiten automatisch
zu einer Seite zusammengefasst. Diese Seite enthält
also keine zusätzlichen Inhalte.
Linux
Im Jahre 1998 begann ich, mich mit dem Betriebssystem Linux
zu beschäftigen. Die erste Distribution war die Distribution Suse
Linux 5.3. Danach folgten weitere Suse-Linux-Versionen bis hin
zur aktuellen OpenSuse-
und Ubuntu-Version.
Die Linux-Rechner sind im Laufe der Jahre zum festen Bestandteil
meines lokalen Netzwerks geworden und laufen zuverlässig und stabil.
Die Gründe für Linux-Rechner waren:
- Einrichtung eines lokalen Netzwerks
- Einrichtung eines "Internet im kleinen" ("Intranet")
- Faszination für ein Open-Source-Betriebssystem
- Berufliche Gründe
- Neugier
- Sehnsucht nach der vertrauten Kommandozeile
- Die aufgeschnappte Bemerkung "Linux kann alles" ;-)
Auf den Linux-Seiten meiner früheren Homepage waren Anleitungen
zur Linux-Installation und -Konfiguration. Mit der Weiterentwicklung
der Linux-Distributionen ist die Installation und Konfiguration
immer komfortabler und einfacher geworden, so dass einige Seiten
überholt waren. Deshalb habe ich sie bei der Überarbeitung dieser
Homepage weggelassen und bitte um Verständnis dafür.
Vielleicht konnten diese Seiten im Laufe der vielen Jahre dem
einen oder anderen etwas beim Einstieg in Linux helfen. Ich danke
hiermit allen, die mir per E-Mail Lob und Anregungen zu diesen
Seiten zukommen ließen.
Einige ausgewählte, ausführlicher behandelte Themen werden
weiterhin auf dieser Homepage zu finden sein.
DHCP-Server
Ein DHCP-Server (DHCP = Dynamic Host Configuration Protocol)
in einem Netzwerk teilt den anderen Rechnern die Angaben mit,
die diese für den Betrieb im Netzwerk benötigen, also z.B. die
IP-Adressen, die Netzmaske, den Domainnamen, die IP-Adressen
des Gateways, der Nameserver und des WINS-Servers.
Der Vorteil eines DHCP-Servers liegt darin, dass die Rechner
im Netzwerk diese Angaben von einem zentralen Server bekommen.
Ändern sich diese Daten, können sie neu vom Server geholt
werden (spätestens beim Reboot), ohne dass sie auf jedem Rechner
einzeln neu eingegeben werden müssen. Das ist insbesondere bei
größeren Netzwerken ein entscheidender Vorteil.
Die Rechner im lokalen Netz, die sich die Netzwerkangaben vom
DHCP-Server holen, können sich jedoch nur solange austauschen,
wie auch der DHCP-Server läuft. Man wird deshalb je nach Art,
Einrichtung (Redundanz) und Größe des lokalen Netzes überlegen,
bei welchen Rechnern man die Netzwerkangaben fest einträgt
und bei welchen nicht.
Insbesondere für transportable Rechner wie Laptops, die an
verschiedenen Netzwerken angeschlossen werden, ist ein DHCP-Server
im lokalen Netz von Vorteil. Durch die entsprechende Konfiguration
des DHCP-Servers können solchen mobilen Rechnern jedoch ebenfalls
feste IP-Adressen zugeordnet werden.
Installation und Einrichtung des DHCP-Servers
-
Die Einrichtung des DCHP-Servers soll hier anhand eines
Beispiels eines Servers beschrieben werden, der zwei
Netzwerk-Interfaces mit den IP-Adressen 192.168.0.1 (eth0)
und 192.168.1.1 (eth1) für die beiden Subnets 192.168.0.0/24
und 192.168.1.0/24 hat (s. Bild 1). Die Konfiguration kann leicht
an ein Netzwerk, das aus nur einem Subnet besteht, angepasst werden.
Das Interface eth2 ist z.B. für den Anschluss eines DSL-Routers
vorgesehen und soll nicht vom DHCP-Server angesprochen werden.
Bild 1: Linux-Server mit DHCP-Server
-
Mit YaST das Paket "dhcp-server (n)" installieren.
-
Steuerung des DHCP-Servers:
- rcdhcp start (Start des DHCP-Servers)
- rcdhcp stop (Stop des DHCP-Servers)
- rcdhcp restart (Neustart des DHCP-Servers)
- rcdhcp status (Status des DHCP-Servers)
-
In der Datei /etc/sysconfig/dhcpd für die Variable
"DHCP_INTERFACE" die Netzwerk-Interfaces eintragen, an denen
der DHCP-Server "lauschen" soll, also z.B. "eth0 eth1".
-
Der DHCP-Server kann auch mit dem Kommando "dhcpd eth0 eth1"
gestartet werden. Mit dem Kommando "dhcpd -d eth0 eth1" werden
zusätzlich Debug-Informationen ausgegeben.
-
Mit dem Kommando "insserv dhcpd" wird der DHCP-Server
beim nächsten Booten des Rechners automatisch gestartet.
-
Die einzige Konfigurationsdatei des DHCP-Servers ist die
Datei /etc/dhcpd.conf. Wenn sie geändert wird, muss der Server
neu gestartet werden, damit die Änderungen wirksam werden.
# File /etc/dhcpd.conf
# Abschnitt Global (für alle Abschnitte gültig)
server-identifier 192.168.0.1;
option domain-name "local.netw";
default-lease-time 600; # zehn Minuten
max-lease-time 3600; # eine Stunde
ddns-update-style none;
# Abschnitt für Subnet 0 (an eth0)
subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.51 192.168.0.60;
option broadcast-address 192.168.0.255;
option subnet-mask 255.255.255.0;
option domain-name-servers 192.168.0.1;
option routers 192.168.0.1;
option netbios-name-servers 192.168.0.1;
host win1pc {
hardware ethernet 00:12:34:56:78:9A; # MAC-Adresse
fixed-address 192.168.0.90; # feste IP-Adresse
default-lease-time 172800; # zwei Tage
max-lease-time 604800; # eine Woche
}
}
# Abschnitt für Subnet 1 (an eth1)
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.61 192.168.1.70;
option broadcast-address 192.168.1.255;
option subnet-mask 255.255.255.0;
option domain-name-servers 192.168.1.1;
option routers 192.168.1.1;
option netbios-name-servers 192.168.1.1;
host win2pc {
hardware ethernet 00:22:44:66:88:AA; # MAC-Adresse
fixed-address 192.168.1.91; # feste IP-Adresse
default-lease-time 172800; # zwei Tage
max-lease-time 604800; # eine Woche
}
}
-
Im ersten Abschnitt sind die globalen Parameter
aufgeführt, die für alle weiteren Abschnitte gelten.
Danach folgen die Abschnitte für das Subnet 0 und die
Hosts im Subnet 0, die feste IP-Adressen erhalten sollen.
Anschließend erfolgen die Angaben für das Subnet 1
in gleicher Weise.
-
Der Parameter "server-identifier" muss vorhanden sein,
wenn der Server mehr als eine Netzwerkkarte hat. Als Parameter
soll die IP-Adresse der ersten Netzwerkkarte des Servers
eingetragen werden.
-
Die Angaben "domain-name", "broadcast-address",
"subnet-mask", "domain-name-servers", "routers"
und "netbios-name-servers" werden an die DHCP-Clients
(also an die Rechner im Netzwerk) übermittelt.
-
Für den Router (= Gateway) ist die feste IP-Adresse
des Linux-Servers angegeben, ebenso für den Nameserver
und den WINS-Server, die ja auf dem Linux-Server laufen.
-
Die "default-lease-time" ist der Standardwert, die
"max-lease-time" der Maximalwert für die Gültigkeit
der übermittelten IP-Adressen (in Sekunden). Welche
Werte sinnvoll sind, hängt vom jeweiligen Netzwerk ab,
also davon, ob ausreichend IP-Adressen für alle Rechner
vorhanden sind und wie oft Rechner gewechselt werden.
Die Zeitspanne reicht von Minuten bis hin zu Wochen
oder Monaten.
-
In den Abschnitten "subnet" befinden sich die
spezifischen Angaben für die Subnets. Der Parameter
"range" gibt einen Bereich von IP-Adressen vor, die den
Hosts dynamisch zugeordnet werden können. Wenn die Rechner
im Netz auch mit Namen angesprochen werden sollen, müssen
alle möglichen Namen dieses Bereichs natürlich auch
in den Zone-Dateien des Nameservers aufgeführt
werden.
-
In den Abschnitten "host" werden einzelnen Rechnern
feste IP-Adressen zugeordnet (die sich natürlich nicht
in dem "range"-Bereich befinden dürfen). Zur Identifikation
der Rechner müssen unter den Parametern "hardware ethernet"
die Hardwareadressen der Netzwerkkarten (MAC-Adressen) angegeben
werden. Diese Adressen kann man unter Windows mit dem Kommando
"ipconfig /all", unter Linux mit dem Kommando "ifconfig"
ermitteln.
-
Sowohl unter Linux als auch unter Windows kann man die
Adressen der Netzwerkkarten für die anderen Rechner
des Netzes mit dem Kommando "arp -a" auflisten. Wenn der
gesuchte Rechner in der Liste fehlt, genügt es, ihn
"anzupingen", damit er in die Liste aufgenommen wird.
Ein Ping-Rundruf ergibt dann eine vollständige Liste.
-
Um die Konfiguration zu testen, sollte man die Lease-Zeiten
auf einen kurzen Wert von wenigen Minuten setzen und dabei die
Logdatei "/var/log/messages" auf dem Linux-Server beobachten.
Sind die IP-Adressen erst einmal erfolgreich vergeben, machen
sich eventuelle Fehler bei großen Lease-Zeiten erst sehr spät
bemerkbar.
Konfiguration der Clients
Die anderen Rechner im Netzwerk sollen sich nun die Netzwerkangaben
vom DHCP-Server holen.
Bei Windows-Rechnern kann man unter "Systemsteuerung / Netzwerkverbindungen /
LAN-Verbindung / Eigenschaften / Internetprotokoll / Eigenschaften"
die Einstellung "IP-Adresse automatisch beziehen" vornehmen.
Mit dem Kommando "ipconfig /all" werden die Daten, die der
DHCP-Server dem Windows-PC übermittelt, direkt angezeigt.
"ipconfig /help" zeigt die Kommandooptionen, um die Netzwerkdaten
freizugeben bzw. zu aktualisieren. Diese Vorgänge kann man auf dem
Linux-Server in der Logdatei /var/log/messages (mit dem Kommando
"tail -f /var/log/messages") gut verfolgen.
Auf Linux-Rechnern kann man mit YaST unter "Netzwerkgeräte /
Netzwerkkarte" die "Automatische Adressenkonfiguration" für
ein Interface auswählen.
Wenn man den Linux-Rechner neu startet, kann man im Bootlog
verfolgen, wie sich der Linux-DHCP-Client mit dem Linux-DHCP-Server
"unterhält".
Links
Internet Software Consortium ...
DHCP ... Server, Client, Relay Agent
Dank
... an M., der mich auf die
DHCP-Möglichkeiten ("I-Tüpfelchen") hingewiesen und mit seiner
Konfigurationsdatei zu dieser Seite beigetragen hat. (22.05.2002)
Nameserver BIND
Wenn sich im lokalen Netzwerk mehrere Rechner befinden, ist es sinnvoll,
auf dem Linux-Server einen Nameserver einzurichten. Dies hat den Vorteil, dass
man die Namen für die verschiedenen Rechner des lokalen Netzes zentral
und nur einmal einzutragen braucht. Ohne Nameserver müsste man diese
Einträge in den "hosts"-Dateien jedes einzelnen Rechners vornehmen.
Der Nameserver beantwortet alle Anfragen, die er selber beantworten
kann. Alle anderen Anfragen leitet er an andere, äußere Nameserver
weiter. Dies sind zumeist die Nameserver des eigenen Providers.
Damit der Nameserver Anfragen beantworten kann, wird für jede Domäne
eine Zonendatei und eine zugehörige Datei für das Revers-Lookup
benötigt. In diesen Dateien sind dann die Namen und IP-Adressen
der Hosts der Domäne verzeichnet. Für das hier beschriebene lokale
Netz soll beispielhaft der Name der Domäne "local.netw" lauten. Es kann
aber auch jeder andere Name verwendet werden.
Einrichtung des Nameservers
-
Mit YaST Paket bind9 (n) installieren. BIND ist der
Standard-Nameserver.
-
Die Konfigurationsdatei /etc/named.conf wird um die
externen Nameserver und die Einträge für die Zonen- und
Revers-Dateien erweitert.
(siehe Anhang 1).
Wenn man einen Router zur Verbindung zum Internet verwendet,
und auf diesem ein Nameserver läuft, kann man auch den Router
als externen Nameserver eintragen. Der Router holt sich die
Adressen der Nameserver des Providers bei der Einwahl selbst,
so dass der Router immer die aktuellen Nameserveradressen hat.
Der Eintrag des externen Nameservers in der Datei /etc/named.conf
kann dann fest auf den Router eingestellt bleiben.
-
Im Verzeichnis /var/named werden die zusätzlichen Zonen- und
Reversdateien angelegt.
-
Die Datei /var/named/localnetw.zone wird für die Domäne
local.netw für die Namensauflösung eingerichtet.
(siehe Anhang 2).
-
Die Datei /var/named/localnetw.rev wird für die Domäne
local.netw für das Revers-Lookup eingerichtet.
(siehe Anhang 3).
-
Die Dateinamen "localnetw" können dabei beliebig
gewählt werden, müssen aber mit den Bezeichnungen
in der Datei /etc/named.conf übereinstimmen.
-
Die Dateien *.zone und *.rev müssen sorgfältig erstellt
werden, da sie offenbar etwas empfindlich gegen falsche
Zeichen sind. Auszuprobieren ist ggf. auch, Tabs statt
Spaces zu verwenden.
-
Im Verzeichnis /var/lib/named sind bereits die Zonen-
und Revers-Dateien für "localhost", /var/named/localhost.zone
und /var/named/127.0.0.zone vorhanden.
-
In der Datei /var/named/root.hint stehen die Root-Nameserver.
An diese Root-Nameserver wendet sich der lokale Nameserver, wenn
er die Anfragen weder selbst beantworten kann noch Antworten
von den eingetragenen externen Nameservern bekommmt.
Anhand der Zonendateien wird augenfällig, dass die Namen
www, irc, ftp, mail usw., die man so oft im Browser eingibt,
nichts anderes sind als Alias-Namen für Hosts.
-
Bei der Netzwerkkonfiguration des Linux-Servers, auf dem
der Nameserver läuft, wird nun der eigene Server als Nameserver
eingetragen. Damit richtet dieser Rechner alle Nameserveranfragen
zunächst an den eigenen Nameserver (also an den, der auf ihm selber
läuft).
-
Mit dem Kommando "insserv named" wird der Nameserver beim
Booten bereits mit gestartet.
-
Der Nameserver kann über folgende Kommandos gesteuert werden:
- rcnamed start (Start des Nameservers)
- rcnamed stop (Stop des Nameservers)
- rcnamed restart (Restart des Nameservers)
- rcnamed status (Status des Nameservers ausgeben)
Nach einer Änderung der Konfiguration des Nameservers
muss dieser neu gestartet werden.
-
Ein Test, z.B. mit "ping" zu einem bekannten Internethost,
sollte nun zeigen, ob der so eingerichtete Nameserver wie
gewünscht funktioniert.
-
Wenn im LAN ein Nameserver läuft, brauchen die Rechner
des LAN nicht in die Hosts-Dateien der einzelnen Rechner
eingetragen zu werden. Wenn man jedoch Namen in die Hosts-Dateien
einträgt, werden diese bei der Namensauflösung vorrangig vor dem
Nameserver verwendet. Man kann also die Hosts-Datei auf dem
eigenen PC verwenden, um die im Nameserver eingetragenen Namen
zu "überschreiben".
Auf einem Windows-PC ist die Hosts-Datei c:\windows\hosts, auf
einem Linux-PC /etc/hosts. Beispiel für die zusätzlichen Einträge
in einer Hosts-Datei:
192.168.0.1 winpc.local.netw winpc
192.168.0.2 linuxpc.local.netw linuxpc
192.168.0.3 otherpc.local.netw hugo
In der dritten Spalte der Hosts-Dateien stehen die Aliasnamen,
die beliebig sein können.
Nameserver-Einstellungen im lokalen Netz:
Auf den anderen Rechnern des lokalen Netzes wird nun der Linux-Server,
auf dem der Nameserver läuft, als Nameserver eingetragen. Wenn auf dem
Linux-Server auch ein DHCP-Server läuft, kann die Nameserveradresse
auch automatisch bezogen werden.
Unter Windows ist die Nameserverkonfiguration unter
"Systemeinstellungen / Netzwerkverbindungen" zu finden.
Links
Internet Software Consortium ...
BIND ...
Domain Name System Server
Anhang 1: Datei /etc/named.conf (Auszug)
# File /etc/named.conf
options {
directory "/var/named";
# ...
forwarders {
# Dieser Abschnitt enthält die IP-Adressen der Nameserver,
# an die der lokale Nameserver diejenigen Anfragen
# weiterschickt, die er nicht selbst beantworten kann.
# In der Regel sind dies die Nameserver des Providers.
# Externe Nameserver (Bsp.)
123.123.123.123;
234.234.234.234;
# Wenn ein Router zur Einwahl ins Internet verwendet wird,
# auf dem ein Nameserver läuft, kann dieser auch als
# externer Nameserver eingetragen werden (Bsp.):
# 192.168.0.100
# ...
};
};
# zone files (standardmäßig)
zone "." IN {
type hint;
file "root.hint";
};
zone "localhost" IN {
type master;
file "localhost.zone";
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "127.0.0.zone";
};
# Weitere zone files (für das lokale Netz)
zone "local.netw" IN {
type master;
file "localnetw.zone";
};
zone "168.192.in-addr.arpa" IN {
type master;
file "localnetw.rev";
};
Anhang 2: Datei /var/named/localnetw.zone
; File /var/named/localnetw.zone
;
; $ORIGIN local.netw
;
$TTL 1D
@ IN SOA linuxpc.local.netw. root.local.netw. (
3 ; serial (bei Aenderungen inkrementieren)
3H ; refresh
15M ; retry
1W ; expire
1D ) ; minimum
;
;name server
IN NS linuxpc.local.netw.
;
;mail
IN MX 10 linuxpc.local.netw.
;
;host addresses
;
winpc IN A 192.168.0.1
linuxpc IN A 192.168.0.2
otherpc IN A 192.168.0.3
;
;
;aliases
;
www IN CNAME linuxpc
irc IN CNAME linuxpc
mail IN CNAME linuxpc
ftp IN CNAME linuxpc
news IN CNAME linuxpc
ntp IN CNAME linuxpc
Anhang 3: Datei /var/named/localnetw.rev
; File /var/named/localnetw.rev
;
$TTL 1D
@ IN SOA linuxpc.local.netw. root.local.netw. (
3 ; serial (bei Aenderungen inkrementieren)
3H ; refresh
15M ; retry
1W ; expire
1D ) ; minimum
;
; $ORIGIN 168.192.in-addr.arpa.
;
IN NS linuxpc.local.netw.
;
1.0 IN PTR winpc.local.netw.
2.0 IN PTR linuxpc.local.netw.
3.0 IN PTR otherpc.local.netw.
Zeitserver NTPD
Laufen mehrere Rechner zusammen in einem Netzwerk, ist es
nach einer Weile etwas irritierend, wenn die Zeitangaben auf
diesen Rechnern unterschiedlich sind. Um zum Beispiel Ereignisse
in Logdateien auf verschiedenen Rechnern einander zuordnen zu
können, ist ein zumindest sekundengenauer Zeitabgleich
zwischen den Rechnern wünschenswert.
Da das Nachstellen der Systemzeiten von Hand unerquicklich
ist, versucht man, sich diese Arbeit von den Rechnern abnehmen
zu lassen. Dieses lässt sich mit den Programmen "netdate"
bzw. "ntpdate" oder mit dem NTP-Dämon NTPD bewerkstelligen,
die zudem noch die genaue Zeit aus dem Internet beziehen
können.
Programm "netdate"
Das Programm "netdate" holt sich Uhrzeit und Datum von den
angegebenen Zeitservern, sucht sich dann den "besten" aus und stellt
die Systemzeit nach. Auf welche Weise netdate den "besten" Zeitserver
ermittelt, ist in der Manpage zu "netdate" beschrieben.
-
Aufruf (weitere Optionen siehe "man netdate"):
netdate [protocol] hostname...
wobei für "hostname..." mehrere Zeitserver angegeben
werden können und für "protocol" die Protokolle UDP
(default) oder TCP.
-
"netdate" schickt die Anfrage an Port 37 (Dienst
"time") des Zeitservers. Einige Zeitserver lassen nur das Protokoll
UDP zu, andere beide Protokolle.
-
Den Zeitabgleich kann man nach dem Booten
oder auch als Cronjob starten.
-
Ein Linux-Rechner beantwortet "netdate"-Anfragen, wenn in
der Datei "/etc/xinetd.d/time" der Service "time" aktiviert ist.
Damit Änderungen in dieser Datei wirksam werden, muss der
"xinetd" mit dem Kommando "rcxinetd restart" neu gestartet werden.
-
Soll der Linux-PC auch "time"-Anfragen aus dem Internet beantworten
können, müssen die entsprechenden Ports in der Firewall geöffnet
werden.
-
Die Systemzeit wird durch "netdate" unmittelbar auf den
neuen Wert eingestellt. Dadurch können jedoch Sprünge in der
Systemzeit verursacht werden. Der nachfolgend beschriebene NTPD
hingegen führt die Zeit langsam nach, so dass keine
Zeitsprünge vorkommen können. Zudem ist der NTPD genauer.
Installation und Einrichtung des Timeservers NTPD
Der Dämon NTPD ist zugleich Zeitserver und -client. Aus
mehreren vorgegeben Zeitservern sucht er sich die "beste" Quelle
aus, stellt die Systemzeit mit und stellt die Zeit als Server
wieder für andere Rechner zur Verfügung. Die Zeitabstände des
Abgleichs mit anderen Zeitservern werden selbsttätig optimiert.
Im Gegensatz zu "netdate" wird die Systemzeit nicht abrupt verstellt,
sondern langsam nachgeführt, so dass keine Sprünge in der Systemzeit
entstehen können.
Mit im Paket "xntp" enthalten ist das Programm "ntpdate", das
ähnlich wie "netdate" die Systemzeit durch einen einmaligen Aufruf
mitstellt.
-
Mit YaST das Paket xntp (n) installieren.
-
Leider gibt es keine Manpages zu den einzelnen Programmen
und Dateien. Im Verzeichnis "/usr/share/doc/packages/xntp" befinden
sich einige Hinweise.
Die aktuellen Programme und Dokumentationen befinden sich auf
der NTP-Homepage http://www.ntp.org.
-
Anpassung der Konfigurationsdatei "/etc/ntp.conf":
# Timeserver (Hostnamen durch Zeitserver ersetzen)
server abc.timeserver1.de
server def.timeserver1.de
server klm.timeserver2.de
server uvw.timeserver3.de
server xyz.timeserver3.de
# ...
# Hardwareuhr des Rechners
server 127.127.1.0
fudge 127.127.1.0 stratum 10
# Files
driftfile /var/lib/ntp/drift/ntp.drift
logfile /var/log/ntp
-
Im ersten Abschnitt sind die Zeitserver eingetragen, von
denen der NTPD die aktuelle Zeit beziehen soll. Dieses können
Internetserver, aber auch lokale Server sein.
-
Im zweiten Abschnitt wird die Uhr des Rechners selbst
eingetragen, auf die der NTPD dann zugreift, wenn keine externen
Hosts erreichbar sind. Mit "fudge" (engl. "zurechtpfuschen",
"schwindeln") wird dem NTPD mitgeteilt, dass die lokale
Hardwareuhr nur als Notlösung anzusehen ist. Dabei ist der
"Stratum"-Wert die Position eines NTPD in der Kette mehrerer
Zeitserver. Eine exakte Zeitquelle wie eine Funkuhr hat den
Stratum-Wert "0", der erste NTPD, der diese Zeitquelle verwendet,
den Stratum-Wert "1". Der zweite NTPD, der den ersten als Zeitquelle
verwendet, hat dann den Stratum-Wert "2" usw. Die eigene Rechneruhr
wird also mit der Zuweisung des Stratum-Wertes "10" als so ungenau
eingestuft, dass der NTPD sie nur verwendet, wenn er keine
bessere Zeitquelle findet.
-
Die Datei "ntp.drift" im dritten Abschnitt enthält
einen Wert, der die Gangungenauigkeit der Hardwareuhr des Rechners
wiedergibt. Der NTPD ermittelt beim ersten Start diesen Wert und
schreibt ihn nach etwa 15-30 Minuten in diese Datei. Erst nachdem
der NTPD diese Datei erstellt hat, arbeitet er auch als Zeitserver.
Bei den folgenden Aufrufen ist diese Datei bereits vorhanden,
und der NTPD arbeitet sofort als Zeitserver.
-
Verfügt der Rechner selbst über ein Zeitnormal wie z.B. eine
DCF77-Funkuhr oder einen GPS-Empfänger, kann auch
dieser in die Konfigurationsdatei eingetragen werden. Näheres
dazu steht in der Default-Konfigurationsdatei.
-
Steuerung des Servers:
Aufruf mit dem Start-/Stop-Skript:
- rcxntpd start
- rcxntpd stop
- rcxntpd status
- rcxntpd restart
Der Server kann auch mit dem Kommando "ntpd" gestartet werden.
Mit dem Aufruf "ntpd -d" (Debug-Mode) gibt der Server zahlreiche
Kontrollausgaben aus. Der Aufruf "xntpd" ist ein symbolischer
Link für "ntpd".
-
Mit "insserv xntpd" wird der Server beim Booten mit gestartet.
-
Der NTPD verwendet den Dienst "ntp" (Port 123) mit dem
Protokoll UDP. Die zugehörige Firewall-Variable muss also
um "ntp" ergänzt werden:
FW_SERVICES_EXT_UDP = "ntp"
Mit dieser Konfiguration stellt der NTPD Systemzeit und -datum auf
die Werte ein, die er von den Zeitservern aus dem Internet bezieht.
Weitere Programme zum Timeserver NTPD
Im Paket "xntp" sind u.a. die folgenden weiteren Programme enthalten:
-
Das Programm "ntpdate" stellt ähnlich wie "netdate" die
Systemzeit direkt nach. Es lässt sich nur aufrufen, wenn
der Zeitserver NTPD nicht läuft.
-
"ntpq" und "ntpdc" sind interaktive NTP-Abfrageprogramme.
Werden sie ohne Parameter aufgerufen, bekommt man mit "help" die zur
Verfügung stehenden Kommandos aufgelistet. "help <cmd>"
gibt Hilfen zu den einzelnen Kommandos aus. Die beiden Programme
lassen sich mit Parametern auch direkt aufrufen. Beispiele:
- ntpq/ntpdc -p: Angaben über die vom NTPD verwendeten Zeitserver
-
Weitere Programme sind:
- ntptime: Kernel-Time-Variablen auslesen
- ntptrace: Gibt die Kette der Zeitserver aus
Zeitserver für das lokale Netz
Der so eingerichtete NTPD kann nun als Zeitserver für die
Rechner des lokalen Netzes dienen. Damit braucht sich nicht jeder
Rechner die Zeit aus dem Internet zu holen, sondern kann den
lokalen Zeitserver verwenden.
-
Um den lokalen Zeitserver von den anderen Rechnern im LAN
mit Namen ansprechen zu können, kann man einen Alias-Namen
(z.B. "ntp1") in die Zone-Datei des Nameserves eintragen.
Der lokale Zeitserver ist dann z.B. mit mit "ntp1.local.netw"
ansprechbar.
-
Auf jedem weiteren Linux-Rechner im LAN wird das Paket "xntp (n)"
installiert wie oben beschrieben. In die Konfigurationsdatei
"/etc/ntp.conf" werden als Server nur der lokale Zeitserver und
die Hardwareuhr eingetragen:
server ntp1.local.netw
server 127.127.1.0
fudge 127.127.1.0 stratum 10
driftfile /var/lib/ntp/drift/ntp.drift
logfile /var/log/ntp
-
NTP-Clients für die verschiedensten Betriebssysteme sind
auf der NTP-Homepage aufgeführt,
so dass sich zum Beispiel auch die Windows-PCs im LAN mit dem
lokalen Zeitserver automatisch synchronisieren können.
-
Windows-PCs können ihre Systemzeit auch mit dem Kommando
"net time" mit dem Samba-Server auf dem Linux-PC abgleichen.
Hardwareuhr und Systemzeit
Linux verwendet die Hardwareuhr des Rechners nur beim Booten,
um nach den Angaben der Hardwareuhr die Systemzeit zu setzen.
Danach führt Linux die Systemzeit unabhängig von der
Hardwareuhr weiter.
Mit dem Kommando "hwclock -r" kann man die Angaben der Hardwareuhr
auslesen. Mit der Zeile "hwclock -r ; date" kann man also die Hardwareuhr
nahezu unmittelbar mit der Systemzeit vergleichen.
Beim Start des Linux-Rechners können die Hardware- und
Systemzeit um einen größeren Wert voneinander abweichen.
Ist dieser Wert größer als 1000s, geht der NTPD davon
aus, dass ein systematischer Fehler vorliegt, korrigiert die
Systemzeit nicht und beendet sich mit einer Warnung. Liegt die
Abweichung darunter, führt der NTPD die Systemzeit langsam
nach, was einige Zeit dauern kann.
In der Dokumentation wird deshalb empfohlen, vor dem Start des
NTPD zuerst das Kommando "ntpdate" aufzurufen, um die Systemzeit
sofort zu setzen, wenn auch möglicherweise etwas ungenau,
und erst danach den NTPD zu starten, der die kleine Ungenauigkeit
dann stetig korrigiert.
Bei laufendem Betrieb des NTPD kann "ntpdate" nicht aufgerufen
werden, "netdate" jedoch wohl, so dass man auch den NTPD
schon beim Booten starten und dann mit "netdate", falls nötig,
die Systemzeit unmittelbar nachstellen kann, wenn der Rechner
Online geht.
"ntpdate" verändert die Hardwareuhr nicht,
der NTPD hingegen wohl, wenn er "meint", dass die genaue Zeit
ermittelt ist. Durch diese ständige Nachführung der
Hardwareuhr steht beim nächsten Booten wieder die
bestmögliche Zeit zur Verfügung.
Die beschriebenen Vorgänge lassen sich gut verfolgen,
wenn man den NTPD beendet, die Systemzeit mit "date" absichtlich
etwas falsch setzt und dann die falsche Systemzeit mit "hwclock -w"
(bzw. "hwclock -wu", falls die Hardwareuhr die UTC verwendet)
in die Hardwareuhr überträgt. Die Zeitkorrekturen nach
den Aufrufen "ntpdate" bzw. "netdate" oder dem Start des NTPD
kann man dann mit "hwclock -r ; date" schön verfolgen.
Zeitserver im Internet
Im Internet gibt es viele öffentliche Zeitserver. Auch
größere Einwahlprovider sollten die Zeit über Zeitserver
zur Verfügung stellen.
Eine Liste mit öffentlichen Zeitservern befindet sich auf der
NTP-Homepage http://www.ntp.org.
Dort sind auch die Zeitserver der
Physikalisch-Technischen Bundesanstalt
(PTB) aufgeführt, die in Deutschland mit der "Darstellung und
Verbreitung der gesetzlichen Zeit" beauftragt ist.
Um einzelne Zeitserver nicht zu überlasten, gibt es einen
Pool von Zeitservern.
Anstelle von bestimmten Zeitservern werden aus einem weltweiten Pool
zufällige Zeitserver
ausgewählt. Dazu trägt man in die Datei "/etc/ntp.conf" ein:
server 0.pool.ntp.org
server 1.pool.ntp.org
server 2.pool.ntp.org
Möchte man die zufällig ausgewählten Zeitserver auf
Europa beschränken, um die Zeit durch kürzere Entfernungen
etwas genauer zu synchronisieren, kann man in die Datei
"/etc/ntp.conf" eintragen:
server 0.europe.pool.ntp.org
server 1.europe.pool.ntp.org
server 2.europe.pool.ntp.org
server 3.europe.pool.ntp.org
Die Genauigkeit der Synchronisation liegt im Bereich von Millisekunden.
Links
http://www.ntp.org NTP-Homepage
Spiegelung eines Linux-Systems
Im Laufe der Zeit wird der so schön eingerichtete Linux-PC
immer unentbehrlicher, so dass früher oder später die Frage
auftaucht, was man denn eigentlich macht, wenn das System
z.B. durch einen Ausfall der Festplatte plötzlich nicht mehr
verfügbar sein sollte.
Mit dem Kommando "tar" kann man zumindest Backups der wichtigsten
Verzeichnisse (wie "/etc", "/root", "/home" usw.) und veränderlichen
Dateien (z.B. in "/var") erstellen, so dass man das System durch
eine Neuinstallation und das Zurückkopieren der gesicherten
Dateien wieder herstellen kann.
Aufwendigere Absicherungen wie ausfallsichere Server,
Hochverfügbarkeitssysteme oder professionelle Datensicherungen
kommen aus Zeit- und Kostengründen oft nicht in Betracht, besonders
nicht im häuslichen Netzwerk. Zudem ist die Wiederherstellung eines
Systems aus den Datensicherungen zeitaufwendig.
Hat man auf einem der Linux-PCs im Netzwerk noch ausreichend
Platz übrig, kann man den Server auch komplett "spiegeln".
Fällt der Server-Rechner dann aus, kann das gespiegelte
System diesen nach wenigen Minuten ersetzen. Läuft der Server
dann wieder, kann umgekehrt das Originalsystem aus dem gespiegelten
System wieder hergestellt werden.
Eine reguläre Datensicherung, bei dem die Backup-Datenträger
mit verschiedenen Sicherungsständen an sicheren Orten aufbewahrt
werden, ersetzt dieses Verfahren natürlich nicht.
Die Idee zu einem gespiegelten Server stammt aus dem Artikel
"Server-Spiegelei"
von Conny Dittmann, erschienen im
Linux-Magazin Heft 4/2002, S. 99.
Verzeichnisse einrichten bzw. kopieren
Das Verfahren wird hier an einem Beispiel beschrieben (s. Bild 1).
Auf dem Rechner PC1 befindet sich das System "pc1", bestehend
aus der Boot- und der Root-Partition. Auf dem Rechner PC2
befindet sich ein Grundsystem "pc2", das ebenfalls aus
einer Boot- und einer Root-Partition besteht. Zusätzlich
befinden sich auf dem Rechner PC2 zwei freie Partitionen hda2
und hda6.
Das Linux-System "pc1" (Quellsystem) auf dem Rechner PC1 soll
nun zum Rechner PC2 gespiegelt werden, so dass das gespiegelte
System "pmirr" (Zielsystem) entsteht.
Bild 1: System spiegeln
Wie in Bild 1 dargestellt, wird zuerst das System "pc1" zum Rechner
PC2 in das Unterverzeichnis "/pc1m" kopiert. Zum Erstellen dieser
1:1-Kopie wird das Programm "rsync" zum Synchronisieren von Verzeichnissen
verwendet. Anschließend wird das gespiegelte System "pmirr" gebootet.
Das vollständige Skript zur Einrichtung des Zielsystems befindet
sich auf dieser Seite im Anhang 1.
Die Schritte sind im einzelnen:
-
Auf PC2 stehen neben dem bereits installierten Grundsystem
zwei leere Partitionen zur Verfügung, die groß genug sind,
die Verzeichnisse "/boot" und "/" des Quellsystems aufzunehmen:
/dev/hda2 (soll pc1:/boot des Quellsystems aufnehmen)
/dev/hda6 (soll pc1:/ des Quellsystems aufnehmen)
Besteht das Quell- oder Zielsystem aus weiteren Partitionen,
muss diese Aufteilung natürlich entsprechend angepasst werden.
-
Für das Zielsystem werden auf PC2 zwei Verzeichnisse
eingerichtet und die Partitionen gemountet:
pc2:/pc1m/boot für /dev/hda2 (= pmirr:/boot)
pc2:/pc1m/root für /dev/hda6 (= pmirr:/ )
-
Der Inhalt der Boot-Partition des Quellsystems wird in die
Boot-Partition des Zielsystems kopiert:
pc1:/boot nach pc2:/pc1m/boot (= pmirr:/boot)
-
Die folgenden Verzeichnisse bzw. Mountpoints werden auf
dem Zielsystem nur eingerichtet (je nach den Verzeichnissen
des Quellsystems):
pc2:/pc1m/root/boot (= pmirr:/boot)
pc2:/pc1m/root/media (= pmirr:/media)
pc2:/pc1m/root/media/cdrom (= pmirr:/media/cdrom)
pc2:/pc1m/root/media/floppy (= pmirr:/media/floppy)
pc2:/pc1m/root/lost+found (= pmirr:/lost+found)
pc2:/pc1m/root/mnt (= pmirr:/mnt)
pc2:/pc1m/root/proc (= pmirr:/proc)
-
Die folgenden Verzeichnisse werden vom Quell- in das
Zielsystem kopiert (je nach den Verzeichnisses des Quellsystems):
pc1:/bin nach pc2:/pc1m/root/bin (= pmirr:/bin)
pc1:/dev " pc2:/pc1m/root/dev (= pmirr:/dev)
pc1:/etc " pc2:/pc1m/root/etc (= pmirr:/etc)
pc1:/home " pc2:/pc1m/root/home (= pmirr:/home)
pc1:/lib " pc2:/pc1m/root/lib (= pmirr:/lib)
pc1:/opt " pc2:/pc1m/root/opt (= pmirr:/opt)
pc1:/root " pc2:/pc1m/root/root (= pmirr:/root)
pc1:/sbin " pc2:/pc1m/root/sbin (= pmirr:/sbin)
pc1:/srv " pc2:/pc1m/root/srv (= pmirr:/srv)
pc1:/sys " pc2:/pc1m/root/sys (= pmirr:/sys)
pc1:/tmp " pc2:/pc1m/root/tmp (= pmirr:/tmp)
pc1:/usr " pc2:/pc1m/root/usr (= pmirr:/usr)
pc1:/var " pc2:/pc1m/root/var (= pmirr:/var)
Weitere eigene Verzeichnisse können hinzu kommen wie z.B.
pc1:/bak nach pc2:/pc1m/root/bak (= pmirr:/bak)
pc1:/test " pc2:/pc1m/root/test (= pmirr:/test)
usw.
In der Datei /etc/fstab ist das Dateisystem festgelegt. Da dieses
zwischen Quell- und Zielsystem unterschiedlich ist, wird diese Datei
nur einmal bei der Einrichtung des Zielsystems vom Grundsystem des PC2
kopiert.
pc2:/etc/fstab nach pc2:/pc1m/root/etc/fstab
Diese Datei muss dann entsprechend den Partitionen des Zielsystems
angepasst werden. Bei den weiteren Synchronisierungen zwischen Quell-
und Zielsystem wird diese Datei nicht mitkopiert
(siehe Skript).
-
Für die Ausführung der Spiegelung mit Hilfe eines Skripts
ist es sinnvoll, den Public Key für "ssh" auf dem Quellsystem zu
hinterlegen. Dadurch erspart man sich die Eingabe des
root-Passwortes bei jedem "rsync"-Aufruf.
-
Das Kommando "rsync" wird noch mit der zusätzlichen Option
"--numeric-ids" aufgerufen, damit die User- und Group-IDs der Dateien
des Zielsystems mit denen des Quellsystems übereinstimmen. Ohne
diese Option ordnet "rsync" die User- und Group-IDs nach den Namen
zu, nicht nach den Nummern. So könnte es z.B. zu falschen User-IDs
bei Verzeichnissen und Dateien auf dem Zielsystem kommen, wenn ein User
sowohl auf dem Quellsystem als auch auf dem Grundsystem vorhanden ist,
jedoch auf beiden Systemen verschiedene User-IDs hat.
-
Die "rsync"-Option "--delete-after" bewirkt, dass Dateien
auf dem Zielsystem erst nach der Synchronisierung gelöscht
werden. Für diese Option muss das Zielsystem über
ausreichenden Plattenplatz verfügen.
-
Befinden sich das Quell- und Zielsystem auf verschiedenen
Rechnern, sind auch die Netzwerkkarten unterschiedlich. In diesem
Fall muss man die Netzwerkeinstellungen des Zielsystems neu
vornehmen. Man kann diese Neueinstellungen nach dem erstmaligen
Kopieren auch einmal vornehmen und bei den weiteren Spiegelungen
die Verzeichnisse, in denen die Netzwerkkonfiguration festgelegt
ist, von der Spiegelung ausnehmen, indem man die Zeile im Skript,
in der das Verzeichnis /etc kopiert wird, erweitert.
z.B. um
--exclude=/etc/sysconfig/network/ifcfg-eth-id-*
Welche Dateien bzw. Verzeichnisse von den Spiegelungen
auszunehmen sind, ist systemabhängig. Befinden sich Quell-
und Zielsystem auf demselben Rechner, ist diese Ausnahme
nicht notwendig.
Das Skript für die Spiegelung muss
an die tatsächlichen Gegebenheiten angepasst und kann dann
gestartet werden. Das Kopieren kann man auf der Konsole verfolgen.
Man staunt schon über die Anzahl der Dateien, die auf dem System
vorhanden sind. Mit dem Kommando "df" kann man sich auf einer anderen
Konsole ansehen, wie sich die Partitionen nach und nach "füllen".
Je nach PCs und Netzwerkverbindung dauert das erstmalige Kopieren
auch einige Zeit.
Das Zielsystem kann dann in regelmäßigen Zeitabständen mit dem
Quellsystem synchronisiert werden. Diese Synchronisierungen gehen
dann erheblich schneller, da "rsync" nur die Unterschiede zwischen
den Systemen überträgt.
Anmerkung: In dem gezeigten Beispiel erfolgt das Kopieren
aus dem laufenden System heraus. Im ungünstigsten Fall (wenn
z.B. gerade Datensätze in eine Datenbank geschrieben werden) kann
das gespiegelte System inkonsistent sein. Mögliche Abhilfen:
Sicherung der Datenbanken usw. auf reguläre Weise, damit
die Daten ordnungsgemäß wieder hergestellt werden können. Diese
Sicherung sollte unabhängig von der Spiegelung sowieso vorgenommen
werden.
Stoppen der entsprechenden Server vor dem Start der Spiegelung.
Ausführung der Spiegelung, indem auf beiden Rechnern
Grundsysteme installiert und gestartet werden. Dann kann das
Quellsystem als "ruhendes" System kopiert werden. Befinden sich
das Quell- und Zielsystem auf demselben Rechner, wird das Quellsystem
in jedem Fall als ruhendes System kopiert, da erst das Grundsystem
gestartet werden muss.
Hinweis: Wenn man aus irgendwelchen Gründen im Zielsystem
Verzeichnisse wieder löschen will und sich dabei z.B. im Verzeichnis
/pc1m/root befindet, also am Prompt z.B. eingibt:
pc2:/pc1m/root # rm -r etc
sollte man darauf achten, dass man vor dem zu löschenden
Verzeichnis kein "/" angibt, weil sonst das Verzeichnis
des Grundsystems gelöscht wird!
Booten des gespiegelten Systems
Nachdem das Quellsystem kopiert und die Datei /etc/fstab von Hand
angepasst ist, muss das Zielsystem noch mit "Grub" bootbar
gemacht werden.
Dazu muss das Zielsystem in der Datei "/boot/grub/menu.lst" des
Systems pc2 hinzugefügt werden, z.B.
title Gespiegeltes System
kernel (hd0,1)/vmlinuz root=/dev/hda6 vga=0x317 selinux=0 \
splash=silent resume=/dev/hda5 showopts
initrd (hd0,1)/initrd
Es ist sinnvoll, einfacher und schneller, das Zielsystem vor der
ersten Spiegelung auf normale Weise zu installieren. Bei der ersten
Spiegelung brauchen dann nur die Änderungen übertragen zu werden.
Außerdem wird die grub-Bootloader-Konfiguration bei der Installation
automatisch um das Zielsystem ergänzt und die Datei fstab richtig erzeugt.
Bevor man das Ersatzsystem startet, muss das Quellsystem
auf PC1 zunächst vom Netz getrennt werden, denn das gespiegelte System
hat dieselbe IP-Adresse wie das Quellsystem, so dass es zur Kollision
käme, wenn beide Systeme gleichzeitig am Netz liefen.
Das Ersatzsystem sollte nun genauso funktionieren wie das
ursprüngliche System.
Anmerkungen
Ein solches gespiegeltes System hat weitere Vorteile:
-
Die Spiegelung des Servers kann nicht nur im lokalen Netz,
sondern auch über das Internet erfolgen. Entfernte Standorte
der beiden Rechner erhöhen zusätzlich die Ausfallsicherheit.
-
Stehen weitere Linux-PCs zur Verfügung, kann man das
Originalsystem auch mehrfach sichern. Umgekehrt kann man auf einem
System mit genügend großer Festplatte auch mehrere Systeme
sichern.
-
Wichtige Daten wie das "/home"-Verzeichnis lassen sich öfter
sichern als das Gesamtsystem.
-
Sind die Platten in beiden Rechnern in auswechselbaren
Halterungen (Quick-Out-Halterungen), braucht man bei einem
Festplattencrash nur die Platte auszuwechseln, um das System wieder
einsatzbereit zu machen.
-
Anstelle des laufenden Originalsystems kann man auch das
gespiegelte "eingefrorene System" in einem konsistenten Zustand
sichern.
-
Ein gespiegeltes System bietet die Möglichkeit,
beliebige Änderungen ohne Rücksicht auf die Folgen zu
testen. Nach den Experimenten synchronisiert man das Testsystem
einfach wieder mit dem Originalsystem. Ist die Festplatte im
Zielrechner groß genug, kann man das Originalsystem auch
mehrfach auf dieser Platte sichern und eines der gespiegelten
Systeme als Testsystem verwenden.
In meinem lokalen Netz wird der Hauptserver/-router regelmäßig
auf einen anderen Server gespiegelt. Durch Starten des Ersatzsystems
und Umstecken der Ethernetverbindungen ist man nach wenigen Minuten
wieder am Netz. Das gespiegelte System funktioniert einwandfrei.
Anhang 1: Skript zum Spiegeln eines Linux-Systems
#!/bin/sh
# Skript zum Spiegeln von PC1 nach PC2.
# Dieses Skript muß an die jeweiligen Gegebenheiten angepasst werden.
# Nach der Anpassung die folgende Zeile entfernen:
exit 1
# Nach Ausführung dieses Skripts muss die Datei /etc/fstab
# des pc2-Grundsystems kopiert und von Hand angepasst werden.
# Dieses Skript soll nur auf PC2 laufen
if [ "$HOSTNAME" != "pc2" ]; then
echo "Aufruf '$0' nur auf PC2 zulässig"
exit 1
fi
# Variablen
rscmd="rsync -az -v --numeric-ids --delete --delete-after -e ssh"
rhost="pc1.local.netw:"
mboot="/pc1m/boot"
mroot="/pc1m/root"
# Mirror-Partitionen auf PC2 mounten:
mount /dev/hda2 $mboot
mount /dev/hda6 $mroot
# Systemverzeichnisse nur einrichten:
test ! -d $mroot/boot && (mkdir $mroot/boot; chmod 755 $mroot/boot)
test ! -d $mroot/media && (mkdir $mroot/media; chmod 755 $mroot/media)
test ! -d $mroot/media/cdrom && (mkdir $mroot/media/cdrom; chmod 755 $mroot/media/cdrom)
test ! -d $mroot/media/floppy && (mkdir $mroot/media/floppy; chmod 755 $mroot/media/floppy)
test ! -d $mroot/lost+found && (mkdir $mroot/lost+found; chmod 755 $mroot/lost+found)
test ! -d $mroot/mnt && (mkdir $mroot/mnt; chmod 755 $mroot/mnt)
test ! -d $mroot/proc && (mkdir $mroot/proc; chmod 555 $mroot/proc)
# Systemverzeichnisse kopieren:
$rscmd $rhost/boot /pc1m
$rscmd $rhost/bin /pc1m/root
$rscmd $rhost/dev /pc1m/root
# Nächste Zeile evt. um --exclude=/etc/sysconfig/network/ifcfg-eth-id-* ergänzen (s. Text)
$rscmd $rhost/etc /pc1m/root --exclude=/etc/fstab
$rscmd $rhost/home /pc1m/root
$rscmd $rhost/lib /pc1m/root
$rscmd $rhost/opt /pc1m/root
$rscmd $rhost/root /pc1m/root
$rscmd $rhost/sbin /pc1m/root
$rscmd $rhost/srv /pc1m/root
$rscmd $rhost/sys /pc1m/root
$rscmd $rhost/tmp /pc1m/root
$rscmd $rhost/usr /pc1m/root
$rscmd $rhost/var /pc1m/root
# Anwenderverzeichnisse kopieren:
$rscmd $rhost/bak /pc1m/root
$rscmd $rhost/test /pc1m/root
# Mirror-Partitionen wieder unmounten:
umount $mboot
umount $mroot
exit 0
|