Gegeben ein uraltes Notebook und der dringende Wunsch, es mit dem Internet bekanntzumachen. Fehlend allerdings jede Art von Netzwerkhardware an diesem Notebook. Gegeben auf dem Notebook ein Microsoft Windows 95. Und zur Erleichterung noch eine Kiste mit SuSE Linux 8.1. Ach ja, und ein paar Stunden zum Basteln. Nicht zu vergessen, meine Vorliebe fuer Technik, die andere als "veraltet" oder gar "nutzlos" wegschmeissen wuerden.

Die Zutaten

Im Abstrakt war es bereits kurz angerissen worden, was zur Verfuegung steht: Ein Uralt-Notebook von Toshiba mit der Typenbezeichnung T4400C (das C steht fuer Color). An Anschluessen gibt es das, was in den fruehen 1990er Jahren typisch war: Seriell, Paralell, VGA und als Leckerbissen PS/2. Naja, und noch eine Stromversorgung. Kein USB, kein PCMCIA-Slot. Ach ja, da war noch ein hoechst proprietaerer Anschluss fuer eine Docking-Station... aber lassen wir das, die Wahrscheinlichkeit, so eine aufzutreiben ist eher 0.
Was ist sonst noch an Material in der Bastelkiste des Netzwerkfrickelns, was in der Naehe der Maschinen bleiben kann? Eine Linux-Kiste mit einem steinalten SuSE 8.1, serielle Kabel und noch das Uebliche an Hilfsgeraeten (serielles Terminal oder etwas in der Art).

Die Grundidee

Die Grundidee war die Uebliche: http://google.de/.
Das fuehrte mich zu http://linuxgazette.net/issue41/smyth.html. Der Ansatz ist Folgendes: Das Windows wird mit einem Null-Modem-Kabel mit der Linuxbox verbunden. Auf dem Windows wird eine Modemeinwahlverbindung eingerichtet und das Linux emuliert das Modem gleich mit. Auf der Linux-Seite wird ein ganz normales serielles getty gestartet, als wenn es fuer normale Nutzerlogins per seriellem Terminal waere. Und den Rest uebernehmen die beiden kleinen Helferlein pppd und chat. Und dann ist das Grundproblem geloest, der Rest sollte nur noch irgendwie-muessen-die-Daten-von-einem-Interface-zum-Anderen sein. Also eigentlich ja kinderleicht.

Die Umsetzung

Wie ueblich ist die Theorie einfach, schlicht und elegant. Und die Praxis widerborstig und voller Engstellen. Aber von Anfang.
Die serielle Verbindung war kein Problem, momentan haengt am seriellen Anschluss der Linuxbox ein Terminal. Check.
Ich habe wie im Artikel der linuxgazette beschrieben einen Nutzer fuer die PPP-Verbindung angelegt und ihm die richtigen Rechte sowie pppd das setuid-Flag gegeben. Auch check.
Die Datei .ppprc im Home des PPP-Nutzers angelegt und von der linuxgazette kopiert. Ihm pppd als Shell gegeben. Check.
Auf dem Windows eine Modemverbindung ohne Nutzernamen angelegt und die gewuenschten Optionen eingestellt. Auch Check.
Jetzt sollte es eigentlich klappen.
Eigentlich.
In der Praxis sah es wie folgt aus: Das Windows beginnt mit der Einwahl, zeigt mir das Prae-Waehl-Terminalfenster, ich logge mich darauf ein, sage dem System, es soll weitermachen (F7) und... bekomme eine Meldung, dass das Modem nicht mit dem Windows reden will. Das Windows ist ganz doll traurig und fragt tapfer, ob es in 60, 59, 58, ... Sekunden den naechsten Anlauf nehmen soll.

Und nun?

Ich dachte, es waere einfach (nur abschreiben). Was kommt nach dem Denken? Das Nachdenken. Das tat ich dann. Als erstes stellte sich mir die Frage, ob das mit der Shell funktioniert. Das tat es, prinzipiell. Wenn ich die richtige Kommunikation mit chat fuehre. Gegeben war im Artikel der linuxgazette die folgende Kommunikation:
PC  Modem

ATH 
    OK 
AT 
    OK 
ATE0V1 
    OK 
ATX3 
    OK 
ATDT 
    CONNECT

ab hier reden dann PPPs miteinander.
Woher weiss ich eigentlich, dass das auch wirklich so ist? Also mal das Windows, dass sich anmelden will seriell umgestoepselt -- an ein anderes Terminal. Dann erstmal ohne nachzudenken alle Anfragen mit "OK" beantworten.Und wenn der PPP-Kram kommt (also nach CONNECT) das Kabel ziehen um den Rest nicht vom Bildschirm zu verlieren ;)
Dieses simple Experiment ergibt den folgenden Dialog:
PC  Modem

AT 
    OK 
ATE0V1
    OK 
AT 
    OK 
ATDT1 
    CONNECT

PPP-Gequassel.
Das sieht dann doch ein wenig anders aus, als im Artikel der Gazette. Moeglich, dass ich einen anderen Treiber in einer anderen Windows-Version genutzt habe. Und ein Detail, ueber welches ich mich schon gewundert hatte -- Wie soll das klappen, wenn dem ATDT-Befehl keine Nummer folgt? Schliesslich laesst Windows nicht zu, dass man eine Modem-Verbindung waehlt, ohne eine Telefonnummer eingegeben zu haben. Input validation bei der Arbeit. In dem von mit mitgeschnittenen Ausschnitt war es eine 1 als Telefonnummer. Also mal die .ppprc angepasst. Das Ergebnis sieht dann wie folgt aus:
connect '/usr/sbin/chat -v AT OK ATE0V1 OK AT OK ATDT1 CONNECT'
-detach
modem
lock
:172.16.0.90
Ich habe auch auf die Hardware-Flusssteuerung verzichtet - in meinem Nullmodemkabel sind die entsprechenden Adern schlicht und ergreifend nicht durchgeschleift. Und da ich nur mit 9600 Baud arbeite und auch nicht beabsichtige, dies zu aendern sollte es auch keine Notwendigkeit geben. 9600 Baud wird meine Linuxbox eigentlich immer ins LAN loswerden koennen. Ausserdem ist die IP an meine Verhaeltnisse angepasst.
Ausprobiert.
Und siehe da, ich habe ein ppp0-Device auf der SuSe geschenkt bekommen:
ppp0      Protokoll:Punkt-zu-Punkt Verbindung
          inet Adresse:172.16.0.99  P-z-P:172.16.0.90  Maske:255.255.255.255
          UP PUNKTZUPUNKT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:8328 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8639 errors:0 dropped:0 overruns:0 carrier:0
          Kollisionen:0 Sendewarteschlangenlaenge:3
          RX bytes:376348 (367.5 Kb)  TX bytes:1452654 (1.3 Mb)

Das sieht so schonmal ganz schoen aus. Die beiden nun verbundenen Kisten koennen sich auch froehlich gegenseitig mit Pings oder TCP erreichen. Sehr fein, erstmal. Und nun der Rest der Welt. Erste Idee: NAT. Denn dann muss man nicht an den LAN-weiten Routing-Tabellen rumspielen und feste IPs vergeben.

Ich, NAT und meine SuSE

Auf einem FreeBSD haette ich jetzt einfach NAT mit ipnat gemacht, die Regel waere schlicht und ergreifend map eth0 172.16.0.90/0 -> 0/32. Aber wie macht man das auf einer SuSE?
SuSE war ja eine der Distributionen, die den Nutzer wo immer es geht vom haendischen Editieren der Konfigurationsdateien befreien moechte (um es mal freundlich auszudruecken). Also wird man das wahrscheinlich mit dem Allzwegprograemmchen yast machen koennen. Hoffentlich. Also einem ersten Reflex folgend mal in Richtung Firewall getappst...

 yast @ linux
+------------------------------------------------------------------------------+
|                           Yast2 Control Center                               |
+------------------------------------------------------------------------------+
|                                                                              |
|  +--------------------------+                                                |
|  | Software                 |                                                |
|  | Hardware                 |                                                |
|  | Netzwerk/Basis           |                                                |
|  | Netzwerk/Erweitert       |+--------------------------------------------+  |
|  | Sicherheit & Benutzer  ->|| Benutzer bearbeiten und anlegen            |  |
|  | System                   || Einstellungen zur Sicherheit               |  |
|  | Sonstiges                || Gruppen bearbeiten und anlegen             |  |
|  | Verlassen                || Firewall                                   |  |
|  +--------------------------++--------------------------------------------+  |
|                                                                              |
|                                                                              |
|                                                                              |
|  Firewallkonfiguration für fortgeschrittene Anwender                         |
|                                                                              |
|                                                                              |
|  [Hilfe]                                                        [Verlassen]  |
|                                                                              |
+------------------------------------------------------------------------------+
Dort kann man (um mal nicht alles als Screenshot zu zeigen...) dann Folgendes einstellen: Um es kurz zu machen: Ich habe es nicht so zum Laufen bekommen, dass ich damit glueckich geworden bin. Alleine schon, weil ich auf der Linuxbox eigentlich keine Firewall moechte. Bei genauerer Betrachtung stelle ich fest: Routing macht mich gluecklicher.

Also doch Routing

Zunaechst einmal testweise auf meinem FreeBSD-Notebook von Hand die Route gesetzt und ein paar Pings geschickt. Meh, geht nicht. Irgendwie will die SuSE die Pakete nicht routen. Muss man das diesem System von Hand sagen?

+------------------------------------------------------------------------------+
|+--------------------+ Routing-Konfiguration                                  |
||  In diesem Dialog  +                                                        |
||kann das Routing    |      Standardgateway                                   |
||eingestellt werden. |      172.16.0.200##############################v       |
||Die Standard-Route  |                                                        |
||(Default-Route)     |      +Routing-Tabelle--------------------------+       |
||betrifft jedes      |      |[ ] Konfiguration für Experten           |       |
||mögliche Ziel;      |      |+---------------------------------------+|       |
||jedoch mit der      |      ||Ziel        |Dummy oder Gateway|Netzmas||       |
||Einschränkung, dass,|      ||                                       ||       |
||wenn ein anderer    |      ||                                       ||       |
||Eintrag existiert,  +      ||                                       ||       |
||der auf eine        |      |++----------------------------+---------+|       |
||gewünschte Adresse  |      |    [Hinzufügen][Bearbeiten][Löschen]    |       |
||passt, dieser       |      +-----------------------------------------+       |
||anstelle der        |                                                        |
||Standard-Route      |      [x] IP-Weiterleitung aktivieren                   |
||verwendet wird.     |                                                        |
||Durch die Angabe    |                                                        |
||einer Standard-Route|                                                        |
|+--------------------+ [Zurück ]            [Abbrechen]            [Beenden]  |
+------------------------------------------------------------------------------+
Ja.
Aber danach klappte es. Um einen Eindruck zu geben:
                       \
    D a s               \
                         \
      I n t e r           +--[172.16.0.200]-------+----------+----------[172.16.0.99]-------[172.16.0.90]
                         /     Default-gw         |          |            linuxbox           Windows per PPP
     n e t              /       DHCPD             |         ...
                       /                   [172.16.0.103]
  (Unendliche Weiten) /                    Mein Notebook

  
Um den Zustand festzuhalten: Die "normale" Gateway verteilt nun auch die Information, dass man die 172.16.0.90 erreicht, indem man die 172.16.0.99 als Route nutzt. Und alles ist fein.

Und warum jetzt dieser Aufwand?

Warum nun dieser Aufwand, nur um eine total veraltete Hardware irgendwie ans Netz zu bringen?

Hier noch ein paar Schnappschuesse, wie das in der Praxis dann ausschaut:


Ach ja, und WinSCP laeuft nicht, weil eine Abhaengigkeit auf dem Windows 95 fehlt.
Frohe Weihnachten!

Stichworte:


Impressum