Vorlesung "UNIX"

von Prof. Jürgen Plate

7. Kommunikationsdienste

UNIX stellt eine Reihe von Diensten zur Kommunikation der Benutzer untereinander zur Verfügung. Einen Dienst haben Sie schon kennengelernt: write. Dieser Befehl hat noch einen nahen Verwandten, der jedoch meist nur vom Systemverwalter verwendet wird:

wall

Dieses Kommando liest einen Text von der Standardeingabe und sendet ihn an alle angemeldeten Benutzer. Es darf nur von root verwendet werden.

Es gibt daneben die Möglichkeit, Benutzer auch dann zu informieren, wenn sie nicht eingeloggt sind.

7.1 Das UNIX Mailsystem

Man kann aber auch Benutzer erreichen, die gerade nicht am Rechner arbeiten. Mit dem Mail-System kann elektronische Post an andere Benutzer verschickt werden. Zu diesem Zweck gibt es das Verzeichnis /var/spool/mail (früher '/usr/mail' oder '/var/mail'), in dem für jeden Benutzer, der Post erhalten hat, eine Datei existiert, deren Name mit dem Loginnamen des Benutzers übereinstimmt. Mit den Kommandos mail oder der Erweiterung mailx kann Post an andere Benutzer verschickt werden und die empfangene elektronische Post bearbeitet werden. An dieser Stelle wird die lokale Nutzung des Mail-Systems behandelt, später dann die Anwendung im Netz. Übrigens - mit 'Mail' meine ich immer die elektronische Mail von Computer zu Computer. Zunächst das primitivste aller Mail-Programme:

Post versenden mail Login-Name(n)

Versenden von Post an einen oder mehrere andere Benutzer. Bei mehreren Namen sind diese durch Leerzeichen zu trennen. Mail liest den Text von der Standardeingabe. Der Text kann nicht nur mit CTRL-D (End of File) sondern auch mit einer Zeile beendet werden, die nur einen Punkt enthält.

Das Mail-Kommando ergänzt den Brief um einen Briefkopf, in dem Absender und Absendezeitpunkt verzeichnet sind. Der Mailkopf enthält einzelne Zeilen, die sich anhand eines Schlüsselwortes identifizieren lassen ("From", "To", usw.). Zum Versand an ferne Rechner käme dann noch ein "Briefumschlag" hinzu. Normalerweise sorgt das Mail-Kommando nicht selbst für den Versand, sondern es übergibt den Brief an ein anderes, speziell für den Mailversand konzipiertes Programm.

Wir haben es hier also mit einem Frontend, dem 'Mail User Agent' (mail, mailx, elm, pine,...), und einem Backend, dem 'Mail Transport Agent' (sendmail, smail, ...), zu tun. Der MTA sorgt auch für die Weiterleitung ankommender Post an den richtigen Empfänger.

Kann der Brief nicht zugestellt werden (z. B. unbekannter Empfänger), gibt mail eine Fehlermeldung aus. Gleichzeitig erhält man den eigenen Brief, ergänzt um Zusatzinformationen per mail retour. Fehlerhafte Briefe werden auch (je nach Einstellung des MTA) an einen besonderen Pseudo-Empfänger namens 'postmaster' geschickt. Dieser Benutzer steht nicht in der Passwortdatei, sndern es ist ein sogenanntes 'Mail-Alias' für den Systemverwalter oder einen Beauftragten. An den 'postmaster' kann man sich auch wenden, wenn man Fragen im Zusammenhang mit Mail hat (z. B. wenn man einen Empfänger sucht). Beispiel für das Versenden einer Mail:

$ mail markus
Lieber Markus,

leider habe ich dich heute nicht getroffen. Ich brauche
dringend das UNIX-Buch, das ich Dir neulich geliehen habe.
Bitte leg es doch in mein Fach. Danke.

Gruss, Hans
.

Wenn der Benutzer markus mehrere Mails erhalten hat, wird er über diesen Brief nicht besonders glücklich sein, denn jeder Mailer (MUA) zeigt normalerweise erst einmal den Absender und eine Betreff-Zeile an. Letztere besitzt aber der obige Brief garnicht. Man sollte also eine "Subject:"-Zeile anbringen. Das geht recht gut mit dem verbesserten 'mail'-Kommando, 'mailx'. Hier kann man in der Kommandozeile ein "Subject" angeben:

mailx -s "UNIX-Buch" markus

....

'mail' und 'mailx' werden eigentlich nur noch verwendet, wenn nichts besseres da ist - oder wenn es darum geht in Kommandodateien (Shellskripts) Mail automatisch zu versenden, da man mit Ausgabeumleitung oder Pipe die Ausgabe eines Programms direkt an den MUA übergeben kann.

Eine Nachricht über eingegangene Post erhält der Benutzer beim Login mit der Meldung you have mail.

Er kann dann mit einem Mail-Kommando seine Post ansehen (und gleich antworten). Der Unterschied zum Senden besteht bei mail und mailx im Fehlen der Empfänger-Logins. mail arbeitet interaktiv - man kann so alle Briefe nacheinander bearbeiten. Die obige Ausgabe stützt sich auch auf das Mail-Kommando.

mail [-ehpqr] [-f datei] [-F login-name]

Bearbeiten empfangener Briefe. Die zuletzt eingegangenen Briefe werden zuerst angezeigt (LIFO).

Optionen:

-eKeine Bearbeitung, nur anzeigen, ob Post vorliegt. mail antwortet mit 0 oder 1 (=keine Post/Post).
-hNur numerierte Liste der Briefköpfe anzeigen, danach in den interaktiven Modus gehen.
-pAlle Briefe ohne interaktive Steuerung ausgeben.
-qAbbruchtaste beendet mail (im Normalfall wird damit nur die Ausgabe des aktuellen Briefs abgebrochen).
-rAnzeige der Briefe nach Alter, den ältesten zuerst (FIFO).
-f dateimail bietet die Möglichkeit, Briefe in einer benutzereigenen Datei zu speichern. Statt des Standardnamens "mbox" wird der angegebene Name verwendet.

Beim Lesen der Post im interaktiven Modus (der Aufruf von mail ohne Parameter ist die Regel) meldet sich mail mit dem Fragezeichen als Prompt. Danach können zahlreiche Kommandos gegeben werden. Die Ausgabe kann mit CTRL-S angehalten und mit CTRL-Q fortgesetzt werden. Für den Anfang reichen ein paar Tasten:

CR,n,+zum nächste Brief gehen
dlöscht den angezeigten Brief (markiert als "gelöscht")
paktuellen Brief nochmals ausgeben.
-vorherigen Brief nochmals ausgeben.
sBrief in der Datei mbox speichern. Hinter s kann auch ein Dateiname angegeben werden.
wwie s, jedoch ohne Briefkopf. m Brief weiterleiten. Hinter m muß ein Login-Name angegeben werden.
rAntworten, der Empfänger wird von mail dem Brief entnommen.
!Ausführen des hinter dem ! angegebenen UNIX-Kommandos.
qmail verlassen, als gelöscht markierte Briefe entfernen
x mail abbrechen - alles bleibt, wie es war.

Das Kommand 'mailx' zeigt beim Start zumindest eine Übersicht der eingegangenen Post (Subject und Absender) und bietet komfortablere Bearbeitung (z. B. Löschen aller Mails auf einmal oder die oben erwähnte Subject-Angabe).

Programme wie 'elm' oder 'mutt' arbeiten interaktiv und stellen eine komfortablere Benutzer-Schnittstelle dar. Deshalb werden sie normalerweise auf der Shell-Ebene verwendet. Bei der grafischen Benutzeroberfläche kommen Programme wie 'Thunderbird' zum Einsatz. Manchmal leisten die Kommandozeilen-Mailer aber gute Dienste; so ist der 'mutt' vorzüglich geeignet, automatisch erzeugte E-Mails mit Attachment zu versenden. Eine detaillierte Beschreibung dieser Programme würde jedoch den Rahmen dieses Skripts sprengen.

Ray Tomlinson war Computertechniker bei Bolt Beranek and Newman (BBN), einem privaten Forschungsunternehmen, das ab 1968 das Arpanet, den Vorgänger des Internets, mit entwickelte. Unter anderem entwickelte er CPYNET zum Kopieren von Dateien zwischen miteinander verbundenen Computern. CPYNET sollte erweitert werden, sodass auch Nachrichten übertragen werden können. Tomlinson kombinierte CPYNET mit dem Programm SNDMSG, das auf einem Rechner lokale Nachrichten ('Mailboxes') verwalten konnte. Um den Adressaten (local part) und den Ziel-Computer (domain part) voneinander zu trennen, nahm Tomlinson als Trennzeichen den "Klammeraffen" (@-Zeichen). Damals wurde übrigens der heutige Nutzen des E-Mail-Systems von niemandem erkannt, seine Arbeit wurde eher als Spielerei gesehen.

Erlaubte Zeichen in E-Mail-Adressen

Das Format eine E-Mail-Adresse ist in RFC 2822 festgelegt, der nur eine Untermenge des ASCII-Zeichensatzes in E-Mail-Adressen erlaubt. in RFC 1642 wird jedoch UTF-7 definiert und damit eine Möglichkeit geboten, alle Unicode-Zeichen unter Verwendung des beschränkten ASCII-Zeichensatzes darzustellen. E-Mail-Adressen, die das ausnutzen sind fast nur in asiatischen Ländern in Gebrauch.

Wie in RFC 2821 festgelegt, darf der local-part einer E-Mail-Adresse bis zu 64 Zeichen lang sein und der domain-part bis zu 253 Zeichen. Nach RFC 2822 darf der local-part einer E-Mail-Adresse folgende Zeichen enthalten:

Ein String in Anführungszeichen muss entweder ein durch Punkt abgesondertet Teil des local-part sein oder es muss der gesamte local-part in Anführungszeichen stehen. Zum Beispiel sind abc."defghi".xyz@example.com oder "abcdefghixyz"@example.com erlaubt, abc"defghi"xyz@example.com oder abc\"def\"ghi@example.com sind verboten. Strings in Anführungszeichen werden jedoch fast nie verwendet. RFC 5321 warnt sogar davor: "a host that expects to receive mail SHOULD avoid defining mailboxes where the Local-part requires (or uses) the Quoted-string form".

Der domain-part wird dagegen restriktiver behandelt. Er ist beschränkt auf Buchstaben, Ziffern, den Punkt(.) und das Minuszeichen (-). Hier werden auch Groß- und Kleinschreibung nicht unterschieden. Anstelle eines Domaninnames darf auch eine IP-Adresse in eckigen Klammern stehen z. B. jim.beam@[192.168.222.111], obwohl diese Form der Adressierung fast nur noch von Spammern verwendet wird. Auch im domain-part sind geklammerte Kommentare erlaubt. z. B. johnny.walker@(comment)example.com.

Beispiele für gültige E-Mail-Adressen:

Beispiele für ungültige E-Mail-Adressen:

Wenn Sie jetzt mit seltsamen Mailadressen spielen wollen, denken Sie daran, dass nicht jedes Mailsystem das auch akzeptiert - selbst wenn es im RFC steht. Immerhin bin ich auch unter ***@netzmafia.de erreichbar.

Weiterleiten von Mails

Bei früheren Versionen von 'mail' konnte die Post an einen anderen Benutzer mit der Option "-F login-name" umgeleitet werden (z. B. für die Urlaubsvertretung). Vorher muß der Briefkasten vollständig geleert werden. Die Umleitung erlaubt natürlich auch das Weiterschicken an den eigenen Account auf fremden Rechnern (so laufen z. B. alle Mails an den Systemadministrator auf einem Rechner zusammen).

Bei allen sendmail- oder smail-basierten Systemen ist die Umleitung einfacher. Der Benutzer muß lediglich in seinem Home-Directory eine Datei namens ".forward" anlegen und in dieser Datei eine (korrekte) Mailadresse eintragen. Sollen mehrere Empfänger angesprochen werden, sind die Namen durch Kommas zu trennen.

Der Mechanismus geht jedoch noch weiter. Wird eine Datei mit vollständigem Pfad angegeben (die Weiterleitungszeile beginnt also mit einem '/'), dann landet die Post in der angegebenen Datei. Ein weiterer Schritt ist die Angabe einer Pipe in ein Programm oder Skript, das die Mail weiterverarbeitet (z. B. "| tuwas"). Beim Erstellen des Skripts ist zu beachten, daß keinerlei Pfade oder Voreinstellungen vorausgesetzt werden dürfen und gewisse Sicherheitsmaßnahmen zu beachten sind. Ein recht bekanntes Programm, das eingehende Mail vorsortieren oder unerwünschte Mail gleich löschen kann ist beispielsweise 'procmail'.

Mailsysteme, die auf 'smail' oder 'sendmail' basieren, bieten noch einige weitere Features. Die Datei /etc/aliases ist hier von besonderem Interesse, da sich damit einige Mail-Dienste realisieren lassen:

7.2 Verbindung zu anderen UNIX-Rechnern

Der Datenaustauschmit anderen UNIX-Rechnern kann nicht nur über lokale Netze (LAN) sondern auch über Wähl- und Standleitungen der Post erfolgen (WAN). Es stehen folgenden Möglichkeiten zur Verfügung:

7.2.1 Am Anfang war das Modem

Zunächst wurde eine Möglichkeit gesucht, z. B. die Post über eine Kette mehrerer anderer Rechner weiterzuleiten und gegebenfalls auch einmal Dateien zu transferieren. Es entstanden die Programme, die heute unter dem Oberbegriff 'uucp' zusammengefaßt sind. Die Abkürzung 'uucp' steht für 'Unix to Unix Copy'. Bei uucp handelt es sich um ein System von Programmen und Protokollen zum Offline-Datentransfer, d. h. Mail, Kopieraufträge oder die Ausführung von Kommandos wurde zunächst in Form von Auftragsdateien in einem Verzeichnis (meist /var/spool/uucp) abgelegt.

In regelmäßigen Zeitabständen wird dann der eigentliche Datentransfer gestartet (Programm 'uucio' = Unix to Unix Copy I/O). Per Modem wird Kontakt zu einem entfernten Rechner aufgenommen und wechselseitig Daten ausgetauscht. Ist alles erledigt, wird die Verbindung wieder unterbrochen.

Heute wird vieles online im Netz erledigt, aber uucp hat immer noch seine Daseinsberechtigung, z. B. zum Austausch von Mail und Usenet-News. Wenn jemand beispielsweise sowieso nur einmal am Tag seine Mail bearbeitet dann kann dies offline, d. h. lokal geschehen und der Transfer irgendwann Nachts oder im Lauf des Tages erfolgen. Uucp-Software gibt es auch für andere Betriebssysteme (z. B. das Paket 'Waffle' für DOS) und so ist auch ein platformübergreifender Datenverkehr möglich. Außerdem kommt man so auch in Gegenden an seine Mail, in denen nur eine Telefonverbindung verfügbar ist. Das Thema wird im Kapitel über das Internet nochmals aufgegriffen. Um erreichbar und von anderen Rechnern unterscheidbar zu sein, braucht jedes System einen eindeutigen Knotennamen. Mit deren Hilfe gab es dann auch die erste Möglichkeit, Benutzer auf anderen Rechnern zu adressieren.

uname [-amnrsv]

Ausgabe des Knotennamens und weiterer Info. Wichtig sind:
s System Name des Rechners
n Knotenname des Rechners

Das Versenden von Post an ein anderes System erfolgte anfangs durch Angabe von Knotennahmen und Loginnamen des Empfängers, getrennt durch ein Ausrufezeichen, z. B.:

mailx -s "Konferenz an 12.7." werk2!hans

Die übrige Bedienung von mail erfolgt dann wie schon beschrieben. Es ist auch möglich, die Post über mehrere Knoten zu leiten, wenn zwischen dem eigenen Rechner und den Zielrechner keine direkte Verbindung besteht. Angenommen alle Rechner eines Unternehmens sind pr uucp gekoppelt, dann könnte der mail-Aufruf so aussehen:

mailx -s "Konferenz am 12.7." werk1!werk2!werk4!klaus

Nachteil dieser Wegbeschreibung, die wegen der Ausrufezeichen als 'Bang-Path' bezeichnet wird, ist die Festlegung ebe gerade auf einen Weg. Ist der Rechner "werk2" gerade nicht betriebsbereit, bleibt die Post hängen. Deshalb ist man schon sehr bald zu einer wegeunabhängigen Adressierung übergegangen, der an anderer Stelle beschriebenen Domain-Adressierung, die heute verwendet wird. Manchmal findet man noch Mischformen, bei denen sozusagen die letzte Wegstrecke noch als Bangpath notiert ist. Es gibt eine ganze Reihe von uucp-Kommandos:

uucp [Optionen] Quelldatei(en) Zieldatei

(Unix to Unix Copy) Kopieren von Dateien zwischen zwei Unix-Systemen. Für Quell- und Zeildatei kann dabei folgendes angegeben werden: Der Pfadname kann angegeben werden als:
  • ~Loginname[Pfadname]
    (absoluter Pfad) - uucp setzt für die Tilde ~ dann den Pfad zum Home-Directory des Benutzers ein.
  • ~/Pfadname
    uucp setzt für die Tilde ~ dem Pfad /usr/spool/uucppublic/ ein und hängt den angegebenen Pfad an.

    Von den Optionen werden nur einige vorgestellt:
    -jgibt die Auftragskennung aus
    -mSendet an der Aufrufer einen mail-Mitteilung über den Erfolg der Kopieraktion
    -nEmpfänger-Loginname Der Empfänger wird per mail über den Kopiervorgang informiert.

    uux [-jmu] Kommandostring

    (Unix to Unix command eXecution) Ermöglicht die Ausführung eines Kommandos auf einem anderen UNIX-Rechner. Die Dateien des Kommandos können auf eine ausgewählten Maschinen liegen. Der Kommandostring ist ähnlich aufgebaut wie bei uucp:

    Knotenname[~Loginname]Kommando

    Mit "uux Konotenname!login" kann man sich auf dem fremden Rechner anmelden, als ob man an einem seiner Terminals wäre. Dazu wird oft aber auch das folgende Kommando angeboten:

    cu [Optionen] Knotenname

    (Call Unix) Einloggen am Rechner mit dem angegebenen Knotennanmen. Es erfolgt dann ganz normal die Login-Aufforderung des entfernten Rechners - sozusagen die Minimalform eines Terminalprogramms für das Modem. cu wird heute fast nur noch verwendet, um angeschlossene Modems zu testen, Mit dem Parameter "-l" kann man eine Schnittstelle direkt ansprechen, z. B. cu -l /dev/ttyS0.

    Die uu-Kommandogruppe kennt noch eine Reihe weiterer Kommandos für den Verkehr zwischen UNIX-Rechnern - siehe weiterführende Literatur. uucp-Verbindungen sind jedoch in jedem Fall für Mail, Netnews und gelegentliche Dateitransfers ausreichend. Sehr viel komfortabler wird es jedoch, wenn über Netzwerkkabel, Standleitung, Modemverbindung oder sogar Satellitenfunk die einzelnen Systeme direkt vernetzt sind.

    7.2.2 Die Internet-Protokollfamilie

    Am häufigsten eingesetzt wird das Internet-Protokoll = TCP/IP (Transmission Control Protocol/Internet Protocol). Über TCP/IP lassen sich auch unterschiedliche Rechner miteinander vernetzen. Es deckt die untersten 4 Schichten des OSI-Modells ab (Bitübertragung, Datensicherung, Vermittlung, Transport). Einige Funktionen reichen jedoch bis zur Applikationsschicht hinauf. Grundsätzlich können TCP/IP-Verbindungen über die unterschiedlichsten Medien erfolgen. Durch die Verbindung zweier Netze entsteht so ein größeres Netz (Inter-Net). Dies hat zu einer weltweiten Vernetzung von Rechnern mit TCP/IP geführt, die unter dem Namen "Internet" läuft.

    Dieses Kapitel geht davon aus, dass Sie Ihren Linux-Rechner an ein schon bestehendes lokales Netzwerk anschließen möchten. Für die Verbindung zum Internet von zuhause aus empfehle ich generell die Anschaffung eines passenden Routers (ISDN, DSL etc.). Derartige Geräte sind inzwischen so preiswert geworden, dass die Kosten den Gewinn an Bequemlichkeit und vor allem Sicherheit bei weitem aufwiegen. Der Router wird gemäß der Hersteller- und Provideramgaben konfiguriert und ermöglicht dann jedem Rechner im Netz den Internetzugang. Gleichzeitig schützt er das Netz durch seine Firewall-Funktionen.

    Die Installation und Initialisierung von TCP/IP komplett zu beschreiben, würde die Grenzen dieses Skripts sicherlich sprengen. Eine solche Beschreibung ist auch ziemlich überflüssig, da nahezu jeder Hersteller eigene Installationsroutinen zur Verfügung stellt. Leider sind diese unter Unix nicht einheitlich, jedoch läuft die Einrichtung von TCP/IP zumeist schon während der Installation des Betriebssystems ab. Aus diesem Grund beschränke ich mich hier auf eine kurze Zusammenfassung der wichtigsten Punkte und auf die allgemein wichtigen Kommandos und Konfigurationsdateien.

    Für weitergehende Information zur Netzwerktechnik sei auf das Skript Praktische Einführung in Computernetze verwiesen. Mehr über das Internet finden Sie im Skript Internet-Einführung.

    Was braucht man eigentlich alles, um einen Linux-Rechner ans Netz zu bringen? Eine Netzwerkkarte - klar! Diese wird in der Regel schon bei der Installation erkannt und das passende Kernel-Modul eingebunden. Feststellen lässt sich das mit dem Kommando dmesg | more. Dann brauchen Sie noch eine IP-Adresse, die Netzmaske, die Netzwerkadresse sowie Broadcast- und Gateway-Adresse.

    Beim derzeit aktuellen IP-Protokoll V4 ist jede Netzwerk-Adresse eine 32-stellige Binärzahl. Weil aber nun 32 Nullen und Einsen etwas unübersichtlich sind, hat man daraus einfach vier Gruppen zu je acht Stellen gemacht und schreibt diese vier Gruppen als Dezimalzahlen auf. Nachdem bei jeder Zahl Werte zwischen 0 und 255 auftreten können, schrebt man noch einen Punkt zwischen die Zahlen. Heraus kommt dabei z. B. 105.22.234.1 (was besser lesbar ist als binär 01101001000101101110101000000001).

    Rechner in lokalen Netzen sind für das Internet im Regelfall unsichtbar. Das bedeutet aber nicht, dass die Rechner keine Internetfunktionen nutzen können. Aber diese Rechner sind vor unkontrollierten Zugriffen aus dem Internet geschützt. Rechner, die weltweit kommunizieren sollen, bekommen vom jeweiligen Internet Service Provider eine IP-Adresse zugeteilt. Im LAN ohne direkte Internet-Verbindung braucht man aber nur IP-Adressen, die im jeweiligen Netz eindeutig sein müssen, nicht aber weltweit. Es wurden daher im IP-Zahlenraum drei Bereiche für lokale Netzwerke reserviert, die man jederzeit verwenden darf:

    10.0.0.0 - 10.255.255.255 (A-Netz)
    172.16.0.0 - 172.31.255.255 (B-Netze)
    192.168.0.0 - 192.168.255.255 (C-Netze)

    Der erste Bereich ermöglicht theoretisch ein Netz mit 16 Millionen Rechnern - das reicht auch für sehr große Firmen. Beim zweiten Bereich handelt es sich um 16 Teilnetze mit je ca. 65 000 Adressen (z. B. 172.23.0.0 bis 172.23.255.255). Der dritte Bereich besteht aus 256 kleinen Teilnetzen mit jeweils 254 Adressen. Ganz egal, in welchem Teilnetz Sie Ihr lokales Netz bilden - es ist sichergestellt, dass es zu keinen Adresskonflikten mit richtigen IP-Internetadressen kommt.

    Meist wollen Sie freilich auch innerhalb des lokalen Netzes Internetfunktionen nutzen (beispielsweise im Web surfen). Um dies zu ermöglichen, muss innerhalb des lokalen Netzwerks ein Rechner bzw. der oben erwähnte Router als sogenanntes Gateway zum Internet konfiguriert werden. Dieser Rechner/Router stellt die Verbindung zum Internet her (über DSL, ISDN, Modem etc.) und leitet alle Internetanforderungen des lokalen Netzes weiter. Das Gateway hat außerdem die Aufgabe, die lokalen IP-Adressen durch eine weltweit gültige IP-Adresse zu ersetzen. Sie suchen sich also ein (Teil-)Netz aus dem oben angegebenen Nummernkreis und vergeben daraus die Rechner-IP-Adressen.

    Nun kommen Netzmaske, Netzwerk- und Broadcast-Adresse ins Spiel. Die Ausdehnung eines lokalen Netzes wird durch die Netzmaske eingeschränkt. Dabei handelt es sich abermals um vierteilige Zifferngruppen, die intern als Bitmuster für IP-Adressen verwendet werden. Die Netzmaske legt fest, welcher Teil der IP-Adresse die Netzwerkadresse ist und welcher die Rechneradresse innerhalb des Netzes (das sorgt nicht nur dafür, dass mehrere lokale IP-Netze dasselbe Kabel verwenden können, ohne sich gegenseitig zu stören, sondern es macht auch den Routern das Leben leichter. Die Netzmaske hat bei allen Stellen, welche die Netzwerkadresse repräsentieren, eine 1 stehen und dahinter lauter Nullen (z. B.: 11111111111111110000000000000000 entspricht 255.255.0.0). Die Netzwerkadresse hat an den Stellen, welche den Rechner (Host) repräsentieren, Nullen stehen. Die Broadcast-Adresse (Broadcast = Rundruf, an alle) hat beim Rechneranteil lauter Einsen. Dazu ein Beispiel:

    Wenn das lokale Netz alle Nummern 192.168.12.x umfasst, lautet die dazugehörige Netzmaske 255.255.255.0, die Netzwerkadresse 192.168.12.0 und die Broadcast-Adresse 192.168.12.255. (Bei manchen Konfigurationsprogrammen brauchen Sie keine Netzwerkadresse anzugeben, da sich diese aus den beiden anderen Adressen ergibt.) Das resultierende Netzwerk wird jetzt mit 192.168.12.0/255.255.255.0 oder kurz mit 192.168.12.0/24 bezeichnet. (Die Kurzschreibweise gibt die Anzahl der binären Einser der Netzmaske an.) Zwei Rechner mit den IP-Adressen 192.168.12.71 und 192.168.12.72 können sich in diesem Netzwerk also direkt miteinander verständigen (weil die IP-Adressen im Bereich der Netzmaske übereinstimmen). Die maximale Anzahl von Rechnern, die gleichzeitig in diesem Netz kommunizieren können, beträgt 254 (.1 bis .254) - die Nummern .0 und .255 sind ja reserviert.

    Ein Gateway ist ein Router oder Rechner, der an der Schnittstelle zwischen zwei Netzen steht (oft zwischen dem lokalen Netz und dem Internet). Damit Ihr Unix/Linux-Rechner in einem lokalen Netz auf das Internet zugreifen kann, muss bei der Konfiguration die Gateway-Adresse angegeben werden. Die Gateway-Adresse bezeichnet also einen Rechner, der ebenfalls im lokalen Netz steht - z. B. mit der IP-Adresse 192.168.12.254. Dieser Rechner hat insofern eine Sonderstellung, als er mit dem Internet in Verbindung steht. Dort hat er eine (vom Provider zugeteilte) gültige IP-Adresse. Der Internetverkehr des gesamten lokalen Netzwerks erfolgt über den Gateway-Rechner, der jeweils die interne IP-Adresse eines jeden Datenpakets in die "offizielle" umsetzt und beim Antwortpaket umgekehrt verfährt (NAT, Network Address Translation).

    Ein Nameserver ist ein Programm, das Rechnernamen bzw. Internetadressen (z. B. www.netzmafia.de) in IP-Adressen übersetzt. Bei kleinen Netzen erfolgt die Zuordnung zwischen Namen und Nummern oft über eine Tabelle (Datei /etc/hosts). Im Internet übernehmen Rechner mit entsprechenden Datenbanken diese Aufgabe. Statt des Begriffs Nameserver ist auch die Abkürzung DNS für Domain Name Server oder Domain Name Services üblich. Wenn Sie in einem Webbrowser die Site www.netzmafia.de ansehen möchten, wird daher als Erstes der Nameserver des Providers kontaktiert, um die IP-Adresse des Netzmafia-Webservers herauszufinden. Erst nachdem das gelungen ist, wird eine Verbindung mit dieser IP-Adresse hergestellt.

    Die Abkürzung DHCP steht für Dynamic Host Configuration Protocol. DHCP wird oft in lokalen Netzwerken verwendet, um die Administration des Netzwerks zu zentralisieren. Anstatt bei jedem Rechner getrennt die IP-Adresse, das Gateway, den Nameserver etc. einzustellen, wird der Router oder ein Rechner als DHCP-Server konfiguriert. Alle anderen Rechner im lokalen Netzwerk nehmen beim Systemstart Kontakt mit dem DHCP-Server auf und fragen diesen, welche Adressen und Einstellungen sie verwenden sollen. Damit reduziert sich die Client-Konfiguration auf ein Minimum.

    Eine besondere Rolle spielt noch das Loopback-Interface: Diese Schnittstelle ermöglicht die Verwendung des Netzwerkprotokolls für lokale Dienste, also zur Kommunikation innerhalb des Rechners. Das klingt vielleicht widersinnig, ist aber für viele elementare Linux-Kommandos erforderlich. Der Grund: Manche Kommandos bauen ihre Kommunikation auf dem Netzwerkprotokoll auf, ganz egal, ob die Daten lokal auf dem Rechner bleiben oder über ein Netz auf einem fremden Rechner weiterverarbeitet werden. Ein Beispiel dafür ist der Druckerdämon lpd, der das Spooling für den Drucker übernimmt und sowohl lokal als auch von fremden Rechnern genutzt werden kann. Auch das X-Protokoll für die grafische Bedineroberfläche arbeitet netzwerkbasiert.

    Als IP-Adresse für das Loopback-Interface ist immer 127.0.0.1 vorgesehen. Alle Distributionen kümmern sich automatisch um die Konfiguration des Loopback-Interface, auch wenn ansonsten keine Netzwerkkonfiguration durchgeführt wird. Dieser Adresse ist in der Regel auch der Name localhost zugeordnet.

    Für die Konfiguration des Netzwerks eines Unix/Linux-Rechers gibt es mehrere Möglichkeiten:

    Im Folgenden soll die letzte Möglichkeit näher betrachtet werden, weil siwe die Interessanteste ist. Die beschreibenen Kommandos werden in der Regel von einem Start-Script in /etc/init.d aufgerufen. Die Kenntnis der folgenden Kommandos ist jedoch trotzdem nützlich, beispielsweise, wenn sie temporär eine Netzwerk-Konfiguration ausprobieren möchten, ohne die Werte zu speichern.

    7.3 Netzwerk-Konfiguration

    Die Netzwerkkonfiguration läuft im Normalbetrieb immer automatisch beim Systemstart ab. Init-Scripts übernehmen die Konfiguration der Schnittstellen, das Anlegen der Routen und vieles mehr. Trotzdem ist das Wissen um die manuelle Konfiguration wichtig, erstens für Problemlösungen und zweitens, weil damit auf die Schnelle auch eine Umkonfiguration von Netzwerkkarten oder ein experimenteller Aufbau möglich ist. Es gibt folgende Arten von Netzwerk-Schnittstellen:

    Auf den (Hardware-)Treiber des Netzwerk-Interface wird aus diesem Grund nicht weiter eingegangen, es soll bei den folgenden Anmerkungen bleiben. Um festzustellen, ob überhaupt ein Treiber geladen wurde, genügt das Kommando

    dmesg | more
    
    das alle Boot-Meldungen auflistet. Darin findet man auch die Meldungen zur Netzwerkkarte, z.B.:
    ...
    
    8139cp 10/100 PCI Ethernet driver v0.0.6 (Nov 19, 2001)
    8139cp: pci dev 00:0f.0 (id 10ec:8139 rev 10) is not an 8139C+ compatible chip
    8139cp: Try the "8139too" driver instead.
    8139too Fast Ethernet driver 0.9.24
    PCI: Found IRQ 9 for device 00:0f.0
    eth0: RealTek RTL8139 Fast Ethernet at 0xe081af00, 00:00:e8:76:2f:ea, IRQ 9
    eth0:  Identified 8139 chip type 'RTL-8139A'
    
    ...
    
    Aus dieser Meldung ist auch die MAC-Adresse des Netzwerk-Interface ablesbar (im Beispiel: 00:00:e8:76:2f:ea).

    Um die Parameter eines Netzwerk-Interfaces anzusehen oder um eine optimale Performance zu erzielen, braucht man ein Programm, das die Konfiguration des Interfaces gestattet. Unter Linux gibt es dafür "ethtool". Leider arbeiten nicht alle Treiber mit dem Programm zusammen.

    In der Regel funktioniert eine Verbindung im Ethernet auch ohne weitere Konfiguration. Um die verfügbare Bandbreite optimal auszunutzen, gilt es einige Grundregeln: Die Duplexeinstellung muss bei beiden Linkpartnern gleich sein. Also entweder beide Seiten eines Link auf Autonegotiation oder beide Seiten fest auf die selben Parameter einstellen. Viele preiswerte Switches bieten keine Einstellmöglichkeiten und arbeiten immer mit Autonegotiation. Die Netzwerkkarten der angeschlossenen Clients müssen also auch auf "Auto" stehen.

    Zur Anzeige der aktuellen Parameter wird "ethtool" mit dem entsprechenden Interface als Parameter aufgerufen. Hier die Ausgabe für das Interface eth0:

    netzmafia:~# ethtool eth0
    Settings for eth0:
    
            Supported ports: [ TP MII ]
            Supported link modes:   10baseT/Half 10baseT/Full
                                    100baseT/Half 100baseT/Full
            Supports auto-negotiation: Yes
            Speed: 10Mb/s
            Duplex: Half
            Port: MII
            PHYAD: 0
            Transceiver: internal
            Auto-negotiation: off
            Supports Wake-on: d
            Wake-on: d
    

    Mit ethtool ist es auch möglich, Einstellungen der Netzwerkkarte zu verändern. Das folgende Kommando stellt das Interface eth0 auf 100 MBit/s und Halbduplex ein.

    ethtool -s eth0 speed 100 duplex half
    
    Für "speed" sind die Parameter 10, 100 und 1000 erlaubt. Der Duplexmode kann auf "half" oder "full" eingestellt werden. Autonegotiation wird mit dem Paramter "autoneg on" eingeschaltet und mit "autoneg off" abgeschaltet.
    ethtool -s eth0 autoneg on
    
    Für Netzwerkinterfaces die WakeOnLAN (WOL) beherrschen (siehe oben), bietet ethtool auch einige Konfigurationsoptionen. Der Benutzer kann festlegen welche Art von Frame ein Aufwachen auslösen soll und ein Kennwort für Wake-on-LAN festlegen. Nicht alle Interfaces unterstützen diese Option.
    ethtool -s eth0 wol <argument>
    
    Das Argument von "wol" ist eine Kombination aus folgenden Buchstaben:
            p  Wake on phy activity
            u  Wake on unicast messages
            m  Wake on multicast messages
            b  Wake on broadcast messages
            a  Wake on ARP
            g  Wake on MagicPacket(tm)
            s  Enable SecureOn(tm) password for MagicPacket(tm)
            d  Disable (wake on nothing).  
    
    Die Option "d" löscht auch alle anderen Optionen.
    ethtool -s eth0 sopass xx:yy:zz:aa:bb:cc
    
    Setzt das Wake-on-LAN-Passwort. Das Passwort wird als Folge von 6 Hexzahlen angegeben, die durch Doppelpunkte getrennt sind.

    Neuere Netzwerkkarten haben mitunter die Möglichkeit, eine LED manuell blinken zu lassen. Das ist zum Identifizieren einer Karte in komplexen Umgebungen sehr hilfreich. Dazu dient der Parameter "-p":

    ethtool -p eth1
    
    In den folgenden Abschnitten werden die wichtigsten Konfigurationsdateien für das Netz besprochen, wobei viele der Dateien - eventuell leicht modifiziert oder mit ähnlichem Nanen - auch bei Windows zu finden sind. Bei Linux findet man diese Daten traditionsgemäß im Verzeichnis /etc.

    7.3.1 Hostname und DNS

    Setzen des Hostnamens

    Die Netzwerksoftware verläßen sich darauf, daß der Name der Maschine einen sinnvollen Wert hat. Er wird im Normalfall während des Boot-Vorgangs mit dem Befehl hostname gesetzt. Um den Hostnamen auf name zu setzen, geben Sie folgendes ein:
    hostname name
    
    Sie können jedoch auch die Datei /etc/hostname mit einem Editor bearbeiten. Es ist üblich, nur den Host-Namen ohne jede Domain-Angabe zu verwenden.

    /etc/hosts

    In dieser Datei werden die Systeme des Netzwerks mit ihrem Systemnamen und die dazu gehörenden Internet-Adressen aufgelistet. Auch, wenn man im normalen Betrieb DNS einsetzt, sollte man einen Teil der Rechnernamen in /etc/hosts eintragen. Oft möchte man nämlich auch während des Bootens, wenn noch keine Netzwerkschnittstellen aktiv sind, symbolische Namen verwenden.

    Um sicherzustellen, daß alle Programme ausschließlich /etc/hosts verwenden, um die Adresse eines Systems zu suchen, müssen Sie ggf. die Datei /etc/nsswitch.conf editieren. Interessant ist die Zeile, die mit "hosts:" beginnt. Dort sollte "files dns" stehen, was bedeutet, daß erst in der lokalen Datei /etc/hosts nachgesehen und dann erst ein Nameserver kontaktiert wird. Typischerweise sieht die Datei im Ausschnitt so aus:

    # /etc/nsswitch.conf
    #
    ...
    hosts:          files dns
    networks:       files
    ...
    
    
    Auf diese Datei wird weiter unten noch genauer eingegangen.

    Die Datei hosts enthält einen Eintrag pro Zeile, bestehend aus der IP-Adresse, dem Hostnamen und einer optionalen Liste von Aliasen für den Hostnamen. Die Felder sind durch Leerzeichen oder Tabulatoren voneinander getrennt, und das Adreßfeld muß in Spalte eins beginnen. Ein Doppelkreuz (#) leitet immer einen Kommentar ein.

    Namen können entweder mit voller Domainangabe (Full Qualified Domain Name, FQDN) oder relativ zur lokalen Domain sein. So ist das System sowohl unter seinem offiziellen als auch unter dem kürzeren lokalen Namen bekannt. Man kann in der Datei auch die Namen und IP-Adressen beliebiger anderer Rechner eintragen. Immer notwendig ist der Eintrag für den Rechner selbst, "127.0.0.1 localhost", denn sonst funktionieren gewisse Dienste (z.B. lpd) nicht.

    Für alle folgenden Beispiele werden für die Rechnernamen Schneewittchen und die sieben Zwerge (in der englischen Fassung von Walt Disney) verwendet. Damit keine Kollision mit real existierenden Internet-Domains auftreten, kann man als Domainnamen beispielsweise "zwerge.local" nehmen. Als Netz verwenden wir das private B-Netz 172.20.y.x - und davon sogar nur ein C-Subnetz, 172.20.20.x.

    Das folgende Beispiel zeigt, wie die Datei /etc/hosts im Zwergenwald aussehen könnte.

    #
    # Hostdatei fuer Snowwhite and Friends
    #
    # IP            FQDN                        Aliase
    127.0.0.1       localhost
    
    # die Zwerge
    10.27.210.17    snowwhite.zwerge.local    snowwhite
    10.27.210.18    doc.zwerge.local          doc
    10.27.210.19    happy.zwerge.local        happy
    10.27.210.20    bashful.zwerge.local      bashful
    10.27.210.21    sneezy.zwerge.local       sneezy
    10.27.210.22    sleepy.zwerge.local       sleepy
    10.27.210.23    grumpy.zwerge.local       grumpy
    10.27.210.24    dopey.zwerge.local        dopey
    ...
    
    Nach der Internet-Adresse wird der "offizielle" Name des Systems angegeben, gefolgt von Alias-Namen für dieses System. Wird als Argument für ein Netzwerk-Kommando ein Name angegeben, so wird in dieser Datei die zugehörige Internet-Adresse ermittelt. Erst über die Adresse wird eine Verbindung zum Zielsystem aufgebaut. Die Datei /etc/hosts wird jedoch auch für den umgekehrten Vorgang benutzt. Mit einem IP-Datagram wird nur die Internet-Adresse des sendenden Systems mitgeschickt. Soll nun der zugehörige Name ermittelt werden, so geschieht dies ebenfalls mittels dieser Datei. Das Resultat ist jedoch immer der "offizielle" Name des Systems. Deshalb ist darauf zu achten, daß stets dieser Name verwendet werden muß, wenn ein Rechnername in weiteren Konfigurationsdateien eingetragen wird.

    Jetzt wissen Sie auch, daß der Eintrag "127.0.0.1 www.microsoft.com" in der /etc/hosts beispielsweise zu komischen Effekten führen würde (welchen?).

    /etc/networks

    Genau wie für IP-Adressen möchte man manchmal auch symbolische Namen für Netzwerknummern verwenden. Aus diesem Grunde gibt es parallel zu /etc/hosts die Datei /etc/networks, die Netzwerknamen auf Netzwerknummern abbildet. Diese Datei wird nicht unbedingt benötigt. Im Zwergenwald würden z.B. folgende networks-Datei installiert:
    # /etc/networks
    zwergenwald      172.20.20.0
    
    Beachten Sie, daß die Namen in networks nicht mit den Hostnamen in der Datei hosts übereinstimmen und kollidieren, da manche Programme ansonsten seltsame Resultate produzieren.

    /etc/nsswitch.conf

    Diese Datei wird auch als "Resolver-Bibliothek" bezeichnet. Der Begriff Resolver bezieht sich nicht auf ein spezielles Programm, sondern auf eine Sammlung von Funktionen, die bei Linux zur Standard-C-Bibliothek gehören. Ihre wichtigsten Routinen sind gethostbyname(2) und gethostbyaddr(2), die alle zu einem Namen gehörenden IP-Adressen zurückliefern und umgekehrt. über die Datei /etc/nsswitch.conf können Sie einstellen, ob Sie die gewünschten Informationen in /etc/hosts nachschlagen, DNS-Server befragen oder die hosts-Datenbank des Network Information Service (NIS) benutzen wollen.

    In der Datei /etc/nsswitch.conf kann der Systemadministrator eine Vielzahl verschiedener Datenbanken konfigurieren. Wir besprechen hier nur diejenigen Optionen, die sich auf die Auflösung von Host- und Netzwerk-IP-Adressen beziehen. Optionen in /etc/nsswitch.conf müssen in getrennten Zeilen erscheinen, wobei die Argumente durch Leerzeichen oder Tabulatorzeichen voneinander getrennt sein müssen. Ein Doppelkreuz (#) leitet einen Kommentar ein, der sich bis zum Zeilenende erstreckt. Jede Zeile beschreibt einen bestimmten Dienst, z.B. die Auflösung von Hostnamen. Das erste Feld jeder Zeile gibt den Namen der Datenbank an und endet mit einem Doppelpunkt. Der Rest jeder Zeile enthält Optionen, die die Art des Zugriffs auf die betreffende Datenbank regeln. Die folgenden Optionen sind verfügbar:

    dns Verwendet das Domain Name System (DNS) zur Auflösung der Adresse. Das macht allerdings nur Sinn bei der Auflösung von Hostadressen, nicht von Netzadressen. Der Mechanismus benutzt die Datei /etc/resolv.conf.
    files Durchsucht eine lokale Datei nach den Host- oder Netznamen und ihren zugehörigen IP-Adressen. Diese Option verwendet die traditionellen Dateien /etc/hosts und /etc/networks.
    nis oder nisplus Verwendet das Network Information System (NIS) zur Auflösung einer Host- oder Netzadresse.

    In der Reihenfolge, in der die Dienste angegeben sind, werden sie auch abgefragt, wenn ein Name aufgelöst werden soll. Anspruch genommen, in der sie aufgelistet sind. Diese Liste befindet sich in der Datei /etc/nsswitch.conf in dem Abschnitt, in dem die Beschreibung der Dienste erfolgt. Die Dienste werden von links nach rechts abgefragt, und die Suche wird standardmäßig beendet, wenn ein Wert (oder Name) erfolgreich aufgelöst wurde. Zum Beispiel:

    # /etc/nsswitch.conf
    #
    hosts:          dns files
    networks:       files
    
    Dieses Beispiel veranlaßt das System, Hosts zuerst im DNS zu suchen und wenn dort nichts gefunden wird, die Suche in der Datei /etc/hosts fortzusetzen. Um Netzwerknamen aufzulösen, wird ausschließlich die Datei /etc/networks benutzt.

    Sie können das Suchverhalten noch genauer kontrollieren, indem Sie zusätzlich Aktionen (action items) angeben, die festlegen, welche Aktion nach dem jeweils letzten Namensauflösungsversuch durchgeführt werden soll. Auf diese Erweiterungen wird an dieser Stelle nicht weiter eingegangen.

    /etc/resolv.conf

    Wenn Sie die Resolver-Bibliothek für die Verwendung von DNS konfigurieren, müssen Sie ihr auch mitteilen, welche Server sie benutzen soll. Dafür gibt es eine separate Datei namens /etc/resolv.conf. Fehlt diese Datei oder ist sie leer, nimmt der Resolver an, daß sich der Name-Server auf Ihrem lokalen Host befindet. Um einen Name-Server auf Ihrem lokalen Host laufen zu lassen, müssen Sie ihn separat einrichten. Normalerweise verwendet man einen bereits vorhandenen Name-Server. Bei einer Dialup-Verbindung ins Internet wird für gewöhnlich der Name-Server des Providers in der Datei /etc/resolv.conf eintragen.

    Die wichtigste Option in /etc/resolv.conf ist daher nameserver, welche die Adresse eines Name-Servers angibt. Wenn Sie die Option mehrmals angeben, werden die Server in der angegebenen Reihenfolge verwendet. Deshalb sollten Sie unbedingt den zuverlässigsten Server an erster Stelle eintragen. Wenn Sie keinen Name-Server eintragen, nimmt der Resolver an, daß einer auf der lokalen Maschine läuft. Gegenwärtig werden bis zu drei nameserver-Einträge in /etc/resolv.conf unterstützt.

    Zwei weitere Befehle, domain und search, geben Domainnamen an, die der Resolver an einen Namen anhängt, wenn die zugehörige Adresse beim ersten Versuch nicht gefunden wird. Mit domain können Sie eine Default-Domain angeben, die immer dann angehängt werden soll, wenn ein Name nicht aufgelöst werden konnte. Wird dem Resolver z.B. der Name "sleepy" übergeben, findet dieser den Namen "sleepy." nicht im DNS, da es eine solche Top-Level-Domain nicht gibt. Wird "zwerge.local" als Standarddomäne angegeben, wiederholt der Resolver seine Anfrage und hängt diese Standarddomäne an den Hostnamen an. Die Abfrage nach "sleepy.zwerge.local" ist nun erfolgreich (natürlich nur, wenn es einen Nameserver gibt).

    Mit der Option search kann eine Suchliste angegeben werden, gewissermaßen eine Verallgemeinerung der domain-Anweisung. Während bei domain nur eine einzelne Domain angeben werden darf, akzeptiert search eine ganze Liste davon, deren Einträge alle der Reihe nach durchprobiert werden, bis ein gültiger DNS-Eintrag gefunden wird. Die einzelnen Namen der Liste müssen durch Leerzeichen oder Tabulatoren voneinander getrennt werden.

    Die Befehle search und domain schließen einander aus und dürfen höchstens einmal auftauchen. Wenn keiner der beiden Befehle angegeben ist, versucht der Resolver, die Default-Domain mit Hilfe der Systemfunktion getdomainname(2) aus dem lokalen Hostnamen zu raten. Hat der Hostname keinen Domain-Teil, wird als Default-Domain die Root-Domain (.) angenommen.

    Werfen Sie einen Blick auf die Datei resolv.conf des Zwergenwaldes:

    # /etc/resolv.conf
    # Unsere Domain
    domain         zwerge.local
    #
    # Wir benutzen "doc" als zentralen Name-Server:
    nameserver     172.20.20.1
    
    Wenn Sie in dieser Konfiguration die Adresse von "dopey" suchen, wird der Resolver erst versuchen, "dopey." nachzuschlagen, und wenn das fehlschlägt, "dopey.zwerge.local".

    Zur Konfiguration der Ethernet-Schnittstellen und Initialisierung der Routing-Tabelle sind zwei Befehle von besonderer Bedeutung, nämlich ifconfig (Interface-Konfiguration) und route und deren aktueller Nachfolger ip.

    7.3.2 Schnittstellenkonfiguration mit ifconfig und route

    Das Starten von TCP/IP erfolgt (unter Unix) durch Shell-Skripte, die je nach Unix-Derivat anders heißen und sich an ganz unterschiedlichen Stellen des jeweiligen Dateisystems befinden können (Bei Linux beispielsweise im Verzeichnis /etc/init.d. So unterschiedlich die Shell-Skripte auch sein mögen, die Initialisierung der Netzwerksoftware erfolgt in jedem Falle durch das ifconfig-Kommando. Hier wird auch die Initialisierung der Netzwerkschnittstellen vorgenommen. Dabei gibt es folgende Arten von Schnittstellen: Das Loopback-Interface ist eine spezielle Schnittstelle, die zum lokalen System zurückgeführt. Dies bedeutet, daß alle Daten, die durch das Loopback-Interface geschickt werden, wieder im lokalen System empfangen werden, Dieser Mechanismus erlaubt eine Kommunikation von lokalen Prozessen über TCP/IP und wird insbesondere von TCP/IP-Verwaltungsprozessen, aber auch von anderen Diensten genutzt (so z.B. bei Datenbanken). Die Standard-Internet-Adresse der Loopback-Schnittstelle ist 127.0.0.1 und sollte, obwohl es theoretisch möglich ist, nicht verändert werden.

    ifconfig dient dazu, eine Schnittstelle für die Netzwerkschicht des Kernels sichtbar zu machen. Das beinhaltet die Zuweisung einer IP-Adresse und verschiedener anderer Parameter sowie die Aktivierung des Interface, damit der Kernel die IP-Pakete über diese Schnittstelle senden und empfangen kann. Die einfachste Art, es aufzurufen, ist:

    ifconfig <interface> <ip-addresse> netmask <maske>
    
    Der Befehl weist "interface" die Adresse "ip-adresse" zu und aktiviert es. Alle anderen Parameter werden auf Standardwerte gesetzt. Fehlt die Netzmaske (netmask <maske>), wird sie aus der Netzwerkklasse der Adresse abgeleitet; für ein Klasse-B-Netz wäre das 255.255.0.0. Oftmals besteht das Kommando aber zumindest auf der Netzmaske als Parameter. Später dazu mehr.

    Initialisiert wird das Loopback-Interface durch das Kommando:

    ifconfig lo 127.0.0.1
    
    Sogenannte "Broadcast-Interfaces" sind die üblichen Schnittstellen zu lokalen Netzwerken, über die mehrere Systeme erreichbar sind, und über die Broadcasts, also Nachrichten an alle, verschickt werden. Es handelt sich dabei um Schnittstellen zu Ethernet und TokenRing. Neben der Internet-Adresse werden bei der Initiatisierung des Broadcast-Interfaces auch die Netzmaske und die Broadcast-Adresse angegeben:

    ifconfig eth0 192.168.0.1 netmask 255.255.255.0 broadcast 192.168.0.255

    Neben den Broadcast-Schnittstellen gibt es noch die sogenannten Point-to-Point-Schnittstellen. Sie sind dadurch gekennzeichnet, daß man nur über sie ein anderes System erreichen kann. Beispiele sind SLIP (Serial Line IP) und das Point-to-Point-Protokoll PPP, die Verbindungen über die serielle Schnittstelle oder per Modem/ISDN-Adapter WAN-Verbindungen zulassen. Die Initialisierung einer Point-to-Point-Schnittstelle hat z.B. die folgende Form:

    ifconfig ppp0 192.168.1.1 192.168.1.2 netmask 255.255.255.240

    So eine PPP-Verbindung bildet ein eigenständiges Netzwerk. Sollen mehrere Verbindungen kombiniert werden, so muß eine Unterteilung in Subnetze erfolgen. Das heißt, daß eine entsprechende Netzmaske gewählt werden muß.

    ifconfig kennt eine ganze Reihe von Optionen. Der allgemeine Programmaufruf lautet:

    ifconfig interface [address [parameters]]
    
    interface ist der Name der zu konfigurierenden Schnittstelle, und address ist die IP-Adresse, die ihr zugewiesen werden soll. Sie kann entweder als dotted quad angegeben werden oder als Name, den ifconfig in /etc/hosts nachschlägt.

    Ein Aufruf nur mit dem Interface-Namen gibt die Konfiguration des Interface aus. Wird es ganz ohne Parameter aufgerufen, zeigt es alle bisher konfigurierten Schnittstellen an; die Option -a erzwingt zusätzlich die Anzeige der inaktiven. Beispiel:

    # ifconfig eth0
    eth0      Link encap 10Mbps Ethernet  HWaddr 00:00:C0:90:B3:42
              inet addr 172.20.20.2 Bcast 172.20.20.255 Mask 255.255.255.0
              UP BROADCAST RUNNING  MTU 1500  Metric 0
              RX packets 3136 errors 217 dropped 7 overrun 26
              TX packets 1752 errors 25 dropped 0 overrun 0
    
    
    MTU gibt die maximale Blockgröße an. Die Metrik wird von einigen Betriebssystemen verwendet, um die Kosten einer Route zu berechnen. Linux benutzt diesen Wert bisher nicht, definiert ihn aber trotzdem aus Gründen der Kompatibilität. Die Zeilen RX und TX zeigen an, wie viele Pakete empfangen (RX - receive) bzw. gesendet wurden (TX - transmit), wie viele Fehler dabei auftraten, wie viele Pakete verworfen wurden (dropped) und wie viele wegen eines überlaufs (overrun) verlorengingen. Ein überlauf beim Empfänger tritt dann auf, wenn Pakete schneller hereinkommen, als der Kernel die Interrupts bedienen kann.

    Die folgende Liste zeigt die Parameter, die ifconfig versteht; die Namen der zugehörigen Flags stehen in Klammern. Optionen, die eine bestimmte Eigenschaft des Interface aktivieren, können mit vorangestelltem Minuszeichen (-) auch benutzt werden, um ihn wieder auszuschalten.

    up Aktiviert ein Interface für die IP-Schicht des Kernels. Sie wird impliziert, wenn auf der Kommandozeile eine Adresse angegeben ist. Sie kann auch dazu benutzt werden, ein Interface zu reaktivieren, wenn es mit der down-Option temporär deaktiviert wurde. Entspricht den Flags UP und RUNNING.
    down Markiert eine Schnittstelle als inaktiv, d.h. unzugänglich für die Netzwerkschicht. Dadurch wird jeglicher IP-Transport durch die Schnittstelle unterbunden. Beachten Sie, daß dadurch automatisch alle Routing-Einträge gelöscht werden, die diese Schnittstelle verwenden.
    netmask Maske Weist des Interface eine Subnetzmaske zu. Sie kann entweder als eine 32-Bit-Hexadezimalzahl (mit führender 0x) oder als dotted quad (Beispiel: 255.255.255.0) angegeben werden.
    pointopoint Adresse Wird für Punkt-zu-Punkt-Verbindungen benutzt, die nur zwei Hosts miteinander verbinden. Sie wird beispielsweise für die Konfiguration von SLIP- und PLIP-Schnittstellen benötigt und teilt dem Kernel die IP-Adresse des anderen Systems mit. Falls eine Punkt-zu-Punkt-Adresse gesetzt wurde, zeigt ifconfig das POINTOPOINT-Flag an ("pointopoint" wird wirklich so geschrieben).
    broadcast Adresse Die Broadcast-Adresse wird normalerweise aus der Netzwerknummer gebildet, indem alle Bits des Hostanteils auf eins gesetzt werden. Einige IP-Implementierungen verwenden dagegen eine Broadcast-Adresse, bei der die Bits des Hostteils auf null gesetzt sind. Die Option broadcast dient dazu, Ihre Konfiguration an eine derartige Umgebung anzupassen. Wenn dem Interface eine Broadcast-Adresse zugeordnet wurde, gibt ifconfig das Flag BROADCAST aus.
    metric Wert Dem Routing-Tabellen-Eintrag des Interface einen Metrikwert zuordnen. Dieser Wert wird beispielsweise vom Routing Information Protocol (RIP) berücksichtigt, wenn es Routing-Tabellen für Ihr Netz erstellt. Die Default-Metrik, die ifconfig einem Interface zuweist, ist 0. Wenn Sie das Routing in Ihrem Netz nicht mit RIP regeln, benötigen Sie diese Option nicht; aber auch sonst wird die Option selten benutzt.
    mtu Bytes Setzen der Maximum Transmission Unit (MTU), d.h. die maximale Anzahl von Bytes, die das Interface in einer Transaktion behandeln kann. Für Ethernets liegt der Defaultwert bei 1500; für SLIP beträgt er 296.
    arp Kann nur für Broadcast-fähige Netz wie Ethernet verwendet werden. Ermöglicht die Benutzung von ARP zur Zuordnung von IP-Adressen zu physikalischen Adressen. Für Broadcast-Netze wird sie per Voreinstellung eingeschaltet. Ist ARP abgeschaltet, zeigt ifconfig das NOARP-Flag an. -arp schaltet ARP explizit aus.
    promisc Versetzt die Schnittstelle in den promiscous mode. Auf Broadcast-Netzen hat das zur Folge, daß die Schnittstelle alle Pakete unabhängig davon empfängt, ob sie für einen anderen Host bestimmt sind oder nicht. Dadurch kann man den Netzwerkverkehr mit Paketfiltern wie tcpdump analysieren. -promisc schaltet den Modus ab.
    allmulti Multicast-Adressen sind wie Ethernet-Broadcast-Adressen, mit der Einschränkung, daß sie nicht automatisch jeden möglichen Adressaten berücksichtigen, sondern nur solche, die ausdrücklich zum Empfang vorgesehen (programmiert) sind. Sie eignen sich besonders für Anwendungen wie Ethernet-basierte Videokonferenzen oder Audioübertragungen übers Netz, die nur an Interessierte gerichtet sind. -allmulti schaltet Multicast-Adressen ab.

    Das route-Kommmando

    route erlaubt es Ihnen, Routen in die Routing-Tabelle des Kernels einzutragen oder aus ihr zu entfernen. Es kann aufgerufen werden als:
    route [add|del] [-net|-host] <target> [dev <if>]
    
    Dabei bestimmen die Argumente add bzw. del, ob die Route zu target eingetragen bzw. aus target entfernt wird. Die Optionen -net und -host teilen dem route-Kommando mit, ob target ein Netzwerk oder ein Hostrechner ist (letzteres wird angenommen, wenn Sie hier nichts angeben). Das Argument dev if ist optional und erlaubt Ihnen die Angabe einer Netzwerkschnittstelle, an die die Route gerichtet werden soll. Wenn Sie dem Kernel keine Informationen darüber geben, versucht er selbst, ein sinnvolles Argument herauszufinden.

    Den Rechner konfigurieren

    Das allererste Interface, die aktiviert werden muß, ist das Loopback-Interface:
    ifconfig lo 127.0.0.1
    

    Manchmal wird anstelle der IP-Adresse auch der Name localhost verwendet. Der Befehl ifconfig sucht diesen Namen in der Datei /etc/hosts, wo er als Hostname für 127.0.0.1 definiert sein muß.

    Zur Anzeige der Konfiguration eines Interface rufen Sie ifconfig mit dem Namen des Interface auf. Ganz ohne Parameter wird die Konfiguration aller Interfaces gezeigt:

    ifconfig lo
    lo        Link encap:Local Loopback
              inet addr:127.0.0.1  Mask:255.0.0.0
              UP LOOPBACK RUNNING  MTU:3924  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
              Collisions:0
    

    Nun fehlt noch ein Eintrag in der Routing-Tabelle, der festlegt, daß dieses Interface als Route für das Zielsystem 127.0.0.1 dient. Dazu geben Sie folgendes ein:

    route add 127.0.0.1
    
    Es kann auch hier wieder anstelle der IP-Adresse der Namen localhost verwendet werden (sofern er in /etc/hosts eingetragen ist).

    Es wäre auch möglich, das Netz von localhost einzutragen:

    route add -net 127.0.0.0
    
    Als nächstes wird mit dem Programm ping getestet, ob alles einwandfrei funktioniert:
    ping localhost
    PING localhost (127.0.0.1): 56 data bytes
    64 bytes from 127.0.0.1: icmp_seq=0 ttl=255 time=0.4 ms
    64 bytes from 127.0.0.1: icmp_seq=1 ttl=255 time=0.4 ms
    64 bytes from 127.0.0.1: icmp_seq=2 ttl=255 time=0.4 ms
    ^C
    --- localhost ping statistics ---
    
    3 packets transmitted, 3 packets received, 0% packet loss
    round-trip min/avg/max = 0.4/0.4/0.4 ms
    
    Pakete an 127.0.0.1 werden also korrekt ausgeliefert und es erfolgt sofort eine Antwort. Das beweist, daß die erste Netzwerkschnittstelle erfolgreich konfiguriert wurde.

    Die bisher beschriebenen Schritte reichen aus, um Netzwerk-Programme auf einem alleinstehenden Rechner zu benutzen. Die oben angegebenen Zeilen müssen in das Netzwerk-Initialisierungsskript eingetragen werden, damit sie beim Systemstart ausgeführt werden. In der Regel wird zumindest die Konfiguration von "lo" beim Installieren des Systems bereits erledigt. Zur Einstimmung war das obige aber keine schlechte Übung. Nun sollte zum Beispiel telnet localhost eine telnet-Verbindung aufbauen und Ihnen den Login-Prompt Ihres Systems geben.

    Die Konfiguration von Ethernet-Schnittstellen geht fast genauso vonstatten wie eben. Man braucht nur ein paar Parameter mehr, um auch Subnetze verwenden zu können.

    Im Zwergenwald wird vom Klasse-B-Netz nur ein C-Subnetz verwendet. Um dies dem Interface mitzuteilen, sieht der ifconfig-Aufruf so aus:

    ifconfig eth0 172.20.20.2 netmask 255.255.255.0
    
    oder unter Verwendung des Namens aus /etc/hosts:
    ifconfig eth0 doc netmask 255.255.255.0
    
    Dies weist des Interface eth0 die IP-Adresse von doc (172.20.20.2) zu. Hätte man die Netzmaske weggelassen, wäre sie von ifconfig aus der Netzklasse der Adresse abgeleitet worden, was den inkorrekten Wert von 255.255.0.0 ergeben hätte. Ein schneller Test ergibt jetzt:
    ifconfig eth0
    eth0      Link encap 10Mps Ethernet HWaddr  00:00:C0:90:B3:42
              inet addr 172.20.20.2 Bcast 172.20.20.255 Mask 255.255.255.0
              UP BROADCAST RUNNING  MTU 1500  Metric 1
              RX packets 0 errors 0 dropped 0 overrun 0
              TX packets 0 errors 0 dropped 0 overrun 0
    
    ifconfig hat die Broadcast-Adresse (im Bcast-Feld angezeigt) automatisch auf den passenden Wert gesetzt, nämlich die Netzwerknummer mit einem Hostteil, bei dem alle Bits auf eins gesetzt sind. Außerdem wurde die maximale übertragungseinheit (MTU = Maximum Transmission Unit, die maximale Größe der IP-Pakete) auf das Ethernet-spezifische Maximum von 1.500 Bytes eingestellt.

    Wie bereits bei der Loopback-Schnittstelle muß noch eine Route eingetragen werden. Für den Zwergenwald gilt:

    route add -net 172.20.20.0
    
    Damit ist eine Route definiert, die alle Pakete, die ans Netz 172.20.20.0 gerichtet sind an die Ethernetkarte schickt. Das weiß das System, weil die Ethernetkarte ja die Adresse 172.20.20.2 hat, also die gleiche Netzadresse. Dieser Befehl ist bei modernen Versionen von ifconfig unnötig geworden, weil diese Route eben automatisch bei der Konfiguration angelegt wird.

    Vielleicht haben Sie bemerkt, daß die Angabe des Interface fehlt. Der Kernel prüft alle bisher konfigurierten Interfaces und vergleicht das Zielnetz (in unserem Fall 172.20.20.0) mit der Netznummer der Interface-Adresse, d.h. dem bitweisen UND der Interface-Adresse und der Netzmaske. Die einzige Schnittstelle, bei der diese beiden Werte übereinstimmen, ist eth0.

    Die Option -net ist nötig, da route sowohl Routen zu Netzwerken als auch zu einzelnen Hosts einrichten kann. Wenn man route eine IP-Adresse übergibt, versucht das Kommando festzustellen, ob es sich dabei um eine Host- oder Netzadresse handelt, indem es den Hostteil betrachtet. Ist der Hostteil null, wird angenommen, daß es sich um eine Netz-Adresse handelt, andernfalls ist es eine Hostadresse. Deshalb würde route in unserem Beispiel davon ausgehen, daß 172.20.20.0 eine Hostadresse ist (Netz: 172.20.0.0, Host: ...20.0). Da ein Subnetz verwendet wird, braucht das route-Kommando den Parameter "-net".

    Unter Verwendung des Eintrags in /etc/networks wird das Kommando einfacher:

    route add zwergenwald
    

    Nun sollte man überprüfen, ob das Ethernet tatsächlich arbeitet. Wählen Sie irgendeine bereits konfigurierte Maschine auf Ihrem lokalen Ethernet, z.B. grumpy, und geben Sie folgenden Befehl ein:

    # ping grumpy
    PING grumpy: 64 byte packets
    64 bytes from 172.20.20.1: icmp_seq=0. time=10. ms
    64 bytes from 172.20.20.1: icmp_seq=1. time=7. ms
    64 bytes from 172.20.20.1: icmp_seq=2. time=8. ms
    ^C
    
    ----doc.zwerge.local PING Statistics----
    
    4 packets transmitted, 4 packets received, 0 packets lost
    
    Wenn ping keinerlei Antwort bekommt, sollten Sie die Schnittstellenkonfiguration mit netstat überprüfen. Die Paketstatistiken, die ifconfig ausgibt, geben an, ob überhaupt Pakete über das Interface übertragen wurden. Zusätzlich sollten Sie auf beiden Maschinen mit route die Routing-Informationen überprüfen. Wenn Sie route ohne weitere Parameter aufrufen, gibt es die Routing-Tabellen aus. Die Option -n sorgt dafür, daß es Adressen numerisch anstelle der symbolischen Hostnamen darstellt:
    route -n
    Kernel routing table
    Destination  Gateway  Genmask         Flags Metric Ref Use    Iface
    127.0.0.1    *        255.255.255.255 UH    1      0   112    lo
    172.20.20.0   *       255.255.255.0   U     1      0    10    eth0
    

    Die Spalte "Flags" enthält eine Liste von Flags für jedes Interface. U ist für aktive Schnittstellen immer gesetzt. Ein Flag H in dieser Spalte besagt, daß die Zieladresse einen einzelnen Host bezeichnet. Wenn eine eingetragene Route benutzt wird, ändert sich der Wert im Use-Feld ständig.

    Bisher wurde eine Maschine auf einem isolierten Ethernet eingerichtet (z.B. in einem Heimnetz). Der Regelfall ist allerdings, daß mehrere Netze durch Gateways miteinander verbunden sind (man will ja auch "nach draußen"). Diese Gateways verbinden zwei oder mehrere Ethernets miteinander, oder sie stellen das Tor zum Internet bereit. Um einen Gateway zu nutzen, muß der Netzwerkschicht zusätzliche Routing-Informationen zur Verfügung stehen.

    Zum Beispiel sind die Ethernets des Zwergenwaldes und des Feenreichs durch solch ein Gateway miteinander verbunden, nämlich doc, der bereits konfiguriert sei. Auf allen Maschinen des Zwergenwaldes muß nur noch eine weitere Route eingetragen werden, die angibt, daß alle Maschinen im Netzwerk der Feen über doc erreichbar sind. Der entsprechende Aufruf von route sieht so aus (sofern feenreich in /etc/networks eingetragen wurde):

    route add feenreich gw doc
    
    Dabei gibt gw an, daß das folgende Argument ein Gateway bezeichnet. Natürlich muß jedes System im Feen-Netz, zu dem Sie Verbindung aufnehmen wollen, einen analogen Routing-Eintrag für das Zwergen-Netz haben. Sonst könnten Sie nur Daten vom Zwergen-Netz an das Feen-Netz senden, die Rechner im Feen-Netz wären aber zu keiner Antwort fähig.

    Das war nun ein Gateway, das Pakete zwischen zwei isolierten Netzen befördert. Nehmen Sie nun an, daß doc außerdem eine Verbindung ins Internet hat. Dann wäre es wünschenswert, daß Pakete für beliebige Zieladressen, die nicht im Zwergen-Netz liegen, an doc weitergereicht werden. Das erreicht man, indem doc zum Default-Gateway wird:

    route add default gw doc                 oder
    route add default gw 172.20.20.1         bei Angabe der IP-Adresse
    
    Die Netzwerkadresse default ist eine Abkürzung für 0.0.0.0, die Default-Route. Sie paßt zu jeder Zieladresse und wird immer dann benutzt, wenn keine andere eingetragene Route paßt.

    Es ist ziemlich einfach, eine Maschine als Gateway einzurichten. Nehmen wir an, wir befänden uns wieder auf doc, der mit zwei Ethernet-Karten ausgestattet ist, die jeweils mit einem der beiden Netze verbunden sind. Man muß nur beide Schnittstellen getrennt konfigurieren und ihnen eine Adresse auf dem jeweiligen Subnetz zuzuweisen. Dabei ist es recht nützlich, zusätzlich zum offiziellen Hostnamen doc zwei Namen für die beiden Schnittstellen in /etc/hosts zu definieren:

    172.20.20.1      doc.zwerge.local    doc   doc-if1
    172.20.21.1      doc-if2
    

    Mit diesen Einträgen lautet die Befehlsreihenfolge für die Einrichtung der beiden Interfaces:

    ifconfig eth0 doc-if1 ...
    route add zwergenwald
    ifconfig eth1 doc-if2 ...
    route add feenreich
    
    Damit Pakete überhaupt zwischen den verschiedenen Netzwerkschnittstellen vermittelt werden, bedarf es in neueren Kerneln des Kommandos
    echo '1' > /proc/sys/net/ipv4/ip_forward
    
    Wenn es dann nicht funktioniert, überprüfen Sie, ob Ihr Kernel mit Unterstützung für IP-Forwarding übersetzt wurde.

    Sie brauchen nicht einmal eine zweite Netzwerkkarte, denn es gibt sogenannte "Device-Aliase". Dies sind virtuelle Geräte, die mit der gleichen physischen Hardware verbunden sind, jedoch gleichzeitig aktiviert werden können, um unterschiedliche IP-Adressen zu haben. Sie werden normalerweise mit dem Gerätennahmen gefolgt von einem Doppelpunkt und einer Zahl dargestellt (zum Beispiel eth0:1). Wenn Sie einen Alias verwenden, können weder das Interface noch der Alias zur Verwendung von DHCP konfiguriert werden. eth0:1 ist der erste Alias für eth0. Der zweite Alias hätte den Namen eth0:2, usw. Die Befehle um beide Netze über eine Netzwerkkarte zu routen, würden lauten:

    ifconfig eth0 doc-if1 ...
    route add zwergenwald
    ifconfig eth0:1 doc-if2 ...
    route add feenreich
    

    Die Fehlermeldungen des route-Kommandos sind relativ kryptisch. Bei Linux kann - im Gegensatz zu anderen Unixen - die Metrik-Angabe entfallen. Man kann mehrere Routen zu einem Ziel (mit identischer Netzmaske) eingeben, sofern jeweils ein anderer Gateway angegeben wird.

    Fehlermeldungen des route-Kommandos:

    SIOCADDRT: Network is unreachable
    route add default gw 1.2.3.4
    Die angebene Adresse gehört nicht zum eigenen Netzwerk und so kann der Rechner keine Pakete dorthin weiterleiten.

    SIOCADDRT: File exists
    Die angegebene Route existiert bereits.

    SIOCADDRT: No such device
    Es wurde das Schlüsselwort gw vor der Default-Gateway-Adresse vergessen; also nicht:
    route add -net 10.2.2.76/24 10.1.1.22
    sondern:
    route add -net 10.2.2.76/24 gw 10.1.1.22

    SIOCDELRT No such process
    Versuch, eine Route zu löschen, die nicht existiert.

    SIOCADDRT: Operation not supported by device
    Es wurde das Schlüsselwort gw oder die Gateway-Adresse vergessen; also nicht:
    route add -net 10.0.0.0/8 10.1.1.254 oder
    route add -net 172.23.24.128/25
    sondern:
    route add -net 10.0.0.0/8 gw 10.1.1.254 oder
    route add -net 172.23.24.128/25 gw 10.1.1.22

    SIOCADDRT: Operation not permitted
    Sie arbeiten nicht mit root-Berechtigung.

    SIOCADDRT: Invalid argument
    Falsche Kommandosyntax (z.B. vergessene Netzmaske); also nicht:
    route add -net 10.2.2.0 gw 10.1.1.254 oder
    route del -net 172.23.0.0
    sondern:
    route add -net 10.2.2.0 netmask 255.255.255.0 gw 10.1.1.254 oder
    route add -net 10.2.2.0/24 gw 10.1.1.254 bzw.
    route del -net 172.23.0.0/16 oder
    route del -net 172.23.0.0 netmask 255.255.0.0

    route: netmask doesn't match route address
    Die Netzmaske passt nicht zur Host- und Gateway-Adresse.

    route: netmask 00ffffff doesn't make sense with host route
    Meist wurde der Parameter -net vergessen. Das Kommando nimmt dann an, dass man eine Host-Route angeben will. Oder man hat bei einer Host-Route eine Netzmaske angegeben.

    addr: Unknown host
    Meist wurde eine falsche Netzmaske angegebn, die das Kommando falsch interpretiert.

    route: bogus netmask 255.255.255.25
    Die Netzmaske ist falsch angegeben worden (z.B. '25' oder '2555' statt '255').

    Anmerkung: Die Syntax des route-Kommandos variiert von System zu System.

    7.3.3 Linux Netzwerk-Konfiguration mit ip

    Das Kommando ip ersetzt die bisherigen Kommandos ifconfig und route:

    Der ip-Aufruf zeigt wie ifconfig, route und arp den aktuellen Zustand an. Der Befehl horcht auf folgende Syntax:

    ip [Optionen] Objekt [Kommando [Argumente]]
    
    Nicht umsonst ist die "IP Command Reference" mehr als 60 Seiten dick ( http://linux-ip.net/gl/ip-cref/). ip kann auch komplexe Vorgänge erledigen, weshalb man beispielsweise auch kein IP-Aliasing mehr verwenden muss, um einer Schnittstelle mehrere IP-Adressen zuzuweisen. Statt mit "eth0" eth0:1" zu hantieren weisen Sie zwei IP-Adressen an eth0 folgendermaßen zu:
    ip address add 129.187.206.140/24 dev eth0
    ip address add 129.187.206.148/24 dev eth0
    
    Man kann auch einen Alias zuweisen, um die Abwärtskompatibilität zu den alten Tools zu erhalten:
    ip address add 129.187.206.140/24 dev eth0
    ip address add 129.187.206.148/24 dev eth0 label eth0:1
    
    Es folgt ein Beispiel für die Ausgabe der IP-Adressen mit dem Befehl ip address show:
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
        inet6 ::1/128 scope host
           valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
        link/ether 00:0e:0c:07:e7:72 brd ff:ff:ff:ff:ff:ff
        inet 129.187.206.140/24 brd 129.187.206.255 scope global eth0
        inet 129.187.206.148/24 brd 129.187.206.255 scope global secondary eth0:1
        inet 129.187.206.149/24 brd 129.187.206.255 scope global secondary eth0:2
        inet 129.187.206.152/24 brd 129.187.206.255 scope global secondary eth0:3
        inet 129.187.206.153/24 brd 129.187.206.255 scope global secondary eth0:4
        inet 129.187.206.154/24 brd 129.187.206.255 scope global secondary eth0:5
        inet 129.187.206.156/24 brd 129.187.206.255 scope global secondary eth0:6
        inet 129.187.206.157/24 brd 129.187.206.255 scope global secondary eth0:7
        inet 129.187.206.158/24 brd 129.187.206.255 scope global secondary eth0:8
        inet6 fe80::20e:cff:fe07:e772/64 scope link
           valid_lft forever preferred_lft forever
    
    zugewiesene Adressen lassen sich auch ganz einfach löschen:
    ip address del 129.187.206.157/24 dev eth0
    ip address del 129.187.206.158/24 dev eth0
    
    Zusätzlich erlaubt es ip, den Namen der Netzwerkkarte selbst zu ändern. Das sollte man aber nur bei deaktivierten Karten machen, da unerwartete Effekte auftreten, wenn der Name einer aktivierten und benutzten Karte geändert wird. Um »eth0« in »test0« umzubenennen, genügen die folgenden Zeilen:
    ip link set dev eth0 down
    ip link set dev eth0 name test0
    ip link set dev test0 up
    

    Manchmal sind die Fehlermeldungen von ip etwas irreführend, zum Beispiel:

    ip address add 129.187.206.159/24 dev eth0 label eth0:1
    RTNETLINK answers: File exists
    
    Die Fehlermeldung bedeutet, dass eine Adresse oder Route zu einer bereits konfigurierten Schnittstelle hinzugefügt wurde - einen entsprechende Datei gibt es nicht.

    Der Befehl ip erlaubt auch fortgeschrittenes Routing wie z. B. Policy-Routing. Die Routen können mit folgendem Kommando angezeigt werden:

    ip route show
    129.187.206.0/24 dev eth0  proto kernel  scope link  src 129.187.206.140
    default via 129.187.206.254 dev eth0
    
    Die erste Zeile ist eine Regel, die aussagt, dass alles nach 129.187.206.0 über 129.187.206.140 versandt werden muss (das ist ja auch die "Basisadresse" für eth0 im obigen Beispiel). Die zweite Zeile ist die Regel für die Defaultroute. Der Host 129.187.206.254 stellt dabei den Gateway dar.

    Angelegt werden die Routen mittels ip route add und dann der Angabe die praktisch der Ausgabe von ip route show entspricht:

    ip route add 127.0.0.0/8 dev lo scope link
    ip route add 129.187.206.0/24 dev eth0 proto kernel scope link src 129.187.206.140
    ip route add default via 129.187.206.254 dev eth0
    
    Oft reicht für die zweite Zeile auch schon ip route add 129.187.206.0/24 dev eth0 scope link. Nachfolgend weitere Beispiele, wie Routing mit ip route konfiguriert werden kann:

    7.3.4 Weitere Konfigurationsdateien

    Die Datei /etc/network/interfaces

    Bei der Debian-Distribution und deren Abkömmlingen werden die Daten des Netzwerkes wie IP-Adresse, Subnet Mask, Gateway, Hostname etc. in der Datei /etc/network/interfaces eingestellt. Diese Konfigurationsdatei wird beim Booten vom entsprechenden Startscript ausgewertet. Die folgenden Zeilen für das loopback-Interface sollten in der Datei bereits vorhanden sein:
    auto lo
    iface lo inet loopback
    
    Soll sich das System seien IP-Adresse etc. über einen DHCP-Server holen, so sind folgende zusätzliche Einträge notwendig: auto eth0 iface eth0 inet dhcp Will man dem Rechner über beispielsweise eth0 eine statische IP-Adresse samt zusätzlicher Optionen zuweisen, fügt man stattdessen einige Zeilen nach folgendem Muster an:
    auto eth0
    iface eth0 inet static
      address 129.187.206.10
      netmask 255.255.255.0
      network 129.187.206.0
      broadcast 129.187.206.255
      gateway 129.187.206.254
      dns-nameservers 129.187.206.129
      dns-search ee.hm.edu
    
    Erläuterung: Der Befehl ifup eth0 aktiviert nun die entsprechende Konfiguration, ifdown eth0 deaktiviert sie wieder.

    Die Datei /etc/services

    Eine weitere Datei ist für die Zuordnung der Portnummern zu den einzelnen Diensten wie Telnet, FTP, WWW, Mail, usw. zuständig. In dieser Datei, /etc/services, werden der Name des Dienstes, die Portnummer, das Transportprotokoll (UDP oder TCP) und Service-Aliase angegeben. Die allgemeine Form eines Eintrags in /etc/services hat die Form:

    Service-Name Portnummer/Protokoll Service-Aliases

    Wichtig: Hier sind nur Portnummern für Server spezifiziert. Client-Programme bekommen beim Verbindungsaufbau eine beliebige, freie Portnummer zugewiesen. So kann der Server wieder auf der Standard-Portnummer aus /etc/services auf einen weiteren Verbindungswunsch warten. Die spezifizierten Portnummern sind auf allen Rechnern im Netz gleich. Die Server-Programme entnehmen dieser Datei, auf welchen Port sie zugreifen müssen. Die Client-Programme finden hier die entsprechenden Portnummern ihrer Server. In /etc/services werden die Portnummern für TCP- und UDP-Dienste spezifiziert. Die Portnummern für diese beiden Transport-Protokolle sind völlig unabhängig voneinander. Trotzdem ist es im allgemeinen üblich, gleiche Portnummern für beide Protokolle zu benutzen, wenn ein Dienst über beide Transportprotokolle verfügbar ist.

    Ein Ausschnitt aus /etc/services:

    tcpmux            1/tcp                              # TCP port service multiplexer
    echo              7/tcp
    echo              7/udp
    discard           9/tcp          sink null
    discard           9/udp          sink null
    systat           11/tcp          users
    daytime          13/tcp
    daytime          13/udp
                       ...
    chargen          19/tcp          ttytst source
    chargen          19/udp          ttytst source
    ftp              21/tcp
    #                22 - unassigned
    telnet           23/tcp
    #                24 - private
    smtp             25/tcp          mail
    #                26 - unassigned
    time             37/tcp          timserver
    time             37/udp          timserver
                       ...
    www              80/tcp          http         # WorldWideWeb HTTP
    www              80/udp                       # HyperText Transfer Protocol
                       ...
    pop3             110/tcp                      # POP version 3
    pop3             110/udp
                       ...
    netbios-ns       137/tcp                      # NETBIOS Name Service
    netbios-ns       137/udp
    netbios-dgm      138/tcp                      # NETBIOS Datagram Service
    netbios-dgm      138/udp
    netbios-ssn      139/tcp                      # NETBIOS session service
    netbios-ssn      139/udp
    imap2            143/tcp                      # Interim Mail Access Proto v2
    imap2            143/udp
                       ...
    

    Es gibt bei UNIX zwei Möglichkeiten, einen Netzdienst anzubieten:

    Die erste Möglichkeit wird man bei stark frequentierten Diensten verwenden (z. B. http, smtp), da hier gleich der Server angesprochenwerden kann und nicht erst gestartet werden muß. Bei allen anderen Diensten nimmt man in der Regel den inetd. Dieser Prozeß hat einen Tabelle, in der steht, für welchen Port welches Programm zu starten ist - also eine recht flexible Angelegenheit. Will man beispielsweise einen neuen FTP-Server (etwa wu-ftpd statt des Standard-ftpd) einsetzen, so genügt das Ändern der Tabelle in der Datei /etc/inetd.conf und ein Restart des inetd (Kommando: telinit q. Ja, ohne "-" vor dem "q"). Man kann durch Auskommentieren von Zeilen in der inetd.conf auch nicht benötigte Netzdienste sperren und so den Rechner gegen Eindringlinge sicherer machen. Hier ein Auszug aus der Datei:
    # See "man 8 inetd" for more information.
    #
    # If you make changes to this file, either reboot your machine or send the
    # inetd a HUP signal.
    #
    #       
    #
    # These are standard services.
    #
    ftp         stream     tcp     nowait     root     /usr/sbin/wu.ftpd     wu.ftpd -a
    # ftp       stream     tcp     nowait     root     /usr/sbin/in.ftpd     in.ftpd
    telnet      stream     tcp     nowait     root     /usr/sbin/in.telnetd  in.telnetd
    # nntp      stream     tcp     nowait     root     tcpd     in.nntpd
    smtp        stream     tcp     nowait     root     /usr/sbin/sendmail    sendmail -v
    printer     stream     tcp     nowait     root     /usr/bin/lpd          lpd -i
    #
    # Shell, login, exec and talk are BSD protocols.
    #
    shell       stream     tcp     nowait     root     /usr/sbin/in.rshd     in.rshd -L
    login       stream     tcp     nowait     root     /usr/sbin/in.rlogind  in.rlogind
    exec        stream     tcp     nowait     root     /usr/sbin/in.rexecd   in.rexecd
    # talk      dgram      udp     wait       root     /usr/sbin/in.talkd    in.talkd
    # ntalk     dgram      udp     wait       root     /usr/sbin/in.talkd    in.talkd
    #
    # Kerberos authenticated services
    #
    # klogin    stream     tcp     nowait     root     /usr/sbin/tcpd     rlogind -k
    # eklogin   stream     tcp     nowait     root     /usr/sbin/tcpd     rlogind -k -x
    # kshell    stream     tcp     nowait     root     /usr/sbin/tcpd     rshd -k
    #
    # Services run ONLY on the Kerberos server
    #
    # krbupdate stream     tcp     nowait     root     /usr/sbin/tcpd     registerd
    # kpasswd   stream     tcp     nowait     root     /usr/sbin/tcpd     kpasswdd
    #
    # Pop et al
    #
    # pop2      stream     tcp     nowait     root     /usr/sbin/in.pop2d in.pop2d
    pop3        stream     tcp     nowait     root     /usr/sbin/popper   popper -s
    #
    # Comsat - has to do with mail.
    #
    # comsat    dgram     udp     wait     root        /usr/sbin/tcpd     in.comsat
    #
    # The Internet UUCP service.
    #
    # uucp      stream     tcp     nowait     uucp     /usr/sbin/tcpd     /usr/lib/uucp/uucico     -l
    #
    # Tftp service is provided primarily for booting.  Most sites
    # run this only on machines acting as "boot servers."
    #
    # tftp      dgram     udp     wait     nobody      /usr/sbin/tcpd     in.tftpd
    # bootps    dgram     udp     wait     root        /usr/sbin/bootpd   bootpd
    #
    # Finger, systat and netstat give out user information which may be
    # valuable to potential "system crackers."  Many sites choose to disable
    # some or all of these services to improve security.
    # Try "telnet localhost systat" and "telnet localhost netstat" to see that
    # information yourself!
    #
    finger      stream     tcp     nowait     nobody   /usr/sbin/in.fingerd    in.fingerd   -w
    systat      stream     tcp     nowait     nobody   /bin/ps                 /bin/ps      -auwwx
    netstat     stream     tcp     nowait     root     /bin/netstat            /bin/netstat -a
    ident       stream     tcp     nowait     root     /usr/sbin/in.identd     in.identd
    #
    # These are to start Samba, an smb server that can export filesystems to
    # Pathworks, Lanmanager for DOS, Windows for Workgroups, Windows95, Lanmanager
    # for Windows, Lanmanager for OS/2, Windows NT, etc.  Lanmanager for dos is
    # available via ftp from ftp.microsoft.com in bussys/MSclient/dos/. Please read
    # the licensing stuff before downloading. Use the TCP/IP option in the client.
    # Add your server to the \etc\lmhosts (or equivalent) file on the client.
    netbios-ssn   stream   tcp     nowait     root    /usr/bin/smbd    smbd
    netbios-ns    dgram    udp     wait       root    /usr/bin/nmbd    nmbd
    # End.
    

    Als letzte der Konfigurations-Dateien soll die /etc/protocols behandelt werden. Hier werden die über IP arbeitenden Protokolle aufgelistet. Die allgemeine Form eines Eintrags hat die Form:

    Protokoll-Name Protokoll-Nummer Protokoll-Aliase ...

    Zum Beispiel:

    ip   0  IP     # internet protocol, pseudo protocol number
    icmp 1  ICMP   # internet control message protocol
    igmp 2  IGMP   # internet group multicast protocol
    ggp  3  GGP    # gateway-gateway protocol
    tcp  6  TCP    # transmission control protocol
    egp  8  EGP    # Exterior-Gateway Protocol
    PUP 12  PUP    # PARC universal packet protocol
    udp 17  UDP    # user datagram protocol
    idp     22     IDP        # WhatsThis?
    hello 63 HELLO # HELLO Routing Protocol
    raw     255     RAW        # RAW IP interface
    

    Die Protokoll-Nummer wird im Header des Internet-Protokolls angegeben.

    7.4 Netzwerk-Kommandos

    ping

    Falls man mit dem Kommando ping zuerst einmal "Ping-Pong" assoziert, liegt man gar nicht so falsch. Allerdings werden hier keine Zelluloidbälle, sondern Datenpakete hin und her geschickt. Man kann mit ping testen, ob ein Rechner im Netz erreichbar ist. Das Programm ping erzeugt ICMP-Echo-Request-Pakete, die mit ICMP-Echo-Response-Paketen beantwortet werden, wenn sie das angegebene System erreichen. Das Zielsystem kann durch seinen Systemnamen (falls in der /etc/hosts oder im Nameservice enthalten) oder durch seine Internet-Adresse angegeben werden. Durch den einfachen Aufruf

    $ ping donald

    erhält man je nach System die Meldung "donald is alive." oder es wird pro Sekunde 1 Datenpaket gesendet. Die als Echo zurückkommenden Pakete werden angezeigt. Ab gebrochen wird das Ping-Pong-Spiel durch das Interrupt-Signal (Delete, Ctrl-C). Nach dem Abruch von ping wird noch eine kurze Statistik ausgegeben. (die Wortkarge Variante von ping muß man durch die Option "-s" zur Dauerarbeit bringen). Besonders interessant ist die Angabe "packet loss", also der Prozentsatz der nicht be antworteten Pakete. Bei einer einwand freien Verbindung, insbesondere in einem lokalen Netz, sollte hier eigentlich immer 0% stehen. Im Falle von 100% ist definitiv etwas nicht in Ordnung. Passiert dies bei allen Systemen, so ist das Netz defekt. Beispiel:

    $ ping www.ee.hm.edu
    PING www.ee.hm.edu (129.187.206.140): 56 data bytes
    64 bytes from 129.187.206.140: icmp_seq=0 ttl=242 time=48.9 ms
    64 bytes from 129.187.206.140: icmp_seq=1 ttl=242 time=41.9 ms
    64 bytes from 129.187.206.140: icmp_seq=2 ttl=242 time=41.3 ms
    64 bytes from 129.187.206.140: icmp_seq=3 ttl=242 time=39.9 ms
    64 bytes from 129.187.206.140: icmp_seq=4 ttl=242 time=44.9 ms
    64 bytes from 129.187.206.140: icmp_seq=5 ttl=242 time=42.9 ms
    64 bytes from 129.187.206.140: icmp_seq=6 ttl=242 time=45.4 ms
    64 bytes from 129.187.206.140: icmp_seq=7 ttl=242 time=40.5 ms
    64 bytes from 129.187.206.140: icmp_seq=8 ttl=242 time=41.4 ms
    64 bytes from 129.187.206.140: icmp_seq=9 ttl=242 time=42.3 ms
    
    --- www.eee.hm.edu ping statistics ---
    10 packets transmitted, 10 packets received, 0% packet loss
    round-trip min/avg/max = 39.9/42.9/48.9 ms
    

    arp

    Das "Address Resolution Protocol" dient der Zuordnung von Internet-Adressen zu Ethernet-Adressen. Zu diesern Zwecke existiert eine Adreßumwandlungstabelle (adress-translation table), die normalerweise vom ARP selbständig aktualisiert wird. Mit der Option "-a" wird der aktuelle Inhalt der Tabelle ausgegeben, z.B.:
    $ arp -a
    Net to Media Table
    Device   IP Address  -------             Mask      Flags   Phys Addr
    ------ --------------------------- --------------- ----- -----------------
    le0    brokrz.lrz-muenchen.de      255.255.255.255       00:00:a2:0f:76:97
    le0    infoserv.rz.fh-muenchen.de  255.255.255.255       00:e0:29:06:18:d3
    le0    flynt.rz.fh-muenchen.de     255.255.255.255       00:e0:29:08:49:f1
    le0    kobra.rz.fh-muenchen.de     255.255.255.255       00:08:c7:a9:6c:cc
    le0    netmon.rz.fh-muenchen.de    255.255.255.255       00:e0:29:0e:83:92
    le0    linux4.rz.fh-muenchen.de    255.255.255.255       00:00:c0:93:19:d3
    le0    linux5.rz.fh-muenchen.de    255.255.255.255       00:00:c0:37:19:d3
    le0    door2.rz.fh-muenchen.de     255.255.255.255       00:00:c0:3f:fb:a7
    le0    wapserv                     255.255.255.255 SP    08:00:20:23:02:88
    le0    sun10.rz.fh-muenchen.de     255.255.255.255       08:00:20:86:ce:5e
    le0    kiosk1.rz.fh-muenchen.de    255.255.255.255       00:00:c0:60:af:d7
    le0    satellit.rz.fh-muenchen.de  255.255.255.255       08:00:20:71:77:b4
    le0    kaputt.rz.fh-muenchen.de    255.255.255.255       00:50:56:82:f0:f0
    
    Mit Hilfe der Option "-d" können Einträge aus dieser Tabelle gelöscht werden. Die Einträge sind jedoch nicht nicht permanent, sondem nach einer gewissen Zeit verschwinden sie wieder. Daher ist es meistens nicht notwendig einen Eintrag manuell zu entfernen.

    netstat

    Mit Hilfe des Programms netstat können Status-Information über alle aktiven TCP-, UDP- und IP-Verbindungen, die Routing-Tabelle und eine detailierte Statistik der TCP/IP-Daten ausgegeben werden. Bei der Fehlersuche kann sich dieses Programm ebenfalls als durchaus nützlich erweisen. So wird mit der Option "-i" eine Statistik über die Benutzung der Schnittstellen ausgegeben. Die Statistik zeigt die Namen der installierten Schnittstellen, die "Maximal transmission unit" als die maximale Paketgröße des Netzwerks, das Netzwerk, zu dem die Schnittstelle führt und die Adresse der Schnittstelle.
    Kernel Interface table
    Iface   MTU Met  RX-OK RX-ERR RX-DRP RX-OVR  TX-OK TX-ERR TX-DRP TX-OVR Flags
    lo     3584   0    220      0      0      0    220      0      0      0 BLRU
    eth0   1500   0      0      0      0      0      0      0      0      0 BRU
    
    Möchte man die Angaben numerisch, so verwendet man netstat -in. Von besonderem Interesse sind die letzten fünf Spalten. Hier werden die Anzahl von empfangenen und gesendeten Paketen, die Anzahl der dabei auftretenden Fehler, sowie die Anzahl der Kollisionen ausgegeben, in die das System verwickelt waren. Sind die Zahlen lpkts und Opkts gleich Null oder ist Opkts gleich Oerrs, so liegt ein mehr oder weniger gravierendes Hardware-Problem vor. Die Anzahl der Kollisionen sollte bei jedem System im Netz unter 5% von Opkts liegen. In die sem Fall arbeiten die Netzwerkschnittstellen effizient. Eine weitere interessante Option des netstat-Kommandos ist die Möglichkeit, sich die aktuellen Verbindungen und aktiven Server mittels der Option "-a" anzeigen zu lassen. Bei diesem Aufruf werden zunächst die zur Zeit benutzten Verbindungen ausgegeben. Dies ist dadurch gekennzeichnet, daß in der Spalte (state) der Zustand ESTABLISHED anaeaeben wird. An .schließend werden alle aktiven Server Prozesse ance-eben, d.h. alle Server, die zur Zeit erreichbar sind. Ein Auszug aus der Ausgabe von netstat -a könnte beispielsweise so aussehen:
    Active Internet connections (including servers)
    Proto Recv-Q Send-Q Local Address          Foreign Address        (State)       User
    tcp        0      0 *:netbios-ssn          *:*                    LISTEN        root
    tcp        0      0 *:nntp                 *:*                    LISTEN        root
    tcp        0      0 *:auth                 *:*                    LISTEN        root
    tcp        0      0 *:sunrpc               *:*                    LISTEN        root
    tcp        0      0 *:pop3                 *:*                    LISTEN        root
    tcp        0      0 *:www                  *:*                    LISTEN        root
    tcp        0      0 *:finger               *:*                    LISTEN        root
    tcp        0      0 *:midinet              *:*                    LISTEN        root
    tcp        0      0 *:http-rman            *:*                    LISTEN        root
    tcp        0      0 *:btx                  *:*                    LISTEN        root
    tcp        0      0 *:smtp                 *:*                    LISTEN        root
    tcp        0      0 *:telnet               *:*                    LISTEN        root
    tcp        0      0 *:ftp                  *:*                    LISTEN        root
    tcp        0      0 *:netstat              *:*                    LISTEN        root
    tcp        0      0 *:systat               *:*                    LISTEN        root
    tcp        0      0 *:printer              *:*                    LISTEN        root
    tcp        0      0 *:shell                *:*                    LISTEN        root
    tcp        0      0 *:login                *:*                    LISTEN        root
    tcp        0      0 *:exec                 *:*                    LISTEN        root
    udp        0      0 *:rplay                *:*
    udp        0      0 *:netbios-ns           *:*
    udp        0      0 *:sunrpc               *:*
    udp        0      0 *:ntalk                *:*
    udp        0      0 *:talk                 *:*
    udp        0      0 *:syslog               *:*
    raw        0      0 *:1                    *:*
    Active UNIX domain sockets
    Proto RefCnt Flags      Type            State           Inode Path
    unix  1      [ ACC ]    SOCK_STREAM     LISTENING         417 /dev/log
    unix  2      [ ]        SOCK_STREAM     CONNECTED         440
    unix  2      [ ]        SOCK_STREAM     UNCONNECTED       441 /dev/log
    unix  2      [ ]        SOCK_STREAM     CONNECTED         499
    unix  2      [ ]        SOCK_STREAM     UNCONNECTED       500 /dev/log
    unix  2      [ ]        SOCK_STREAM     CONNECTED         517
    unix  2      [ ]        SOCK_STREAM     UNCONNECTED       518 /dev/log
    
    Die erste Spalte enthält das Transportprotokoll. Die zweite und dritte Spalte sagen etwas über die Anzahl der Bytes in der Empfangs- bzw. Sende-Warteschlange aus. Die nächsten beiden Spalten geben lokale und ferne Adressen einer Verbindung an. Diese Adressen bestehen aus der Internet-Adresse und der Portnummer der Kommunikationspartner. Ist der Rechner in der /etc/hosts bzw. der Dienst in der /etc/services eingetragen, so werden statt der Adressen Rechnername bzw. der Name des Services aus gegeben. Dies läßt sich durch den Aufruf von netstat -in verhindern. Handelt es sich 4611 um einen Eintrag für einen aktiven Server, so wird die lokale Adresse in der Form "*.<portnummer>" und ferne Adressen in der Form "*.*" angegeben. Diese Art der Ausgabe zeigt an, daß der entsprechende Dienst bereit ist. Bei TCP-Diensten zeigt zusätzlich die letzte Spalte an, daß der Server auf LISTEN aesetzt ist. Kommt für einen speziellen Dienst keine Verbindung zustande, obwohl andere Programme (z.B. ping) funktionieren. so kann man mittels netstat -a auf dem Zielsystem überprüfen, ob der Server dort aktiv ist. Nur dann kann eine entsprechende Verbindung überhaupt aufgebaut werden. Der Aufruf von netstat mit der Option -r listet die Routing-Tabelle auf und netstat -s liefert eine detailierte Statistik der TCP/IP-Daten. netstat -p zeigt zusätzlich an, welche Programme zu welcher Netzverbindung gehören (nur als User "root").

    Ein offener Port im Status "Listen" ist ein potientielles Einfallstor für Eindringlinge. Auch Trojaner installieren gerne "Backdoors" und öffnen dazu einen freien Port. Daher ist es sehr zu empfehlen, sich von Zeit zu Zeit die offenen Ports seiner Systeme anzusehen. Für eine Kontrolle der offenen Ports ruft man "netstat -nlp" auf.

    netstat -npl
    Proto Recv-Q Send-Q Local Address        Foreign Address   State   PID/Program name
    tcp        0      0 72.139.238.24:80     0.0.0.0:*         LISTEN  25671/apache
    tcp        0      0 72.139.238.24:21     0.0.0.0:*         LISTEN  16417/ftpd
    tcp        0      0 72.139.238.24:22     0.0.0.0:*         LISTEN  1345/sshd
    tcp        0      0 72.139.238.24:25     0.0.0.0:*         LISTEN  26007/exim4
    tcp        0      0 72.139.238.24:443    0.0.0.0:*         LISTEN  1022/apache-ssl
    

    Das System zeigt mit diesen Parameter nur Ports im Status "Listen" an. Zusätzlich wird in der letzten Spalte die Prozessnummer und der Name des zuständigen Dämons angezeigt. Alternativ kann unter Linux auch das Kommando "lsof" benutzt werden. Mit dem Aufruf

    lsof -i | grep -e LISTEN
    
    wird ebenfalls eine Liste der Ports im Status "Listen" angezeigt.

    traceroute

    Um festzustellen, welchen Weg die Datenpakete zu einem fernen Rechner nehmen und wie "gut" die Verbindung dorthin ist, kann man 'traceroute' einsetzen. Das Programm schickt UDP-Pakete mit unterschiedlicher "Lebensdauer" an einen unbenutzten Port und wertet so die Fehlermeldungen der einzelnen Router und Gateways aus. Dem Kommando wird wie bei Ping nur der Rechnername oder eine IP-Nummer als Parameter übergeben. Für jeden Gateway wird dann auf dem Bildschirm eine Zeile ausgegeben:
    Zähler Gateway-Name Gateway-IP-Nummer "round-trip"-Zeit (3 Werte)
    Traceroute sendet jeweils drei Datenpakete. Wenn auf ein Paket keine Antwort erfolgt, wird ein Sternchen (*) ausgegeben. Ist ein Gateway nicht erreichbar, wird statt einer Zeitangabe '!N' (network unreachable) oder '!H' (host unreachable) ausgegeben. Man kann so feststellen, wo eine Verbindung unterbrochen ist, und auch, welchen Weg die Daten nehmen - wo also der Zielrechner in etwa steht. Bei grafischen Benutzerschnittstellen erfolgt die Parameterangabe über Dialogfelder und nicht in der Kommandozeile.
    $ traceroute www.linux.org
    traceroute to www.linux.org (198.182.196.56), 30 hops max, 40 byte packets
     1  space-gw2m (194.97.64.8)  2.758 ms  3.637 ms  2.491 ms
     2  Cisco-M-IV.Space.Net (195.30.0.123)  6.413 ms  4.118 ms  4.107 ms
     3  Cisco-M-Fe0-0.Space.Net (195.30.0.126)  4.826 ms  4.508 ms  5.53 ms
     4  Cisco-ECRC-H1-0.Space.Net (193.149.44.2)  5.977 ms  6.273 ms  20.832 ms
     5  munich-ebs2-s0-0-0.ebone.net (192.121.158.189)  14.415 ms  17.018 ms  8.575 ms
     6  newyork-ebs1-s5-0-0.ebone.net (195.158.224.21)  137.35 ms  139.103 ms  138.14 ms
     7  serial0-0-1.br1.nyc4.ALTER.NET (137.39.23.81)  137.132 ms  141.742 ms  141.207 ms
     8  134.ATM2-0.XR1.NYC4.ALTER.NET (146.188.177.178)  135.375 ms  128.12 ms  165.913 ms
     9  189.ATM3-0.TR1.EWR1.ALTER.NET (146.188.179.54)  141.83 ms  144.798 ms  362.469 ms
    10  105.ATM4-0.TR1.DCA1.ALTER.NET (146.188.136.185)  145.321 ms  147.889 ms  152.43 ms
    11  299.ATM6-0.XR1.TCO1.ALTER.NET (146.188.161.169)  354.577 ms  133.535 ms  348.647 ms
    12  193.ATM8-0-0.GW2.TCO1.ALTER.NET (146.188.160.49)  152.444 ms  369.313 ms  150.106 ms
    13  uu-peer.oc12-core.ai.net (205.134.160.2)  365.008 ms  509.81 ms  144.898 ms
    14  border-ai.invlogic.com (205.134.175.254)  270.065 ms  341.586 ms  153.441 ms
    15  router.invlogic.com (198.182.196.1)  356.496 ms  506.371 ms  532.983 ms
    16  www.linux.org (198.182.196.56)  584.957 ms  300.612 ms  380.004 ms
    

    Einsatz von nmap

    Zur Kontrolle der offenen Ports eines Host über das Netzwerk benötigt man einen Portscanner, z.B. nmap von Fyodor. Der Portscanner nmap kennt eine Unmenge von Optionen. Für einen ersten Scan nach offenen TCP-Ports wird lediglich der Parameter "-sT" und die IP-Adresse des Zielsystems benötigt. Damit scannt nmap alle well know TCP-Ports (1-1024) und alle Ports aus der Datei etc/services.
    nmap -sT 192.168.1.1
    
    Starting nmap 3.20 ( www.insecure.org/nmap/ ) at 2004-10-16 23:17 CEST
    Interesting ports on Router (192.168.1.1):
    (The 1610 ports scanned but not shown below are in state: closed)
    Port       State       Service
    80/tcp     open        http
    
    Nmap run completed -- 1 IP address (1 host up) scanned in 6.533 seconds
    
    Der hier untersuchte IP-Host bietet einen Dienst an: HTTP auf TCP-Port 80. Auf der Maschine läuft also höchstwarscheinlich ein Webserver. Um alle TCP-Ports von 1 bis 65535 zu untersuchen ruft man nmap mit den Optionen "-sT -p 1-65535" auf. Mit der Option "-sU" sucht nmap nach offenen UDP-Ports. UDP-Scanning ist allerdings oftmals sehr langsam. Ursache hierfür ist eine Begrenzung der Anzahl der ICMP-Meldungen die ein Host pro Zeiteinheit versendet. Viele Systeme begrenzen die ICMP-Meldungen nach RFC 1812. nmap erkennt dieses Verhalten und arbeitet entsprechen langsamer um keine Meldungen zu verlieren.

    R-Kommandos

    Aus Berkley-UNIX in die Release 4 übernommen wurde die Familie der sogenannten 'R-Kommandos' (weil sie alle mit "r" beginnen). Sie erlaubten komfortable Kommunikation zwischen UNIX-Rechnern auf der Basis von TCP/IP. Inzwischen sind sie veraltet und werden nicht mehr eingesetzt, weil u. a. alle Daten im Klartext übertragen werden, also auch Userkennungen und Passwörter. Aber auch die Datei /etc/hosts.equiv führte immer wieder zu Sicherheitslücken.

    Jeder Rechner im Netz (= Host) bessass eine Datei /etc/hosts.equiv, in der "vertrauenswürdige" Rechner eingetragen sind. Wollten sich Benutzer von einem dieser Rechner auf dem lokalen Computer einloggen, brauchten sie kein Passwort für den Rechner-Rechner-Übergang. Enthielt die Datei nur eine Zeile mit einem '+'-Zeichen, wurden alle Rechner akzeptiert. Gibt es keine "vertrauenswürdigen" Rechner, war jeweils die Eingabe des Login-Passwortes nötig. Außerdem funktionierte das Ganze nur, wenn man auf Quell-und Zielrechner die gleiche Benutzerkennung hat.

    die R-Kommandos wurden inzwischen von der 'Secure Shell' (ssh) und dem 'Secure Copy' (scp) abgelöst. Weitere Netzwerkprogramme, die man zum Fern-Login braucht, sind 'telnet' und 'ftp', wobei telnet hautsächlich zum Testen im lokalen Netz dient, denn auch hier werden alle Daten im Klartext übertragen. An dieser Stelle gibt es eine kurze Bedienungsanleitung, im Internet-Skript werden die Hintergründe erklärt.

    Telnet

    telnet eignet sich besonders für die Kommunikation von UNIX-Rechnern mit Computern, die andere Betriebssysteme verwenden. Um eine Telnet-Sitzung zu starten wird telnet aufgerufen.

    telnet host

    Telnet (Teletype Network) unterscheidet zwei Modi, den Kommando- und den Eingabemodus. Der Kommandomodus ist aktiv, wenn man Telnet ohne Argument aufruft. Am Bildschirm erscheint der Prompt "Telnet>". Wird Telnet mit Argument aufgerufen, so wird ein "open"-Kommando mit dem angegebenen Argument ausgeführt und man befindet sich im Eingabemodus, bei dem zwei Übertragungsmodi unterschieden werden:

    Welcher der beiden Modi aktiviert wird, hängt vom Zielsystem ab und ist mit dem Kommando status abfragbar. Vom Eingabe- in den Kommandomodus kann mit dem Telnet-Fluchtsymbol (Voreinstellung "^]" (Ctrl-])) gewechselt werden. Nur im Kommandomodus können die unten beschriebenen Kommandos eingegeben werden. Hat man eine bestehende Verbindung und wechselt in den Kommandomodus, so fällt man automatisch nach Abarbeitung eines Kommandos wieder in den Eingabemodus zurück.

    Falls der localchars-Schalter auf EIN steht (das ist die Grundeinstellung im Zeilen-Modus), werden in beiden Modi die "quit"-, "intr"- und "flush"-Zeichen lokal abgefangen und als Telnet-Protokoll-Sequenzen an das entfernte System gesendet.

    Während eine Verbindung zu einem entfernten System besteht, kann in den Telnet-Kommandomodus mittels dem Telnet-Fluchtsymbol (Voreinstellung "^]") umgeschaltet werden.
    Nachfolgend werden die verfügbaren Kommandos beschrieben. Kommandos können soweit verkürzt eingegeben werden, als sie noch eindeutig erkennbar sind. Gleiches gilt auch für die Argumente der Kommandos mode, set, toggle und display. Im Kommandomodus haben die üblichen Terminal-Editier-Konventionen Gültigkeit (UNIX-Shell und "stty"-Einstellungen).

    Beispiel: Verbindung zum Rechner lx-lbs

    telnet lx-lbs

    Telnet reagiert daraufhin mit:

    Trying to .....
    Connect to sun1-lbs
    Escape Character is '^]'
    
    Jetzt folgt die normale Loginsequenz auf dem Rechner sun1-lbs. Um weitere Kommandos an Telnet geben zu können, muß der Befehl mit dem angegeben Escape-Character eingeleitet werden (im Beispiel das ESC-Zeichen). Beenden der Verbindung erfolgt in diesem Fall mit "^] quit" oder einfach Ctrl-D.

    telnet kann auch vorzüglich zum Testen von Verbindungen und Servern verwendet werden. Bei Kenntnis der Protokolle (nachlesbar in den entsprechenden RFCs) kann ein Protokoll wie SMTP, NNTP, HTTP, usw. auch von Hand nachgebildet werden. Man kann so durch eine telnet-Verbindung nachsehen, ob auf einem fernen System Mail-, News-, WWW- oder andere Dienste laufen.

    ftp [ -v ] [ -d ] [ -i ] [ -n ] [ -g ] [ host ]

    FTP ist die Benutzerschnittstelle zum Dateiübertragungsprotokoll. Dieses Programm ermöglicht den Dateitransfer zwischen zwei Rechenanlagen. Es besitzt eine eigene Kommandooberfläche, die interaktiv bedient wird. Der Aufruf dieses Filetransferprogrammes erfolgt durch ftp.
    FTP funktioniert aber auch, wenn man auf dem fernen Rechner keine Benutzerberechtigung hat, denn viele Rechner bieten große Dateibereiche über sogenannten 'anonymen' FTP. Man gibt in diesem Fall als Benutzernamen 'ftp' ein und als Passwort die eigene Mailadresse. Danach kann man sich im öffentlichen Dateibereich tummeln.
    Wird beim Programmaufruf der gewünschte Kommunikationspartner (host) mit angegeben, so wird sofort versucht, eine Verbindung zu diesem Rechensystem aufzubauen. Ist der Versuch erfolglos, so wird in den Kommandomodus umgeschaltet. Der Prompt "ftp>" erscheint immer auf dem Bildschirm, wenn ftp-Kommandos eingegeben werden können. ftp verfügt über einen help-Mechanismus, über den sämtliche auf dem jeweiligen System verfügbare Kommandos mit Kurzerklärungen abfragbar sind.
    Nachfolgend werden wesentliche Kommandos nach Funktionalität gruppiert vorgestellt. Kommandos können soweit verkürzt eingegeben werden, als sie noch eindeutig erkennbar sind. Enthalten Kommandoargumente "Blanks", so sind die Argumente beidseitig mit Hochkommas eingeschlossen einzugeben.

    Die optionalen Parameter beim ftp-Kommando setzen logische Schalter für den ftp-Programmlauf. Im Kommandomodus sind die Einstellungen jederzeit wieder änderbar.

    Die Datei-Übertragung wird durch die Terminal "interrupt"-Taste (üblicherweise Ctrl-C) abgebrochen, was einen sofortigen Abbruch zur Folge haben soll. Nicht alle Kommunikationspartner verstehen die Abbruchaufforderung und dann wird dennoch die gesamte Datei übertragen ausgeführt.

    Dateinamen, die als Argumente von FTP-Kommandos Verwendung finden, werden wie folgt bearbeitet: Ist "file globbing" eingeschaltet, werden bei den Kommandos mget, mput und mdelete die Namen lokaler Dateien folgendermaß behandelt:

    Nicht alle ftp-Installationen unterstützen alle ftp-Kommandos. Wenn sich eine Dateiübertragung nicht ordnungsgemäß abbrechen läßt, kann der lokale ftp-Prozess mit dem Terminal-intr-Zeichen (üblicherweise Ctrl-C) abgebrochen werden.

    Die Kommandos telnet und ftp (und die r-Kommandos) stellen jedoch ein gravierendes Sicherheits-Problem dar, denn:

    Deshalb wird heute in der Regel die Secure Shell (SSH) verwendet (die Verwendung von telnet als Test-Tool bleibt natürlich erhalten).

    Die Secure Shell (SSH)

    Bei der Entwicklung von SSH wurde besonderer Wert auf folgende Punkte gelegt:

    SSH speichert alle wichtigen Informationen im Unterverzeichnis ".ssh" des Heimatverzeichnisses des jeweiligen Benutzers. Das Directory sollte deshalb nur für den Besitzer der Kennung zugänglich sein (chmod 700 .ssh).

    Mit SSH kann man:

    Bereits durch diese einfache Nutzung der SSH werden alle Daten einer Verbindung komplett verschlüsselt. Damit sind die Sicherheits-Probleme von telnet und ftp behoben, d. h. Passwörter und Daten werden nicht mehr im Klartext übertragen und es findet eine strenge Authentifizierung statt.

    Bei jeder neuen Verbindung laufen am Anfang folgende Schritte ab:

    Der Benutzer kann seine Identität nicht nur per Username und Passwort, sondern auch durch eine individuelle RSA-Authentifikation nachweisen (automatischer Login). Dazu ist jedoch auf dem Remote-Rechner ein entsprechender Eintrag in der Datei $HOME/.ssh/authorized_keys erforderlich.

    Bei SSH kommen kryptographische Verfahren an mehreren Stellen zum Einsatz. Das asymmetrische RSA-Verfahren wird für die Authentifizierung der Kommunikations-Partner und für die sichere Übertragung eines zufällig erzeugten und nur einemal verwendeten Sitzungs-Schlüssel eingesetzt. Dabei werden Key-Längen zwischen 768 und 1024 Bit empfohlen. Zur Verschlüsselung der Daten während der Verbindung wird wegen des höheren Durchsatzes ein symmetrisches Verfahren verwendet. Je nach Installation der SW hat der Benutzer i.a. die Auswahl zwischen verschiedenen Algorithmen: DES (Data Encryption Standard) mit 56 Bit Schlüssellänge, 3DES (Tripple DES) mit 112 Bit Schlüssellänge, IDEA (International Data Encryption Algorithm) mit 128 Bit Schlüssellänge, Blowfisch mit 128 Bit Schlüssellänge und Arcfour mit 128 Bit Schlüssellänge.

    Folgende Optionen werden bei ssh häufiger verwendet:

    Folgende Optionen werden bei scp häufiger verwendet:

    RSA-Schlüsselpaare

    Die Authentifizierung des Clients kann, wie oben erwähnt, auch durch eine benutzerspezifische RSA-Authentifikation erfolgen. Dazu benötigt der Benutzer jedoch ein individuelles RSA-Key-Paar, das im Directory $HOME/.ssh abgelegt und mit dem Kommando ssh-keygen verwaltet wird:

    Hinweise: Die Erzeugung des Key-Paares erfolgt automatisch und kann nicht reproduziert werden. Aus Sicherheitsgründen sollte man das Passwort für den Secret-Key niemals als Option auf der Kommandozeile von ssh-keygen angeben (das kann jeder nämlich per ps-Kommando sehen)! Mit der Option '-b KEY_LENGTH' kann man die Länge der Schlüssel festlegen (default: 1024). Mit der Option '-C COMMENT' kann man zur besseren Übersicht einen Kommentar bzw. einen Namen für das Schlüssel-Paar vergeben.

    ssh-keygen -p [-f KEY_FILE] ('Passwort') dient zum Ändern des Passworts für die Aktivierung des Secret-Keys und mit ssh-keygen -c [-f KEY_FILE] [-C COMMENT] ('Comment') kann der Kommantar geändert werden.

    Neben den Kommandos für den "Normalbenutzer" gibt es noch Testkommandos, die recht hilfreich sind, wenn man einen fernen Rechner nicht erreicht oder, um mehr über das Netz zu erfahren.

    7.5 Binärdaten per Mail (oder News) versenden

    Da nach wie vor 7-Bit-ASCII als kleinster gemeinsamer Standard für News und Mail gilt, lassen sich Binärdateien nicht ohne weiteres posten. Abhilfe schaffen hier die Programme UUENCODE und UUDECODE, mit deren Hilfe binäre Daten auf den Bereich der druckbaren ASCII-Zeichen (Großbuchstaben, Ziffern und Sonderzeichen) abbilden lassen. Es werden also Bytes in 6-Bit-Worten codiert und in Zeilen umbrochen. Die mit UUENCODE erzeugte Datei ist nun zwar größer als die Ursprungsdatei, sie läßt sich aber problemlos per News oder Mail verbreiten. Die "uuencodete" Datei enthält am Anfang eine Zeile mit Zugriffsrechte und den Dateinamen:

    begin 644 camera.wav

    Danach folgen die codierten Daten und als Abschluß eine Zeile

    end

    Eine weitere Form der Codierung findet man bei der Verbreitung von Programmquellen und anderen zusammengehörenden Texten (Programmquellen bestehen in der Regel aus mehreren Quelldateien, Manualpages, Makefile, usw.). Diese Dateien kann man zu sogenannten 'Shell-Archiven' zusammenfassen. Hier wird ein komplettes Shell-Skript gepostet, das die Dateien in Form einzelner Here-Dokumente enthält. Man startet das Skript, wodurch die einzelnen Dateien ausgepackt und meist auch noch auf Korrektheit (Prüfsumme) geprüft werden. Hier als Beispiel der Anfang eines Shell-Archivs:

    #! /bin/sh
    # This is a shell archive. Remove anything before this line, then
    # feed it into a shell via "sh file" or similar. To overwrite
    # existing files, type "sh file -c".
    # Contents: bells.sh hells-bells.au.uu
    PATH=/bin:/usr/bin:/usr/ucb ; export PATH
    echo If this archive is complete, you will see the following message:
    echo ' "shar: End of archive."'
    if test -f 'bells.sh' -a "${1}" != "-c" ; then
      echo shar: Will not clobber existing file \"'bells.sh'\"
    else
      echo shar: Extracting \"'bells.sh'\" \(581 characters\)
    sed "s/^X//" >'bells.sh' <<'END_OF_FILE'
    X#!/bin/
    X
    XBELL=/usr/local/sounds/hells-bells.au
    XPLAY=/usr/local/bin/play
    XVOL=40 XDATE=`date +%H:%M`
     XMINUTE=`echo $DATE
    | sed -e 's/.*://'`
     XHOUR=`echo $DATE | sed -e 's/:.*//'`
    X
     ....
    

    Um mehrere Dateien in einer einzigen zusammenzufassen verwendet man in der Regel das tar-Kommando (Tape ARchive), nur wird hier nicht auf das Band geschrieben, sondern alle Dateien und Verzeichnisse in eine einzige Datei geschrieben (Option "f"). Analog kann ein Archiv dann wieder "ausgepackt" werden (siehe nauch Kapitel 3).

    Damit Übertragungszeit beim ftp gespart wird, kann man nun das Archiv noch komprimieren, wozu bei fast allen Systemen die Kommandos pack/unpack bzw. compress/uncompress existieren:

    pack datei

    komprimiert die Datei und ersetzt sie durch die komprimierte Version, wobei an den Namen die Endung ".z" angehängt wird. Mit

    unpack datei.z

    wird die Datei wiederhergestellt.

    compress datei

    komprimiert die Datei und ersetzt sie durch die komprimierte Version, wobei an den Namen die Endung ".Z" angehängt wird. Mit

    uncompress datei.Z

    wird die Datei wiederhergestellt, wobei das Ergebnis von compress wesentlich kompakter als bei pack ist.

    In letzter Zeit wurde der GNU-Zip zum Standard. Er liefert bessere Ergebnisse als compress und kann auch mit pack oder compress bearbeitete Dateien bearbeiten. Die Aufrufe lauten:

    gzip datei

    zum Komprimieren und

    gunzip datei oder gzip -d datei

    zum Dekomprimieren.

    7.6 NFS - Network File System

    NFS erlaubt das Einbinden einer beliebigen Platten-Partition eines Computers in das Dateisystem eines anderen Rechners. Dazu wird entweder per mount-Befehl oder über die Datei /etc/fstab bzw. /etc/vfstab angegeben, welches Verzeichnis eines fernen Rechners auf welches lokale Verzeichnis gemountet werden soll.

    Die einzige Konfigurationsdatei für den NFS-Dämon des NFS-Servers ist die Datei /etc/exports mit folgendem Format:

    Verzeichnis-Pfad     Rechnernamen (Optionen)
    
    Links steht das Verzeichnis, das der NFS-Server exportieren soll, beispielsweise /home/public oder /cdrom. In der Mitte stehen die Rechner, die Zugriff auf das Verzeichnis haben sollen, und danach in Klammern die Optionen. ACHTUNG: Beachten Sie das Leerzeichen zwischen den Rechnernamen und den Optionen! Nach jeder Änderung der Datei müssen Sie den Portmapper neu starten und dann den NFS-Dämon neu einlesen lassen.

    Die zugriffsberechtigten Client-Rechner können Sie auf drei Arten definieren:

    Die gebräuchlichsten Optionen sind:

    Im folgenden Beispiel sollen folgende Zugriffe möglich sein: Auf die erste CD-ROM bekommen die Clients nur Lesezugriff. Der Rechner boss.netzmafia.de benötigt root-Zugriff auf /install knecht.netzmafia.de darf ebenfalls auf /install zugreifen, allerdings ohne daß Dateien des Benutzers root als solche erscheinen. Die Home-Verzeichnisse aller Benutzer auf dem Server exportiert der Server an alle Rechner im Subnetz, damit die Benutzer auf allen Clients das gleiche Home-Verzeichnis bekommen:

    # /etc/exports
    #
    /cdrom     *.netzmafia.de (ro)
    /install   boss.netzmafia.de (rw,no-root-squash) \
               knecht.netzmafia.de (ro,root-squash)
    /home      192.168.253.255/255.255.255.255
    
    Beim Client werden die Verzeichnisse unter Angabe des Servernamens (durch Doppelpunkt getrennt) eingebunden. Das kann entweder per mount-Kommando geschehen, z. B. durch:
    mount nfs.netzmafia.de:/cdrom -t nfs /opt/cdrom
    
    oder in der Datei /etc/fstab, z. B.:
          .
          .
    nfs.netzmafia.de:/cdrom    /opt/cdrom  nfs  ro         0 0
    nfs.netzmafia.de:/home     /home       nfs  defaults   0 0
          .
          .
    

    7.7 Netzwerk-Troubleshooting

    Die oben erwähnten Kommandos ifconfig, arp, ping und traceroute reichen meist aus, um festzustellen, wo die Netzverbindung "klemmt". Soll es tiefer in die Hardware gehen, bietet Linux weitere Tools.

    Die Programme mii-tool und ethtool geben Aufschluss über den Linkstatus der Netztwerkinterfaces. Normalerweise stellen sich Netzwerkkarte und Switch automatisch richtig aufeinander ein; in seltenen Fällen muss man aber mit einer manuellen Konfiguration nachhelfen - etwa beim Einrichten der Wake-on-Lan-Funktion.

    Wird das mii-tool ohne Parameter aufgerufen, erhält man einen Report über das Interfaces. Der Parameter "-v" macht das Programm noch gesprächiger. Zum Beispiel:

    # mii-tool -v
    
    eth0: 100 Mbit, full duplex, link ok
      product info: Intel 82555 rev 4
      basic mode:   100 Mbit, full duplex
      basic status: link ok
      capabilities: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD
      advertising:  100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD flow-control
      link partner: 100baseTx-HD
    

    Das ethtool liefert noch mehr Informationen als das mii-tool:

    # ethtool eth0
    
    Settings for eth0:
            Supported ports: [ TP MII ]
            Supported link modes:   10baseT/Half 10baseT/Full
                                    100baseT/Half 100baseT/Full
            Supports auto-negotiation: Yes
            Advertised link modes:  10baseT/Half 10baseT/Full
                                    100baseT/Half 100baseT/Full
            Advertised auto-negotiation: No
            Speed: 100Mb/s
            Duplex: Full
            Port: MII
            PHYAD: 1
            Transceiver: internal
            Auto-negotiation: off
            Supports Wake-on: g
            Wake-on: g
            Current message level: 0x00000007 (7)
            Link detected: yes
    

    Wird das ethtool mit dem Parameter "-S" aufgerufen, erhalten Sie eine ausführliche Statistik des Interface. Wenn Ihnen das schon zuviel sein sollte, erhalten Sie mit netstat -i einen kompakteren Report (siehe oben).

    Übrigens - die MAC-Adresse liefert ebenfalls das ifconfig-Kommando.

    Das Tool wget eignet sich nicht nur vorzüglich zum Zugriff auf Webseiten per Kommandozeile (es lassen sich rekursiv sogar komplette Sites "absaugen"), sondern man erhät mit dem Parmeter "-N" auch Info über die Download-Zeit.

    wget -N www.testlin.de
    --23:07:22--  http://www.testling.de/
               => `index.html'
    Resolving www.testling.de... done.
    Connecting to www.testling.de[192.168.77.33]:80... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: unspecified [text/html]
    Last-modified header missing -- time-stamps turned off.
    --23:07:22--  http://www.testling.de/
               => `index.html'
    Connecting to www.testling.de[192.168.77.33]:80... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: unspecified [text/html]
     
       [   <=>                          ] 122,150      279.36K/s
    
    23:07:22 (279.36 KB/s) - `index.html' saved [122150]
    

    Zum Inhaltsverzeichnis Zum nächsten Abschnitt
    Copyright © Hochschule München, FK 04, Prof. Jürgen Plate