Linux PPP HOWTO <author>Robert Hart (<tt>hartr@hedland.edu.au</tt>) und Marco Budde (<tt>Budde@tu-harburg.de</tt>) <date>v1.0-2, 3. Januar 1997 <abstract> Dieses Dokument beschreibt, wie man einen Linux PC mit einem PPP Server verbindet. </abstract> <!-- Inhaltsverzeichnis --> <toc> <sect>Einleitung <sect1>Neue Versionen dieses Dokuments <p> Die jeweils neuste Version dieser HOWTO ist auf dem WWW Server des Deutschen Linux HOWTO Projekts unter folgender Adresse zu finden: <tscreen> <htmlurl url="http://www.tu-harburg.de/dlhp/" name="http://www.tu-harburg.de/dlhp/"> </tscreen> <!-- Hier kann man die jeweils aktuelle Version auch gleich online lesen. Außerdem kann die HOWTO von folgendem FTP Server bezogen werden: <tscreen> <htmlurl url="ftp://ftp.uni-stuttgart.de/pub/systems/linux/local/doc" name="ftp.uni-stuttgart:/pub/systems/linux/local/doc"> </tscreen> --> <sect1>Feedback <p> Wenn Sie irgendwelche Frage oder Kommentare zu diesem Dokument haben, erreichen Sie mich unter den e-mail Adressen <bf>Internet:</bf> <tt><htmlurl url="mailto:Budde@tu-harburg.de" name="Budde@tu-harburg.de"></tt><newline> <bf>Fido:</bf> Marco Budde <tt>2:240/6298.5</tt> Ich freue mich über alle Vorschläge und Kritiken zu dieser HOWTO. Wenn Ihnen also irgendein Abschnitt in dieser HOWTO unklar sein sollte, schreiben Sie mir bitte. <sect1>Copyright <p> Dieses Dokument ist urheberrechtlich geschützt. Das Copyright für die englische <em><htmlurl url="http://metalab.unc.edu/LDP/HOWTO/PPP-HOWTO.html" name="PPP HOWTO"></em>, auf der dieses Dokument basiert, liegt bei Robert Hart. Das Copyright für die deutsche Übersetzung liegt bei Marco Budde. Die englische HOWTO darf nach folgender Lizenz verbreitet werden: <quote> The copyright of this document is retained by the author. Permission is granted to distribute the document by electronic means and on CDs provided that it is kept entirely in its original format. Permission is also granted to print a copy of this document for personal use. <newline><newline> The republishing of this document in part or in whole without the permission of the copyright holder by any means other than as noted above is prohibited. </quote> Der Autor der deutschen Übersetzung erlaubt die Verbreitung seiner Übersetzungsarbeit an dieser HOWTO unter der GNU <em><htmlurl url="DE-GPL.html" name="General Public License"></em>. <sect>Grundbegriffe <p> PPP (Point to Point Protocol) ist ein Protokoll, um das Internet Protokoll (IP) und andere Netzwerk Protokolle über eine serielle Verbindung benutzen zu können. Dabei kann es sich bei der seriellen Verbindung um eine direkte Verbindung zwischen zwei Rechner oder eine Verbindung mittels Modems handeln. Mit PPP kann man den eigenen Linux PC mit einem PPP Server verbinden und auf die Resourcen des Netzwerkes zugreifen, mit dem der Server verbunden ist, als ob man direkt einen Rechner in diesem Netzwerk benutzen würde. <p> Einer der größten Unterschiede ist natürlich die Geschwindigkeit. Eine Ethernetverbindung arbeitet mit maximal 100 MBit pro Sekunde, während ein Modem mit Geschwindigkeiten bis zu 33,6 KBit pro Sekunde arbeitet. In Abhängigkeit vom Typ der PPP Verbindung gibt es eventuell einige Einschränkungen in der Benutzung von einigen Applikationen oder Servicen. <sect1>Klients und Server <p> Wenn man sich in einen Rechner einwählt, um eine PPP Verbindung aufzubauen, dann ist man ein Klient. Der Rechner, mit dem man eine Verbindung aufbaut, wird Server genannt. <p> Wenn man selbst einen Linux Rechner so konfiguriert, daß er einem anderen Benutzer ermöglicht, sich in das Netzwerk per Modem einzuwählen, dann installiert man einen PPP Server. <p> Jeder Linux PC kann sowohl PPP Server als auch Klient sein. Dabei kann er beides gleichzeitig sein, wenn man über mehr als eine serielle Schnittstelle (und wenn notwendig Modems) verfügt. Für das PPP Protokoll selbst gibt es eigentlich keinen wirklichen Unterschied zwischen einem Klient und einem Server, wenn die Verbindung erst einmal aufgebaut ist. Das bedeutet, daß PPP dafür benutzt werden kann, zwei oder mehrere lokale Netzwerke (LANs) untereinander zu verbinden oder ein oder mehrere LANs mit dem Internet zu verbinden. <p> Im Interesse der Verständlichkeit wird in diesem Dokument der Rechner, der die Verbindung einleitet, sich also einwählt, als <em>Klient</em>, und der Rechner, der den Anruf beantwortet und die Zugangsberechtigung des Anrufers unter Verwendungen der Benutzerkennung, Paßwörtern und eventuell anderer Methoden überprüft, als <em>Server</em> bezeichnet. <p> Die meisten Leute interessieren sich wahrscheinlich dafür, wie man mit PPP als Klient einen oder mehrere Rechner mit dem Internet verbindet. Die Prozedur, die in diesem Dokument beschrieben wird, erlaubt es, eine Internet Verbindung einzurichten und zu automatisieren. <sect1>IP Nummern <p> Jedes Netzwerkinterface, das mit dem Internet verbunden ist, muß seine eigene, einzigartige IP Nummer haben. Für jedes Land gibt es eine Organisation, die diese IP Nummern zentral vergibt. <p> Bitte beachten Sie, daß die in diesem Dokument benutzen IP Nummern alle <em>fiktiv</em> sind! Wenn man eine Verbindung zum Internet aufbauen möchte, muß man eine offizielle IP Nummer verwenden, die einem vom Provider zugewiesen worden ist. Man darf sich auf keinen Fall einfach irgendeine IP Nummer ausdenken und diese verwenden, da dieses zu erheblichen Störungen führt. <p> Es gibt IP Nummern, die speziell für LANs gedacht sind, die nicht mit dem Internet verbunden sind. Eine dieser Folgen ist 10.0.0.0 bis 10.255.255.255. Dieses ist auch die Folge, die in den Beispielen in diesem Dokument verwendet wird. <p> Für die meisten Anwender, die einen einzelnen Rechner oder ein kleines LAN über PPP mit einem Internet Service Provider (ISP) verbinden, ist es nicht notwendig, eine eigene IP Nummer (oder genauer eine Netzwerk Nummer) zu beantragen. <p> Wenn man ein kleines LAN mit dem Internet verbinden möchte, können viele Internet Service Provider ein entsprechendes Subnet (eine spezielle Folge von IP Nummern) von ihrem existierenden IP Adressraum zur Verfügung stellen. <p> Für Anwender, die einen einzelnen PC über einen Internet Service Provider mit dem Internet verbinden möchten, benutzen die meisten Provider eine dynamische IP Nummern Vergabe. Als Teil des Verbindungsaufbaues nennt der PPP Servern nun dem eigenen Rechner die IP Adresse, die er für die aktuelle Verbindung benutzen soll. Man erhält also nicht bei jeder Verbindung mit dem Server die gleiche IP Nummer. Dieses hat Konsequenzen für Programme auf dem eigenen Rechner, die als Server fungieren, wie <tt>sendmail</tt>, <tt>ftpd</tt>, <tt>httpd</tt> und so weiter. Die Beschränkungen von Servicen aufgrund von einer dynamische IP Nummern Vergabe und Wege diese, wenn möglich, zu umgehen, werden wir in einem späteren Teil dieses Dokument erläutern. <sect>Ziel dieses Dokuments <p> Dieses Dokument versucht die Anwender zu unterstützen, die Linux und PPP benutzen möchten, um sich in einen PPP Server einzuwählen und eine IP Verbindung mittels PPP aufzubauen. Es wird davon ausgegangen, daß der Anwender PPP bereits kompiliert und auf seinem Linux Rechner installiert hat. Allerdings werden wir trotzdem darauf eingehen, wie man das Kernel neu konfiguriert und kompilieren muß, um die PPP Unterstützung zu aktivieren. <p> Obwohl auch DIP, die Standardmethode um eine SLIP Verbindung aufzubauen, benutzt werden kann, um eine PPP Verbindung aufzubauen, sind DIP Skripte meistens sehr kompliziert. Aus diesem Grund geht dieses Dokument <em>nicht</em> auf die Verwendung von DIP zum Aufbau einer PPP Verbindung ein. <p> Stattdessen beschreibt dieses Dokument die Standard Linux PPP Software (<tt>chat</tt>/<tt>pppd</tt>). <p> Zur Zeit geht dieses Dokument <em>nicht</em> auf folgende Themen ein: <itemize> <item>Anschluß und Konfigurationen eines Modems unter Linux (im Detail). Informationen hierüber sind in der <em><htmlurl url="http://metalab.unc.edu/LDP/HOWTO/Serial-HOWTO.html" name="Serial HOWTO"></em> zu finden. <item>Installation eines PPP Servers unter Linux. Eine englische <em>PPP Server HOWTO</em> befindet sich in der Entwicklung und wird bei Erscheinen diesem Dokument hinzugefügt werden. <item>Die Verwendung von DIP um PPP Verbindung aufzubauen. Stattdessen sollte <tt>chat</tt> verwendet werden. <item>Benutzung von PAP und CHAP zur Authentifizierung von PPP Verbindungen. Dieses wird zu einem späteren Zeitpunkt hinzugefügt werden. <item>Benutzung von socks oder IP Masquerade. Es existieren bereits sehr gute Dokumente, die diese beiden Pakete beschreiben. </itemize> <sect>Beschriebene Software Versionen <p> Diese HOWTO geht davon aus, daß der Benutzer ein 1.2.x Kernel mit der PPP 2.1.2 Software verwendet. Zur Zeit befindet sich Linux 1.3.x noch in der Entwicklung und der Autor muß selbst mit diesem noch experimentieren. <p> Es ist auch bereits die PPP Version 2.2 verfügbar. Obwohl diese mit Linux 1.2.x verwendet werden kann, wurde sie für Linux 1.3.x entwickelt, so daß das Kernel für die Verwendung mit Linux 1.2.x gepatcht werden muß. <p> Dieses Dokument ist speziell für die Unterstützung von neuen Benutzern entwickelt worden und es wird dringend empfohlen, daß der Anwender eine Linux Version und eine passende PPP Version verwendet, die beide stabil zusammenarbeiten. <p> Sobald der Autor die Zeit findet, mit Linux 1.3.x und PPP 2.2 zu experimentieren, werde zusätzliche Informationen zu diesen diesem Dokument hinzugefügt. Aber bitte fragen Sie den Autoren nicht nach diesen Informationen, denn er wird sie veröffentlichen, wenn sie fertig sind - solche Anfragen werde nach <tt>/dev/null</tt> weitergeleitet. <p> Falls Sie in der Zwischenzeit Linux 1.3.x benutzen müssen, lesen sie bitte entsprechenden Dokumente. Die hier gegebenen Informationen zur Kernel Konfiguration sind für die 1.3.x Kernel vollkommen falsch. <sect>Andere nützliche und wichtige Dokumente <p> Den Benutzern wird empfohlen, folgendes zu lesen: <itemize> <item>die Dokumentation, die mit dem PPP Paket ausgeliefert wird <item>die pppd und chat man pages <item>das Linux <em>Network Administration Guide</em> (NAG) <item>die <em><htmlurl name="NET-3 HOWTO" url="DE-NET3-HOWTO.html"></em>. </itemize> <p> Man kann natürlich dieses Dokument benutzen, um eine PPP Verbindung zu erzeugen, ohne eines der obigen Dokumente gelesen zu haben, allerdings verbessern diese das eigene Verständnis dessen, was abläuft. So hat man die Möglichkeit, viele Probleme selber zu lösen oder wenigstens detailiertere Fragen in den <tt>de.comp.os.unix.linux</tt> Newsgruppen zu stellen. <p> Diese Dokumente (genauso wie die vielen anderen, inklusive der relevanten RFCs) bieten zusätzliche und detailiertere Erklärungen wie in dieser HOWTO möglich sind. <p> Falls Sie ein LAN unter der Verwendung von PPP an das Internet anbinden möchten, benötigen Sie ein gutes Fachwissen über TCP/IP Netzwerke. Zusätzlich zu den obigen Dokumenten können die O'Reilly Bücher <em>TCP/IP Netzwerk Administration</em> und <em>Einrichten von Internet Firewalls</em> sehr hilfreich sein. <sect>Konfiguration des Kernel <p> Um PPP benutzen zu können, muß das Linux Kernel mit PPP Unterstützung neu kompiliert werden. Als erstes muß der Linux Kernel Source Code auf dem Rechner installiert werden, falls dieser nicht bereits installiert ist. Gemäß dem Standard sollte sich der Source Code im dem Verzeichnis <tt>/usr/src/linux</tt> befinden. <p> In diesem Verzeichnis findet man mindestens eine <tt>README</tt> Datei. Diese enthält eine sehr gute Erklärungen, wie man das Kernel konfiguriert und kompiliert. Diese Datei sollte man auf jeden Fall lesen. Es ist eventuell eine gute Idee, diese Datei auszudrucken und zur Hand zu haben, wenn man ein neues Kernel kompiliert und dieses noch nicht so oft getan hat, um die notwendigen Schritte zu kennen. <p> Ein kleiner Hinweis - der aktuelle (Linux 1.2.13) <tscreen><verb>make config</verb></tscreen> <p> Dialog erlaubt es <em>nicht</em>, rückwärts zu gehen. Falls man also einen Fehler bei der Beantwortung einer der Fragen gemacht hat, muß man der Konfiguration mit <tt>STRG-C</tt> abbrechen und neu starten. <p> Man <em>muß</em> für das Kompilieren des Kernels wissen, was für Karten/Devices sind in dem Rechner befinden. <p> Um PPP benutzen zu können, muß das Kernel mit PPP Unterstützung konfiguriert werden. PPP erfordert sowohl den <tt>pppd</tt> als auch Kernel Unterstützung für PPP. <p> Das folgende ist ein Einzug von dem Linux 1.2.13 <tt>make config</tt>: <tscreen><verb> * * Network device support * Network device support? (CONFIG_NETDEVICES) [n] y Dummy net driver support (CONFIG_DUMMY) [n] y SLIP (serial line) support (CONFIG_SLIP) [n] n PPP (point-to-point) support (CONFIG_PPP) [n] y </verb></tscreen> <p> Falls man sich um die Sicherheit seines Computers und/oder LANs sorgt, während man mit dem Internet verbunden ist, möchten man vielleicht Unterstützung für IP Firewalls hinzufügen. <p> Die anderen <tt>make config</tt> Fragen beantwortet man entsprechend der verwendeten Hardware in dem Rechner und der Features von Linux, die man verwenden möchten. Danach kann man den Anweisung in der <tt>README</tt> folgen, um das Kernel zu kompilieren und zu installieren. <p> Falls der Linux Rechner als PPP Server oder Internet Gateway eingesetzt werden soll, sollte man IP forwarding einbinden (dieses wird benötigt!). <p> Außerdem hat das aktuelle Kernel nur 4 PPP Devices. Wenn mehr Devices benötigt werden, muß man den Kernel PPP Source Code verändern. Weitere Informationen hierzu findet man in der <tt>README.linux</tt> Datei, die als Teil der PPP-2.1.2 Distribution ausgeliefert wird. <p> Wenn erst einmal das neue Kernel installiert und der Rechner rebootet ist, kann man mit der Konfiguration und dem Testen der PPP Verbindung beginnen. <sect>Vom Provider zu erfragende Informationen <p> Bevor man eine PPP Verbindung zum Server aufbauen kann, muß man folgende Informationen vom Systemadministrator oder dem Benutzersupport des Providers in Erfahrung bringen: <itemize> <item>Die Telefon Nummer, die man zur Einwahl benutzen muß. Wobei die meisten Provider getrennte Nummern für analoge Modems und ISDN verwenden. <item>Benutzt der Server <em>dynamische</em> oder <em>statische</em> IP Nummer? Wenn der Server statische IP Nummern verwendet, muß man in Erfahrung bringen, welche IP Nummern man für die Verbindung benutzen muß. <newline> Die meisten Internet Service Provider benutzen dynamische IP Nummern. Wie oben erwähnt hat das einige Begleiterscheinung in bezug auf die Services, die man benutzen kann. <item>Wenn man eine statische IP Nummern verwendet, benötigt man auch eine Netzwerkmaske (network mask). <item>Welches sind die IP Nummern der Domain Name Server (DNS) des Providers? Es sollte mindestens zwei geben. <item>Benötigt der Server die Verwendung von PAP/CHAP? <item>Startet der Server automatisch PPP oder muß man irgendwelche Befehle eingeben, um PPP auf dem Server zu starten, wenn man sich erst einmal eingeloggt hat? Wenn man einen Befehl zum Starten von PPP eingeben muß, wie lautet dieser? </itemize> <p> Diese Informationen sollte man sich sorgfältig aufschreiben, da man sie später benötigt. <sect1>Testen der Modem Verbindung <p> Man sollte sich versichern, daß das Modem korrekt eingerichtet ist und einem bekannt ist, an welcher seriellen Schnittstelle das Modem angeschlossen ist. <p> <itemize> <item>DOS COM1 = Linux <tt>/dev/cua0</tt> (und <tt>/dev/ttyS0</tt>) <item>DOS COM2 = Linux <tt>/dev/cua1</tt> (und <tt>/dev/ttyS1</tt>)<newline> usw. </itemize> <p> Man benutzt nun als erstes ein Terminal Programm wie <tt>minicom</tt> und wählt sich in den PPP Servern ein, mit dem man später eine PPP Verbindung aufbauen möchte. Zu diesem Zeitpunkt versuchen wir <em>nicht</em> eine PPP Verbindung aufzubauen. Stattdessen wollen wir nur testen, ob wir die richtige Telefonnummer besitzen. Außerdem interessieren wir uns dafür, was der Server an uns sendet, wenn wir uns Einzuloggen und PPP starten. <p> Während dieses Prozesses speichert man entweder den gesamten Login Prozeß in einer Datei mit oder man schreibt sehr sorgfältig mit, was der Remote Server genau ausgibt, um dem Benutzer mitzuteilen, daß jetzt die Zeit ist, den Benutzernamen, das Paßwort und die Befehle zum Verbindungsaufbau einzugeben. <p> Es ist sinnvoll, sich mindestens zweimal einzuwählen, da einige Server ihre Ausgaben jedesmal ändern, wenn man sich einloggt. Es gibt zwei wichtige Ausgaben, die der Linux Rechner des Benutzer jedesmal beim Einloggen erkennen können muß: <itemize> <item>Die Ausgabe, die den Benutzer auffordert, seinen Benutzernamen einzugeben. <item>Die Ausgabe, die den Benutzer auffordert, sein Paßwort einzugeben. </itemize> <p> Wenn der Server automatisch das PPP Protokoll startet, wenn man sich eingeloggt hat, dann sieht man einige wirre Zeichen auf dem Bildschirm. Dieses ist der PPP Server, der dem eigenen Rechner Informationen schickt, um die PPP Verbindung aufzubauen. <p> Dieses sollte ungefähr so aussehen: <tscreen><verb> ~y}#.!}!}!} }8}!}$}%U}"}&} } } } }%}& ...}'}"}(}"} .~~y} </verb></tscreen> <p> An diesem Punkt kann man das Modem auflegen lassen (gewöhnlich, in dem man schnell <tt>+++</tt> eingibt und das <tt>ATHO</tt> Kommando eingibt, sobald das Modem mit <tt>OK</tt> antwortet). <p> Bei einigen Systemen muß PPP expliziert auf dem Server gestartet werden. Dieses liegt darin begründet, daß der Server so installiert worden ist, daß er Benutzer zum einen einen Shellaccount hat und zum anderen das PPP Protokoll verwenden kann. Falls dieses der Fall ist, gibt man den Befehl ein, sobald man eingeloggt ist. Noch einmal, wenn man solchen Müll auf dem Bildschirm sieht, ist das ein Zeichen dafür, daß der PPP Server beim Provider gestartet wurde, so daß man nun auflegen kann. <p> Falls man diesen Müll <em>nicht</em> auf dem Bildschirm sieht, wenn der Server PPP startet, ist es ziemlich sicher, daß man irgendetwas falsch gemacht hat. <p> Allerdings sind einige PPP Server so eingerichtet, daß sie sich passiv verhalten und nichts senden, bis der Klient, der eigene Computer, den PPP Prozeß startet. <p> Trotzdem, die Mehrzahl der Server ist aktiv und man sollte den Müll sehen. <p> Falls man sein Modem nicht zum korrekten Funktionieren überzeugen kann, sollte man das Handbuch des Modems, die man pages für die Kommunikationssoftware und die <em><htmlurl url="http://metalab.unc.edu/LDP/HOWTO/Serial-HOWTO.html" name="Serial HOWTO"></em> lesen. Wenn man das Problem erst einmal gelöst hat, fährt man, wie oben beschrieben, fort. <sect>Authentifizierung mit PAP and CHAP <p> Es ist möglich, einen PPP Server so einzurichten, daß die Benutzer Identifizierung vom PPP Protokoll selbst unter Verwendung von PAP/CHAP übernommen wird. Dabei werden die Identifizierungs Informationen zwischen den beiden PPP Daemonen ausgetauscht. <p> Dieser Abschnitt muß noch hinzugefügt werden. <sect>Anmerkung über serielle Schnittstellen und Geschwindigkeiten <p> Wenn man ein schnelles Modem mit 14.400 bps oder mehr benutzt, benötigt man eine serielle Schnittstelle, die die anfallende Datenmenge, die ein solchen Modems produzieren kann, transportieren kann. Aus diesem Grund muß die serielle Schnittstelle einen modernen UART (Universal Asynchronous Receiver Transmitter) wie den 16550(A) benutzen. Wenn man einen alten Rechner oder eine alte serielle Schnittstellenkarte verwendet, ist es durchaus möglich, daß die serielle Schnittstelle nur über einen 8250 UART verfügt. Dieses wird wahrscheinlich zu Problemen bei der Benutzung des Modems führen. <p> Der Befehl <tscreen><verb>setserial -a /dev/ttySx</verb></tscreen> <p> kann benutzt werden, damit Linux den verwendeten UART Typ ausgibt. Falls es sich nicht um einen UART vom 16550 Typ handelt, sollte man diesen auf jeden Fall ersetzen. Wenn es sich bei dem alten UART um einen 16450 handelt und dieser gesockelt ist, kann man ihn einfach durch einen 16550 IC ersetzen. Ansonsten sollte man sich eine neue Multi-IO Karte zulegen, die man für unter 50 DM bekommen kann. <sect>Konfiguration des Modems <p> Man muß das Modem korrekt für PPP konfigurieren. Um dieses zu tun, sollte man das Handbuch des Modems lesen. Die meisten Modems werden mit einer Standardeinstellung ausgeliefert, das bereits die für PPP benötigten Optionen richtig konfiguriert. Die wichtigste Einstellung ist: <itemize> <item>Hardware flow control (RTS/CTS) (<tt>&K3</tt> bei vielen Hayes Modems) </itemize> <p> Andere Einstellung (in Standard Hayes Befehlen), die man genauer untersuchen sollte: <itemize> <item><tt>E1</tt> Command Echo AN (wird von <tt>chat</tt> benötigt) <item><tt>Q0</tt> Report result codes (wird von <tt>chat</tt> benötigt) <item><tt>S0=0</tt> Auto Answer AUS <item><tt>&C1</tt> Carrier Detect AN nur nach Connect <item><tt>&S0</tt> Data Set Ready (DSR) immer AN <item>(verschieden) Data Terminal Ready </itemize> <p> Um die Konfiguration des Modems zu ermitteln und zu verändern, verwendet man ein beliebiges Terminalprogramm wie <tt>minicom</tt>. Bei vielen Modems kann man die aktuelle Konfiguration durch Eingabe von AT<tt>&V</tt> ermitteln. Sollte dieses nicht funktionieren, hilft das Handbuch des Modems sicherlich weiter. Falls man das Modem völlig verkonfiguriert hat, kann man meistens durch die Eingabe des Befehls AT<tt>&F</tt> die sogenannte <em>factory settings</em> des Modems laden. Dieses ist die Konfiguration, mit der das Modem ausgeliefert wurde. Bei den meisten Modems wird hierdurch genau die Konfiguration geladen, die man für PPP benötigt. Allerdings sollte man dieses immer überprüfen. <p> Nachdem man alle Paramter richtig eingestellt hat, muß man die Konfiguration im nicht flüchtigen Speicher des Modems abspeichern, so daß die Einstellungen auch durch das Ausschalten des Modems nicht verloren gehen. Dieses geschieht bei den meisten Modems durch die Eingabe des AT<tt>&W</tt> Befehls. <p> Wenn die richtig Modem Konfiguration in diesem abgespeichert worden ist, wird diese bei jedem Reset des Modems aktiviert. Auf diese Weise vereinfacht sich das benötigte <tt>chat</tt> Skript. <sect1>Anmerkungen zur Serial Flow Control <p> Wenn die Daten über die serielle Verbindung reisen, kann es passieren, daß die Daten schneller ankommen, wie der Computer sie verarbeiten kann. Der Computer ist vielleicht mit etwas anderem beschäftigt; man sollte daran denken, das Linux ein Multitasking und -user Betriebssystem ist. Um sicherzustellen, daß keine Daten verloren gehen, ist eine Methode zur Kontrolle des Datenflußes notwendig. <p> Es gibt zwei verschiedene Methoden, dieses bei einer seriellen Verbindung zu erreichen: <itemize> <item>Hardware Signale (Clear To Send/Request to Send - CTS/RTS) <item>Software Signale (control S und control Q). </itemize> <p> Während das zweite vielleicht für eine Terminal (Text) Verbindung geeignet sein mag, werden bei einer PPP Verbindung alle 8 Bits der Leitung verwendet. Und es ist sehr wahrscheinlich, daß sich irgendwo in den übertragenen Daten sich die Bytes der Steuerzeichen control S und control Q befinden, so daß, wenn das Modem die <em>software flow control</em> verwendet, es zu Problemen kommen kann. <p> Für PPP, welches mit 8 Bit Daten arbeitet, ist die <em>hardware flow control</em> lebensnotwendig. <sect>PPP Optionen Datei <p> Die Informationen, die benutzt werden, wenn PPP gestartet wird, können auf der Kommandozeile angegeben werden oder in einer Datei gespeichert werden, die der PPP Daemon beim Start einliest. <sect1>Benutzung von PPP und root Rechte <p> Weil der PPP Daemon Netzwerk devices einrichten muß, die Routingtabelle des Kernel verändern muß und so weiter, benötigt es <tt>root</tt> Rechte, um dieses zu tun. <p> Das <tt>pppd</tt> Programm sollte mit setuid root installiert werden: <tscreen><verb> -r-sr-xr-x 1 root root 95225 Jul 11 00:27 /usr/sbin/pppd</verb></tscreen> <p> Falls <tt>/usr/sbin/pppd</tt> nicht mit diesen Rechten installiert ist, sollte man als <tt>root</tt> folgendes Kommando eingeben: <tscreen><verb>chmod u+s /usr/sbin/pppd</verb></tscreen> <p> Wenn es jedem Benutzer möglich sein soll, eine PPP Verbindung aufzubauen, sollte man die <tt>ppp-on/off</tt> Skripte world read/execute machen. Dieses ist jedoch eigentlich nur auf Einzelplatzsystemen sinnvoll. <p> Wenn man allerdings <em>nicht</em> möchte, daß jeder Benutzer die Möglichkeit hat, eine PPP Verbindung aufzubauen, was z.B. sinnvoll sein kann, wenn man nicht möchte, daß die eigenen Kinder sich ohne Kontrolle ins Internet einwählen können, muß man eine PPP Gruppe einrichten, indem man <tt>/etc/group</tt> editiert und folgendes tun: <itemize> <item>Die PPP Gruppe zum Besitzer der <tt>ppp-on/off</tt> Skripte machen. <item>Die <tt>ppp-on/off</tt> Skripte lesbar und ausführbar für die PPP Gruppe machen. <item>Alle anderen Zugriffsrechte auf die <tt>ppp-on/off</tt> Skripte löschen. <item>Die Benutzer, die eine PPP Verbindung aufbauen dürfen, nehme man in die PPP Gruppe von <tt>/etc/group</tt> auf. </itemize> <tscreen><verb> -rwxr-x--- 1 root PPP 587 Mar 14 1995 /usr/sbin/ppp-on -rwxr-x--- 1 root PPP 631 Mar 14 1995 /usr/sbin/ppp-off </verb></tscreen> <sect1>Konfiguration der Dateien <p> Um die für PPP benötigten Verzeichnisse zu erzeugen und die notwendigen Datei zu editieren, muß man sich als <tt>root</tt> einloggen. Dieses ist auch notwendig, wenn PPP für alle Benutzer verfügbar sein soll. <p> Im Verzeichnis <tt>/etc</tt> sollte sich folgendes Verzeichnis befinden: <tscreen><verb> drwxrwxr-x 2 root root 1024 Oct 9 11:01 ppp </verb></tscreen> <p> Falls es noch nicht existiert, muß es erzeugt werden. <p> Wenn das Verzeichnis bereits besteht, sollte es eine Template Optionen Datei enthalten, die <tt>options.tpl</tt> heißt. Die Datei befindet sich am Ende dieses Dokumentes. Drucken Sie diese aus, da sie eine Beschreibung alle PPP Optionen enthält. Es ist sinnvoll diese zusammen mit der pppd man page zu lesen. Während man diese Datei als Basis für die eigene <tt>/etc/ppp/options</tt> Datei verwenden kann, ist es wahrscheinlich meistens besser, eine eigene Optionen Datei zu erzeugen, die nicht alle Kommentare des Templates enthält, da die Datei so erheblich kürzer ausfallen wird und leichter zu lesen und zu benutzen ist. <p> Wenn an den Rechner mehrere serielle Schnittstelle und Modems angeschlossen sind, was typischerweise bei PPP Servern der Fall ist, erzeugt man eine leere <tt>/etc/ppp/options</tt> Datei und jeweils eine individuelle Optionen Datei für jede serielle Line, über die eine PPP Verbindung aufgebaut werden soll. Die Dateien haben die Namen <tt>options.ttyS1</tt>, <tt>options.ttyS2</tt> und so weiter. Wenn es für alle Lines bestimmt gemeinsame Optionen gibt, dann können diese in der <tt>options</tt> Datei und die Port spezifischen Optionen in den entsprechenden <tt>options.ttySx</tt> Dateien abgelegt werden. <p> Für eine einzelne PPP Verbindung kann man aber einfach nur die <tt>/etc/ppp/options</tt> Datei verwenden. Alternativ kann man dem <tt>pppd</tt> alle Informationen auch auf der Kommandozeile übergeben. <p> Es ist einfacher ein Setup zu verwalten, das die <tt>/etc/ppp/options.ttySx</tt> Dateien verwendet. Wenn man PPP Verbindungen zu mehreren verschiedenen sites aufbaut, kann man für jede site eine eigene Optionen Datei als <tt>/etc/ppp/options.site</tt> erzeugen und diese Optionen Datei als Parameter dem PPP Befehl beim Verbindungsaufbau übergeben. <sect1>Welche Optionen sollte ich benutzen? <p> Wie bei allen Dinge hängt das vom Anwendungszweck ab. Das folgende ist eine einfache Standard Optionen Datei, die für die meisten Klient Verbindungen, die nicht PAP/CHAP benutzen, funktionieren sollte. <p> Falls sie trotzdem nicht arbeiten sollte, lesen Sie bitte die Template Datei und die pppd man pages und fragen sie beim Systemadministrator oder Support nach, die den Server betreiben, in den Sie sich einwählen möchten. <tscreen><verb> # /etc/ppp/options (kein PAP/CHAP) # # benutze die modem control lines modem # benutze hardware flow control crtscts # erzeuge eine default route fuer die Verbindung in der Routingtabelle defaultroute # alle Zeichen der Verbindung koennen genutzt werden asyncmap 0 # benutze eine maximum transmission packet Groesse von 552 Bytes mtu 552 # benutze eine maximum receive packet Groesse von 552 Bytes mru 552 </verb></tscreen> <sect>Konfiguration der <tt>/etc/resolv.conf</tt> Datei <p> Während wir Menschen es lieben, den Dingen Namen zu geben, mögen Computer viel lieber Nummern. In einem TCP/IP Netzwerk sprechen wir die Rechner mit einem bestimmten Namen an, wobei jede Maschine in einem bestimmten Domain zu finden ist. Zum Beispiel hat meine Linux Workstation den Namen <tt>archenland</tt> und ist in dem <tt>hedland.edu.au</tt> Domain angesiedelt. Die für einen Menschen gut zu lesende und zu merkende Adresse ist also <tt>archenland.hedland.edu.au</tt>. Damit die anderen Rechner diesen Computer im Internet finden und ansprechen können, ist er außerdem unter seiner IP Nummer (203.19.8.7) bekannt. <p> Das Übersetzen (resolving) des Maschinen und Domain Names in die im Internet verwendeten IP Nummern ist die Aufgabe einer Maschine, die den Domain Name Service anbietet. Die Rechner wird meistens auch als Nameserver bezeichnet. <p> Wenn man also eine PPP Verbindung aufbaut, muß man dem eigenen Linux Rechner irgendwie mitteilen, welcher Rechner die Hostnamen in IP Nummern umwandelt, so daß man selbst die Maschinen Namen verwenden kann, der Rechner diese aber in IP Nummern umwandeln kann. <p> Eine Möglichkeit wäre, alle Hosts, mit denen man kommunizieren möchte, in die <tt>/etc/hosts</tt> Datei einzutragen. Diese Möglichkeit findet aber nur in lokalen LANs mit wenigen Rechner Anwendungen. Im Internet scheidet diese Möglichkeit wegen der riesigen Anzahl vom Rechner aus. Als zweite Möglichkeit könnte man selbst die Hosts nicht mehr durch ihren Namen in Programmen eingeben, sondern die IP Nummern direkt verwenden. Allerdings kann man sich sehr schlecht mehr als ein paar dieser Nummern merken, so daß auch diese Möglichkeit nur für sehr kleine LANs angewendet wird. <p> Der beste Weg ist es, Linux so zu konfigurieren, daß es weiß, woher es diese Informationen für die Namen nach Nummer Umsetzung automatisch herbekommen kann. Dieser Service wird vom Domain Name Server System angeboten. Hierfür muß man nur die IP Nummer eines solchen DNS Systems in der <tt>/etc/resolv.conf</tt> Datei angeben. <p> Die meisten Provider bieten zwei DNS Server für ihre Kunden an. Es ist zwar nur einer notwendig, aber man setzt zur Sicherheit meistens zwei DNS Server ein, falls einer mal ausfallen sollte. <p> Ihre <tt>/etc/resolv.conf</tt> sollte wie folgende aussehen: <tscreen><verb> domain ihr.isp.domain.name nameserver 10.25.0.1 </verb></tscreen> <p> Diese Datei muß an den eigenen Provider angepaßt werden. Hierfür sollte der Provider die benötigten Informationen bereitstellen. Die Datei sollte folgende Besitzer und Zugriffsrechte haben. <tscreen><verb> -rw-r--r-- 1 root root 73 Feb 19 01:46 /etc/resolv.conf </verb></tscreen> <p> Falls Sie bereits die <tt>/etc/resolv.conf</tt> eingerichtet haben, weil Ihr Rechner mit einem LAN verbunden ist, fügen Sie einfach die IP Nummer des PPP DNS Server zu den existierenden hinzu. <sect>PPP Verbindung manuell aufbauen <p> Nachdem man nun eigene <tt>/etc/ppp/options</tt> und <tt>/etc/resolv.conf</tt> Dateien erzeugt hat, kann man die Einstellungen testen, in dem man per Hand eine PPP Verbindung aufbaut. Wenn der manuelle Verbindungsaufbau erst einmal funktioniert, werden wir ihn automatisieren. <p> Um den manuellen Verbindungsaufbau durchzuführen, benötigt man ein Terminalprogramm, das beendet werden kann, ohne das Modem zu resetten. Minicom kann dieses mittels <tt>ALT-Q</tt> (oder in alten Versionen von <tt>minicom</tt> mittels <tt>CTRL-A-Q</tt>). <p> Stellen Sie dabei sicher, daß sie als <tt>root</tt> eingeloggt sind. <p> Starten Sie nun das Terminalprogramm (wie z.B. <tt>minicom</tt>), wählen Sie sich in den PPP Server ein und loggen Sie sich ganz normal ein. Falls Sie einen Befehl auf dem Server eingeben müssen, um PPP zu starten, tun Sie dieses. Sie sehen nun den Müll auf den Bildschirm, den Sie vorher schon gesehen haben. <p> Man verläßt nun das Terminalprogramm ohne das Modem zu resetten (<tt>ALT-Q</tt> in <tt>minicom</tt>) und gibt folgendes als <tt>root</tt> am Linux Prompt ein: <tscreen><verb> pppd -d -detach /dev/cuaX & </verb></tscreen> <p> (für dynamische IP Nummern) oder <tscreen><verb> pppd -d -detach <Ihre IP Nummer>: /dev/cuaX </verb></tscreen> <p> (für statische IP Nummern - beachten Sie den Doppelpunkt nach der IP Nummer in diesem Fall) <p> Die <tt>-d</tt> Option schaltet den Debugging Modus ein. Hierdurch wird die "Konversation" während des Verbindungsaufbaus in der Logdatei des Systems festgehalten. Dieses ist nützlich, falls es Probleme geben sollte. <p> Die Status LEDs des Modems sollten nun blinken, wenn die PPP Verbindung aufgebaut wird. Es dauert einen kurzen Augenblick, bis die Verbindung aufgebaut ist. <p> Zu diesem Zeitpunkt kann man sich das PPP Interface anschauen, indem man folgenden Befehl eingibt <tscreen><verb> ifconfig ppp0 </verb></tscreen> <p> Man sollte nun ungefähr folgendes sehen können: <tscreen><verb> ppp0 Link encap:Point-Point Protocol inet addr:10.144.153.104 P-t-P:10.144.153.51 Mask:255.255.255.0 UP POINTOPOINT RUNNING MTU:552 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 TX packets:0 errors:0 dropped:0 overruns:0 </verb></tscreen> <p> Wobei <itemize> <item><tt>inet addr:10.144.153.104</tt> die eigene IP Nummer und <item><tt>P-t-P:10.144.153.51</tt> die IP Nummer des Servers ist. </itemize> <p> Natürlich wird <tt>ifconfig</tt> nicht genau diese IP Nummer anzeigen, sondern diejenigen, die Ihr PPP Server benutzt. <p> Hinweis: <tt>ifconfig</tt> zeigt außerdem an, daß die Verbindung UP und RUNNING ist! <p> Falls man etwa sowas erhält <tscreen><verb> ppp0 Link encap:Point-Point Protocol inet addr:0.0.0.0 P-t-P:0.0.0.0 Mask:0.0.0.0 POINTOPOINT MTU:1500 Metric:1 RX packets:63287 errors:0 dropped:0 overruns:0 TX packets:62187 errors:0 dropped:0 overruns:0 </verb></tscreen> <p> hat der Aufbau der PPP Verbindung nicht funktioniert. Lesen Sie dann den späteren Abschnitt über Debugging. <p> Nun kann man die Verbindung testen, in dem man die IP Nummer des Servers, die <tt>ifconfig</tt> angezeigt hat, anpingt, z.B. <tscreen><verb> ping 10.144.153.51 </verb></tscreen> <p> Man sollte eine solche Ausgabe erhalten <tscreen><verb> PING 10.144.153.51 (10.144.153.51): 56 data bytes 64 bytes from 10.144.153.51: icmp_seq=0 ttl=255 time=328.3 ms 64 bytes from 10.144.153.51: icmp_seq=1 ttl=255 time=190.5 ms 64 bytes from 10.144.153.51: icmp_seq=2 ttl=255 time=187.5 ms 64 bytes from 10.144.153.51: icmp_seq=3 ttl=255 time=170.7 ms </verb></tscreen> <p> Diese Anzeige läuft weiter, bis man sie mittels <tt>CTRL-C</tt> abbricht. Man erhält dann noch einige weitere Informationen: <tscreen><verb> --- 10.144.153.51 ping statistics --- 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max = 170.7/219.2/328.3 ms </verb></tscreen> <p> So weit so gut. <p> Nun sollte man einen Rechner über seinen Namen anpingen, wobei dieses nicht der PPP Server selbst sein sollte. Stattdessen verwendet man einen Rechner, von dem man weiß, daß er läuft, z.B.: <tscreen><verb> ping hedunx.hedland.edu.au </verb></tscreen> <p> Dieses mal gibt es eine kurze Pause, bis die erste Ausgabe von <tt>ping</tt> erscheint. Dieses liegt daran, daß Linux ja zuerst die IP Nummer von dem DNS Server holen muß, den man in der <tt>/etc/resolv.conf</tt> angegeben hat. Man erhält dann eine solche Ausgabe: <tscreen><verb> PING hedunx.hedland.edu.au (10.144.153.3): 56 data bytes 64 bytes from 10.144.153.3: icmp_seq=0 ttl=254 time=190.1 ms 64 bytes from 10.144.153.3: icmp_seq=1 ttl=254 time=180.6 ms 64 bytes from 10.144.153.3: icmp_seq=2 ttl=254 time=169.8 ms 64 bytes from 10.144.153.3: icmp_seq=3 ttl=254 time=170.6 ms 64 bytes from 10.144.153.3: icmp_seq=4 ttl=254 time=170.6 ms </verb></tscreen> <p> Und wieder bricht man die Ausgabe mit <tt>CTRL-C</tt> ab und erhält die Statistik: <tscreen><verb> --- hedunx.hedland.edu.au ping statistics --- 5 packets transmitted, 5 packets received, 0% packet loss round-trip min/avg/max = 169.8/176.3/190.1 ms </verb></tscreen> <p> Falls man überhaupt keine Antwort erhalten sollte, findet man ein Erklärung in dem Debugging Abschnitt dieses Dokuments. <p> Wenn alles läuft, kann man die Verbindung jetzt wieder mit folgendem Befehl abbauen: <tscreen><verb> ppp-off </verb></tscreen> <p> Falls das nicht funktionieren sollte, schalten man entweder das Modem ab oder man startet das Terminalprogramm, unterbricht das Modem mit <tt>+++</tt> und legt dann mit <tt>ATH0</tt> auf, wenn man das <tt>OK</tt> von Modem erhalten hat. <sect>Automatisierung der Verbindung mit chat <p> Ein <tt>chat</tt> Skript automatisiert den Einlogvorgang, so daß man als <tt>root</tt> oder als Mitglied der <tt>ppp</tt> Gruppe nur einen einzelnen Befehl eingeben muß, um eine Verbindung aufzubauen. <p> Ein <tt>chat</tt> Skript besteht jeweils aus Paaren von einer Zeichenkette, die <tt>chat</tt> erwartet und die Antwort die er darauf senden soll Nachdem das Modem zum Beispiel gewählt hat und eine Verbindung zum anderen Modem aufgebaut hat, warten wir darauf, das Login Prompt zu empfangen, wobei dieses eventuell erst nach einer Menge Text aus der <tt>/etc/issue.net</tt> Datei des Servers folgt. Nachdem wir dieses empfangen haben, senden wir unseren Benutzernamen. Als nächstes warten wir auf das Paßwort Prompt und senden unser Paßwort. <p> Im Prinzip also ganz einfach. <p> Falls das PPP Paket korrekt installiert worden ist, sollten sich in <tt>/usr/sbin</tt> zwei Dateien mit folgenden Namen befinden: <tscreen><verb> ppp-on ppp-off </verb></tscreen> <p> Diese enthalten Templates für den Verbindungsaufbau einer PPP Verbindung unter Verwendung von <tt>chat</tt>. Die <tt>ppp-off</tt> Datei war diejenigen, die wir im letzten Abschnitt verwendet haben, um unsere manuell aufgebaute PPP Verbindung zu beenden. <p> Nur für den Fall, daß bei Ihnen diese Templates fehlen sollten, sind hier modifizierte und kommentierte Versionen der Dateien, die wir verwenden werden: <bf><tt>/usr/sbin/ppp-on</tt>:</bf> <tscreen><verb> #!/bin/sh # # ppp-on # # Baut eine PPP Verbindung auf # LOCKDIR=/var/lock # Verzeichnis des lock files DEVICE=cua1 # Verwendete serielle Schnittstelle PHONE=XXXXXXXX # Telefonnummer des Modems des ISPs USER=XXXX # Benutzername zum Einloggen PASSWORD=password # Passwort beim Einloggen OUR_IP_ADDR=x.x.x.x # Die eigene IP Nummer bei der Verwendung von # statischen IP Nummern, ansonsten 0.0.0.0 if [ -f $LOCKDIR/LCK..$DEVICE ] then echo "PPP device ist gelockt" exit 1 fi fix-cua $DEVICE ( stty 19200 -tostop # Dieses kann man auch 115200 aendern, wenn die serielle Schnittstelle # des Modems dieses verkraftet. if chat -v -l LCK..$DEVICE ABORT "NO CARRIER" ABORT BUSY "" ATZ OK\ ATDT$PHONE CONNECT "" ogin: $USER ssword: \\q$PASSWORD then pppd -d -detach asyncmap 0 modem crtscts $OUR_IP_ADDR: /dev/$DEVICE rm -f LCK..$DEVICE exit 0 else echo "PPP Anruf fehlgeschlagen" 1>&2 exit 1 fi ) < /dev/$DEVICE > /dev/$DEVICE </verb></tscreen> <bf><tt>/usr/sbin/ppp-off</tt>:</bf> <tscreen><verb> #!/bin/sh DEVICE=ppp0 # Falls die PID Datei von ppp0 existiert, laeuft der Daemon. # Beende ihn. if [ -r /var/run/$DEVICE.pid ]; then kill -INT `cat /var/run/$DEVICE.pid` # Falls nicht erfolgreich stelle sicher, dass die PID Datei # entfernt wird. if [ ! "$?" = "0" ]; then echo "Entferne stale $DEVICE PID Datei." rm -f /var/run/$DEVICE.pid exit 1 fi # # Erfolg. Beendet mit richtigem Status. # echo "$DEVICE link beendet" exit 0 fi # # Der link ist nicht aktiv # echo "$DEVICE link ist nicht aktiv" exit 1 </verb></tscreen> <p> Die Rechte der Dateien und ihre Besitzer sollten sein: <tscreen><verb> -rwxr-xr-x 1 root PPP 502 Sep 3 20:04 /usr/sbin/ppp-off -rwxr-xr-x 1 root PPP 612 Sep 3 20:04 /usr/sbin/ppp-on </verb></tscreen> <sect1>Was ein chat Skript bedeutet... <p> Ein <tt>chat</tt> Skript ist eine Folge von erwarte und sende Strings. Hierbei sollte man beachten, daß wir <em>immer</em> zuerst etwas erwarten, bevor wir etwas senden. Wenn wir etwas senden möchten, ohne vorher etwas zu empfangen, müssen wir einen leeren erwarte String verwenden (gekennzeichnet durch <tt>&dquot;</tt><tt>&dquot;</tt>) und das gleiche gilt für das Erwarten einer Zeichenkette, ohne das etwas gesendet werden soll. Auch wenn eine Zeichenkette aus mehreren Worten wie z.B. <tt>NO CARRIER</tt> besteht, muß man die Zeichenkette in Anführungszeichen einschließen. <p> Die chat Zeile in unserem Beispiel ist: <tscreen><verb> if chat -v -l LCK..$DEVICE ABORT "NO CARRIER" ABORT BUSY "" ATZ OK\ ATDT$PHONE CONNECT "" ogin: $USER ssword: \\q$PASSWORD </verb></tscreen> <p> Dieses bedeutet ... <itemize> <item><tt>chat -v -l LCK..$DEVICE</tt><newline> rufe <tt>chat</tt> auf und erzeuge eine lock Datei für diese serielle Schnittstelle, damit nur diese Applikation auf die Schnittstelle zugreift (<tt>$DEVICE</tt> ist eine Shellvariable, die die Schnittstelle festlegt). Das <tt>-v</tt> fordert <tt>chat</tt> auf, all sein I/O in der Logdatei des Systems mitzuschreiben(normalerweise <tt>/var/log/messages</tt>) <item><tt>ABORT "NO CARRIER" ABORT BUSY</tt><newline> Falls Du eine dieser Antworten erhälst, breche den Versuch ab. <item><tt>"" ATZ</tt><newline> erwarte nichts (<tt>""</tt>), sende dann <tt>ATZ</tt> (setzt das Modem zurück). <item><tt>OK ATDT$PHONE</tt><newline> erwarte <tt>OK</tt> (die Modem Antwort auf <tt>ATZ</tt>), wähle <tt>$PHONE</tt> (eine andere Shellvariable, die die Nummer angibt, die gewählt werden soll). <item><tt>CONNECT ""</tt><newline> erwarte CONNECT (das Modem auf der anderen Seite hat geantwortet und die Modems haben erfolgreich die Baud Rate usw. abgestimmt), sende nichts (<tt>""</tt>). <item><tt>ogin: $USER</tt><newline> erwarte <tt>ogin:</tt>, das Login Prompt (ohne das führende <tt>l</tt> - dieses muß an das Prompt angepaßt werden, das der eigene ISP benutzt), und sende <tt>$USER</tt> (eine Shellvariable, die den eigenen Namen enthält). <item>ssword: \\q$PASSWORD<newline> erwarte <tt>assword:</tt> das Passwort Prompt (ohne das führende <tt>p</tt>) und sende <tt>$PASSWORD</tt> (eine weitere Shellvariable, die das eigene Paßwort enthält) Das <tt>\\q</tt> fordert <tt>chat</tt> auf, daß Paßwort <em>nicht</em> mittels syslog zu speichern, wenn es mit <tt>-v</tt> aufgerufen wird. </itemize> <p> Dieses ist ein sehr einfaches <tt>chat</tt> Skript. <tt>chat</tt> verfügt zusätzlich über einer Fehlerbehandlung und eine Anzahl weiterer Optionen. Für weitere Informationen lesen Sie bitte die chat manual page (man 8 chat). <sect>Erzeugen einer eigenen <tt>ppp-on</tt> Datei <p> Kopieren Sie die <tt>ppp-on</tt> Datei unter einem neuen Namen. Der Autor selbst benutzt <tt>ppp-providername</tt>. Auf diese Weise kann man immer wieder mit dem Original anfangen, falls es zu Problemen mit der selbst erstellten Version kommen sollte. <p> Nun werden wir die Datei editieren, wobei wir die Informationen verwenden, die wir vom System Administrator des PPP Servers erhalten haben. <p> <tt>ppp-on</tt> ist ein Bourne Shell Skript. Als erstes setzt es eine Anzahl von Shellvariablen für die spätere Verwendung. <sect1>Lock file Verzeichnis (LOCKDIR) <p> Suchen Sie in dem Verzeichnis <tt>/var</tt> und dessen Unterverzeichnissen nach Ihrem lock file Verzeichnis. Für ein Linux System nach dem <em>FSSTND</em> sollte dieses <tt>/var/lock</tt> sein. Ältere Systeme benutzen eventuell <tt>/var/spool/lock</tt>. <p> Ändern Sie die <tt>LOCKDIR=</tt> Zeile so, daß sie auf das lock Verzeichnis Ihres Systems zeigt. <sect1>Serielle Schnittstelle (DEVICE) <p> Dieses ist die serielle Schnittstelle, die mit dem zu verwendenden Modem verbunden ist, wobei das <tt>/dev/</tt> Prefix weggelassen wird. <p> Editieren sie die <tt>DEVICE=</tt> Zeile, so daß sie auf die serielle Schnittstelle zeigt, an dem das Modem hängt. <sect1>PPP Server Telefonnummer (PHONE) <p> Dieses ist die Telefonnummer, die gewählt werden muß, um den PPP Server zu erreichen. <p> Editieren Sie die <tt>PHONE=</tt>, so daß sie die Telefonnummer des PPP Servers enthält. <sect1>Benutzername (USER) <p> Dieses ist der Benutzername, der zum Einloggen in den PPP Server verwendet wird. <p> Editieren Sie die <tt>USER=</tt> Zeile, so daß sie Ihren Benutzernamen auf dem PPP Server enthält. Dabei sollte man bedenken, daß Unix und die meisten PPP Server die Klein- und Großschreibung unterscheiden. <sect1>Paßwort (PASSWORD) <p> Dieses ist das Paßwort, das man zum Einloggen in den PPP Server verwendet. <p> Editieren sie die <tt>PASSWORD</tt> Zeile, so daß sie Ihr Paßwort enthält. Auch hier wird meistens die Klein- und Großschreibung unterschieden. <p> Nun gibt es ein kleines Problem. Mit den Zugriffsrechten, wie sie gerade gesetzt sind, kann jeder die <tt>ppp-on</tt> Datei lesen und kann so an das Paßwort gelangen. Aus diesem Grund muß man die Dateirechte nach dem Editieren unbedingt auf 750 ändern (<tt>chmod 750 /usr/sbin/ppp-on</tt>), so daß nur <tt>root</tt> und die Mitglieder der <tt>ppp</tt> Gruppe diese Datei lesen können. <p> Denken Sie bitte daran, daß, auch wenn Sie der einizige Benutzer des Rechners sind, Sie eine Verbindung zum Internet oder einem anderen Netzwerk aufbauen. Da Linux ein Multiuser Betriebssystem ist, könnte jemand versuchen, sich in Ihr System einzuloggen, während die Verbindung besteht und an Ihre Daten (Name und Paßwort) für Ihren PPP Account gelangen. Mit diesen Daten hätte der Angreifer dann die Möglichkeit, sich auf Ihre Kosten ins Internet einzuwählen und unter Ihrem Namen Straftaten zu begehen. <sect1>Ihre IP Adresse (OUR_IP_ADDR) <p> Falls der Server, zu dem man eine Verbindung aufbauen möchte, <em>dynamische</em> IP Nummern verwendet, muß dieses auf 0.0.0.0 gesetzt werden. Noch besser ist es allerdings, diese Zeile dann komplett zu löschen und auch das <tt>$OUR_IPADDR:</tt> vom <tt>pppd</tt> Aufruf zu entfernen. Falls Sie vom Administrator des PPP Servers eine eigene IP Nummer erhalten haben, benutzen Sie <em>statische</em> IP Nummern. In diesem Fall muß diese IP Nummer in dieser Zeile eingetragen werden. <sect1>Editieren der <tt>chat</tt> Zeile <p> Der gesamte <tt>chat</tt> Befehl muß aus einer Zeile bestehen. Zeilenumbrüche sind nicht erlaubt. Ausnahmen werden in der man page von <tt>chat</tt> beschrieben. <p> Die <tt>chat</tt> Zeile beginnt mit Optionen für <tt>chat</tt> selbst. <tscreen><verb> -l LCK..$DEVICE </verb></tscreen> <p> Dieses richtet den lock file ein. <p> Eine andere <em>sehr</em> nützliche Option für das Debuggen ist <tt>-v</tt>, welche <tt>chat</tt> auffordert, den gesamten Einlogvorgang mittels syslog mitzuspeichern. Wenn man das erste mal eine Verbindung aufbaut, sollte man diese Option verwenden, um eventuelle Fehler aufspüren zu können. Der Anfang der <tt>chat</tt> Zeile wäre also <tscreen><verb> -v -l LCK..$DEVICE </verb></tscreen> <p> Die erwarte/sende Paare beginnen mit <tscreen><verb> "" ATZ </verb></tscreen> <p> Dieses bedeutet, erwarte nichts und sende <tt>ATZ</tt>, welches das Modem zurücksetzt und dessen Standardeinstellung lädt. <p> Nun haben wir <tscreen><verb> OK ATDT$PHONE </verb></tscreen> <p> welches auf die <tt>OK</tt> Antwort des Modems als Antwort auf den <tt>ATZ</tt> Befehl wartet und dann das Kommando für die Tonwahl und die entsprechende Telefonnummer sendet. Falls es nicht gelingt, daß Modem so zu konfigurieren, daß es nach dem Reset die richtigen Einstellungen für die PPP Verbindung verwendet, kann man hier einen String für die Initialisierung des Modems einbinden. Zum Beispiel <tscreen><verb> OK ATDT&K3S0=0DT$PHONE </verb></tscreen> <p> Das nächste Paar ist <tscreen><verb> CONNECT "" </verb></tscreen> <p> welches bedeutet, erwarte <tt>CONNECT</tt>, welches das Modem nach einem Verbindungsaufbau mit dem anderen Modem sendet, und sende nichts. <p> Nun kommen wir zum eigentlich Einlogprozeß <tscreen><verb> ogin: $USER </verb></tscreen> <p> welches auf das login prompt wartet und dann den eigenen Benutzernamen sendet. Der String, der von <tt>chat</tt> erwartet wird, muß an den Loginprozeß des eigenen Providers, den man vorher genau mitgeschrieben hat, angepaßt werden. <p> Nun warten wir auf die Aufforderung, daß Paßwort einzugeben <tscreen><verb> assword: \\q$PASSWORD </verb></tscreen> <p> und senden unser Paßwort. Das <tt>\\q</tt> fordert <tt>chat</tt> auf, daß Paßwort nicht in den Logdateien des Systems zu speichern, was ansonsten bei Verwendung der <tt>-v</tt> Option passieren würde. <p> Falls Sie auf dem PPP Server zuerst ein Kommando eingeben müssen, um PPP zu starten, fügen Sie ein zusätzliches erwarte/sende Paar hinzu. Dieses sollte auf das Login Prompt warten, wobei man auf bestimmte Buchstaben wie $ und [ oder ] achten sollte, die beim Bourne Shell eine besondere Bedeutung haben, und den Befehl zum Start von PPP senden. <p> In meinem Fall benutzt der PPP Server das normale Linux Bash Prompt <tscreen><verb> [hartr@kepler hartr]$ </verb></tscreen> <p> und erwartet, daß ich folgendes eingebe <tscreen><verb> ppp </verb></tscreen> <p> um PPP auf dem Server zu starten, so daß mein erwarte/sende Paar so aussieht <tscreen><verb> hartr ppp </verb></tscreen> <p> Das <tt>chat</tt> Programm hat noch viel mehr Funktionen, wie wir hier beschrieben haben, wie z.B. die Fehlerbehandlung und fehlende erwarte Strings. Weitere Informationen zu <tt>chat</tt> befinden sich in dessen man page. <p> Manche PPP Server haben nicht bei jedem Einloggen genau die gleichen Eingabeaufforderungen, so daß man sich eventuell mehrere male per Hand einloggen muß, um zu verstehen, was genau passiert und welche erwarte Strings man verwenden kann. <sect1>Editieren der <tt>pppd</tt> Zeile <p> Da man ja eine <tt>/etc/ppp/options</tt> Datei eingerichtet hat, muß man dem <tt>pppd</tt> keine weiteren Optionen außer <tt>$DEVICE</tt> übergeben. Diese Option sagt dem <tt>pppd</tt>, welche serielle Schnittstelle er verwenden soll. <p> Allerdings kann man auch alle Optionen auf der Kommandozeile übergeben, wobei der <tt>pppd</tt> Befehl und alle seine Optionen in einer Zeile stehen müssen und das device gefolgt von der Geschwindigkeit der Schnittstelle die letzten übergebenen Optionen sein müssen. <p> Wie wir bereits gesehen haben, kann das Loggen der Debuginformationen mit der Option <tt>-d</tt> vom <tt>pppd</tt> eingeschaltet werden. Dieses sollte man bei den ersten Versuchen mit einem neuen Skript immer verwenden. Allerdings sollte man, wenn man nur über wenig freien Platz auf der Festplatte verfügt, bedenken, daß die Logdateien einigen Platz auf der Festplatte einnehmen können. <p> Falls man die Datei mit den PPP Optionen nicht <tt>/etc/ppp/options</tt> oder <tt>/etc/ppp/options.ttySx</tt> genannt hat, übergibt man den Dateinamen mit der <tt>-f</tt> Option an den <tt>pppd</tt>, also z.B. <tscreen><verb> -f options.myserver </verb></tscreen> <sect1>Speichern des Skriptes <p> <em>Das war es. Verlassen Sie den Editor und ändern sie die Zugriffsrechte der Skript Datei auf 750!</em> <sect>Testen des chat Skriptes <p> Öffnen Sie ein neues <tt>root</tt> Xterm, falls Sie sich in X befinden, oder öffnen Sie eine neue virtuelle Konsole und loggen Sie sich als <tt>root</tt> ein. <p> Hier geben Sie nun folgendes Kommando ein <tscreen><verb> tail -f /var/log/messages </verb></tscreen> <p> Wobei Sie <tt>/var/log/messages</tt> eventuell durch den Namen der Datei ersetzen müssen, in der der <tt>syslogd</tt> Meldungen vom Typ <em>Daemon</em> speichert. <p> In dem ersten Fenster oder der ersten virtuellen Konsole geben Sie folgendes Kommando ein <tscreen><verb> ppp-on & </verb></tscreen> <p> oder wie Sie Ihre editierte Version von <tt>/usr/sbin/ppp-on</tt> genannt haben. Falls Sie das Skript nicht mittels <tt>&</tt> am Ende des Kommandos in den Hintergrund starten, bekommen Sie kein Terminal Prompt zurück, bevor die PPP Verbindung beendet wird. <p> Nun schalten Sie auf das andere Fenster zurück, das Ihre Logdatei anzeigt. <p> Nun werden Sie etwas wie das folgende sehen, falls Sie <tt>chat</tt> mit <tt>-v</tt> und <tt>pppd</tt> mit <tt>-d</tt> aufgerufen haben. Dieses zeigt die Arbeit des <tt>chat</tt> Skriptes beim Einloggen und die Startinformationen des <tt>pppd</tt>. <tscreen><verb> Oct 21 16:09:58 hwin chat[19868]: abort on (NO CARRIER) Oct 21 16:09:59 hwin chat[19868]: abort on (BUSY) Oct 21 16:09:59 hwin chat[19868]: send (ATZ^M) Oct 21 16:09:59 hwin chat[19868]: expect (OK) Oct 21 16:10:00 hwin chat[19868]: ATZ^M^M Oct 21 16:10:00 hwin chat[19868]: OK -- got it Oct 21 16:10:00 hwin chat[19868]: send (ATDT722298^M) Oct 21 16:10:00 hwin chat[19868]: expect (CONNECT) Oct 21 16:10:00 hwin chat[19868]: ^M Oct 21 16:10:22 hwin chat[19868]: ATDT722298^M^M Oct 21 16:10:22 hwin chat[19868]: CONNECT -- got it Oct 21 16:10:22 hwin chat[19868]: send (^M) Oct 21 16:10:22 hwin chat[19868]: expect (ogin:) Oct 21 16:10:22 hwin chat[19868]: 57600^M Oct 21 16:10:23 hwin chat[19868]: ^[[;H^[[2J^M^M Oct 21 16:10:23 hwin chat[19868]: ^M Oct 21 16:10:23 hwin chat[19868]: ^M Oct 21 16:10:23 hwin chat[19868]: ^I^I This is node kepler.hedland.edu.au^M Oct 21 16:10:23 hwin chat[19868]: ^I^I^I at Hedland Campus^M Oct 21 16:10:23 hwin chat[19868]: ^I^I^I Hedland College^M Oct 21 16:10:23 hwin chat[19868]: ^M Oct 21 16:10:23 hwin chat[19868]: ^I^I Authorised user ONLY are to use this system^M Oct 21 16:10:23 hwin chat[19868]: ^M Oct 21 16:10:23 hwin chat[19868]: ^M Oct 21 16:10:23 hwin chat[19868]: ^I^I For more information, contact ComputerSystems^M Oct 21 16:10:23 hwin chat[19868]: ^I^I^I on +61 (0)91 72 0400^M Oct 21 16:10:23 hwin chat[19868]: ^I^I^I^I or^M Oct 21 16:10:23 hwin chat[19868]: ^I^I email: help@hedunx.hedland.edu.au^M Oct 21 16:10:23 hwin chat[19868]: ^M Oct 21 16:10:23 hwin last message repeated 3 times Oct 21 16:10:23 hwin chat[19868]: kepler login: -- got it Oct 21 16:10:23 hwin chat[19868]: send (hartr^M) Oct 21 16:10:23 hwin chat[19868]: expect (ssword:) Oct 21 16:10:23 hwin chat[19868]: hartr^M Oct 21 16:10:23 hwin chat[19868]: Password: -- got it Oct 21 16:10:23 hwin chat[19868]: send (??????^M) Oct 21 16:10:23 hwin chat[19868]: expect (hartr) Oct 21 16:10:23 hwin chat[19868]: ^M^M Oct 21 16:10:24 hwin chat[19868]: Last login: Sat Oct 21 14:55:53 on ttyC0^M Oct 21 16:10:24 hwin chat[19868]: ^M Oct 21 16:10:24 hwin last message repeated 9 times Oct 21 16:10:24 hwin chat[19868]: ^I^IYou have logged into node kepler.hedland.edu.au^M Oct 21 16:10:24 hwin chat[19868]: ^M Oct 21 16:10:24 hwin chat[19868]: ^M Oct 21 16:10:24 hwin chat[19868]: [hartr -- got it Oct 21 16:10:24 hwin chat[19868]: send (ppp^M) Oct 21 16:10:27 hwin pppd[19872]: pppd 2.1.2 started by root, uid 0 Oct 21 16:10:27 hwin pppd[19873]: Using interface ppp0 Oct 21 16:10:27 hwin pppd[19873]: Connect: ppp0 <--> /dev/cua1 Oct 21 16:10:27 hwin pppd[19873]: fsm_sdata(LCP): Sent code 1, id 1. Oct 21 16:10:27 hwin pppd[19873]: LCP: sending Configure-Request, id 1 Oct 21 16:10:27 hwin pppd[19873]: fsm_rconfreq(LCP): Rcvd id 1. Oct 21 16:10:27 hwin pppd[19873]: lcp_reqci: rcvd MRU Oct 21 16:10:27 hwin pppd[19873]: (1500) Oct 21 16:10:27 hwin pppd[19873]: (ACK) Oct 21 16:10:27 hwin pppd[19873]: lcp_reqci: rcvd ASYNCMAP Oct 21 16:10:27 hwin pppd[19873]: (0) Oct 21 16:10:27 hwin pppd[19873]: (ACK) Oct 21 16:10:27 hwin pppd[19873]: lcp_reqci: rcvd MAGICNUMBER Oct 21 16:10:27 hwin pppd[19873]: (a098b898) Oct 21 16:10:27 hwin pppd[19873]: (ACK) Oct 21 16:10:27 hwin pppd[19873]: lcp_reqci: rcvd PCOMPRESSION Oct 21 16:10:27 hwin pppd[19873]: (ACK) Oct 21 16:10:27 hwin pppd[19873]: lcp_reqci: rcvd ACCOMPRESSION Oct 21 16:10:27 hwin pppd[19873]: (ACK) Oct 21 16:10:27 hwin pppd[19873]: lcp_reqci: returning CONFACK. Oct 21 16:10:27 hwin pppd[19873]: fsm_sdata(LCP): Sent code 2, id 1. Oct 21 16:10:27 hwin pppd[19873]: fsm_rconfack(LCP): Rcvd id 1. Oct 21 16:10:27 hwin pppd[19873]: fsm_sdata(IPCP): Sent code 1, id 1. Oct 21 16:10:27 hwin pppd[19873]: IPCP: sending Configure-Request, id 1 Oct 21 16:10:27 hwin pppd[19873]: fsm_rconfreq(IPCP): Rcvd id 1. Oct 21 16:10:27 hwin pppd[19873]: ipcp: received ADDR Oct 21 16:10:27 hwin pppd[19873]: (10.144.153.51) Oct 21 16:10:27 hwin pppd[19873]: (ACK) Oct 21 16:10:27 hwin pppd[19873]: ipcp: received COMPRESSTYPE Oct 21 16:10:27 hwin pppd[19873]: (45) Oct 21 16:10:27 hwin pppd[19873]: (ACK) Oct 21 16:10:27 hwin pppd[19873]: ipcp: returning Configure-ACK Oct 21 16:10:28 hwin pppd[19873]: fsm_sdata(IPCP): Sent code 2, id 1. Oct 21 16:10:30 hwin pppd[19873]: fsm_sdata(IPCP): Sent code 1, id 1. Oct 21 16:10:30 hwin pppd[19873]: IPCP: sending Configure-Request, id 1 Oct 21 16:10:30 hwin pppd[19873]: fsm_rconfreq(IPCP): Rcvd id 255. Oct 21 16:10:31 hwin pppd[19873]: ipcp: received ADDR Oct 21 16:10:31 hwin pppd[19873]: (10.144.153.51) Oct 21 16:10:31 hwin pppd[19873]: (ACK) Oct 21 16:10:31 hwin pppd[19873]: ipcp: received COMPRESSTYPE Oct 21 16:10:31 hwin pppd[19873]: (45) Oct 21 16:10:31 hwin pppd[19873]: (ACK) Oct 21 16:10:31 hwin pppd[19873]: ipcp: returning Configure-ACK Oct 21 16:10:31 hwin pppd[19873]: fsm_sdata(IPCP): Sent code 2, id 255. Oct 21 16:10:31 hwin pppd[19873]: fsm_rconfack(IPCP): Rcvd id 1. Oct 21 16:10:31 hwin pppd[19873]: ipcp: up Oct 21 16:10:31 hwin pppd[19873]: local IP address 10.144.153.104 Oct 21 16:10:31 hwin pppd[19873]: remote IP address 10.144.153.51 </verb></tscreen> <p> Der Autor verwendet <em>statische</em> IP Nummern, daher sendet der Rechner dieses an den PPP Server. Dieses werden Sie, wenn Sie <em>dynamische</em> verwenden, nicht sehen. <p> Dieses sieht gut aus, testen Sie nun, wie vorher beschrieben, ob Sie IP Nummern und Hostnamen anpingen können. <p> Sie können nun Ihren WWW Browser oder was auch immer starten. Sie sind nun mit dem Internet verbunden. <sect>Abbauen der PPP Verbindung <p> Wenn die PPP Verbindung nicht mehr länger benötigt wird, kann sie einfach mit dem <tt>ppp-off</tt> Befehl abgebaut werden. Auch hierfür muß man <tt>root</tt> oder Mitglied der <tt>ppp</tt> Gruppe sein. <p> In Ihrer Logdatei wird dann ungefähr folgendes zu finden sein <tscreen><verb> Oct 21 16:10:45 hwin pppd[19873]: Interrupt received: terminating link Oct 21 16:10:45 hwin pppd[19873]: ipcp: down Oct 21 16:10:45 hwin pppd[19873]: default route ioctl(SIOCDELRT): Bad address Oct 21 16:10:45 hwin pppd[19873]: fsm_sdata(LCP): Sent code 5, id 2. Oct 21 16:10:46 hwin pppd[19873]: fsm_rtermack(LCP). Oct 21 16:10:46 hwin pppd[19873]: Connection terminated. Oct 21 16:10:46 hwin pppd[19873]: Exit. </verb></tscreen> <sect>Ich bekomme keine Verbindung ... <p> Es gibt eine große Anzahl von Gründen, warum dieses passieren kann. <tt>chat</tt> ist es nicht gelungen, sich einzuloggen oder die Telefonverbindung ist zu schlecht. Genauere Informationen erhält man aus dem syslog. <p> In einem solchen Fall sollte man einen Blick in die <em>PPP FAQ</em> werfen, die eine wirklich große Anzahl von Fragen und Antworten enthält. Dieses ist ein sehr kompaktes Dokument und die Antwort ist dort zu finden. Aus meiner eigenen Erfahrung kann ich sagen, daß, wenn die Antwort für das Problem dort nicht zu finden ist, das Problem nicht der Fehler von ppp ist. In meinem Fall habe ich ein ELF Kernel benutzt und keine neue Version eingespielt, als ich die neue Kernel Modules installiert habe. <sect>Nachdem die Verbindung aufgebaut ist ... <sect1>Spezielles Routing, Leeren der sendmail Warteschlange usw. <p> Ein weiterer Schritt der Automatisierung ist möglich. Sobald die PPP Verbindung aufgebaut ist, sucht der <tt>pppd</tt> nach <tt>/etc/ppp/ip-up</tt>. Falls dieses Skript existiert und es ausführbar ist, führt der PPP Daemon das Skript aus. Dieses ermöglicht es, nach jedem Verbindungsaufbau spezielle Kommandos ausführen zu lassen. <p> Hiermit kann man also z.B. <tt>sendmail</tt> dazu bringen, die wartenden emails zu verschicken. Außerdem kann man hier Kommandos einfügen, die emails und News vom ISP abholen. <sect>Beenden der Verbindung <p> Das existierende <tt>/usr/sbin/ppp-off</tt> Skript sollte einwandfrei funktionen. Die einzig sinnvolle Änderung könnte darin bestehen, daß Skript so zu ändern, daß es wartet, bis <tt>sendmail</tt> alle emails abgeliefert hat. <p> Zusätzlich kann man ein Skript erzeugen, daß immer dann ausgeführt wird, wenn die Verbindung beendet worden ist. Dieses wird in der Datei <tt>/etc/ppp/ip-down</tt> gespeichert. Es kann dazu verwendet werden, spezielle Einstellung zurückzusetzen, die vorher mit dem korrespondierenden <tt>/etc/ppp/ip-up</tt> Skript gesetzt worden sind. <sect>Routing in einem LAN <p> Falls der eigene Rechner nicht nur per PPP mit dem Internet verbunden werden soll, sondern gleichzeitig auch noch eine Verbindung zum lokalen LAN über die Ethernetkarte bestehen soll, muß man dem Rechner mitteilen, welche Rechner er über welches Interface erreicht. <p> Dieser Abschnitt versucht <em>nicht</em>, das Routen zu vermitteln. Vielmehr beschäftigt er sich mit ganz spezielle statischen Routen. <p> Ich würde Ihnen dringend empfehlen, daß Linux <em>Network Administrator Guide</em> (NAG) zu lesen, wenn Sie sich mit dem Routen bisher nicht auskennen. Auch das O'Reilly Buch <em>TCP/IP Netzwerk Administration</em> beschreibt dieses Thema in einer leicht verständlichen Form. <p> Die Grundregel vom statischen Routen lautet, daß die <em>default</em> route immer diejenige sein sollte, die auf die größte Anzahl von Netzwerkadressen zeigt. Für andere Netzwerk legt man spezielle Routen in der Routingtabelle fest. <p> Die einzige Situation, die ich hier beschreiben werden, ist der Fall, wo sich der eigene Linux Rechner in einem LAN befindet, das nicht mit dem Internet verbunden ist und man sich in das Internet einwählen möchte, während man weiterhin mit dem LAN verbunden ist. <p> Als erstes sollte man sicherstellen, daß die Ethernet Route auf die spezielle Netzwerkadressen zeigt, die in dem eigenen LAN vorhanden sind und nicht auf die default route. <p> Dieses kann man mit dem <tt>route</tt> Befehl überprüfen, wobei man etwa folgendes sehen sollte: <tscreen><verb> [root@hwin /root]# route -n Kernel routing table Destination Gateway Genmask Flags MSS Window Use Iface loopback * 255.255.255.0 U 1936 0 50 lo 10.0.0.0 * 255.255.255.0 U 1436 0 565 eth0 </verb></tscreen> <p> Falls das Ethernet Interface (<tt>eth0</tt>) auf die default route zeigt, was man an einem <tt>default</tt> in der erste Spalte der <tt>eth0</tt> Zeile erkennen kann, muß man die Ethernet Initialisierungsskripte ändern, so daß es auf spezielle Netzwerknummer zeigt. Weitere Informationen hierzu finden sich in der <em><htmlurl url="DE-NET3-HOWTO.html" name="NET3 HOWTO"></em> und im <em>NAG</em>. <p> Dieses wird es dem <tt>pppd</tt> ermöglichen, die default route, wie unten gezeigt, zu setzen: <tscreen><verb> [root@hwin /root]# route -n Kernel routing table Destination Gateway Genmask Flags MSS Window Use Iface 10.144.153.51 * 255.255.255.255 UH 488 0 0 ppp0 127.0.0.0 * 255.255.255.0 U 1936 0 50 lo 10.1.0.0 * 255.255.255.0 U 1436 0 569 eth0 default 10.144.153.51 * UG 488 0 3 ppp0 </verb></tscreen> <p> Wie man sehen kann, haben wir eine host route zum PPP Server (10.144.153.51) über <tt>ppp0</tt> und außerdem eine default network route, die den PPP Server als Gateway verwendet. <p> Falls Ihr Netzwerk kompilizierter als das hier gezeigte aussehen sollte, lesen Sie die schon oben erwähnten Dokumente über das Routing oder fragen Sie einen Experten in Ihrem Netzwerk. <p> Falls sich in Ihrem LAN bereit Router befinden, haben Sie bereits eingerichte Gateways zu den anderen Netzwerken Ihrer Site. Die default route sollte aber trotzdem auf der PPP Interface zeigen. Für die anderen Netzwerke kann man spezielle Routen anlegen. <sect1>Hinweise zur Sicherheit <p> Wenn man sich mit dem eigenen Linux Rechner, der bereits mit einem LAN verbunden ist, in das Internet einwählt, öffnet man das gesamte LAN für das Internet und die eventuell dort zu finden Hacker. Aus diesem Grund sollte der Verbindungsaufbau mit dem Internet auf jeden Fall mit dem Netzwerk Administrator des LANs und dem Sicherheitsbeauftragen abgestimmt werden. Ansonsten kann man sich bei einem erfolgreichen Einbruch von Hackern in das lokale Netzwerk und dessen Rechner ziemlichen Ärger einhandeln. <p> Bevor man ein LAN mit dem Internet verbindet, sollte man sich zuerst Gedanken über die dadurch entstehenden Sicherheitsrisiken machen. Dieses gilt auch bei einer dynamischen Verbindung. <sect>Debuggen <p> Falls es einfach nicht gelingt, die PPP Verbindung zum korrekten Arbeiten zu bringen, sollte Sie dieses Dokument noch einmal genau lesen und alles überprüfen und zwar in Verbindung mit der von <tt>chat -v</tt> und <tt>pppd -d</tt> erzeugten Ausgabe in der Logdatei des Systems. <p> Auch sollten Sie die PPP Dokumentation und die FAQ zusammen mit den hier erwähnten Dokumenten zu Rate ziehen. <p> Falls auch das nicht helfen sollte, beschreiben Sie Ihr Problem in den Newsgruppen <tt><htmlurl url="news:de.comp.os.linux.networking" name="de.comp.os.linux.networking"></tt> und <tt><htmlurl url="news:comp.protocols.ppp" name="comp.protocols.ppp"></tt>. Hier lesen eigentlich immer Leute mit, die Ihnen helfen können. Man sollte jedoch immer daran denken, nur die wichtigsten Zeilen aus der Logdatei zu posten. Mails mit etlichen Kilobytes Logdateien werden nicht gerne gesehen und meistens auch nicht beantwortet. <sect>Probleme, wenn die Verbindung erst einmal arbeitet <p> Ein Problem, auf das man eventuell stößt, besteht darin, daß viel ISPs nur Unterstützung für die von ihnen gelieferten PPP Software bieten. Und diese läuft fast immer nur unter Windows. Vielen ISPs ist Linux als Betriebssystem auf Kundenseite völlig unbekannt, so daß man auf sich selbst gestellt ist. Man sollte also darauf vorbereitet sein, von dieser Seite keine Unterstützung zu finden. Einige Provider verwenden außerdem proprietäre Protokolle, die nur mit spezieller Software für Windows benutzt werden können, wie das z.B. bei AOL der Fall ist. <sect1>Ich kann niemand außer dem PPP Server erreichen. <p> Gut, die PPP Verbindung scheint also zu laufen und man kann den PPP Server mit seiner IP Nummer (die zweite oder <tt>remote</tt> IP Nummer, die <tt>ifconfig ppp0</tt> anzeigt) anpingen, aber man kann keinen anderen Rechner erreichen. <p> Als erstes sollte man versuchen, die IP Nummer des Nameservers anzupingen, die man in <tt>/etc/resolv.conf</tt> angegeben hat. Wenn dieses funktioniert, kann man auch andere Rechner als den PPP Server ansprechen, außer der Nameserver hat die gleiche IP Nummer wie der PPP Server. Nun sollte man versuchen, den ISP mit seinem kompletten Internet Namen anzupingen, also z.B.: <tscreen><verb> ping mein.provider.net.au </verb></tscreen> <p> Falls diese <em>nicht</em> funktionieren sollte, hat man eine Problem mit der Auflösung des Names in eine IP Nummer. Dieses könnte an einem Tipfehler in der <tt>/etc/resolv.conf</tt> Datei liegen, die ja den Nameserver festlegt, der verwendet werden soll. Man sollte die Adresse in der Datei noch einmal genau mit denen vergleichen, die man von seinem ISP bekommen hat. Falls alles korrekt aussieht, sollte man noch einmal den Support des ISP anrufen und sich vergewissern, daß man die IP Nummern der Name Server korrekt notiert hat. <p> Falls auch das nicht helfen sollte und der ISP versichert, daß seine Nameserver laufen, liegt das Problem irgendwo anders. In diesem Fall sollte man die eigene Linux Installation noch einmal genau überprüfen und hierbei besonders auf die Zugriffsrechte der Dateien achten. <p> Falls man die Nameserver des ISPs nicht mittels ihrer IP Nummer anpingen kann, laufen die Nameserver entweder nicht oder es gibt beim ISP ein Routing Problem. In diesem Fall sollte man beim Support des ISPs anrufen. <p> Ein Möglichkeit ist z.B., daß der ISP einen Linux PPP Server verwendet und dieser vergessen hat, die IP forwarding Option im Kernel einzuschalten. <p> Ein guter Test ist es, zu versuchen, mit der Software von Microsoft Windows eine PPP Verbindung zu dem Provider aufzubauen. Falls man mit einem anderen Betriebssystem mit demselben Account eine PPP Verbindung aufbauen kann, dann liegt das Problem bei dem eigenen Linux System und <em>nicht</em> bei dem ISP. <sect1>Ich kann email versenden, aber keine empfangen. <p> Wenn man dynamische IP Nummern verwendet, ist dieses normal. <sect>Die Benutzung von Internet Diensten mit dynamischen IP Nummern <p> Wenn man dynamische IP Nummern verwendet und das ist bei den meisten ISPs der Fall, da diese statische IP Nummern nur gegen ein erheblich höheres Entgeld vergeben, muß man die Einschränkungen erkennen, die dadurch entstehen. <p> Bei der Verwendung von dynamischen IP Nummern macht die eigene Benutzung von angebotenen Diensten keine Probleme. Man kann also ohne Probleme emails mit <tt>sendmail</tt> verschicken, Dateien von Servern mittels <tt>ftp</tt> beziehen, Benutzer auf anderen Rechnern fingern, im Web surfen usw. <p> Allerdings ist der eigene Rechner <em>nicht</em> 24 Stunden am Tag mit dem Internet verbunden und er hat nicht jedesmal die selbe IP Nummer, wenn er mit dem Internet verbunden ist. Aus diesem Grund ist es unmöglich, daß jemand an den Rechner direkt emails schickt oder daß man einen Web oder FTP Server einrichtet. <p> Wenn man einen WWW oder anderen Server einrichtet, ist dieser für alle Benutzer des Internets solange unbekannt, bis diese wissen, daß dieser gerade mit dem Internet verbunden ist und seine jetzige IP Nummer in Erfahrung gebracht haben. Man kann diese Informationen zwar auf diversen Wegen mit anderen Benutzern austauschen, aber für richtige Server ist dieser Weg nicht geeignet. <p> Für die meisten Internet Benutzer stellt diese Einschränkung aber kein Problem dar, da sie selbst keine Dienste anbieten wollen, sondern nur emails senden und empfangen möchten, was unter Verwendung des Accounts beim ISP möglich ist, Daten von WWW, FTP und anderen Server abrufen möchten. <sect1>Konfiguration von email <p> Auch mit dynamischen IP Nummern kann man <tt>sendmail</tt> so konfigurieren, daß es lokal erzeugte emails nach dem Verbindungsaufbau verschickt. Die Konfiguration von <tt>sendmail</tt> ist recht schwierig. Aus diesem Grund versuchen wir hier nicht, dieses zu beschreiben. Man sollte <tt>sendmail</tt> so einrichten, daß der ISP als <em>smart relay</em> benutzt wird (die <tt>sendmail.cf DS</tt> Option). <tt>sendmail</tt> kontaktiert dann nicht jeweils direkt die Server, die das email erhalten sollen, sondern reicht alle an den ISP Server weiter, der das Verteilen dann übernimmt. So spart man kostbare Zeit. Weitere Informationen zur Konfiguration von <tt>sendmail</tt> findet man in der mitgelieferten Dokumentation und in der <em><htmlurl url="http://metalab.unc.edu/LDP/HOWTO/Mail-HOWTO.html" name="Mail HOWTO"></em>. <p> Wenn man <tt>sendmail</tt> erst einmal konfiguriert hat, möchte man sicherlich, daß die emails sofort nach dem Verbindungsaufbau automatisch verschickt werden. Um dieses zu erreichen, fügt man folgdende Zeile <tscreen><verb> sendmail -q </verb></tscreen> <p> in das <tt>ip-up</tt> Skript ein. <p> Der Empfang von emails ist ein Problem mit dynamischen IP Nummern. Die meisten ISP bieten heute kein UUCP mehr an. So bleibt meistens nur noch das POP Protokoll. Man holt hierbei die Mails an den eigenen Account beim ISP mit einem Programm wie <tt>popclient</tt> ab. Allerdings braucht man fuer jeden lokalen Benutzer einen eigenen Account beim Provider. <sect1>Einrichten eines lokalen Nameservers <p> Während man natürlich den Domain Name Server des ISP benutzten kann, kann man auch einen eigenen lokalen caching only Nameserver einrichten, der vom <tt>ip-up</tt> Skript gestartet wird. Der Vorteil eines lokal laufenden caching only Name Servers liegt darin, daß man Zeit und Bandbreite spart, wenn man häufig die gleichen Adressen während einer Verbindung mit dem ISP anspricht. <p> Die DNS Konfiguration für einen caching only Name Server, der eine forwaders Zeile in der <tt>named.boot</tt> Datei verwendet, die auf den DNS des ISPs zeigt, ist relativ einfach. Das O'Reilly Buch <em>DNS and Bind</em> erklärt alles hierfür notwendige. Außerdem existiert eine <em><htmlurl url="http://metalab.unc.edu/LDP/HOWTO/DNS-HOWTO.html" name="DNS HOWTO"></em>. <p> Man sollte allerdings aus Gründen der Nettiquette den ISP vor dem Einrichten eines zweite, caching only Nameserver in dem Domain des ISPs diesen um Erlaubnis fragen. Richtig konfiguriert wird der eigene DNS dem ISP keine Probleme machen, wenn er allerdings nicht richtig konfiguriert wird, kann es zu Problemen kommen. </article>