Siehe zu dieser Frage den Abschnitt in async PPP: asyncppp_whichppp.
Zum Kompilieren des Kernels mit dem in ISDN4LINUX enthaltenen syncPPP musst Du bei der Konfiguration die entsprechenden Fragen mit 'yes' beantworten. Vergiss nicht, daß das Modul slhc.o vor dem Modul isdn.o geladen werden muss, wenn die VJ-Kompression nicht in den Kernel eingebunden wurde, wenn Du z.B. kein PPP und kein CSLIP im Kernel hast. Der Gebrauch von VJ-Kompression ist bei älteren Kernels problematisch und funktioniert nicht verläßlich - die Unterstützung dafür sollte jedoch trotzdem im Kernel vorhanden sein, da es sonst zu Nebenwirkungen kommen kann.
Der Name des Netzwerk-Interfaces sollte immer mit 'ippp'
beginnen, nicht mit 'syncppp' oder 'isdn', da in diesem Fall
die Verständigung mit dem ipppd nicht ordentlich funktionieren
wird. Es sollte also mindestens ein 'ippp0' vorhanden sein
sonst wird der ipppd nicht starten. Überprüfe Deine
Interfaces mit dem Befehl ifconfig
.
Synchronous PPP ist einfach eine weitere encapsulation für ISDN4LINUX. Diese encapsulation wird 'syncppp' genannt. Hier folgt ein Beispiel zur Konfiguration des link level device ippp0:
/sbin/isdnctrl addif ippp0 /sbin/isdnctrl encap ippp0 syncppp
Beachte bitte, daß syncppp sehr sensibel in Bezug auf die Benennung der Devices reagiert. Es funktionieren nur Devices deren Bezeichnung mit 'ippp'beginnt. Zumindest ein Interface sollte den Namen 'ippp0' haben (siehe Frage syncppp_netinterface).
Alle in Gebrauch befindlichen ippp*-Devices müssen separat konfiguriert werden. Jedes ippp*-Device sollte mit einer eigenen IP-Addresse versehen werden (routing!). Mehrere ippp*-Devices können einer einzelnen MSN zugeordnet werden. Dann können mehrere Anrufer diese MSN gleichzeitig nutzen.
Zum Gebrauch dieser Devices benötigst Du das Programm ipppd
,
das Du konfigurieren musst. ipppd muss nach dem Installieren der
Module einmal gestartet werden und dann kontinuierlich laufen, um das
Hinaus- und Hineinwählen zu ermöglichen. Es kommuniziert mit
den ISDN4LINUX link level devices durch /dev/ippp0
bis
/dev/ippp63
. Ein einzelnes ipppd kann mit allen Devices
zugleich arbeiten. Wenn Du zwei PPP-Verbindungen zugleich brauchst,
musst Du ipppd an zwei Devices binden, usw. Dadurch stellt ipppd
das Netzwerk-Device ippp0
zur Verfügung, das mit
ifconfig
überprüft werden kann (obwohl es den
gleichen Namen trägt, darf das Netzwerk-Device ippp0
nicht
mit /dev/ippp0
verwechselt werden, das zur Kommunikation
zwischen ipppd und dem link level verwendet wird).
ipppd hat eine weitere Option: 'useifip' benutzt die IP-Addresse des verbundenen Netzwerk-Interfaces (wenn diese nicht 0.0.0.0 lautet. Sogar dann versucht ipppd, die Point-to-Point-Addresse als remote IP zu benutzen). Zu Anfang solltest Du alle Kompressionsoptionen deaktivieren (lzs/stac, bsd, van jacobson), später kannst Du versuchen, sie zu aktivieren (siehe Frage syncppp_compression).
Es ist sehr wichtig, die Authentifikations-Informationen sauber einzustellen. Unsaubere Authentifikation ist das vermutlich meist beschriebene Problem in der Mailingliste. Arbeite bitte erst selbst den Abschnitt pap komplett durch, bevor Du andere um Hilfe bittest.
In dem Paket isdn4kernel-util findest Du ein Konfigurationsbeispiel in
der Datei etc/rc.isdn.syncppp
.
Mit mehreren ipppd-Instanzen können verschiedene Konfigurationen
erstellt werden. Dazu dient der Befehl 'isdnctrl pppbind'
. Normalerweise sollte der gesamte Verkehr über einen ipppd
laufen. Die Einrichtung von mehreren ipppds ist wirklich nur
empfehlenswert, wenn mehrere verschiedene Kofigurationen benötigt
werden.
Wenn Du die Option defaultroute
angegeben hast, wartest Du ein
paar Sekunden und kannst dann prüfen, ob die default route
existiert. Eine weitere Möglichkeit besteht durch die Option
useifip
. Du findest dann im syslog Einträge wie
"Local IP: x.y.z.a"
und/oder "Remote IP:
x.y.z.a"
. In beiden Fällen besteht eine Verbindung.
Lass Dir eine Login-Prozedur im 'Debug-Log' protokollieren und suche danach, welche Optionen der andere Computer ablehnt. Danach konfigurierst Du ipppd ohne diese nicht benötigten Optionen. Ein Seiteneffekt ist, daß solche unbenötigten Optionen die Redundanz vergrößern (wenn der andere Computer z.B. Fehler hat und die Optionen nicht korrekt ablehnt). Wie Du ein Logfile erstellst siehst Du in syncppp_log.
Du musst ein Netzwerk-Interface explizit an ein ippp Device binden, mit dem Du einen für dieses Interface individuell eingestellten ipppd verbinden kannst. Mit dem (leider schlecht dokumentierten) Befehl
isdnctrl pppbind <interface> <Number>
Zuerst musst Du wissen, wie ipppd seine Daten bekommt. Alle Daten, die über die ISDN-Leitung hereinkommen, werden von den Netzwerk-Devices empfangen, die mit isdnctrl eingestellt werden. Dann werden die Daten an eines der Devices /dev/ippp* übergeben - an eines, an dem der Systemdienst ipppd auf Daten wartet.
Was die Netzwerk-Interfaces betrifft, so können alle ipppds die gerade eingegangenen Daten behandeln. Daher ist es normalerweise unmöglich, vorherzusagen, welcher ipppd Daten von welchem Netzwerk-Interface empfangen wird.
In der Praxis installierst Du normalerweise mehrere ipppds mit unterschiedlichen Einstellungen. Jeder davon sollte Daten ausschließlich von einem bestimmten Netzwerk-Interface empfangen, das ebenfalls speziell eingestellt wurde. Der Befehl "pppdbind" erfüllt genau diesen Zweck. Mit:
isdnctrl pppbind <interface> <Number>
Beispiel: Die folgende Konfiguration bindet das Interface 'ippp5' an /dev/ippp2:
isdnctrl pppbind ippp5 2
Zumindest musst Du eine route angeben, die ein Datenpaket an das ippp Netzwerk-Interface übergibt, um ein Hinauswählen auszulösen. Eine defaultroute auf das Interface ippp sollte funktionieren. Nun musst Du Deinem Interface eine Dummy-Addresse zuteilen. Wenn Du aus irgendwelchen Gründen die defaultroute nicht auf das Interface ippp setzen kannst, nimmst Du irgendeine Addresse aus dem Subnet, aus dem Du Deine dynamische IP-Nummer erwartest und setzt eine 'network route' für dieses Subnet auf das Interface ippp. Rufe ipppd mit der Option 'ipcp-accept-local' auf um das Überschreiben der Dummy-Addresse zu ermöglichen. Du musst wissen, wie ipppd die Addressen bekommt, die er einstellen muss. Wenn Du keine Option aktivierst, versucht ipppd, die Addresse des localhost zu übertragen! Mit der Option 'noipdefault' verlangt er eine Addresse von der entfernten Maschine. Mit 'useifip' bekommt er die Addressen vom Netz-Interface. Du kannst die Addressen auch in der Optionszeile mit der Option 'a.b.c.d:e.f.g.h' setzen.
Hinweis: die IP-Addresse der entfernten Maschine muss lokal gesetzt werden oder die entfernte Maschine muss sie in einem IPCP Request senden. Wenn Deine Seite die IP-Addresse nach der Verhandlung nicht kennt, wird sie die Verbindung abbrechen! Du musst das Überschreiben der Addressen mit den Optionen "ipcp-accept-local/remote" erlauben wenn Du Deine eigene oder die entfernte Addresse ausdrücklich gesetzt hast. Versuche als Beispiel diese Optionen:
/sbin/ipppd :$REMOTE noipdefault /dev/ippp0
Mit der Option ms-get-dns
wird die Adresse des Nameservers geholt
wenn Du Deinen Internet Provider anwählst. Mit ms-dns
zeigst
Du die Adresse des Nameservers wenn sich jemand bei Dir einwählt.
Übergib dem ipppd die Option +ipx-protocol
.
Du kannst mehr Kanäle mittels MPPP einrichten (siehe Abschnitt MPPP). Eine weitere Möglichkeit ist die Nutzung von Kompression, siehe Frage syncppp_compression.
Mit dem ipppd können verschiedene Kompressionsverfahren benutzt werden. Bei Fehlern oder Zweifeln sollte man sie jedoch deaktivieren.
-vj -vjccomp
deaktiviert.Die Meldungen des ipppd sind sehr hilfreich... (siehe nächste Frage: syncppp_log)
/var/log/messages
,
/var/log/debug
und /var/adm/daemon
(wenn vorhanden)
nach. Es könnte ein Fehler im ipppd sein.cause E0010
ist KEIN Fehler! Es
ist nur die informative Meldung, daß die Verbindung beendet
wurde.Wenn die Option "debug" für den ipppd gesetzt wurde, erscheinen
die Meldungen normalerweise in /var/log/messages
,
/var/log/debug
oder /var/adm/daemon
(abhängig
von Deiner Distribution).
Zur Fehlersuche kannst Du das PPP-Log in eine gesonderte Datei
umleiten. Editiere dazu die Datei /etc/syslog.conf
und
füge die folgende Zeile hinzu (Achtung: gebrauche KEINE
Leerzeichen sondern TABs - Du findest weitere Details mit man 5
syslog.conf
):
daemon.* /var/log/ppp-log
ste@esqhen.su.eunet.de
schrieb dazu:
Entferne das Kommentar-Zeichen vor dieser Zeile in /etc/syslog.conf:
#*.=debug /tmp/debug
Nach der Änderung dieser Datei kannst Du den syslogd mit 'kill -1 pid of syslogd' neu starten. Die Meldungen in /tmp/debug können zur Optimierung der PPP-Optionen genutzt werden.
Prüfe, ob das Device 'ippp0' existiert (z.B. mit dem Programm "ifconfig"). Hinweise zur Benennung von Net-Interfaces bekommst Du bei Frage syncppp_netinterface. Der ipppd braucht dieses Device mit exakt diesem Namen und syncppp. Wenn es nicht existiert, muss es definiert werden:
isdnctrl addif ippp0 isdnctrl encap ippp0 syncppp
Vielleicht hast Du den ipppd mit den Quellen eines Kernels, den Du nicht benutzt, kompiliert...
Diese Meldung taucht dann auf, wenn das Verbindungs-Interface hinauswählen soll, ipppd aber noch nicht läuft oder nicht verfügbar ist.
Wenn ipppd gestartet wird, ruft er Funktionen auf, die den Transport eines Netzwerkpaketes auslösen können (z.B. gethostbyname()). Ohne ipppd (da zu dieser Zeit ipppd noch nicht komplett gestartet ist) kann dieser Netzwerkzugriff nicht durchgeführt werden. Versuche, die gesuchten Host-Namen in die lokale /etc/hosts zu schreiben oder sonst irgendwie zu definieren, sodaß sie ohne Zugriff auf das ISDN-/ippp-Interface aufgelöst werden können.
IP frames delayed
- aber keine Verbindung.
Hast Du tatsächlich hinausgewählt? Sieh Dir die Frage dialout_dialmode und Deine Konfiguration der verschiedenen Dialmodi an.
isdnctrl dial ippp0
nicht hinauswählen. Die Route zu ipppd scheint zu fehlen, obwohl ich sie wirklich gesetzt habe (network unreachable
). Mit dem alten Kernel 2.0 funktionierte alles einwandfrei!
In den neueren Kernel muss der Befehl route
als letztes
Kommando vor dem Wählbefehl stehen. Anderenfalls löscht der
Kernel die Route.
Das liegt am Kernel. Bei neueren Kernel (= 2.0.x) gibt es einige Änderungen beim Routing. Lösung: installiere ein Script /etc/ppp/ip-up, das in etwa so aussieht:
#!/bin/sh /sbin/route add default ippp0
Wenn Du Deine Verbindungen manuell herstellst, kannst Du so etwas wie dieses Script benutzen:
/sbin/isdn #! /bin/sh case $1 in on) /sbin/isdnctrl dial ippp0 # aufbauen der Verbindung sleep 5 # abwarten /sbin/route add default ippp0 # Route setzen ;; off) /sbin/isdnctrl hangup ippp0 # Verbindung beenden /sbin/route del default # Löschen der Route ;; *) echo -e '\a Usage: 'isdn on' or 'isdn off'' ;; esac
route add
default
und route del default
NICHT benutzt werden
dürfen. Übergib statt dessen die Option "defaultroute" an
den ipppd.
hscx_empty_fifo: incoming packet too large
Vermutlich ist eine der Kompressionsoptionen aktiviert (funktionieren mit I4L nicht so gut). Mehr dazu in der nächsten Frage. Ein weiterer möglicher Grund könnte ein IRQ-Problem sein - siehe Frage 'Warum sollte ich IRQ 12 und 15 für meine ISDN-Karte vermeiden?'. Das Problem kann auch durch '#'-Zeichen in der Datei pap-secrets verursacht werden. In diesem Fall musst Du den Benutzernamen und/oder das Passwort mit Anführungszeichen einrahmen (je nachdem, was betroffen ist).
Vermutlich ist eine der Kompressionsoptionen aktiviert (die I4L nicht sauber behandeln kann). Verbreiteter Fehler: '-vj' muss *zusätzlich* zu '-vjccomp' gesetzt werden, um die VJ-Kompression völlig abzuschalten - in den Beispielscripts von ipppd ist diese Option schon nicht mehr enthalten. Auch andere Kompressionsmodi (bsd, pccomp) können Probleme verursachen. Daher solltest Du alle Kompressionsoptionen deaktivieren (siehe auch Frage syncppp_compression). Auch die Option "noccp" kann da helfen.
Sven Engelhardt
sven@sik.de
schrieb am 12. Dezember 1996:
Wir sind ein ISP in Dresden und benutzen Linux (neben anderen Systemen) für unseren Zugang (mit I4L ebenso wie mit externen Terminaladaptern). Wir haben dieses Problem hauptsächlich mit Kunden, die unter Windows 95 und NT die 'enthaltene' (Modem Netzwerk) Software benutzen. Es ist dabei unerheblich, ob der Kunde sich mit asynchronem oder synchronem PPP einwählt. Es spielt auch keine Rolle, welche Modememulation er auf seiner Seite benutzt. Was sie gemeinsam haben ist, daß die Verbindung mit Microsoft's Modemadapter und Microsoft's PPP hergestellt wird (obwohl mir ein Kollege kürzlich von einem ähnlichen Problem mit einem Macintosh-Kunden erzählte). Da es bei PPP keinen Unterschied macht, wer der Server und wer der Client ist, solltest Du Deinen ISP fragen, welche Hardware er zur Einwahl benutzt (wir hatten keine Probleme mit Linux-Kunden und Benutzern von Trumpet Winsock, daher vermuten wir einen Fehler in MS-PPP). Die folgende Abhilfe funktioniert normalerweise bei uns: (es ist keine Kur, aber es lindert die Schmerzen...)Bei Windows 95 sind das zwei Einträge in der Registry, unter Linux kannst Du die Optionen 'mtu 576' und 'mru 576' für PPP setzen. (Siehe auch:
- Reduziere den Wert für Max MTU auf 576 oder sogar 296
- Reduziere das DefaultRcvWindow auf 2144
http://www.winfiles.com/connect/trouble.html
)
Erik Corry
ec@sign-tronic.dk
fügte am 16. Dezember 1996 hinzu:
Bei mir half weder das Abschalten der PPP Kompressionsoption noch das Setzen von mru/mtu auf 296. Was half, war der AT-Befehl:
AT&B512
der die gesendeten Pakete auf 512 Bytes begrenzt.
Wenn der Wert mtu nicht festgesetzt ist, wird ein Defaultwert
angenommen - möglicherweise '0', der natürlich nicht korrekt
sein kann. Füge 'mtu 1024'
zu Deinen Optionen für
ipppd hinzu (1500 kann auch funktionieren).
Es gibt ein paar Probleme mit der Hinauswahl in Verbindung mit syncPPP und dynamischer Zuteilung der IP-Addresse. In diesem Fall ändert sich Deine IP-Addresse während Pakete auf die Versendung warten. Alle Pakete, die vor dieser IP-Addressänderung verschickt werden, haben dann die falsche Rückantwort-Addresse und werden nie eine Rückmeldung erhalten. Das kann viele vergebliche Wählversuche verursachen (siehe dod). Mögliche Lösungen sind:
echo 7 > /proc/sys/net/ipv4/ip_dynaddr
IP_DYNIP='yes'
in /etc/rc.config
aktivieren.Hkey_Local_Machine\\System\\CurrentControlSet\\Services\\VxD\
\MSTCP\\MaxConnectRetries
von 3 auf einen höheren Wert (5
oder 7).Michael Engert
michi@bello.wor.de
schrieb im Nov/Dez 1996:
Das bedeutet, daß Dein Computer ein IP-Paket von jemandem hat, der vor wenigen Sekunden online war aber die Verbindung inzwischen unterbrochen hat. Dein Computer versucht nun, dieses Paket zu verschicken und findet auch eine passende Route. Das Interface isdn(0|1|...) kann jedoch den Zielcomputer nicht erreichen, da es keine Telefonnummer zum Hinauswählen findet.
'ippp0: dialing 0 089XXXXXX...'
)? Ich habe keine Nebenstellen!
Die erste Null wird nicht gewählt. Sie zeigt die Anzahl der
Wählversuche, festgelegt vom Parameter isdnctrl dialmax
.
Das ISDN-Device täuscht ein Ethernet-Device vor. Es ignoriert IRQ und baseaddr und benötigt nur die HWaddr für die Ethernet-Encapsulation.
kernel check for lzs failed
?
Das bedeutet, daß ipppd versucht, die LZS-Kompression zu nutzen,
aber kein kompiliertes Modul mit dem entsprechenden Code findet. Die
Fehlermeldung hat nur kosmetische Bedeutung, da das System
weiterarbeitet. Du kannst entweder die LZS-Kompression abstellen
(setze noccp
als Option für ipppd) oder das LZS Modul
kompilieren und laden.