---
title: Kapitel 27. PPP
part: Teil IV. Netzwerke
prev: books/handbook/serialcomms
next: books/handbook/mail
showBookMenu: true
weight: 32
params:
  path: "/books/handbook/ppp-and-slip/"
---

[[ppp-and-slip]]
= PPP
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
:sectnumoffset: 27
:partnums:
:source-highlighter: rouge
:experimental:
:images-path: books/handbook/ppp-and-slip/

ifdef::env-beastie[]
ifdef::backend-html5[]
:imagesdir: ../../../../images/{images-path}
endif::[]
ifndef::book[]
include::shared/authors.adoc[]
include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
include::shared/attributes/attributes-{{% lang %}}.adoc[]
include::shared/{{% lang %}}/teams.adoc[]
include::shared/{{% lang %}}/mailing-lists.adoc[]
include::shared/{{% lang %}}/urls.adoc[]
toc::[]
endif::[]
ifdef::backend-pdf,backend-epub3[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]
endif::[]

ifndef::env-beastie[]
toc::[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]

[[ppp-and-slip-synopsis]]
== Übersicht

FreeBSD unterstützt das Point-to-Point (PPP) Protokoll, mit dem über ein Modem eine Verbindung mit einem Netzwerk oder dem Internet hergestellt werden kann. Dieses Kapitel beschreibt die Konfiguration von Modem-basierten Kommunikationsdiensten unter FreeBSD.

Nachdem Sie dieses Kapitel gelesen haben, werden Sie wissen:

* Wie Sie PPP einrichten, benutzen, sowie Fehler beheben.
* Was zu tun ist, um PPP over Ethernet (PPPoE) einzurichten.
* Wie Sie PPP over ATM (PPPoA) einrichten.

Bevor Sie dieses Kapitel lesen, sollten Sie:

* Mit den grundlegenden Begriffen der Netzwerktechnik vertraut sein.
* Die Grundlagen und den Zweck einer Einwahlverbindung sowie PPP kennen.

[[userppp]]
== PPP konfigurieren

FreeBSD enthält man:ppp[8], um Einwählverbindungen über PPP zu verwalten. Der FreeBSD-Kernel enthält Unterstützung für die [.filename]#tun#-Schnittstelle, die benutzt wird um mit einem Modem zu interagieren. Für die Konfiguration muss mindestens eine Datei bearbeitet werden. Beispiele sind in den Konfigurationsdateien ebenfalls enthalten. Schlussendlich wird `ppp` benutzt, um die Verbindungen zu starten und zu verwalten.

Für eine PPP-Verbindung sind folgende Dinge erforderlich:

* Ein Account bei einem Internet Service Provider (ISP).
* Ein Modem.
* Die Einwahlnummer(n) des ISPs.
* Den Login-Namen und das Passwort, welches vom ISP zugewiesen wurde.
* Die IP-Adresse von einem oder mehreren DNSServern. Üblicherweise werden diese Daten vom ISP zur Verfügung gestellt. Falls dies nicht der Fall ist, können Sie FreeBSD so konfigurieren, das es die DNS-Daten automatisch aushandeln kann.

Sollte eine dieser Informationen fehlen, kontaktieren Sie den ISP!

Die folgenden Informationen werden möglicherweise durch den ISP zur Verfügung gestellt, sie sind aber nicht zwingend erforderlich:

* Die IP-Adresse des Standard-Gateways. Steht diese Information nicht zur Verfügung, wird der PPP-Server des ISPs beim Verbindungsaufbau eine gültige Adresse übermitteln. Diese Adresse wird in der Konfiguration von PPP unter FreeBSD als `HISADDR` bezeichnet.
* Die Netzmaske. Falls der ISP keine Netzmaske vorgegeben hat, können Sie in der Konfigurationsdatei von man:ppp[8] `255.255.255.255` verwenden.
*
+ 
Wenn der ISP eine statische IP-Adresse und einen Rechnernamen zugewiesen hat, sollten diese Informationen in die Konfigurationsdatei eingetragen werden. Andernfalls werden diese Informationen automatisch beim Verbindungsaufbau zur Verfügung gestellt.

Der Rest dieses Abschnitts beschreibt, wie FreeBSD für gebräuchliche PPP-Verbindungsszenarien konfiguriert wird. Die erforderliche Konfigurationsdatei ist [.filename]#/etc/ppp/ppp.conf#. Zusätzliche Dateien und Beispiele sind in [.filename]#/usr/shared/examples/ppp/# verfügbar.

[NOTE]
====
Die Beispieldateien, die in diesem Kapitel dargestellt werden, enthalten Zeilennummern. Die Nummerierung dient lediglich einer leichteren Orientierung und sollte nicht in die Dateien übernommen werden.

Achten Sie auf die richtige Einrückung, wenn Sie eine Konfigurationsdatei bearbeiten. Zeilen die mit einem `:` enden, beginnen in der ersten Spalte (am Beginn der Zeile). Alle anderen Zeilen sollten wie dargestellt durch Leerzeichen oder Tabulatoren eingerückt werden.
====

[[userppp-staticIP]]
=== Grundlegende Konfiguration

Um eine PPP-Verbindung zu konfigurieren, tragen Sie zuerst die Zugangsdaten des ISPs in [.filename]#/etc/ppp/ppp.conf# ein. Diese Datei wird wie folgt beschrieben:

[.programlisting]
....
1     default:
2       set log Phase Chat LCP IPCP CCP tun command
3       ident user-ppp VERSION
4       set device /dev/cuau0
5       set speed 115200
6       set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5 \
7                 \"\" AT OK-AT-OK ATE1Q0 OK \\dATDT\\T TIMEOUT 40 CONNECT"
8       set timeout 180
9       enable dns
10
11    provider:
12      set phone "(123) 456 7890"
13      set authname foo
14      set authkey bar
15      set timeout 300
16      set ifaddr x.x.x.x/0 y.y.y.y/0 255.255.255.255 0.0.0.0
17      add default HISADDR
....

Zeile 1:::
Gibt den Standardeintrag an. Befehle dieses Eintrags (Zeile 2 bis 9) werden automatisch ausgeführt, wenn `ppp` läuft.

Zeile 2:::
Schaltet die ausführliche Protokollierung ein. Sobald die Verbindung zufriedenstellend funktioniert, können Sie diese Zeile verkürzen:
+
[.programlisting]
....
set log phase tun
....
+
Dies verhindert ein übermäßiges Anwachsen der Logdateien.

Zeile 3:::
Übermittelt die Version von man:ppp[8] an die PPP-Software der Gegenstelle.

Zeile 4:::
Gibt das Device an, an dem das Modem angeschlossen ist. [.filename]#COM1# entspricht [.filename]#/dev/cuad0# und [.filename]#COM2# entspricht [.filename]#/dev/cuad1#.

Zeile 5:::
Legt die Verbindungsgeschwindigkeit fest. Falls ein Wert von `115200` bei älteren Modems nicht funktioniert, versuchen Sie es stattdessen mit `38400`.

Zeile 6 & 7:::
Die Zeichenfolge für die Einwahl in einer expect-send Syntax. Weitere Informationen finden Sie in man:chat[8].
+
Beachten Sie, dass dieser Befehl aufgrund der besseren Lesbarkeit auf der nächsten Zeile weitergeht. Das kann für jeden Befehl in [.filename]#ppp.conf# gelten, wenn `\` das letzte Zeichen in einer Zeile ist.

Zeile 8:::
Legt den Zeitrahmen in Sekunden fest, innerhalb dessen eine Reaktion erfolgen muss.

Zeile 9:::
Weist die Gegenstelle an, die DNS-Einstellungen zu bestätigen. Wenn es im lokalen Netzwerk einen DNS-Server gibt, sollte diese Zeile auskommentiert oder gelöscht werden.

Zeile 10:::
Eine leere Zeile zur besseren Lesbarkeit. Leere Zeilen werden von man:ppp[8] ignoriert.

Zeile 11:::
Bestimmt einen Provider, namens `provider`. Wenn Sie hier den Namen des ISP einsetzen, können Sie später die Verbindung mit `load _ISP_` aufbauen.

Zeile 12:::
Gibt die Telefonnummer des Providers an. Mehrere Telefonnummern können angegeben werden, indem Doppelpunkte (`:`) oder Pipe-Zeichen (`|`) als Trennzeichen verwendet werden. Wenn Sie die verschiedenen Nummern abwechselnd verwenden möchten, sollten Sie die Nummern durch einen Doppelpunkt trennen. Wenn Sie immer die erste Nummer verwenden möchten und die anderen nur zum Einsatz kommen sollen, wenn eine Einwahl mit der ersten Telefonnummer nicht möglich ist, sollten Sie das Pipe-Zeichen zur Trennung verwenden. Sie sollten immer die gesamte Reihe der Telefonnummern in Anführungszeichen (`"`) setzen, um Wählfehler zu vermeiden.

Zeile 13 & 14:::
Gibt den Benutzernamen und das Passwort für den ISP an.

Zeile 15:::
Setzt einen Zeitrahmen in Sekunden, innerhalb dessen eine Reaktion erfolgen muss. In diesem Fall, wird die Verbindung nach 300 Sekunden automatisch geschlossen, wenn keine Aktivität zu verzeichnen ist. Wenn Sie keinen Zeitrahmen festlegen wollen, nach dessen Überschreiten die Verbindung geschlossen wird, können Sie diesen Wert auf `0` setzen.

Zeile 16:::
Legt die Adresse für die Schnittstelle fest. Die verwendeten Werte hängen davon ab, ob Sie vom ISP eine statische IP-Adresse zugeteilt bekommen haben, oder ob beim Verbindungsaufbau eine dynamische Adresse ausgehandelt wird.
+
Wenn Ihnen der ISP keine statische IP-Adresse zugeteilt hat, ändern Sie diese Zeile auf den folgenden Wert. Dadurch weiß man:ppp[8], dass es das IP Configuration Protocol (IPCP) benutzen soll um die dynamische IP-Adresse auszuhandeln.
+
[.programlisting]
....
set ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.255 0.0.0.0
....

Zeile 17:::
Fügt eine Defaultroute für das Gateway hinzu. Belassen Sie die Zeile so wie sie ist. `HISADDR` wird dabei durch die in Zeile 16 angegebene Gateway-Adresse ersetzt. Wichtig ist, dass diese Zeile nach Zeile 16 erscheint.

Je nachdem, ob man:ppp[8] manuell oder automatisch gestartet wird, muss vielleicht auch [.filename]#/etc/ppp/ppp.linkup# mit dem folgenden Inhalt erstellt werden. Diese Datei ist erforderlich, falls `ppp` im `-auto`-Modus ausgefürht wird. Die Datei wird verwendet, nachdem die Verbindung hergestellt wurde. An diesem Punkt wird die IP-Adresse zugewiesen und es sollte nun möglich sein, Einträge in die Routingtabelle hinzuzufügen. Stellen Sie bei der Bearbeitung der Datei sicher, dass der Eintrag für _provider_ mit dem Wert aus Zeile 11 in [.filename]#ppp.conf# übereinstimmt.

[.programlisting]
....
provider:
      add default HISADDR
....

Diese Datei wird ebenfalls benötigt, wenn bei einer Konfiguration mit statischer IP-Adresse die Adresse des Standard-Gateways "erraten" wird. In solchen Fällen entfernen Sie Zeile 17 aus [.filename]#ppp.conf# und erstellen Sie [.filename]#/etc/ppp/ppp.linkup# mit den oben genannten Zeilen. Weitere Beispiele für diese Datei finden Sie in [.filename]#/usr/shared/examples/ppp/#.

In der Voreinstellung muss `ppp` als `root` ausgeführt werden. Um diesen Standard zu ändern, muss das Konto eines Benutzers, der `ppp` ausführen soll, zur Gruppe `network` in [.filename]#/etc/group# hinzugefügt werden.

Danach geben Sie dem Benutzer ebenfalls Zugriff auf einen oder mehrere Abschnitte der Konfigurationsdatei [.filename]#/etc/ppp/ppp.conf# geben müssen, indem Sie den `allow` Befehl verwenden. Um beispielsweise den Benutzern `fred` und `mary` die Berechtigung für den Eintrag `provider:` zu geben, fügen Sie in der Sektion `provider` folgende Zeile ein:

[.programlisting]
....
allow users fred mary
....

Wenn dieser Befehl stattdessen in der Sektion `default` verwendet wird, erhalten die angegebenen Benutzer vollständigen Zugriff.

=== Fortgeschrittene Konfiguration

Es ist möglich PPP so zu konfigurieren, dass bei Bedarf DNS und NetBIOS Nameserveradressen bereitgestellt werden.

Um diese Erweiterungen für die PPP Version 1.x zu aktivieren, sollte der entsprechende Abschnitt der Datei [.filename]#/etc/ppp/ppp.conf# um folgende Zeilen ergänzt werden:

[.programlisting]
....
enable msext
set ns 203.14.100.1 203.14.100.2
set nbns 203.14.100.5
....

Für PPP Version 2 und höher:

[.programlisting]
....
accept dns
set dns 203.14.100.1 203.14.100.2
set nbns 203.14.100.5
....

Damit werden den Clients die primären und sekundären Nameserveradressen sowie ein NetBIOS Nameserver-Host mitgeteilt.

In Version 2 und höher verwendet PPP die Werte, die in [.filename]#/etc/resolv.conf# zu finden sind, wenn die Zeile `set dns` weggelassen wird.

[[userppp-PAPnCHAP]]
==== Authentifizierung durch PAP und CHAP

Einige ISPs haben ihr System so eingerichtet, dass der Authentifizierungsteil eines Verbindungsaufbaus mit Hilfe von PAP oder CHAP-Mechanismen durchgeführt wird. Wenn das der Fall sein sollte, wird der ISP bei der Verbindung keinen `login:`-Prompt präsentieren, sondern sofort mit der Aushandlung der PPP-Verbindung beginnen.

PAP ist nicht so sicher wie CHAP, doch die Sicherheit ist hierbei normalerweise kein Problem, da Passwörter, obgleich von PAP im Klartext versandt, lediglich über die serielle Verbindung verschickt werden. Es gibt für Angreifer wenig Möglichkeiten zu "lauschen".

Die folgenden Veränderungen müssen vorgenommen werden:

[.programlisting]
....
13      set authname MyUserName
14      set authkey MyPassword
15      set login
....

Zeile 13:::
Diese Zeile legt den PAP/CHAP Benutzernamen fest. Sie müssen den richtigen Wert für _MyUserName_ eingeben.

Zeile 14:::
Diese Zeile legt das PAP/CHAP Passwort fest. Sie müssen den richtigen Wert für _MyPassword_ eingeben. Sie können eine zusätzliche Zeile, wie etwa:
+
[.programlisting]
....
16      accept PAP
....
+
oder
+
[.programlisting]
....
16      accept CHAP
....
+
verwenden, um deutlich zu machen, dass dies beabsichtigt ist, aber sowohl PAP wie auch CHAP als standardmäßig akzeptiert werden.

Zeile 15:::
Der ISP wird normalerweise keine Anmeldung am Server verlangen, wenn PAP oder CHAP verwendet wird. Sie müssen deshalb den String "set login" deaktivieren.

[[userppp-nat]]
==== PPP NAT benutzen

PPP kann Network Address Translation (NAT) ohne Hilfe des Kernels durchführen. Wenn Sie diese Funktion benutzen wollen, fügen Sie die folgende Zeile in [.filename]#/etc/ppp/ppp.conf# ein:

[.programlisting]
....
nat enable yes
....

NAT kann mit der Option `-nat` auf der Kommandozeile aktiviert werden. Weiterhin kann NAT in [.filename]#/etc/rc.conf# mit der Variablen `ppp_nat` aktiviert werden. Dies ist auch die Voreinstellung.

Die nachstehende [.filename]#/etc/ppp/ppp.conf# benutzt NAT für bestimmte eingehende Verbindungen:

[.programlisting]
....
nat port tcp 10.0.0.2:ftp ftp
nat port tcp 10.0.0.2:http http
....

Wenn Sie Verbindungen von außen überhaupt nicht trauen, benutzen Sie die folgende Zeile:

[.programlisting]
....
nat deny_incoming yes
....

[[userppp-final]]
=== Abschließende Systemkonfiguration

Obwohl `ppp` nun konfiguriert ist, müssen noch einige Änderungen in [.filename]#/etc/rc.conf# vorgenommen werden.

Gehen Sie diese Datei von oben nach unten durch, und stellen Sie als Erstes sicher, dass die Zeile `hostname=` vorhanden ist:

[.programlisting]
....
hostname="foo.example.com"
....

Wenn der ISP eine statische IP-Adresse und einen Namen zugewiesen hat, verwenden Sie diesen Namen als Hostnamen.

Schauen Sie nach der Variable `network_interfaces`. Wenn Sie das System so konfigurieren möchten, dass es bei Bedarf eine Verbindung zum ISP aufbaut, sollten Sie das Gerät [.filename]#tun0# zu der Liste hinzufügen oder es andernfalls entfernen.

[.programlisting]
....
network_interfaces="lo0 tun0"
ifconfig_tun0=
....

[NOTE]
====
Die Variable `ifconfig_tun0` sollte leer sein und eine Datei namens [.filename]#/etc/start_if.tun0# sollte erstellt werden. Diese Datei sollte die nachfolgende Zeile enthalten:

[.programlisting]
....
ppp -auto mysystem
....

Dieses Skript startet den ppp-Daemon im Automatik-Modus. Es wird bei der Netzwerkkonfiguration ausgeführt. Wenn der Rechner als Gateway für ein LAN fungiert, möchten Sie vielleicht auch die Option `-alias` verwenden. In der Manualpage sind weitere Einzelheiten zu finden.
====

Stellen Sie sicher, dass der Start eines Routerprogramms in [.filename]#/etc/rc.conf# wie folgt deaktiviert ist:

[.programlisting]
....
router_enable="NO"
....

Es ist wichtig, dass der `routed`-Daemon nicht gestartet wird da `routed` dazu tendiert, die von `ppp` erstellten Einträge der Standardroute zu überschreiben.

Es ist außerdem sinnvoll, darauf zu achten, dass die Zeile `sendmail_flags` nicht die Option `-q` enthält, da `sendmail` sonst ab und zu die Netzwerkverbindung prüfen wird, was möglicherweise dazu führt, dass sich der Rechner einwählt. Sie können hier Folgendes angeben:

[.programlisting]
....
sendmail_flags="-bd"
....

Der Nachteil dieser Lösung ist, dass Sie `sendmail` nach jedem Aufbau einer ppp-Verbindung auffordern müssen, die Mailwarteschlange zu überprüfen. Verwenden Sie den Befehl `!bg` in [.filename]#ppp.linkup#, um dies zu automatisieren:

[.programlisting]
....
1     provider:
2       delete ALL
3       add 0 0 HISADDR
4       !bg sendmail -bd -q30m
....

Alternativ ist es möglich, einen "dfilter" einzusetzen, um SMTP-Verkehr zu blockieren. Weitere Einzelheiten hierzu finden Sie in den Beispieldateien.

=== `ppp` benutzen

Das Einzige, was nun noch zu tun bleibt, ist den Rechner neu zu starten. Nach dem Neustart können Sie entweder:

[source,shell]
....
# ppp
....

und danach `dial provider` eingeben, um eine PPP-Sitzung zu starten, oder Sie geben:

[source,shell]
....
# ppp -auto provider
....

ein, um `ppp` bei Datenverkehr aus dem Netzwerk heraus, automatisch eine Verbindung herstellen zu lassen (vorausgesetzt Sie haben kein [.filename]#start_if.tun0# Skript erstellt).

Es ist möglich, dem Programm `ppp` Befehle zu erteilen, während es im Hintergrund läuft. Dazu ist jedoch die Einrichtung eines passenden Diagnose-Ports erforderlich. Ergänzen Sie hierzu die Konfigurationsdatei um folgende Zeile:

[.programlisting]
....
set server /var/run/ppp-tun%d DiagnosticPassword 0177
....

Damit wird PPP angewiesen, auf den angegebenen UNIX(R)-Domainsocket zu hören und Clients nach dem angegebenen Passwort zu fragen, bevor der Zugang gewährt wird. Das `%d` wird durch die Nummer des benutzten [.filename]#tun#-Devices ersetzt.

Wenn ein Socket eingerichtet ist, kann das Programm man:pppctl[8] in Skripten verwendet werden, mit denen in das laufende Programm eingegriffen wird.

[[userppp-mgetty]]
=== Einwählverbindungen konfigurieren

crossref:serialcomms[dialup,“Einwählverbindungen”] bietet eine gute Beschreibung, wie Einwählverbindungen unter Verwendung von man:getty[8] genutzt werden können.

Eine Alternative zu `getty` ist package:comms/mgetty+sendfax[], eine raffiniertere Version von `getty`, die mit Blick auf Einwählverbindungen entworfen wurde.

Der Vorteil von `mgetty` ist, dass es auf aktive Weise mit Modems _spricht_, das heißt wenn ein Port in [.filename]#/etc/ttys# ausgeschaltet ist, wird das Modem nicht auf Anrufe reagieren.

Spätere Versionen von `mgetty` (von 0.99beta aufwärts) unterstützen auch die automatische Erkennung von PPP-Streams, was Clients den skriptlosen Zugang zum Server erlaubt.

http://mgetty.greenie.net/doc/mgetty_toc.html[ http://mgetty.greenie.net/doc/mgetty_toc.html] enthält weitere Informationen zu `mgetty`.

In der Voreinstellung wird package:comms/mgetty+sendfax[] mit der Option `AUTO_PPP` konfiguriert und kompiliert. Dadurch kann `mgetty` die LCP Phase von PPP-Verbindungen erkennen und automatisch eine ppp-Shell starten. Da hierbei jedoch die Login/Passwort-Sequenz nicht durchlaufen wird, ist es notwendig, Benutzer durch PAP oder CHAP zu authentifizieren.

In diesem Abschnitt wird davon ausgegangen, dass der Benutzer den Port package:comms/mgetty+sendfax[] auf seinem System kompiliert und installiert hat.

Stellen Sie sicher, dass [.filename]#/usr/local/etc/mgetty+sendfax/login.config# Folgendes enthält:

[.programlisting]
....
/AutoPPP/ -     - /etc/ppp/ppp-pap-dialup
....

Hierdurch wird `mgetty` angewiesen, [.filename]#ppp-pap-dialup# für die erkannten PPP-Verbindungen auszuführen.

Erstellen Sie eine ausführbare Datei namens [.filename]#/etc/ppp/ppp-pap-dialup# mit folgendem Inhalt:

[.programlisting]
....
#!/bin/sh
exec /usr/sbin/ppp -direct pap$IDENT
....

Erstellen Sie bitte für jede Einwählverbindung, die Sie in [.filename]#/etc/ttys# ermöglicht haben, einen korrespondierenden Eintrag in der Datei [.filename]#/etc/ppp/ppp.conf#. Diese Einträge können problemlos, mit den Definitionen die weiter oben gemacht wurden, koexistieren.

[.programlisting]
....
pap:
  enable pap
  set ifaddr 203.14.100.1 203.14.100.20-203.14.100.40
  enable proxy
....

Jeder Benutzer, der sich auf diese Weise anmeldet, benötigt einen Benutzernamen und ein Passwort in der Datei [.filename]#/etc/ppp/ppp.secret#. Sie haben auch die Möglichkeit, Benutzer mit Hilfe von PAP zu authentifizieren, indem Sie in [.filename]#/etc/passwd# folgende Option hinzufügen:

[.programlisting]
....
enable passwdauth
....

Um bestimmten Benutzern eine statische IP-Adresse zuzuweisen, können Sie die Adresse als drittes Argument in [.filename]#/etc/ppp/ppp.secret# angeben. Beispiele finden Sie in [.filename]#/usr/shared/examples/ppp/ppp.secret.sample#.

[[ppp-troubleshoot]]
== Probleme bei PPP-Verbindungen

Dieser Abschnitt behandelt Probleme, die auftauchen können, wenn PPP über ein Modem verwendet wird. Einige ISPs verwenden `ssword`, andere verwenden `password`. Wenn das Einwahlskript falsch ist, scheitert die Anmeldung. Üblicherweise suchen Sie nach Fehlern der PPP-Verbindung indem Sie sich manuell verbinden.

=== Gerätedateien überprüfen

Wenn Sie einen eigenen Kernel verwenden, stellen Sie sicher, dass die folgende Zeile in der Kernelkonfigurationsdatei vorhanden ist:

[.programlisting]
....
device   uart
....

Das [.filename]#uart#-Gerät ist bereits im `GENERIC`-Kernel vorhanden, deshalb sind in diesem Fall keine zusätzlichen Schritte vonnöten. Kontrollieren Sie die Ausgabe von `dmesg`:

[source,shell]
....
# dmesg | grep uart
....

In der Ausgabe sollten die entsprechenden [.filename]#uart#-Geräte, beispielsweise [.filename]#uart1# ([.filename]#COM2#), angezeigt werden. Wird ein passendes Gerät angezeigt, braucht der Kernel nicht neu erstellt werden. Wenn das Modem an [.filename]#uart1# angeschlossen ist, ist [.filename]#/dev/cuau1# die dazugehörende Gerätedatei.

=== Manuelle Verbindungen

Ein Verbindungsaufbau zum Internet durch manuelle Steuerung von `ppp` geht schnell, ist einfach und stellt einen guten Weg dar, eine Verbindung auf Fehler hin zu überprüfen oder einfach Informationen darüber zu sammeln, wie der ISP Verbindungen handhabt. Lassen Sie uns PPP von der Kommandozeile aus starten. Beachten Sie, dass in allen Beispielen _example_ der Hostname der Maschine ist, auf der PPP läuft. `ppp` starten Sie wie folgt:

[source,shell]
....
# ppp
....

[source,shell]
....
ppp ON example> set device /dev/cuau1
....

Mit dem zweiten Befehl wird das Gerät [.filename]#cuau1# festgelegt.

[source,shell]
....
ppp ON example> set speed 115200
....

Dieser Befehlt setzt die Verbindungsgeschwindigkeit auf 115200 kbps.

[source,shell]
....
ppp ON example> enable dns
....

Dieser Befehl weist `ppp` an, den Resolver zu konfigurieren und in [.filename]#/etc/resolv.conf# Einträge für den Nameserver hinzuzufügen. Falls `ppp` nicht in der Lage ist den Hostnamen selbst zu bestimmen, kann dieser auch später manuell eingetragen werden.

[source,shell]
....
ppp ON example> term
....

Wechselt in den "Terminal"-Modus, um das Modem manuell kontrollieren zu können.

[.programlisting]
....
deflink: Entering terminal mode on /dev/cuau1
type '~h' for help
....

[source,shell]
....
at
OK
atdt123456789
....

Sie verwenden `at` zur Initialisierung des Modems und dann `atdt` sowie die Nummer des ISPs, um den Einwählprozess zu starten.

[source,shell]
....
CONNECT
....

Dies ist die Bestätigung, dass eine Verbindung aufgebaut wurde. Falls wir Verbindungsprobleme bekommen, die nicht mit der Hardware zusammenhängen, werden wir an dieser Stelle ansetzen müssen, um eine Lösung zu finden.

[source,shell]
....
ISP Login:myusername
....

Hier werden Sie nach einem Benutzernamen gefragt. Geben Sie am Prompt den Namen ein, den Ihnen der ISP zur Verfügung gestellt hat.

[source,shell]
....
ISP Pass:mypassword
....

An dieser Stelle müssen Sie das Passwort angeben, das Ihnen vom ISP vorgegeben wurde. Das Passwort wird, analog dem normalen Anmeldevorgang, nicht angezeigt.

[source,shell]
....
Shell or PPP:ppp
....

Abhängig vom ISP, kann es sein, dass dieser Prompt nicht erscheint. Wir werden hier gefragt, ob wir eine Shell beim Provider verwenden oder `ppp` starten wollen. Weil wir eine Internetverbindung aufbauen wollen, haben wir uns in diesem Beispiel für `ppp` entschieden.

[source,shell]
....
Ppp ON example>
....

Beachten Sie, dass sich in diesem Beispiel das erste `p` in einen Großbuchstaben verwandelt hat. Dies zeigt, dass wir erfolgreich eine Verbindung zum ISP hergestellt haben.

[source,shell]
....
PPp ON example>
....

An dieser Stelle haben wir uns erfolgreich beim ISP authentifiziert und warten darauf, dass uns eine IP-Adresse zugewiesen wird.

[source,shell]
....
PPP ON example>
....

Wir haben uns mit der Gegenstelle auf eine IP-Adresse geeinigt und den Verbindungsaufbau erfolgreich abgeschlossen.

[source,shell]
....
PPP ON example> add default HISADDR
....

Hier geben wir unsere Standardroute an. Weil zu diesem Zeitpunkt unsere einzige Verbindung zu unserer Gegenstelle besteht, müssen wir dies tun, bevor wir Kontakt zur Außenwelt aufnehmen können. Falls dies aufgrund bestehender Routen nicht funktionieren sollte, können Sie ein Ausrufungszeichen `!` vor `add` setzen. Sie können diese Standardroute aber auch vor dem eigentlichen Verbindungsaufbau angeben und PPP wird entsprechend eine neue Route aushandeln.

Wenn alles gut ging, sollten wir nun eine aktive Internetverbindung haben, die wir mit kbd:[Ctrl+z] in den Hintergrund schicken können. Wenn Sie feststellen, dass `PPP` wieder zu `ppp` wird, ist die Verbindung abgebrochen. Es ist gut dies zu wissen, weil dadurch der Verbindungsstatus angezeigt wird. Große ``P``s zeigen an, dass eine Verbindung zum ISP besteht und kleine ``p``s zeigen an, dass keine Verbindung besteht.

=== Fehlersuche

Wenn keine Verbindung aufgebaut werden kann, schalten Sie die Hardware-Flusssteuerung CTS/RTS aus, indem Sie die Option `set ctsrts off` verwenden. Dies ist zumeist dann der Fall, wenn Sie mit einem PPP-fähigen Terminalserver verbunden sind. Hier bleibt PPP bei dem Versuch hängen, Daten über die Nachrichtenverbindung zu schicken, weil auf einCTS-Signal (Clear-to-Send) gewartet wird, das vielleicht nie kommt. Wenn Sie diese Option jedoch gebrauchen, sollten Sie auch die Option `set accmap` verwenden, die erforderlich sein kann, um bestimmte Hardware zu kontrollieren, die auf die Übertragung bestimmter Zeichen zwischen den Kommunikations-Endpunkten (zumeist XON/XOFF) angewiesen ist. Die Manualpage man:ppp[8] bietet mehr Informationen zu dieser Option und ihrer Verwendung.

Für ein älteres Modem benötigen Sie vielleicht die Option `set parity even`. Standardmäßig wird keine Parität vorausgesetzt, sie ist aber für die Fehlerprüfung bei älteren Modems und bei bestimmten ISPs erforderlich.

PPP kehrt möglicherweise nicht in den Befehlsmodus zurück, was normalerweise auf einen Fehler bei der Aushandlung hinweist, wobei der ISP wartet, dass der Aushandlungsprozess beginnt. Die Option `~p` erzwingt in diesem Fall den Beginn des Aushandlungsprozesses.

Wenn der Login-Prompt nie erscheint, wird wahrscheinlich PAP oder CHAP für die Authentifizierung benötigt. Um PAP oder CHAP zu verwenden, ergänzen Sie PPP um folgende Optionen, bevor Sie in den Terminalmodus wechseln:

[source,shell]
....
ppp ON example> set authname myusername
....

Hierbei sollte _myusername_ durch den Benutzernamen ersetzt werden, den Sie vom ISP bekommen haben.

[source,shell]
....
ppp ON example> set authkey mypassword
....

_mypassword_ sollten Sie durch das Passwort ersetzen, das Ihnen der ISP zugewiesen hat.

Wenn die Verbindung aufgebaut wird, Sie aber keine Rechner unter dem Domänen-Namen erreichen können, versuchen Sie, einen Rechner mit man:ping[8] und seiner IP-Adresse zu erreichen. Wenn 100% der Pakete verloren gehen, ist es sehr wahrscheinlich, dass keine Standardroute zugewiesen wurde. Überprüfen Sie, ob während des Verbindungsaufbaus die Option `add default HISADDR` gesetzt war. Wenn Sie zu einer entfernten IP-Adresse eine Verbindung aufbauen können, ist es möglich, dass die Adresse eines Nameservers nicht in [.filename]#/etc/resolv.conf# eingetragen wurde. Diese Datei sollte folgendermaßen aussehen:

[.programlisting]
....
domain example.com
nameserver x.x.x.x
nameserver y.y.y.y
....

 Dabei sollten _x.x.x.x_ und _y.y.y.y_ durch die IP-Adressen der DNS-Server des ISPs ersetzt werden.

Mit man:syslog[3] kann die PPP-Verbindung protokolliert werden. Fügen Sie einfach die folgende Zeile in [.filename]#/etc/syslog.conf# ein:

[.programlisting]
....
!ppp
*.*     /var/log/ppp.log
....

[[pppoe]]
== PPP over Ethernet (PPPoE)

Dieser Abschnitt beschreibt, wie Sie PPP over Ethernet (PPPoE) einrichten.

Dies ist ein Beispiel einer funktionierenden [.filename]#ppp.conf#:

[.programlisting]
....
default:
  set log Phase tun command # you can add more detailed logging if you wish
  set ifaddr 10.0.0.1/0 10.0.0.2/0

name_of_service_provider:
  set device PPPoE:xl1 # replace xl1 with your Ethernet device
  set authname YOURLOGINNAME
  set authkey YOURPASSWORD
  set dial
  set login
  add default HISADDR
....

Als `root`, geben Sie ein:

[source,shell]
....
# ppp -ddial name_of_service_provider
....

Fügen Sie folgende Zeilen in [.filename]#/etc/rc.conf# ein:

[.programlisting]
....
ppp_enable="YES"
ppp_mode="ddial"
ppp_nat="YES"	# if you want to enable nat for your local network, otherwise NO
ppp_profile="name_of_service_provider"
....

=== Verwendung einer PPPoE-Dienstbezeichnung (service tag)

Manchmal kann es notwendig sein, eine Dienstbezeichnung (service tag) zu verwenden, um eine Verbindung aufzubauen. Dienstbezeichnungen werden eingesetzt, um zwischen verschiedenen PPPoE-Servern unterscheiden zu können, die einem bestehenden Netzwerk zugeteilt sind.

Die erforderlichen Dienstbezeichnungen sollten in der Dokumentation, zu finden sein, die der ISP zur Verfügung gestellt hat.

Als letzte Möglichkeit könnten Sie versuchen, package:net/rr-pppoe[] zu installieren. Bedenken Sie aber, dass dadurch Daten Ihres Modems gelöscht werden können, so dass es nicht mehr benutzt werden kann. Überlegen Sie also genau, ob Sie dies machen wollen. Installieren Sie einfach das Programm, das Ihnen der Provider zusammen mit dem Modem geliefert hat. Gehen Sie dann in das Menü menu:System[] dieses Programms. Der Name des Profils, sollte in der Liste aufgeführt sein. Normalerweise ist dies _ISP_.

Der Name des Profils (service tag) wird im Eintrag für die PPPoE-Konfiguration in der Datei [.filename]#ppp.conf# verwendet, als der Teil des Befehls `set device` (die Manualpage man:ppp[8] enthält Einzelheiten hierzu), der den Provider angibt. Dieser Eintrag sollte folgendermaßen aussehen:

[.programlisting]
....
set device PPPoE:xl1:ISP
....

Vergessen Sie nicht, statt _xl1_ das richtige Gerät für die Netzwerkkarte anzugeben.

Denken Sie auch daran, _ISP_ durch das Profil zu ersetzen.

Weitere Informationen finden Sie unter http://renaud.waldura.com/doc/freebsd/pppoe/[ Cheaper Broadband with FreeBSD on DSL] von Renaud Waldura.

[[ppp-3com]]
=== PPPoE mit einem 3Com(R) HomeConnect(TM) ADSL Modem Dual Link

Dieses Modem folgt nicht den in http://www.faqs.org/rfcs/rfc2516.html[ RFC 2516] festgelegten Spezifikationen.

Um FreeBSD in die Lage zu versetzen, mit diesem Gerät zu kommunizieren, muss ein sysctl Befehl angegeben werden. Dies kann beim Systemstart automatisch geschehen, indem die Datei [.filename]#/etc/sysctl.conf# angepasst wird:

[.programlisting]
....
net.graph.nonstandard_pppoe=1
....

oder, wenn der Befehl unmittelbar wirksam werden soll, durch:

[source,shell]
....
# sysctl net.graph.nonstandard_pppoe=1
....

Da hiermit eine systemweit gültige Einstellung vorgenommen wird, ist es nicht möglich, gleichzeitig mit einem normalen PPPoE-Client oder Server und einem 3Com(R) HomeConnect(TM) ADSL Modem zu kommunizieren.

[[pppoa]]
== PPP over ATM (PPPoA)

Nachfolgend wird beschrieben, wie PPP over ATM (PPPoA) eingerichtet wird. PPPoA ist vor allem unter europäischen DSL-Providern populär.

=== Die Verwendung von mpd

Sie können mpd verwenden, um zu einer Reihe von Diensten, insbesondere PPTP-Diensten eine Verbindung herzustellen. Das Programm kann aus den Ports oder als Paket package:net/mpd5[] installiert werden. Viele ADSL Modems sind auf einen PPTP-Tunnel zwischen dem Modem und dem Rechner angewiesen.

Sobald das Programm installiert ist, müssen Sie es nach den Vorgaben des Providers konfigurieren. Der Port installiert auch einige gut dokumentierte Beispielkonfigurationsdateien in [.filename]#/usr/local/etc/mpd/#. Ein kompletter Leitfaden zur Konfiguration von mpd ist unter [.filename]#/usr/local/shared/doc/mpd/# zu finden. Hier ist eine Beispielkonfiguration, um mit mpd eine Verbindung zu einem ADSL-Dienst aufzubauen. Die Konfiguration ist auf zwei Dateien verteilt. Zunächst die Datei [.filename]#mpd.conf#:

[NOTE]
====
Dieses Beispiel für [.filename]#mpd.conf# funktioniert nur mit mpd 4.x.
====

[.programlisting]
....
default:
    load adsl

adsl:
    new -i ng0 adsl adsl
    set bundle authname username <.>
    set bundle password password <.>
    set bundle disable multilink

    set link no pap acfcomp protocomp
    set link disable chap
    set link accept chap
    set link keep-alive 30 10

    set ipcp no vjcomp
    set ipcp ranges 0.0.0.0/0 0.0.0.0/0

    set iface route default
    set iface disable on-demand
    set iface enable proxy-arp
    set iface idle 0

    open
....

<.> Der Benutzername, den Sie zur Authentifizierung bei Ihrem ISP verwenden.

<.> Das Passwort, das Sie zur Authentifizierung bei Ihrem ISP verwenden.

Die Datei [.filename]#mpd.links# enthält Informationen über die Verbindung(en), die Sie aufbauen möchten. Eine Beispieldatei [.filename]#mpd.links#, die das vorige Beispiel ergänzt, wird unten angegeben:

[.programlisting]
....
adsl:
    set link type pptp
    set pptp mode active
    set pptp enable originate outcall
    set pptp self 10.0.0.1 <.>
    set pptp peer 10.0.0.138 <.>
....

<.> Die IP-Adresse des FreeBSD-Rechners von dem aus Sie mpd verwenden.
<.> Die IP-Adresse des ADSL-Modems. Das Alcatel SpeedTouch(TM) Home hat die Adresse `10.0.0.138` voreingestellt.

Ein Verbindungsaufbau kann einfach durch Eingabe des folgenden Befehls als `root` gestartet werden:

[source,shell]
....
# mpd -b adsl
....

Sie können sich den Status der Verbindung durch folgenden Befehl anzeigen lassen:

[source,shell]
....
% ifconfig ng0
ng0: flags=88d1<UP,POINTOPOINT,RUNNING,NOARP,SIMPLEX,MULTICAST> mtu 1500
     inet 216.136.204.117 --> 204.152.186.171 netmask 0xffffffff
....

Die Verwendung von mpd ist der empfehlenswerteste Weg, um mit FreeBSD eine Verbindung zu einem ADSL-Dienst aufzubauen.

=== Die Verwendung von pptpclient

Es ist außerdem möglich, mit FreeBSD eine Verbindung zu anderen PPPoA-Diensten aufzubauen. Dazu wird package:net/pptpclient[] verwendet.

Um mit package:net/pptpclient[] eine Verbindung zu einem DSL-Dienst aufbauen zu können, müssen Sie den entsprechenden Port bzw. das Paket installieren und [.filename]#/etc/ppp/ppp.conf# bearbeiten. Eine Beispieldatei für [.filename]#ppp.conf# ist weiter unten angegeben. Weitere Informationen zu den Optionen von [.filename]#ppp.conf# finden Sie in man:ppp[8].

[.programlisting]
....
adsl:
 set log phase chat lcp ipcp ccp tun command
 set timeout 0
 enable dns
 set authname username <.>
 set authkey password <.>
 set ifaddr 0 0
 add default HISADDR
....

<.> Der Benutzername für den Zugang beim DSL-Provider.
<.> Das Passwort für Ihren Account.

[WARNING]
====

Weil das Passwort in [.filename]#ppp.conf# im Klartext hinzugefügt wird, sollten Sie sicherstellen, dass niemand den Inhalt dieser Datei lesen kann:

[source,shell]
....
# chown root:wheel /etc/ppp/ppp.conf
# chmod 600 /etc/ppp/ppp.conf
....

====

Dies wird einen Tunnel für eine PPP-Session zum DSL-Router öffnen. Ethernet-DSL-Modems haben eine vorkonfigurierte LAN-IP-Adresse, mit der Sie eine Verbindung aufbauen. Im Falle des Alcatel SpeedTouch(TM) Home handelt es sich dabei um die Adresse `10.0.0.138`. In der Dokumentation des Routers sollte angegeben sein, welche Adresse das Gerät verwendet. Um den Tunnel zu öffnen und eine PPP-Session zu starten, führen Sie folgenden Befehl aus:

[source,shell]
....
# pptp address adsl
....

[TIP]
====

Wenn Sie ein kaufmännisches Und ("&") an das Ende dieses Kommandos anfügen, wird pptp den Prompt zurückgeben.
====

Ein virtuelles Tunnel-Device [.filename]#tun# wird für das Zusammenspiel der Prozesse pptp und ppp geschaffen. Wenn Sie den Prompt zurückerhalten haben oder der pptp-Prozess das Vorliegen einer Verbindung bestätigt, können Sie den Tunnel folgendermaßen überprüfen:

[source,shell]
....
% ifconfig tun0
tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500
        inet 216.136.204.21 --> 204.152.186.171 netmask 0xffffff00
        Opened by PID 918
....

Wenn die Verbindung fehlschlägt, überprüfen Sie die Konfiguration des Routers, den Sie normalerweise mit einem Web-Browser erreichen können. Prüfen Sie auch die Ausgabe des Befehls `pptp` und die Logdatei [.filename]#/var/log/ppp.log#.
