123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278 |
- PPP for Linux
- -------------
- Paul Mackerras
- 8 March 2001
- for ppp-2.4.2
- Updated for ppp-2.4.5, Sep 08
- 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 kernel sources contain up-to-date drivers
- (and have done since the 2.4.x kernel series).
- 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.4 or 2.6 (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 a 2.4 or 2.6 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.5 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 udev (as most distributions
- do), the /dev/ppp node should be created by udevd.
- Otherwise you may need to create a /dev/ppp device node with the
- commands:
- # mknod /dev/ppp c 108 0
- # chmod 600 /dev/ppp
- 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@samba.org) 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
|