ce51d7b74616ce3db7019ba4a3f7bef029124b71
[ppp.git] / README.linux
1 PPP for Linux                                             Version 2.2.0
2 =============                                                  based on
3                                                               ppp-2.2.0
4                                                                Mar 1995
5
6 Michael Callahan    callahan@maths.ox.ac.uk
7 Al Longyear         longyear@netcom.com
8
9   Contents:
10     INTRODUCTION
11     CREDITS
12     CHANGES FROM THE PREVIOUS VERSION
13     FUTURE PLANS
14     INSTALLATION
15     GENERAL NETWORK CONFIGURATION
16     CONNECTING TO A PPP SERVER
17     IF IT WORKS
18     IF IT DOESN'T WORK
19     IF IT STILL DOESN'T WORK (OR, BUG REPORTS)
20     DYNAMIC ADDRESS ASSIGNMENT
21     SETTING UP A MACHINE FOR INCOMING PPP CONNECTIONS
22     SETTING UP A MACHINE FOR INCOMING PPP CONNECTIONS WITH DYNAMIC IP
23     ADDITIONAL INFORMATION
24     DIP SUPPORT
25     CONCLUSION
26
27
28 INTRODUCTION
29
30 This file is substantially derived from the previous version for
31 the pppd process 2.2.0. Michael Callahan wrote that version. This
32 particular version was written, modified, hacked, changed, whatever,
33 by Al Longyear. If you find errors in this document, they are probably
34 mine and not Michael's.
35
36 This is a PPP driver for Linux.  It has been used by many people and
37 seems to be quite stable.  It is capable of being used either as a
38 'client'--for connecting a Linux machine to a local Internet provider,
39 for example--or as a 'server'--allowing a Linux machine with a modem
40 and an Ethernet connection to the Internet to provide dial-in PPP
41 links.  (In fact, the PPP protocol does not make the distinction
42 between client and server, but this is the way people often think
43 about it.)
44
45 The PPP protocol consists of two parts.  One is a scheme for framing
46 and encoding packets, the other is a series of protocols called LCP,
47 IPCP, UPAP and CHAP, for negotiating link options and for
48 authentication.  This package similarly consists of two parts: a
49 kernel module which handles PPP's low-level framing protocol, and a
50 user-level program called pppd which implements PPP's negotiation
51 protocols.
52
53 The kernel module assembles/disassembles PPP frames, handles error
54 detection, and forwards packets between the serial port and either the
55 kernel network code or the user-level program pppd.  IP packets go
56 directly to the kernel network code.  So once pppd has negotiated the
57 link, it in practice lies completely dormant until you want to take
58 the link down, when it negotiates a graceful disconnect.
59
60
61 CREDITS
62
63 I (MJC) wrote the original kernel driver from scratch.  Laurence
64 Culhane and Fred van Kempen's slip.c was priceless as a model (a
65 perusal of the files will reveal that I often mimicked what slip.c
66 did).  Otherwise I just implemented what pppd needs, using RFC1331 as
67 a guide.  For the most part, the Linux driver provides the same
68 interface as the free 386BSD and SunOS drivers.  The exception is that
69 Linux has no support for asynchronous I/O, so I hacked an ioctl into
70 the PPP kernel module that provides a signal when packets appear and
71 made pppd use this instead.
72
73 Al Longyear ported version 2.2 of pppd (from the free package
74 ppp-2.2.0) to Linux.  He also provided several enhancements to both
75 the kernel driver and the OS-independent part of pppd.  His
76 contributions to Linux PPP have been immense, and so this release
77 is being distributed over both our names.
78
79 The pppd program comes from the free distribution of PPP for Suns and
80 386BSD machines, maintained by Paul Mackerras.  This package lists
81 "thanks to" Brad Parker, Greg Christy, Drew D. Perkins, Rick Adams and
82 Chris Torek.
83
84 Jim Freeman added the code to support a ppp module and to dynamically
85 extend the number of ppp devices. The Space.c module should not have
86 any devices defined for this logic to work.
87
88
89 CHANGES FROM THE PREVIOUS VERSION
90
91 - The number of devices for the PPP device has been made dynamic. It was
92   previously configured with the default value of four devices.
93
94 - The problems dealing with other systems such as Windows NT and their
95   authenticiation has been corrected. It will now generate the proper
96   responses to allow the system to choose a valid authentication protocol.
97
98 - The kernel debug value has changed. Previously it was a level. It is now
99   a bit map with various bits meaning certain types of debug information.
100
101      0 - No debug information is generated
102      1 - Debug messages
103      2 - Log incoming packets
104      4 - Log outgoing packets
105      8 - Log tty output buffers
106     16 - Log tty input buffers
107
108   If you wish to use any combination, add the values together. For example,
109   '7' will log debug messages and incoming packages and outgoing packets.
110
111   The default setting is 0.
112
113   The simple IP trace which ppp.c performed when 'kdebug' was greater than
114   127 has been removed. You should use tcpdump for this type of trace
115   actions.
116
117 - Support is added for compression control protocol. At the present time
118   only the BSD-Compress compression protocol is supported.
119
120 - There are two queues for output frames. This avoids some problems which
121   occured with the previous version and some PPP packages which exchanged
122   echo frames with Linux.
123
124 - The echo frames are now proper. Previously, it would generate extra
125   characters and this caused some providers to not respond to the 'junk'.
126
127 - The max-echo-failure option will now properly disconnect the line.
128
129 - There are other changes which are listed in the general README file. Please
130   read that file as well for changes.
131
132 - There is no limit to the number of ppp devices which you may use. Jim Freeman
133   has added code to create them upon demand and to re-use the ones which have
134   been closed. There is no code, nor plans to write code, to remove (delete)
135   the un-used devices. So, if your system goes to a spurt and uses 3000 ppp
136   devices, it will remain at that level until you next reload the kernel.
137
138
139 FUTURE PLANS
140
141 The IPX support is still minimal. There is code which will only work with
142 the 1.3 version of the networking software. The pppd process will still
143 require changes to support the IPXCP and a change to the driver to properly
144 enable/disable the IPX frames. Jim Freeman is reportily working on the IPX
145 support.
146
147
148 INSTALLATION
149
150 This version of PPP has been tested on 1.1.x (x>=14) It will probably
151 not work on kernels much earlier than this due to a change in the
152 routing code.  If you have an earlier kernel, please upgrade.
153
154 joining the PPP channel of linux-activists:
155
156       This isn't really part of installation, but if you DO use
157       Linux PPP you should do this.  Send a message with the line
158         subscribe linux-ppp
159       contained in the body to majordomo@vger.rutgers.edu
160
161       You may use
162
163       subscribe linux-ppp myname@mail.address
164
165       if you wish the linux-ppp information sent to a different mail
166       address.
167
168       To leave the mail list, send 'unsubscribe linux-ppp' to the same
169       mail address.
170
171       You can send to the list by mailing to
172       linux-ppp@vger.rutgers.edu. This is a majordomo mailing list and
173       is unlike the earlier version on hut.fi. There is no magic header
174       required for this list. In addition, it is mirrored to the usenet
175       group linux.act.ppp. You may choose to read the few messages posted
176       there.
177
178 Usenet News Groups
179
180       There are three applicable usenet news groups for the PPP code. Please
181       choose the group which applies the closest to the type of problem
182       which you are experiencing.
183
184       comp.os.linux.networking
185        - Trouble setting routes, running name services, using telnet, ftp,
186          news, etc.
187        - It will not compile.
188
189       comp.os.linux.setup
190        - Trouble installing the package from BINARIES only. This does *NOT*
191          include problems with compiling the package.
192
193       comp.protocols.ppp
194        - How do I use the package?
195        - How do I connect to .... services?
196        - Why does this not work?
197        - All other types of questions on how to use just the PPP code.
198
199       PLEASE don't assume that just because you are using PPP as your
200       network device driver that all problems with your networking are a
201       problem of PPP. PPP is *NOT* responsible for your modem disconnecting,
202       routing to other servers, running telnet, etc. Calling the problem
203       'ppp' on usenet may cause it to be ignored by the people who
204       actually work on the networking code.
205
206 Installation procedure:
207
208 The installation procedure has been totally revised for this
209 version. Due to feedback from other users, it was felt that a more
210 automated installation procedure be performed.
211
212 Use the following procedure for all kernel versions. There are six steps
213 numbered one through six. Please do them in order and not skip one.
214
215 1. Issue the command:
216
217 ./configure
218
219 from the top level directory of pppd. This is the directory which
220 contains this README.linux file. The result of this will be to build a
221 set of symbolic links to the makefiles. They should link 'Makefile' to
222 'Makefile.linux' in each of the directories.
223
224 2. Issue the command:
225
226 make kernel
227
228 from the top level directory. This will install the various include
229 files and source files into the proper directory for the linux
230 kernel. If you don't have the kernel installed in the /usr/src/kernel
231 directory then it will not work. Instead it will print a message to
232 the effect that you need to specify the kernel location on the
233 kinstall command.
234
235 The actual message will say:
236
237 There appears to be no kernel source distribution in /usr/src/linux.
238 Give the top-level kernel source directory as the argument to
239 this script.
240 usage: kinstall.sh [linux-source-directory]
241
242 If, and only if, you receive this message, do the following:
243
244    a. Change to the 'linux' directory with the command:
245
246 cd linux
247
248    b. Issue the command:
249
250 ./kinstall.sh /usr/src/linux
251
252 or use the proper location for the kernel rather than
253 /usr/src/linux. For example, if you have the kernel installed in
254 /usr1/kernel then the command would be:
255
256 ./kinstall.sh /usr1/kernel
257
258 The script will validate that the kernel is properly installed into
259 that directory and check the level of the kernel. The installation
260 will not be accepted if your kernel is too early.
261
262 The installation procedure will copy only the files which are
263 needed. It will not replace any file which should not be
264 replaced. Please don't second-guess the installation script and
265 attempt to do the procedure on your own. There are some very subtle
266 dependencies and if you are not careful, the installation will not
267 work.
268
269 You are free to run the installation script as many times as you
270 wish. The additional executions will only change the files which have
271 not been changed.
272
273 3. Build the kernel.
274
275 You must rebuild the kernel with this package. The driver is totally
276 new and will not work with the older daemon and the newer daemon will
277 not work with the older kernel driver. If you don't know how to build
278 a kernel, then you should read the README file in the kernel source
279 directory.
280
281 4. Build the programs.
282
283 The programs are built next. The command to build the programs is fairly
284 simple. Just issue the command:
285
286 make
287
288 from the top level directory where this README.linux file is located.
289
290 5. Install the programs.
291
292 You may use the command
293
294 make install
295
296 to install the various programs. They will be installed into the
297 /usr/lib/ppp directory. You may not like this directory for the
298 executables. The directory name is called BINDIR and is set in the
299 file 'linux/Makefile.linux'.
300
301 6. Reboot to the new kernel.
302
303 After building the new kernel, you will need to actually use it. Reboot
304 the Linux system and you may then use the new pppd program.
305
306
307 GENERAL NETWORK CONFIGURATION
308
309 Since many people don't use the Linux networking code at all until
310 they get a PPP link, this section describes generally what's needed to
311 get things running.  In principle none of this is special to PPP.  For
312 more details, you should consult the relevant Linux HOWTOs.  If you
313 already understand network setup, you can skip this section.
314
315 The first file that requires attention is the rc script that does
316 network configuration at boot time, called /etc/rc.net or
317 /etc/rc.d/rc.net.{1,2} or something similar, depending on your Linux
318 distribution.  This file should 'ifconfig' the loopback interface lo,
319 and should add an interface route for it.  These lines might look
320 something like this:
321
322         $CONFIG lo 127.0.0.1
323         $ROUTE add loopback
324 or
325         /sbin/ifconfig lo 127.0.0.1
326         /sbin/route add 127.0.0.1
327
328 However, it should *not* config an ethernet card or install any other
329 routes (unless you actually have an ethernet card, in which case I'll
330 assume you know what to do).  Many distributions will provide scripts
331 that expect you to have an ethernet card.
332
333 You also need to decide whether you want to allow incoming
334 telnet/ftp/finger, etc.  If so, you should have the rc startup script
335 run the 'inetd' daemon.
336
337 Next, you should set up /etc/hosts to have two lines.  The first
338 should just give the loopback or localhost address and the second
339 should give your own host name and the IP address your PPP connection
340 will use.  For example:
341
342      127.0.0.1   loopback localhost                    # useful aliases
343      192.1.1.17  billpc.president.whitehouse.gov bill  # my hostname
344      192.1.1.23  chelseapc.president.whitehouse.gov chelseapc
345
346 where my IP address is 192.1.1.17 and my hostname is
347 billpc.president.whitehouse.gov.  (Not really, you understand.)  If
348 your PPP server does dynamic IP address assignment, give a guess as to
349 an address you might get (see also "Dynamic Address Assignment"
350 below).
351
352 Finally, you need to configure the domain name system by putting
353 appropriate lines in /etc/resolv.conf .  It should look something like
354 this:
355
356      domain     president.whitehouse.gov
357      search     president.whitehouse.gov  whitehouse.gov
358      nameserver 192.1.2.1
359      nameserver 192.1.2.10
360
361 Assuming there are nameservers at 192.1.2.1 and 192.1.2.10, then when
362 you get connected with PPP, you can reach hosts whose full names are
363 'hillarypc.president.whitehouse.gov' and 'chelseapc.whitehouse.gov' by
364 the names 'hillarypc' and 'chelseapc'.  You can probably find out the
365 right domain name to use and the IP numbers of nameservers from
366 whoever's providing your PPP link.
367
368
369 CONNECTING TO A PPP SERVER
370
371 To use PPP, you invoke the pppd program with appropriate options.
372 Everything you need to know is contained in the pppd(8) manual page.
373 However, it's useful to see some examples:
374
375 Example 1: A simple dial-up connection.
376
377 Here's a command for connecting to a PPP server by modem.
378
379   pppd connect 'chat -v "" ATDT5551212 CONNECT "" ogin: ppp word: whitewater' \
380       /dev/cua1 38400 debug crtscts modem defaultroute 192.1.1.17
381
382 Going through pppd's options in order:
383    connect 'chat etc...'  This gives a command to run to contact the
384     PPP server.  Here the supplied 'chat' program is used to dial a
385     remote computer.  The whole command is enclosed in single quotes
386     because pppd expects a one-word argument for the 'connect' option.
387     The options to 'chat' itself are:
388
389          -v            verbose mode; log what we do to syslog
390          ""            don't wait for any prompt, but instead...
391          ATDT5551212   dial the modem, then
392          CONNECT       wait for answer
393          ""            send a return (null text followed by usual return)
394          ogin: ppp word: whitewater    log in.
395
396    /dev/cua1     specify the callout serial port cua1
397    38400         specify baud rate
398    debug         log status in syslog
399    crtscts       use hardware flow control between computer and modem
400                     (at 38400 this is a must)
401    modem         indicate that this is a modem device; pppd will hang up the
402                     phone before and after making the call
403    defaultroute  once the PPP link is established, make it the default
404                     route; if you have a PPP link to the Internet this
405                     is probably what you want
406
407    192.1.1.17  this is a degenerate case of a general option
408         of the form  x.x.x.x:y.y.y.y  .  Here x.x.x.x is the local IP
409         address and y.y.y.y is the IP address of the remote end of the
410         PPP connection.  If this option is not specified, or if just
411         one side is specified, then x.x.x.x defaults to the IP address
412         associated with the local machine's hostname (in /etc/hosts),
413         and y.y.y.y is determined by the remote machine.  So if this
414         example had been taken from the fictional machine 'billpc',
415         this option would actually be redundant.
416
417 pppd will write error messages and debugging logs to the syslogd
418 daemon using the facility name "daemon". These messages may already be
419 logged to the console or to a file like /usr/adm/messages; consult
420 your /etc/syslog.conf file to see. If you want to make all pppd
421 messages go to the console, add the line
422
423    daemon.*                                     /dev/console
424            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
425            This is one or more tabs. Do not use spaces.
426
427 to syslog.conf; make sure to put one or more TAB characters between
428 the two fields.
429
430 Example 2: Connecting to PPP server over hard-wired link.
431
432 This is a slightly more complicated example.  This is the script I run
433 to make my own PPP link, which is over a hard-wired Gandalf link to an
434 Ultrix machine running Morningstar PPP.
435
436   pppd connect /etc/ppp/ppp-connect defaultroute noipdefault debug \
437       kdebug 0 /dev/cua0 9600
438
439 Here /etc/ppp/ppp-connect is the following script:
440   #!/bin/sh
441   /etc/ppp/sendbreak
442   chat -v -t60 "" \; "service :" blackice ogin: callahan word: PASSWORD \
443       black% "stty -echo; ppp" "Starting PPP now"  && sleep 5
444
445 This sends a break to wake up my terminal server, sends a semicolon
446 (which lets my terminal server do autobaud detection), then says we
447 want the service "blackice".  It logs in, waits for a shell prompt
448 ("black%"), then starts PPP.  The -t60 argument sets the timeout to a
449 minute, since things here are sometimes very slow.
450
451 The "&& sleep 5" causes the script to pause for 5 seconds, unless chat
452 fails in which case it exits immediately.  This is just to give the
453 PPP server time to start (it's very slow).  Also, the "stty -echo"
454 turned out to be very important for me; without it, my pppd would
455 sometimes start to send negotiation packets before the remote PPP
456 server had time to turn off echoing.  The negotiation packets would
457 then get sent back to my local machine, be rejected (PPP is able to
458 detect loopback) and pppd would fail before the remote PPP server even
459 got going.  The "stty -echo" command prevents this confusion.  This
460 kind of problem should only ever affect a *very* few people who
461 connect to a PPP server that runs as a command on a slow Unix machine,
462 but I wanted to mention it because it took me several frustrating
463 hours to figure out.
464
465 The pppd options are mostly familiar.  Two that are new are
466 "noipdefault" and "kdebug 1".  "noipdefault" tells pppd to ask the
467 remote end for the IP address to use; this is necessary if the PPP
468 server implements dynamic IP address assignment as mine does (i.e., I
469 don't know what address I'll get ahead of time).  "kdebug 1" sets the
470 kernel debugging level to 1, enabling slightly chattier messages from
471 the ppp kernel code.
472
473 Anyway, assuming your connection is working, you should see chat dial
474 the modem, then perhaps some messages from pppd (depending on your
475 syslog.conf setup), then some kernel messages like this:
476
477         ppp: channel ppp0 mtu changed to 1500
478         ppp: channel ppp0 open
479         ppp: channel ppp0 going up for IP packets!
480
481 (These messages will only appear if you gave the option "kdebug 1" and
482 have kern.info messages directed to the screen.)  Simultaneously, pppd
483 is also writing interesting things to /usr/adm/messages (or other log
484 file, depending on syslog.conf).
485
486
487 IF IT WORKS
488
489 If you think you've got a connection, there are a number of things you
490 can do to test it.
491
492 First, type
493
494         /sbin/ifconfig
495
496      (ifconfig may live elsewhere, depending on your distribution.)
497 This should show you all the network interfaces that are 'UP'.  ppp0
498 should be one of them, and you should recognize the first IP address
499 as your own and the "P-t-P address" (or point-to-point address) the
500 address of your server.  Here's what it looks like on my machine:
501
502 lo        Link encap Local Loopback  
503           inet addr 127.0.0.1  Bcast 127.255.255.255  Mask 255.0.0.0
504           UP LOOPBACK RUNNING  MTU 2000  Metric 1
505           RX packets 0 errors 0 dropped 0 overrun 0
506           TX packets 0 errors 0 dropped 0 overrun 0
507
508 ppp0      Link encap Point-to-Point Protocol
509           inet addr 192.76.32.2  P-t-P 129.67.1.165  Mask 255.255.255.0
510           UP POINTOPOINT RUNNING  MTU 1500  Metric 1
511           RX packets 33 errors 0 dropped 0 overrun 0
512           TX packets 42 errors 0 dropped 0 overrun 0
513
514 Now, type
515
516         ping z.z.z.z
517
518 where z.z.z.z is the address of your name server.  This should work.
519 Here's what it looks like for me:
520
521   waddington:~$ ping 129.67.1.165
522   PING 129.67.1.165 (129.67.1.165): 56 data bytes
523   64 bytes from 129.67.1.165: icmp_seq=0 ttl=255 time=268 ms
524   64 bytes from 129.67.1.165: icmp_seq=1 ttl=255 time=247 ms
525   64 bytes from 129.67.1.165: icmp_seq=2 ttl=255 time=266 ms
526   ^C
527   --- 129.67.1.165 ping statistics ---
528   3 packets transmitted, 3 packets received, 0% packet loss
529   round-trip min/avg/max = 247/260/268 ms
530   waddington:~$
531
532 Try typing:
533
534         netstat -nr
535
536 This should show three routes, something like this:
537
538 Kernel routing table
539 Destination     Gateway         Genmask         Flags Metric Ref Use    Iface
540 129.67.1.165    0.0.0.0         255.255.255.255 UH    0      0        6 ppp0
541 127.0.0.0       0.0.0.0         255.0.0.0       U     0      0        0 lo
542 0.0.0.0         129.67.1.165    0.0.0.0         UG    0      0     6298 ppp0
543
544 If your output looks similar but doesn't have the destination 0.0.0.0
545 line (which refers to the default route used for connections), you may
546 have run pppd without the 'defaultroute' option.
547
548 At this point you can try telnetting/ftping/fingering whereever you
549 want, bearing in mind that you'll have to use numeric IP addresses
550 unless you've set up your /etc/resolv.conf correctly.
551
552
553 IF IT DOESN'T WORK
554
555 If you don't seem to get a connection, the thing to do is to collect
556 'debug' output from pppd.  To do this, make sure you run pppd with the
557 'debug' option, and put the following two lines in your
558 /etc/syslog.conf file:
559
560     daemon.*                                    /dev/console
561     daemon.*                                    /usr/adm/ppplog
562
563 This will cause pppd's messages to be written to the current virtual
564 console and to the file /usr/adm/ppplog.  Note that the left-hand
565 field and the right-hand field must be separated by at least one TAB
566 character.  After modifying /etc/syslog.conf, you must execute the
567 command 'kill -HUP <pid>' where <pid> is the process ID of the
568 currently running syslogd process to cause it to re-read the
569 configuration file.
570
571 Some messages to look for: 
572   - "pppd[NNN]: Connected..." means that the "connect" script has
573     completed successfully.  
574   - "pppd[NNN]: sent [LCP ConfReq"... means that pppd has attempted to
575     begin negotiation with the remote end.  
576   - "pppd[NNN]: recv [LCP ConfReq"... means that pppd has received a
577     negotiation frame from the remote end.
578   - "pppd[NNN]: ipcp up" means that pppd has reached the point where
579     it believes the link is ready for IP traffic to travel across it.
580
581 If you never see a "recv" message then there may be serious problems
582 with your link.  (For example, the link may not be passing all 8
583 bits.)  If that's the case, it would be useful to collect a debug log
584 which contains all the bytes being passed between your computer and
585 the remote PPP server.  To do this, alter your syslog.conf lines to
586 look like this
587
588     daemon.*,kern.*                             /dev/console
589     daemon.*,kern.*                             /usr/adm/ppplog
590
591 and HUP the syslog daemon as before.  Then, run pppd with the option
592 "kdebug 25".  Whatever characters arrive over the PPP terminal line
593 will appear in the debugging output.
594
595 Occasionally you may see a message like
596
597    ppp_toss: tossing frame, reason = 4
598
599 The PPP code is throwing away a packet ("frame") from the remote
600 server because of a serial overrun.  This means your CPU isn't able to
601 read characters from the serial port as quickly as they arrive; the
602 best solution is to get a 16550A serial chip, which gives the CPU some
603 grace period.  Reasons other than 4 indicate other kinds of serial
604 errors, which should not occur.
605
606 During the initial connection sequence, you may see one or more
607 messages which indicate "bad fcs".  This refers to a checksum error in
608 a received PPP frame, and usually occurs at the start of a session
609 when the peer system is sending some "text" messages, such as "hello
610 this is the XYZ company".  Messages of "bad fcs" once the link is
611 established and the routes have been added are not normal and indicate
612 transmission errors or noise on the telephone line.
613
614
615 IF IT STILL DOESN'T WORK (OR, BUG REPORTS)
616
617 If you're still having difficulty, send the linux-ppp list a bug
618 report. It is extremely important to include as much information as
619 possible; for example:
620
621  - the version number of the kernel you are using
622  - the version number of Linux PPP you are using
623  - the exact command you use to start the PPP session
624  - log output from a session run with the 'debug' option, captured
625    using daemon.*,kern.* in your syslog.conf file
626  - the type of PPP peer that you are connecting to (eg, Xyzzy Corp
627    terminal server, Morningstar PPP software, etc)
628  - the kind of connection you use (modem, hardwired, etc...)
629
630
631 DYNAMIC ADDRESS ASSIGNMENT
632
633 You can use Linux PPP with a PPP server which assigns a different IP
634 address every time you connect. This action is automatically performed
635 when you don't have a local IP address.
636
637   pppd connect 'chat -v "" ATDT5551212 CONNECT "" ogin: ppp word: whitewater' \
638       /dev/cua1 38400 noipdefault debug crtscts modem defaultroute
639
640 The noipdefault, added to the above example, suppresses the attempts
641 of pppd to deduce its own IP address by looking it up in the
642 /etc/hosts file. Since the process does not have an IP address, one
643 will be assigned to it from the configuration file on the remote
644 system.
645
646 Sometimes you may get an error message like "Cannot assign requested
647 address" when you use a Linux client (for example, "talk").  This
648 happens when the IP address given in /etc/hosts for our hostname
649 differs from the IP address used by the PPP interface.  The solution
650 is to use ifconfig ppp0 to get the interface address and then edit
651 /etc/hosts appropriately.
652
653
654 SETTING UP A MACHINE FOR INCOMING PPP CONNECTIONS
655
656 Suppose you want to permit another machine to call yours up and start
657 a PPP session.  This is possible using Linux PPP.
658
659 One way is to create an account named, say, 'ppp', with the login
660 shell being a short script that starts pppd.  For example, the passwd
661 entry might look like this:
662
663   ppp:(encrypted password):102:50:PPP client login:/home/ppp:/usr/sbin/pppd
664
665 In addition, you would edit the file ~ppp/.ppprc to have the following
666 pieces of information:
667
668 -detach
669 modem
670 crtscts
671 lock
672 :192.1.2.23
673
674 Here we will insist that the remote machine use IP address 192.1.2.23,
675 while the local PPP interface will use the IP address associated with
676 this machine's hostname in /etc/hosts.  The '-detach' option is required
677 for a server. It tells the pppd process not to terminate until the modem
678 is disconnected. Should it fork, the init process would restart the getty
679 process and the this would cause a severe conflict over the port.
680
681 The 'modem' option indicates that the connection is via a switched circuit
682 (using a modem) and that the pppd process should monitor the DCD signal
683 from the modem.
684
685 The 'crtscts' option tells the pppd process to use hardware RTS/CTS flow
686 control for the modem.
687
688 The 'lock' option tells pppd to lock the tty device. This will use the UUCP
689 style locking file in the lock directory.
690
691 This setup is sufficient if you just want to connect two machines so
692 that they can talk to one another.  If you want to use Linux PPP to
693 connect a single machine to an entire network, or to connect two
694 networks together, then you need to arrange for packets to be routed
695 from the networks to the PPP link.  Setting up a link between networks
696 is beyond the scope of this document; you should examine the routing
697 options in the manual page for pppd carefully and find out about
698 routed, etc.
699
700 Let's consider just the first case.  Suppose you have a Linux machine
701 attached to an Ethernet, and you want to allow its PPP peer to be able
702 to communicate with hosts on that Ethernet.  To do this, you should
703 have the remote machine use an IP address that would normally appear
704 to be on the local Ethernet segment and you should give the 'proxyarp'
705 option to pppd on the server.  Suppose, for example, we have this
706 setup:
707
708  192.1.2.23                        192.1.2.17
709 +-----------+      PPP link       +----------+
710 | chelseapc | ------------------- |  billpc  |
711 +-----------+                     +----------+
712                                         |           Ethernet 
713                             ----------------------------------- 192.1.2.x 
714
715 Here the PPP and Ethernet interfaces of billpc will have IP address
716 192.1.2.17.  (It's OK for one or more PPP interfaces on a machine to
717 share an IP address with an Ethernet interface.)  There is an
718 appropriate entry in /etc/passwd on billpc to allow chelseapc to call
719 in. It will run pppd when the user signs on to the system and pppd will
720 take the options from the user option file.
721
722 In addition, you would edit the file ~ppp/.ppprc to have the following
723 piece of information:
724
725 -detach
726 modem
727 crtscts
728 lock
729 192.1.2.17:192.1.2.23
730 proxyarp
731
732 When the link comes up, pppd will enter a "proxy arp" entry for
733 chelseapc into the arp table on billpc.  What this means effectively
734 is that billpc will pretend to the other machines on the 192.1.2.x
735 Ethernet that its Ethernet interface is ALSO the interface for
736 chelseapc (192.1.2.23) as well as billpc (192.1.2.17).  In practice
737 this means that chelseapc can communicate just as if it was directly
738 connected to the Ethernet.
739
740
741 SETTING UP A MACHINE FOR INCOMING PPP CONNECTIONS WITH DYNAMIC IP
742
743 The use of dynamic IP assignments is not much different from that
744 using static IP addresses. Rather than putting the IP address into the
745 single file ~ppp/.ppprc, you would put the IP address for each of the
746 incoming terminals into the /etc/ppp/options.tty files. ('tty' is the
747 name of the tty device. For example /etc/ppp/options.ttyS0 is used for
748 the /dev/ttyS0 device.)
749
750 To each of the serial devices, you would attach a modem. To the
751 modems, attach the telephone lines. Place all of the telephone lines
752 into a hunt group so that the telephone system will select the
753 non-busy telephone and subsequently, the modem. By selecting the
754 modem, the user will select a tty device and the tty device will
755 select the IP address. Run a getty process against the tty device such
756 as /dev/ttyS0.
757
758 (The general consensus among the users is that you should *not* use
759 the agetty process to monitor a modem. Use either getty_ps' uugetty
760 process or mgetty from the mgetty+sendfax package.)
761
762
763 SECURITY CONCERNS ABOUT INCOMING PPP CONNECTIONS
764
765 The following security should be considered with the ppp connections.
766
767 1. Never put the pppd program file into the /etc/shells file. It is not
768 a legal shell for the general user. In addition, if the shell is missing
769 from the shells file, the ftpd process will not allow the user to access
770 the system via ftp. You would not want Joe Hacker using the ppp account
771 via ftp.
772
773 2. Ensure that the directory /etc/ppp is owned by 'root' and permits
774 only write access to the root user.
775
776 3. The files /etc/ppp/options must be owned by root and accessible only
777 from that user. Never permit any other user access to this file.
778
779 4. The files /etc/ppp/ip-up and /etc/ppp/ip-down will be executed by the
780 pppd process while it is root. Ensure that these files are writable only
781 from the root user.
782
783 5. If you use an incoming PPP connection, you should do the following as
784 the root user:
785
786 a) Invalidate the files for rhosts and forward
787 rm -f     ~ppp/.rhosts ~ppp/.forward
788 touch     ~ppp/.rhosts ~ppp/.forward
789 chmod 444 ~ppp/.rhosts ~ppp/.forward
790
791 b) Prevent users from sending mail to the user 'ppp'.
792
793 This is best performed by creating a system alias 'ppp' and have it
794 point to the name "THIS_USER_CANNOT_RECEIVE_MAIL". It has no special
795 meaning other than the obvious one.
796
797 For sendmail, the sequence is fairly easy. Edit the /etc/aliases file
798 and add the line:
799
800 ppp:THIS_USER_CANNOT_RECEIVE_MAIL
801
802 Then run the sendmail program with the option '-bi' to rebuild the
803 alias database.
804
805 c) Secure the ppp file properly.
806 chown root ~ppp/.ppprc
807 chmod 444  ~ppp/.ppprc
808
809 You may wish to extend the security by creating a group 'ppp' and putting
810 the ppp user into that group, along with the binaries for pppd and pppstats.
811 Then you may secure the binaries so that they are executable from the owner
812 (which should be root) and the group only. All other users would be denied
813 all access to the files and executables.
814
815
816 ADDITIONAL INFORMATION
817
818 Besides this document, additional information may be found in:
819
820 - The file README in the source package
821 - The PPP-HOWTO on sunsite.unc.edu
822 - The Net-2-HOWTO on sunsite.unc.edu
823 - The Network Administration Guide published by O'Rielly and Associates
824
825 Please consult these sources of information should you have questions
826 about the program. If you still can not find your answer then ask either
827 the usenet news groups or the mail list.
828
829
830
831 DIP SUPPORT
832
833 The dip program used by Linux is not directly supported by the PPP
834 package as such. Please don't ask the PPP porting group questions
835 about dip. It does work in two areas.
836
837 1. If you use it as a parameter to 'connect' then you can use the scripting
838    language and establish the connection. You would use the standard set of
839    PPP options.
840
841 2. dip-3.3.7m-uri and later versions support a 'mode ppp' function
842    which will invoke the pppd program. That is all that it does. It will
843    not pass any parameters to pppd other than its required '-detach' to
844    allow dip to detect the normal termination of pppd.
845
846    The following information comes from John Phillips in an article which he
847    posted to comp.os.linux.setup.
848
849 Assuming that you already know how dip supports SLIP, these points 
850 are relative to a working SLIP set-up.
851
852 1.  You need dip-3.3.7m-uri, and, of course, PPP compiled into the
853 kernel.
854
855 2.  Make sure pppd is where dip thinks it is: /usr/lib/ppp/pppd, or 
856 make a link from there to where pppd really is.  (Or re-compile dip 
857 to tell it where pppd is on your system - see pathnames.h).
858
859 3.  The key differences between the dip script for PPP, compared to one 
860 for SLIP are:
861
862     a.  Use "mode PPP" instead of "mode SLIP"
863
864     b.  Don't set certain options such as mtu and default - these are set 
865     by pppd from the file /etc/ppp/options.  Mine looks like this:
866
867         crtscts
868         modem
869         defaultroute
870         asyncmap 0x00000000
871         mru 576
872         mtu 576
873
874     The actual parameters and values may depend on your IP supplier 
875     and his set-up.
876
877     c. Tell your IP supplier's start-up code to use ppp, not slip:  I
878     use "send nolqm,idle=240\n" instead of "send slip,idle=240,mru=576\n" 
879     at the "protocol: " prompt.  ("nolqm" asks for ppp without the line 
880     quality monitoring protocol, which is not - I think - supported in 
881     Linux PPP.)  This prompt may be different (or absent) with another 
882     IP supplier.
883
884     d. You don't need "get $local <name>", since the ppp protocol 
885     negotiates this at start-up.  You still need "get $remote <name>".  
886     (This may also vary with IP supplier - you may need to set some 
887     more parameters in /etc/ppp/options to work with yours - see "man 
888     pppd" for details of the options supported by pppd.)
889
890 4.  The dip script will exit after dialling and starting up pppd.  When 
891 ppp negotiation is completed and IP comes up, pppd runs /etc/ppp/ip-up.  
892 This file can contain things you want to run when the network comes up 
893 (e.g. running the mail queue).
894
895 5.  When IP goes down (e.g. after you close down the link with "dip -k"), 
896 pppd runs /etc/ppp/ip-down, which can contain things you want to do on 
897 close-down.
898
899
900
901 CONCLUSION
902
903 Good luck!
904
905 Al and Michael