298 lines
12 KiB
Plaintext
Executable File
298 lines
12 KiB
Plaintext
Executable File
PPP for Linux
|
|
-------------
|
|
|
|
Paul Mackerras
|
|
8 March 2001
|
|
|
|
for ppp-2.4.1
|
|
|
|
1. Introduction
|
|
---------------
|
|
|
|
The Linux PPP implementation includes both kernel and user-level
|
|
parts. This package contains the user-level part, which consists of
|
|
the PPP daemon (pppd) and associated utilities. In the past this
|
|
package has contained updated kernel drivers. This is no longer
|
|
necessary, as the current 2.2 and 2.4 kernel sources contain
|
|
up-to-date drivers.
|
|
|
|
The Linux PPP implementation is capable of being used both for
|
|
initiating PPP connections (as a `client') or for handling incoming
|
|
PPP connections (as a `server'). Note that this is an operational
|
|
distinction, based on how the connection is created, rather than a
|
|
distinction that is made in the PPP protocols themselves.
|
|
|
|
Mostly this package is used for PPP connections over modems connected
|
|
via asynchronous serial ports, so this guide concentrates on this
|
|
situation.
|
|
|
|
The PPP protocol consists of two parts. One is a scheme for framing
|
|
and encoding packets, the other is a series of protocols called LCP,
|
|
IPCP, PAP and CHAP, for negotiating link options and for
|
|
authentication. This package similarly consists of two parts: a
|
|
kernel module which handles PPP's low-level framing protocol, and a
|
|
user-level program called pppd which implements PPP's negotiation
|
|
protocols.
|
|
|
|
The kernel module assembles/disassembles PPP frames, handles error
|
|
detection, and forwards packets between the serial port and either the
|
|
kernel network code or the user-level program pppd. IP packets go
|
|
directly to the kernel network code. So once pppd has negotiated the
|
|
link, it in practice lies completely dormant until you want to take
|
|
the link down, when it negotiates a graceful disconnect.
|
|
|
|
|
|
2. Installation
|
|
---------------
|
|
|
|
2.1 Kernel driver
|
|
|
|
Assuming you are running a recent 2.2 or 2.4 (or later) series kernel,
|
|
the kernel source code will contain an up-to-date kernel PPP driver.
|
|
If the PPP driver was included in your kernel configuration when your
|
|
kernel was built, then you only need to install the user-level
|
|
programs. Otherwise you will need to get the source tree for your
|
|
kernel version, configure it with PPP included, and recompile. Most
|
|
Linux distribution vendors ship kernels with PPP included in the
|
|
configuration.
|
|
|
|
The PPP driver can be either compiled into the kernel or compiled as a
|
|
kernel module. If it is compiled into the kernel, the PPP driver is
|
|
included in the kernel image which is loaded at boot time. If it is
|
|
compiled as a module, the PPP driver is present in one or more files
|
|
under /lib/modules and is loaded into the kernel when needed.
|
|
|
|
The 2.2 series kernels contain an older version of the kernel PPP
|
|
driver, one which doesn't support multilink. If you want multilink,
|
|
you need to run the latest 2.4 series kernel. The kernel PPP driver
|
|
was completely rewritten for the 2.4 series kernels to support
|
|
multilink and to allow it to operate over diverse kinds of
|
|
communication medium (the 2.2 driver only operates over serial ports
|
|
and devices which look like serial ports, such as pseudo-ttys).
|
|
|
|
Under the 2.2 kernels, if PPP is compiled as a module, the PPP driver
|
|
modules should be present in the /lib/modules/`uname -r`/net directory
|
|
(where `uname -r` represents the kernel version number). The PPP
|
|
driver module itself is called ppp.o, and there will usually be
|
|
compression modules there, ppp_deflate.o and bsd_comp.o, as well as
|
|
slhc.o, which handles TCP/IP header compression. If the PPP driver is
|
|
compiled into the kernel, the compression code will still be compiled
|
|
as modules, for kernels before 2.2.17pre12. For 2.2.17pre12 and later,
|
|
if the PPP driver is compiled in, the compression code will also.
|
|
|
|
Under the 2.4 kernels, there are two PPP modules, ppp_generic.o and
|
|
ppp_async.o, plus the compression modules (ppp_deflate.o, bsd_comp.o
|
|
and slhc.o). If the PPP generic driver is compiled into the kernel,
|
|
the other four can then be present either as modules or compiled into
|
|
the kernel. There is a sixth module, ppp_synctty.o, which is used for
|
|
synchronous tty devices such as high-speed WAN adaptors.
|
|
|
|
|
|
2.2 User-level programs
|
|
|
|
If you obtained this package in .rpm or .deb format, you simply follow
|
|
the usual procedure for installing the package.
|
|
|
|
If you are using the .tar.gz form of this package, then cd into the
|
|
ppp-2.4.1b1 directory you obtained by unpacking the archive and issue
|
|
the following commands:
|
|
|
|
$ ./configure
|
|
$ make
|
|
# make install
|
|
|
|
The `make install' has to be done as root. This makes and installs
|
|
four programs and their man pages: pppd, chat, pppstats and pppdump.
|
|
If the /etc/ppp configuration directory doesn't exist, the `make
|
|
install' step will create it and install some default configuration
|
|
files.
|
|
|
|
|
|
2.3 System setup for 2.4 kernels
|
|
|
|
Under the 2.4 series kernels, pppd needs to be able to open /dev/ppp,
|
|
character device (108,0). If you are using devfs (the device
|
|
filesystem), the /dev/ppp node will automagically appear when the
|
|
ppp_generic module is loaded, or at startup if ppp_generic is compiled
|
|
in.
|
|
|
|
If you have ppp_generic as a module, and you are using devfsd (the
|
|
devfs daemon), you will need to add a line like this to your
|
|
/etc/devfsd.conf:
|
|
|
|
LOOKUP ppp MODLOAD
|
|
|
|
Otherwise you will need to create a /dev/ppp device node with the
|
|
commands:
|
|
|
|
# mknod /dev/ppp c 108 0
|
|
# chmod 600 /dev/ppp
|
|
|
|
If you use module autoloading and have PPP as a module, you will need
|
|
to add the following to your /etc/modules.conf or /etc/conf.modules:
|
|
|
|
alias /dev/ppp ppp_generic
|
|
alias char-major-108 ppp_generic
|
|
alias tty-ldisc-3 ppp_async
|
|
alias tty-ldisc-14 ppp_synctty
|
|
alias ppp-compress-21 bsd_comp
|
|
alias ppp-compress-24 ppp_deflate
|
|
alias ppp-compress-26 ppp_deflate
|
|
|
|
|
|
2.4 System setup under 2.2 series kernels
|
|
|
|
Under the 2.2 series kernels, you should add the following to your
|
|
/etc/modules.conf or /etc/conf.modules:
|
|
|
|
alias tty-ldisc-3 ppp
|
|
alias ppp-compress-21 bsd_comp
|
|
alias ppp-compress-24 ppp_deflate
|
|
alias ppp-compress-26 ppp_deflate
|
|
|
|
|
|
3. Getting help with problems
|
|
-----------------------------
|
|
|
|
If you have problems with your PPP setup, or you just want to ask some
|
|
questions, or better yet if you can help others with their PPP
|
|
questions, then you should join the linux-ppp mailing list. Send an
|
|
email to majordomo@vger.kernel.org with a line in the body saying
|
|
|
|
subscribe linux-ppp
|
|
|
|
To leave the mailing list, send an email to majordomo@vger.kernel.org
|
|
with a line in the body saying
|
|
|
|
unsubscribe linux-ppp
|
|
|
|
To send a message to the list, email it to linux-ppp@vger.kernel.org.
|
|
You don't have to be subscribed to send messages to the list.
|
|
|
|
You can also email me (paulus@linuxcare.com.au) but I am overloaded
|
|
with email and I can't respond to most messages I get in a timely
|
|
fashion.
|
|
|
|
There are also several relevant news groups, such as comp.protocols.ppp,
|
|
comp.os.linux.networking, or comp.os.linux.setup.
|
|
|
|
|
|
4. Configuring your dial-out PPP connections
|
|
--------------------------------------------
|
|
|
|
Some Linux distribution makers include tools in their distributions
|
|
for setting up PPP connections. For example, for Red Hat Linux and
|
|
derivatives, you should probably use linuxconf or netcfg to set up
|
|
your PPP connections.
|
|
|
|
The two main windowing environments for Linux, KDE and Gnome, both
|
|
come with GUI utilities for configuring and controlling PPP dial-out
|
|
connections. They are convenient and relatively easy to configure.
|
|
|
|
A third alternative is to use a PPP front-end package such as wvdial
|
|
or ezppp. These also will handle most of the details of talking to
|
|
the modem and setting up the PPP connection for you.
|
|
|
|
Assuming that you don't want to use any of these tools, you want to
|
|
set up the configuration manually yourself, then read on. This
|
|
document gives a brief description and example. More details can be
|
|
found by reading the pppd and chat man pages and the PPP-HOWTO.
|
|
|
|
We assume that you have a modem that uses the Hayes-compatible AT
|
|
command set connected to an async serial port (e.g. /dev/ttyS0) and
|
|
that you are dialling out to an ISP.
|
|
|
|
The trickiest and most variable part of setting up a dial-out PPP
|
|
connection is the part which involves getting the modem to dial and
|
|
then invoking PPP service at the far end. Generally, once both ends
|
|
are talking PPP the rest is relatively straightforward.
|
|
|
|
Now in fact pppd doesn't know anything about how to get modems to dial
|
|
or what you have to say to the system at the far end to get it to talk
|
|
PPP. That's handled by an external program such as chat, specified
|
|
with the connect option to pppd. Chat takes a series of strings to
|
|
expect from the modem interleaved with a series of strings to send to
|
|
the modem. See the chat man page for more information. Here is a
|
|
simple example for connecting to an ISP, assuming that the ISP's
|
|
system starts talking PPP as soon as it answers the phone:
|
|
|
|
pppd connect 'chat -v "" AT OK ATDT5551212 ~' \
|
|
/dev/ttyS0 57600 crtscts debug defaultroute
|
|
|
|
Going through pppd's options in order:
|
|
connect 'chat ...' This gives a command to run to contact the
|
|
PPP server. Here the supplied 'chat' program is used to dial a
|
|
remote computer. The whole command is enclosed in single quotes
|
|
because pppd expects a one-word argument for the 'connect' option.
|
|
The options to 'chat' itself are:
|
|
|
|
-v verbose mode; log what we do to syslog
|
|
"" don't wait for any prompt, but instead...
|
|
AT send the string "AT"
|
|
OK expect the response "OK", then
|
|
ATDT5551212 dial the modem, then
|
|
~ wait for a ~ character, indicating the start
|
|
of a PPP frame from the server
|
|
|
|
/dev/ttyS0 specifies which serial port the modem is connected to
|
|
57600 specifies the baud rate to use
|
|
crtscts use hardware flow control using the RTS & CTS signals
|
|
debug log the PPP negotiation with syslog
|
|
defaultroute add default network route via the PPP link
|
|
|
|
Pppd will write error messages and debugging logs to the syslogd
|
|
daemon using the facility name "daemon". These messages may already
|
|
be logged to the console or to a file like /var/log/messages; consult
|
|
your /etc/syslog.conf file to see. If you want to make all pppd
|
|
messages go to a file such as /var/log/ppp-debug, add the line
|
|
|
|
daemon.* /var/log/ppp-debug
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
This is one or more tabs. Do not use spaces.
|
|
|
|
to syslog.conf; make sure to put one or more TAB characters (not
|
|
spaces!) between the two fields. Then you need to create an empty
|
|
/var/log/ppp-debug file with a command such as
|
|
|
|
touch /var/log/ppp-debug
|
|
|
|
and then restart syslogd, usually by sending it a SIGHUP signal with a
|
|
command like this:
|
|
|
|
killall -HUP syslogd
|
|
|
|
|
|
4.1 Is the link up?
|
|
|
|
The main way to tell if your PPP link is up and operational is the
|
|
ifconfig ("interface configuration") command. Type
|
|
|
|
/sbin/ifconfig
|
|
|
|
at a shell prompt. It should print a list of interfaces including one
|
|
like this example:
|
|
|
|
ppp0 Link encap Point-to-Point Protocol
|
|
inet addr 192.76.32.3 P-t-P 129.67.1.165 Mask 255.255.255.0
|
|
UP POINTOPOINT RUNNING MTU 1500 Metric 1
|
|
RX packets 33 errors 0 dropped 0 overrun 0
|
|
TX packets 42 errors 0 dropped 0 overrun 0
|
|
|
|
Assuming that ifconfig shows the ppp network interface, you can test
|
|
the link using the ping command like this:
|
|
|
|
/sbin/ping -c 3 129.67.1.165
|
|
|
|
where the address you give is the address shown as the P-t-P address
|
|
in the ifconfig output. If the link is operating correctly, you
|
|
should see output like this:
|
|
|
|
PING 129.67.1.165 (129.67.1.165): 56 data bytes
|
|
64 bytes from 129.67.1.165: icmp_seq=0 ttl=255 time=268 ms
|
|
64 bytes from 129.67.1.165: icmp_seq=1 ttl=255 time=247 ms
|
|
64 bytes from 129.67.1.165: icmp_seq=2 ttl=255 time=266 ms
|
|
--- 129.67.1.165 ping statistics ---
|
|
3 packets transmitted, 3 packets received, 0% packet loss
|
|
round-trip min/avg/max = 247/260/268 ms
|
|
|