1 This is a list of Frequently Asked Questions about using ppp-2.x and
5 ------------------------------------------------------------------------
7 Q: Can you give me an example of how I might set up my machine to dial
10 A: Here's an example for dialling out to an ISP via a modem on
11 /dev/tty02. The modem uses hardware (CTS/RTS) flow control, and the
12 serial port is run at 38400 baud. The ISP assigns our IP address.
14 To configure pppd for this connection, create a file under
15 /etc/ppp/peers called (say) my-isp containing the following:
18 connect 'chat -v -f /etc/ppp/chat/my-isp'
21 The ppp connection is then initiated using the following command:
25 Of course, if the directory containing pppd is not in your path, you
26 will need to give the full pathname for pppd, for example,
29 When you run this, pppd will use the chat program to dial the ISP and
30 invoke its ppp service. Chat will read the file specified with -f,
31 namely /etc/ppp/chat/my-isp, to find a list of strings to expect to
32 receive, and strings to send. This file would contain something like
40 ABORT "Username/Password Incorrect"
47 "Switching to PPP-ppp-Switching to PPP"
49 You will need to change the details here. The first string on each
50 line is a string to expect to receive; the second is the string to
51 send. You can add or delete lines according to the dialog required to
52 access your ISP's system. This example is for a modem with a standard
53 AT command set, dialling out to an Annex terminal server. The \q
54 toggles "quiet" mode; when quiet mode is on, the strings to be sent
55 are replaced by ?????? in the log. You may need to go through the
56 dialog manually using kermit or tip first to determine what should go
59 To terminate the link, run the following script, called (say)
65 if [ -f $piddir/$unit.pid ]; then
66 kill -1 `cat $piddir/$unit.pid`
69 On some systems (SunOS, Solaris, Ultrix), you will need to change
73 ------------------------------------------------------------------------
75 Q: Can you give me an example of how I could set up my office machine
76 so I can dial in to it from home?
78 A: Let's assume that the office machine is called "office" and is on a
79 local ethernet subnet. Call the home machine "home" and give it an IP
80 address on the same subnet as "office". We'll require both machines
81 to authenticate themselves to each other.
83 Set up the files on "office" as follows:
85 /etc/ppp/options contains:
87 auth # require the peer to authenticate itself
89 # other options can go here if desired
91 /etc/ppp/chap-secrets contains:
93 home office "beware the frub-jub" home
94 office home "bird, my son!%&*" -
96 Set up a modem on a serial port so that users can dial in to the
97 modem and get a login prompt.
99 On "home", set up the files as follows:
101 /etc/ppp/options contains the same as on "office".
103 /etc/ppp/chap-secrets contains:
105 home office "beware the frub-jub" -
106 office home "bird, my son!%&*" office
108 Create a file called /etc/ppp/peers/office containing the following:
111 connect 'chat -v -f /etc/ppp/chat/office'
114 (You may need to change some of the details here.)
116 Create the /etc/ppp/chat/office file containing the following:
123 ABORT "ogin incorrect"
129 "$" "\q^U/usr/sbin/pppd proxyarp"
132 You will need to change the details. Note that the "$" in the
133 second-last line is expecting the shell prompt after a successful
134 login - you may need to change it to "%" or something else.
136 You then initiate the connection (from home) with the command:
140 ------------------------------------------------------------------------
142 Q: When I try to establish a connection, the modem successfully dials
143 the remote system, but then hangs up a few seconds later. How do I
144 find out what's going wrong?
146 A: There are a number of possible problems here. The first thing to
147 do is to ensure that pppd's messages are visible. Pppd uses the
148 syslog facility to log messages which help to identify specific
149 problems. Messages from pppd have facility "daemon" and levels
150 ranging from "debug" to "error".
152 Usually it is useful to see messages of level "notice" or higher on
153 the console. To see these, find the line in /etc/syslog.conf which
154 has /dev/console on the right-hand side, and add "daemon.notice" in
155 the list on the left. The line will end up looking something like
158 *.err;kern.debug;auth.notice;mail.crit;daemon.notice /dev/console
160 Note that the whitespace is tabs, *not* spaces.
162 If you are having problems, it may be useful to see messages of level
163 "info" as well, in which case you would change "daemon.notice" to
166 In addition, it is useful to collect pppd's debugging output in a
167 file - the debug option to pppd causes it to log the contents of all
168 control packets sent and received in human-readable form. To do this,
169 add a line like this to /etc/syslog.conf:
171 daemon,local2.debug /etc/ppp/log
173 and create an empty /etc/ppp/log file.
175 When you change syslog.conf, you will need to send a HUP signal to
176 syslogd to causes it to re-read syslog.conf. You can do this with a
177 command like this (as root):
179 kill -HUP `cat /etc/syslogd.pid`
181 (On some systems, you need to use /var/run/syslog.pid instead of
184 After setting up syslog like this, you can use the -v flag to chat and
185 the `debug' option to pppd to get more information. Try initiating
186 the connection again; when it fails, inspect /etc/ppp/log to see what
187 happened and where the connection failed.
190 ------------------------------------------------------------------------
192 Q: When I try to establish a connection, I get an error message saying
193 "Serial link is not 8-bit clean". Why?
195 A: The most common cause is that your connection script hasn't
196 successfully dialled out to the remote system and invoked ppp service
197 there. Instead, pppd is talking to something (a shell or login
198 process on the remote machine, or maybe just the modem) which is only
199 outputting 7-bit characters.
201 This can also arise with a modem which uses an AT command set if the
202 dial command is issued before pppd is invoked, rather than within a
203 connect script started by pppd. If the serial port is set to 7
204 bits/character plus parity when the last AT command is issued, the
205 modem serial port will be set to the same setting.
207 Note that pppd *always* sets the local serial port to 8 bits per
208 character, with no parity and 1 stop bit. So you shouldn't need to
209 issue an stty command before invoking pppd.
212 ------------------------------------------------------------------------
214 Q: When I try to establish a connection, I get an error message saying
215 "Serial line is looped back". Why?
217 A: Probably your connection script hasn't successfully dialled out to
218 the remote system and invoked ppp service there. Instead, pppd is
219 talking to something which is just echoing back the characters it
220 receives. The -v option to chat can help you find out what's going
221 on. It can be useful to include "~" as the last expect string to
222 chat, so chat won't return until it's seen the start of the first PPP
223 frame from the remote system.
225 Another possibility is that your phone connection has dropped for some
226 obscure reason and the modem is echoing the characters it receives
230 ------------------------------------------------------------------------
232 Q: I installed pppd successfully, but when I try to run it, I get a
233 message saying something like "peer authentication required but no
234 authentication files accessible".
236 A: When pppd is used on a machine which already has a connection to
237 the Internet (or to be more precise, one which has a default route in
238 its routing table), it will require all peers to authenticate
239 themselves. The reason for this is that if you don't require
240 authentication, you have a security hole, because the peer can
241 basically choose any IP address it wants, even the IP address of some
242 trusted host (for example, a host mentioned in some .rhosts file).
244 On machines which don't have a default route, pppd does not require
245 the peer to authenticate itself. The reason is that such machines
246 would mostly be using pppd to dial out to an ISP which will refuse to
247 authenticate itself. In that case the peer can use any IP address as
248 long as the system does not already have a route to that address.
249 For example, if you have a local ethernet network, the peer can't use
250 an address on that network. (In fact it could if it authenticated
251 itself and it was permitted to use that address by the pap-secrets or
254 There are 3 ways around the problem:
256 1. If possible, arrange for the peer to authenticate itself, and
257 create the necessary secrets files (/etc/ppp/pap-secrets and/or
258 /etc/ppp/chap-secrets).
260 2. If the peer refuses to authenticate itself, and will always be
261 using the same IP address, or one of a small set of IP addresses, you
262 can create an entry in the /etc/ppp/pap-secrets file like this:
264 "" * "" his-ip.his-domain his-other-ip.other-domain
266 (that is, using the empty string for the client name and password
267 fields). Of couse, you replace the 4th and following fields in the
268 example above with the IP address(es) that the peer may use. You can
269 use either hostnames or numeric IP addresses.
271 3. You can add the `noauth' option to the /etc/ppp/options file.
272 Pppd will then not ask the peer to authenticate itself. If you do
273 this, I *strongly* recommend that you remove the set-uid bit from the
274 permissions on the pppd executable, with a command like this:
276 chmod u-s /usr/sbin/pppd
278 Then, an intruder could only use pppd maliciously if they had already
279 become root, in which case they couldn't do any more damage using pppd
280 than they could anyway.
283 ------------------------------------------------------------------------
285 Q: What do I need to put in the secrets files?
288 - secrets (i.e. passwords) to use for authenticating this host to
289 other hosts (i.e., for proving our identity to others);
290 - secrets which other hosts can use for authenticating themselves
291 to us (i.e., so that they can prove their identity to us); and
292 - information about which IP addresses other hosts may use, once
293 they have authenticated themselves.
295 There are two authentication files: /etc/ppp/pap-secrets, which
296 contains secrets for use with PAP (the Password Authentication
297 Protocol), and /etc/ppp/chap-secrets, which contains secrets for use
298 with CHAP (the Challenge Handshake Authentication Protocol). Both
299 files have the same simple format, which is as follows:
301 - The file contains a series of entries, each of which contains a
302 secret for authenticating one machine to another.
304 - Each entry is contained on a single logical line. A logical line
305 may be continued across several lines by placing a backslash (\) at
306 the end of each line except the last.
308 - Each entry has 3 or more fields, separated by whitespace (spaces
309 and/or tabs). These fields are, in order:
310 * The name of the machine that is authenticating itself
312 * The name of the machine that is authenticating the client
314 * The secret to be used for authenticating that client to that
315 server. If this field begins with the at-sign `@', the rest
316 of the field is taken as the name of a file containing the
318 * The 4th and any following fields list the IP address(es)
319 that the client may use.
321 - The file may contain comments, which begin with a `#' and continue
322 to the end of the line.
324 - Double quotes `"' should be used around a field if it contains
325 characters with special significance, such as space, tab, `#', etc.
327 - The backslash `\' may be used before characters with special
328 significance (space, tab, `#', `\', etc.) to remove that significance.
330 Some important points to note:
332 * A machine can be *both* a "client" and a "server" for the purposes
333 of authentication - this happens when both peers require the other to
334 authenticate itself. So A would authenticate itself to B, and B would
335 also authenticate itself to A (possibly using a different
336 authentication protocol).
338 * If both the "client" and the "server" are running ppp-2.x, they need
339 to have a similar entry in the appropriate secrets file; the first two
340 fields are *not* swapped on the client, compared to the server. So
341 the client might have an entry like this:
343 ay bee "our little secret" -
345 and the corresponding entry on the server could look like this:
347 ay bee "our little secret" 123.45.67.89
350 ------------------------------------------------------------------------
352 Q: Explain about PAP and CHAP?
354 PAP stands for the Password Authentication Protocol. With this
355 protocol, the "client" (the machine that needs to authenticate itself)
356 sends its name and a password, in clear text, to the "server". The
357 server returns a message indicating whether the name and password are
360 CHAP stands for the Challenge Handshake Authentication Protocol. It
361 is designed to address some of the deficiencies and vulnerabilities of
362 PAP. Like PAP, it is based on the client and server having a shared
363 secret, but the secret is never passed in clear text over the link.
364 Instead, the server sends a "challenge" - an arbitrary string of
365 bytes, and the client must prove it knows the shared secret by
366 generating a hash value from the challenge combined with the shared
367 secret, and sending the hash value back to the server. The server
368 also generates the hash value and compares it with the value received
371 At a practical level, CHAP can be slightly easier to configure than
372 PAP because the server sends its name with the challenge. Thus, when
373 finding the appropriate secret in the secrets file, the client knows
374 the server's name. In contrast, with PAP, the client has to find its
375 password (i.e. the shared secret) before it has received anything from
376 the server. Thus, it may be necessary to use the `remotename' option
377 to pppd when using PAP authentication so that it can select the
378 appropriate secret from /etc/ppp/pap-secrets.
380 Microsoft also has a variant of CHAP which uses a different hashing
381 arrangement from normal CHAP. There is a client-side implementation
382 of Microsoft's CHAP in ppp-2.3; see README.MSCHAP80.
385 ------------------------------------------------------------------------
387 Q: When the modem hangs up, without the remote system having
388 terminated the connection properly, pppd does not notice the hangup,
389 but just keeps running. How do I get pppd to notice the hangup and
392 A: Pppd detects modem hangup by looking for an end-of-file indication
393 from the serial driver, which should be generated when the CD (carrier
394 detect) signal on the serial port is deasserted. For this to work:
396 - The modem has to be set to assert CD when the connection is made and
397 deassert it when the phone line hangs up. Usually the AT&C1 modem
398 command sets this mode.
400 - The cable from the modem to the serial port must connect the CD
403 - Some serial drivers have a "software carrier detect" mode, which
404 must be *disabled*. The method of doing this varies between systems.
405 Under SunOS, use the ttysoftcar command. Under NetBSD, edit /etc/ttys
406 to remove the "softcar" flag from the line for the serial port, and
410 ------------------------------------------------------------------------
412 Q: Why should I use PPP compression (BSD-Compress or Deflate) when my
413 modem already does V.42 compression? Won't it slow the CPU down a
416 A: Using PPP compression is preferable, especially when using modems
417 over phone lines, for the following reasons:
419 - The V.42 compression in the modem isn't very strong - it's an LZW
420 technique (same as BSD-Compress) with a 10, 11 or 12 bit code size.
421 With BSD-Compress you can use a code size of up to 15 bits and get
422 much better compression, or you can use Deflate and get even better
425 - I have found that enabling V.42 compression in my 14.4k modem
426 increases the round-trip time for a character to be sent, echoed and
427 returned by around 40ms, from 160ms to 200ms (with error correction
428 enabled). This is enough to make it feel less responsive on rlogin or
429 telnet sessions. Using PPP compression adds less than 5ms (small
430 enough that I couldn't measure it reliably). I admit my modem is a
431 cheapie and other modems may well perform better.
433 - While compression and decompression do require some CPU time, they
434 reduce the amount of time spent in the serial driver to transmit a
435 given amount of data. Many machines require an interrupt for each
436 character sent or received, and the interrupt handler can take a
437 significant amount of CPU time. So the increase in CPU load isn't as
438 great as you might think. My measurements indicate that a system with
439 a 33MHz 486 CPU should be able to do Deflate compression for serial
440 link speeds of up to 100kb/s or more. It depends somewhat on the type
441 of data, of course; for example, when compressing a string of nulls
442 with Deflate, it's hard to get a high output data rate from the
443 compressor, simply because it compresses strings of nulls so well that
444 it has to eat a very large amount of input data to get each byte of
448 ------------------------------------------------------------------------
450 Q: I get messages saying "Unsupported protocol (...) received". What do
453 A: If you only get one or two when pppd starts negotiating with the
454 peer, they mean that the peer wanted to negotiate some PPP protocol
455 that pppd doesn't understand. This doesn't represent a problem, it
456 simply means that there is some functionality that the peer supports
457 that pppd doesn't, so that functionality can't be used.
459 If you get them sporadically while the link is operating, or if the
460 protocol numbers (in parentheses) don't correspond to any valid PPP
461 protocol that the peer might be using, then the problem is probably
462 that characters are getting corrupted on the receive side, or that
463 extra characters are being inserted into the receive stream somehow.
464 If this is happening, most packets that get corrupted should get
465 discarded by the FCS (Frame Check Sequence, a 16-bit CRC) check, but a
466 small number may get through.
468 One possibility may be that you are receiving broadcast messages on
469 the remote system which are being sent over your serial link. Another
470 possibility is that your modem is set for XON/XOFF (software) flow
471 control and is inserting ^Q and ^S characters into the receive data
475 ------------------------------------------------------------------------
477 Q: I get messages saying "Protocol-Reject for unsupported protocol ...".
480 A: This is the other side of the previous question. If characters are
481 getting corrupted on the way to the peer, or if your system is
482 inserting extra bogus characters into the transmit data stream, the
483 peer may send protocol-reject messages to you, resulting in the above
484 message (since your pppd doesn't recognize the protocol number
488 ------------------------------------------------------------------------
490 Q: I get a message saying something like "ioctl(TIOCSETD): Operation
491 not permitted". How do I fix this?
493 A: This is because pppd is not running as root. If you have not
494 installed pppd setuid-root, you will have to be root to run it. If
495 you have installed pppd setuid-root and you still get this message, it
496 is probably because your shell is using some other copy of pppd than
497 the installed one - for example, if you are in the pppd directory
498 where you've just built pppd and your $PATH has . before /usr/sbin (or
499 wherever pppd gets installed).
502 ------------------------------------------------------------------------
504 Q: Has your package been ported to HP/UX or IRIX or AIX?
506 A: No. I don't have access to systems running HP/UX or AIX. No-one
507 has volunteered to port it to HP/UX. I had someone who did a port for
508 AIX 4.x, but who is no longer able to maintain it. And apparently AIX
509 3.x is quite different, so it would need a separate port.
511 IRIX includes a good PPP implementation in the standard distribution,
515 ------------------------------------------------------------------------
517 Q: Under SunOS 4, when I try to modload the ppp modules, I get the
518 message "can't open /dev/vd: No such device".
520 A: First check in /dev that there is an entry like this:
522 crw-r--r-- 1 root 57, 0 Oct 2 1991 vd
524 If not, make one (mknod /dev/vd c 57 0). If the problem still exists,
525 probably your kernel has been configured without the vd driver
526 included. The vd driver is needed for loadable module support.
528 First, identify the config file that was used. When you boot your
529 machine, or if you run /etc/dmesg, you'll see a line that looks
532 SunOS Release 4.1.3_U1 (CAP_XBOX) #7: Thu Mar 21 15:31:56 EST 1996
534 this is the config file name
536 The config file will be in the /sys/`arch -k`/conf directory (arch -k
537 should return sun4m for a SparcStation 10, sun3x for a Sun 3/80,
538 etc.). Look in there for a line saying "options VDDRV". If that line
539 isn't present (or is commented out), add it (or uncomment it).
541 You then need to rebuild the kernel as described in the SunOS
542 manuals. Basically you need to run config and make like this:
544 /usr/etc/config CAP_XBOX
548 (replacing the string CAP_XBOX by the name of the config file for your
551 Then copy the new kernel to /:
553 mv /vmunix /vmunix.working
556 and reboot. Modload should then work.
559 ------------------------------------------------------------------------
561 Q: I'm running Linux (or NetBSD or FreeBSD), and my system comes with
562 PPP already. Should I consider installing this package? Why?
564 A: The PPP that is already installed in your system is (or is derived
565 from) some version of this PPP package. You can find out what version
566 of this package is already installed with the command "pppd --help".
567 If this is older than the latest version, you may wish to install the
568 latest version so that you can take advantage of the new features or
572 ------------------------------------------------------------------------
574 Q: I'm running pppd in demand mode, and I find that pppd often dials
575 out unnecessarily when I try to make a connection within my local
576 machine or with a machine on my local LAN. What can I do about this?
578 A: Very often the cause of this is that a program is trying to contact
579 a nameserver to resolve a hostname, and the nameserver (specified in
580 /etc/resolv.conf, usually) is on the far side of the ppp link. You
581 can try executing a command such as `ping myhost' (where myhost is the
582 name of the local machine, or some other machine on a local LAN), to
583 see whether that starts the ppp link. If it does, check the setup of
584 your /etc/hosts file to make sure you have the local machine and any
585 hosts on your local LAN listed, and /etc/resolv.conf and/or
586 /etc/nsswitch.conf files to make sure you resolve hostnames from
587 /etc/hosts if possible before trying to contact a nameserver.
590 ------------------------------------------------------------------------
592 Q: Since I installed ppp-2.3.6, dialin users to my server have been
593 getting this message when they run pppd:
595 peer authentication required but no suitable secret(s) found for
596 authenticating any peer to us (ispserver)
598 A: In 2.3.6, the default is to let an unauthenticated peer only use IP
599 addresses to which the machine doesn't already have a route. So on a
600 machine with a default route, everyone has to authenticate. If you
601 really don't want that, you can put `noauth' in the /etc/ppp/options
602 file. Note that there is then no check on who is using which IP
603 address. IMHO, this is undesirably insecure, but I guess it may be
604 tolerable as long as you don't use any .rhosts files or anything like
605 that. I recommend that you require dialin users to authenticate, even
606 if just with PAP using their login password (using the `login' option
607 to pppd). If you do use `noauth', you should at least have a pppusers
608 group and set the permissions on pppd to allow only user and group to
611 ------------------------------------------------------------------------
613 Q: When running pppd as a dial-in server, I often get the message
614 "LCP: timeout sending Config-Requests" from pppd. It seems to be
615 random, but dial-out always works fine. What is wrong?
617 A: Most modern modems auto-detects the speed of the serial line
618 between the modem and the computer. This auto-detection occurs when
619 the computer sends characters to the modem, when the modem is in
620 command mode. It does not occur when the modem is in data mode.
621 Thus, if you send commands to the modem at 2400 bps, and then change
622 the serial port speed to 115200 bps, the modem will not detect this
623 change until something is transmitted from the computer to the modem.
624 When running pppd in dial-in mode (i.e. without a connect script),
625 pppd sets the speed of the serial port, but does not transmit
626 anything. If the modem was already running at the specified speed,
627 everything is fine, but if not, you will just receive garbage from the
628 modem. To cure this, use an init script such as the following:
630 pppd ttyS0 115200 modem crtscts init "chat '' AT OK"
632 To reset the modem and enable auto-answer, use:
634 pppd ttyS0 115200 modem crtscts init "chat '' ATZ OK ATS0=1 OK"