home *** CD-ROM | disk | FTP | other *** search
/ PC World 1999 August / PCWorld_1999-08_cd.bin / doc / HOWTO / unmaintained / mini / Dial-On-Demand < prev    next >
INI File  |  1998-08-04  |  15KB  |  583 lines

  1. [ 6 January 1998
  2.   The Linux Dial-On-Demand mini-HOWTO is not being maintained by
  3.   the author any more.  If you are interested in maintaining the
  4.   Dial-On-Demand mini-HOWTO, please get in touch with me at
  5.   <gregh@sunsite.unc.edu>. 
  6.  
  7. NOTE:  The "idle-disconnect" is *no* longer a working option.  This
  8.        option has changed and is now "idle".]
  9.  
  10. Dial-On-Demand mini-HOWTO
  11. Rodney.van.den.Oever@tip.nl
  12. Version 1.0, 28 July 1996 / updated and submitted 29 february 1997
  13.  
  14.  
  15. Introduction:
  16.  
  17. This document describes how to do dial-on-demand dialling and how to use a
  18. Linux host connected to a private local network as a dial-on-demand
  19. PPP-router.
  20.  
  21. The kerneld-mini-HOWTO already describes how kerneld can execute a
  22. 'request-route' script, I'd like to describe a working setup in more detail.
  23.  
  24. If you have a small network at home, this is a very elegant way to provide
  25. transparent Internet-access for a couple of other machines.
  26.  
  27.  
  28. ______________________________
  29. __|__                  ___|___
  30. |     | local network  |       |   ______  PPP-link to provider
  31. | PC  |  192.168.1.0   | Linux |--|modem |------------------>
  32. |     |                | Router|  |______|      x.x.x.x
  33. |_____|                |_______|          (dynamic IP-address)
  34.                          named
  35.                          pppd
  36.  
  37. This setup requires:
  38.  
  39. * Kernel 2.0.0 or later.
  40. * ppp-2.2.0f.tar.gz or later
  41. * modules-2.0.0.tar.gz or later
  42. * ipfwadm-2.3.tar.gz (http://www.xos.nl/linux/ipfwadm)
  43.  
  44.  
  45. The following steps need to be taken:
  46.  
  47. 1. Kernel Configuration
  48. 2. Modules Installation
  49. 3. PPP Installation
  50. 4. Serial Port and Modem Configuration
  51. 5. PPP Configuration
  52. 6. Dial-On-Demand
  53. 7. Network Configuration
  54. 8. Masquerading configuration
  55. 9. Workstation configuration
  56.  
  57. ----------------------------------------------------------------------------
  58.  
  59. ---
  60.  
  61.  
  62. 1. Kernel Configuration:
  63.  
  64. First we need to compile a kernel with kerneld, ppp and IP-masquerading
  65. support.
  66. I'll only show the options required for this setup, other options like
  67. firewall
  68. logging or transparent proxying can be turned on, but are not required:
  69.  
  70. cd /usr/src/linux
  71. make config (or make menuconfig)
  72.  
  73. * Code maturity level options
  74. *
  75. Prompt for development and/or incomplete code/drivers (CONFIG_EXPERIMENTAL)
  76.  
  77. [Y/n/?]
  78.  
  79. * Loadable module support
  80. *
  81. Enable loadable module support (CONFIG_MODULES) [Y/n/?]
  82. Set version information on all symbols for modules (CONFIG_MODVERSIONS)
  83. [N/y/?]
  84. Kernel daemon support (e.g. autoload of modules) (CONFIG_KERNELD) [Y/n/?]
  85. *
  86. Networking support (CONFIG_NET) [Y/n/?]
  87. *
  88. * Networking options
  89. *
  90. Network firewalls (CONFIG_FIREWALL) [Y/n/?]
  91. TCP/IP networking (CONFIG_INET) [Y/n/?]
  92. IP: forwarding/gatewaying (CONFIG_IP_FORWARD) [Y/n/?]
  93. IP: firewalling (CONFIG_IP_FIREWALL) [Y/n/?]
  94. IP: masquerading (EXPERIMENTAL) (CONFIG_IP_MASQUERADE) [Y/n/?]
  95. *
  96. * Protocol-specific masquerading support will be built as modules.
  97. *
  98. IP: always defragment (CONFIG_IP_ALWAYS_DEFRAG) [Y/n/?]
  99. IP: optimize as router not host (CONFIG_IP_ROUTER) [Y/n/?]
  100. *
  101. * Network device support
  102. *
  103. Network device support (CONFIG_NETDEVICES) [Y/n/?]
  104. *
  105. PPP (point-to-point) support (CONFIG_PPP) [M/n/y/?]
  106. *
  107. * CCP compressors for PPP are only built as modules.
  108. *
  109. Ethernet (10 or 100Mbit) (CONFIG_NET_ETHERNET) [Y/n/?]
  110. NE2000/NE1000 support (CONFIG_NE2000) [Y/m/n/?]
  111.  
  112.  
  113. The latter option depends of course on the netword card used!
  114.  
  115.  
  116. Compile the kernel with:
  117.  
  118. make zlilo
  119. make modules
  120. make modules_install
  121.  
  122. If you don't use LILO, copy /usr/src/linux/arch/i386/boot/zImage to the
  123. proper
  124. location for your setup.
  125. The modules are installed in /lib/modules/x.x.x, Where x.x.x reflects the
  126. version-number of your kernel.
  127.  
  128. ----------------------------------------------------------------------------
  129.  
  130. ---
  131.  
  132.  
  133. 2. Modules Installation:
  134.  
  135. The following module-utilities are required:
  136.  
  137. /sbin/insmode           Loads module requested
  138. /sbin/rmmod             Removes module no longer needed
  139. /sbin/depmod            Creates depedencies
  140. /sbin/kerneld           Kerneld extension to load modules automatically
  141.  
  142. If you don't have these yet, install 'm by:
  143.  
  144. cd /usr/src
  145. tar zxf modules-2.0.0.tar.gz
  146. make install
  147.  
  148. To load kerneld at startup we need to edit /etc/rc.d/rc.S or create a
  149. seperate
  150. script rc.modules which is called from rc.S. Add or change the following
  151. lines:
  152.  
  153. /etc/rc.d/rc.modules:
  154.  
  155. if [ ! -f /lib/modules/`uname -r`/modules.dep ] ; then
  156.         echo "Updating module dependencies for Linux `uname -r`:"
  157.         /sbin/depmod -a
  158. fi
  159.  
  160. [ -x /sbin/kerneld ] && /sbin/kerneld
  161.  
  162.  
  163. The first part checks for the module-dependencies and creates them if they
  164. don't
  165. exist yet.
  166.  
  167. ----------------------------------------------------------------------------
  168.  
  169. ---
  170.  
  171.  
  172. 3. PPP Installation:
  173.  
  174. The following stuff is required to setup a PPP-link:
  175.  
  176. /usr/sbin/pppd            PPP-daemon
  177. /usr/sbin/pppstats        PPP-statistics
  178. /usr/sbin/chat            Execution of scripts
  179.  
  180. Install these by:
  181.  
  182. cd /usr/src
  183. tar zxf ppp-2.2.0f.tar.gz
  184. cd ppp-2.2.0f
  185. ./configure
  186. make kernel
  187.  
  188. Since later kernels already include the PPP-code, 'make kernel' won't
  189. replace
  190. anything. Check the README and Makefile for shadow-support (if you also
  191. want to
  192. dial-in to this host) and other options. Then do:
  193.  
  194. make
  195. make install
  196.  
  197. ----------------------------------------------------------------------------
  198.  
  199. ---
  200.  
  201.  
  202. 4. Serial port and modem configuration:
  203.  
  204. This setup requires a modem. Serial port setup is done in /etc/rc.d/rc.seria
  205.  
  206. l:
  207.  
  208. ${SETSERIAL} /dev/cua0 uart 16450 port 0x3F8 irq 4
  209. ${SETSERIAL} /dev/cua1 uart 16550A port 0x2F8 irq 3 spd_vhi
  210.  
  211. In this setup COM1 is used by the mouse and COM2 by an internal 28k8
  212. modem.
  213. The spd_vhi-parameter replace the 38400 bps-entry in the speeds-table with
  214. 115200.
  215. Likewise, spd_hi replaces this by 57600.
  216.  
  217. Use spd_vhi with a 28k8 modem and spd_hi with a 14k4 modem, but start with
  218. 38400,
  219. just to be on the safe side.
  220.  
  221. You can check your modem setup by running 'minicom' or some other terminal
  222. program.
  223. Your modem should echo the characters typed. Use Ctrl-A, P to change the
  224. communication parameters. Check if it still works at 57600 or 115200 bps.
  225. Entering 'ATZ' should return 'OK'. Use Ctrl-A X to leave minicom.
  226.  
  227. Minicom can also be used to dial your provider manually. Make a note of
  228. what you
  229. need to enter to setup the link and what the response are from the remote
  230. server.
  231. If your provider doesn't use PAP or CHAP you probably need to enter a
  232. username and
  233. password and possibly enter a command to setup the link in PPP-mode.
  234.  
  235. ----------------------------------------------------------------------------
  236.  
  237. ---
  238.  
  239.  
  240. 5. PPP Configuration:
  241.  
  242. pppd searches /etc/ppp for scripts and the file 'options'.
  243.  
  244. /etc/ppp/options:
  245.  
  246. /dev/modem 38400 crtscts modem noipdefault defaultroute idle-disconnect
  247. 120
  248.  
  249. Meaning:
  250.  
  251. /dev/modem      In my setup a link to /dev/cua1.
  252. 38400           Gets replaced by 115200 (spd_vhi-parameter in
  253. /etc/rc.d/rc.serial)
  254. crtscts         Hardware handshake, RTS/CTS, don't use Xon-Xoff-handshaking!
  255.  
  256.  
  257. noipdefault     The IP-address is assigned automatically.
  258. defaultroute    This sets the default route to the PPP-interface when the
  259. link is up.
  260. idle-disconnect PPP-2.2.0f automatically disconnects an idle link after
  261. 120
  262. seconds.
  263.  
  264. Now we need to create a script, just name it 'default', meaning the ISP
  265. you
  266. normally
  267. use. If you want to make other connections too, creates differents scripts
  268. for these
  269. sites and name them with the remote IP-address.
  270.  
  271. /etc/ppp/default:
  272.  
  273. "" ats11=55dtXXXXXXXX CONNECT "" rname: UUUUU sword: PPPPP > ppp
  274.  
  275.  
  276. Meaning:
  277.  
  278. ats11=55        shortens the duration of the dial tones to speed up
  279. dialing.
  280. XXXXXXXX        Enter the phone-number for your provider here.
  281. CONNECT         chat waits for your modem to return 'CONNECT'.
  282. rname:          chat waits for 'rname', and enters 'UUUUU'
  283. sword:          chat waits for 'sword', and then enters 'PPPPP'.
  284.  
  285. Replace 'UUUUU' and 'PPPPP' by your username and password. I use 'rname'
  286. and
  287. 'sword' because sometimes the first letter gets missed or could be upper-
  288. or
  289. lowercase and language-dependent. Some ISP's require you to enter 'ppp'
  290. after
  291. your enter the username and password, so I wait for the last character of
  292. the
  293. routerprompt ('>').
  294.  
  295. If you get errors like 'serial line looped back' or 'serial line not 8-bit
  296. clean'
  297. the link is not yet in PPP-mode.
  298.  
  299. This command is long enough to place it in a small script:
  300.  
  301. /etc/ppp/ppp:
  302.  
  303. #!/bin/sh
  304. /usr/sbin/pppd connect '/usr/sbin/chat -v -f /etc/ppp/default'
  305.  
  306. You should now be able to connect to your ISP, you might add the 'debug'
  307. parameter
  308. to the /etc/ppp/options-file, make sure you increase the loglevel of
  309. syslogd to
  310. see whats going on:
  311.  
  312. /etc/syslog.conf
  313. *.debug                                 /var/log/messages
  314.  
  315. If you edit syslog.conf be sure to notify syslogd about this change.
  316. Depending on
  317. the location of its PID-file, do:
  318.  
  319. kill -1 `cat /var/run/syslog.pid`
  320.  
  321. or
  322.  
  323. kill -1 `cat /etc/syslog.pid`
  324.  
  325.  
  326. After the connection is made, check with 'ifconfig' for the existing of a
  327. 'ppp0'-
  328. interface. Check your default route with 'netstat -r', it should point to
  329. your ISP.
  330. Try pinging a remote server, e.g. your providers nameserver.
  331.  
  332. If this works you could add this nameserver to your /etc/resolv.conf:
  333.  
  334. search your.isp.domain
  335. nameserver x.x.x.x
  336.  
  337. ----------------------------------------------------------------------------
  338.  
  339. ---
  340.  
  341.  
  342. 6. Dial-on-Demand:
  343.  
  344. Kerneld can be used to load modules, like ppp, on demand. An additional
  345. feature,
  346. described in the kerneld-HOWTO, is the ability to invoke a script, if a
  347. particular
  348. route is missing. Kerneld will look for '/sbin/request-route'. The script
  349. below is
  350. an almost exact copy of the script included with the modules-2.0.0.tar.gz:
  351.  
  352. /sbin/request-route:
  353.  
  354. #!/bin/sh
  355. LOCK=/var/run/request-route.pid
  356. export PATH=/usr/sbin:$PATH     # for ppp-2.2*
  357.  
  358. # This script will be called from kerneld with the requested route as $1
  359.  
  360. chatfile=/etc/ppp/$1
  361.  
  362. # If no chatscript exists use a default value (symlink to preferred
  363. script):
  364.  
  365. [ ! -f $chatfile ] && chatfile=/etc/ppp/default
  366.  
  367. # Check if we're already running:
  368.  
  369. if [ ! -f $LOCK ] ; then
  370.         pppd connect "chat -f $chatfile" &
  371.  
  372.         # Timer to be killed by ip-up, tunable! Check kerneld delay as
  373. well
  374.         sleep 60 &
  375.         sleepid=$!
  376.         echo $sleepid > $LOCK
  377.         wait $sleepid
  378.         rm -f $LOCK
  379.         exit 0
  380. fi
  381. exit 1
  382.  
  383.  
  384. Kerneld will run this script using the missing route as an argument:
  385.  
  386. /sbin/request-route x.x.x.x
  387.  
  388. The script uses a lock-file to prevent multiple 'request-route'-instances.
  389.  
  390. At first I used a script that was triggered by a nameserver query, but
  391. since I like
  392. to run a local nameserver, this lookup would be cached and a second query
  393. wouldn't
  394. bring the link up. That's why I changed the script to use a default
  395. chat-script if
  396. none exists.
  397.  
  398. This also allows you to create multiple chat-scripts for different links
  399. and use a
  400. default chat-script to connect to your ISP.
  401.  
  402. After the link has been brought up, pppd executes the script /etc/ppp/ip-up
  403.  
  404. which
  405. removes the lock-file. Add commands you'd like to execute everytime the
  406. link is
  407. brought up, like a sendmail queue-run:
  408.  
  409. #!/bin/ash
  410. LOCK=/var/run/request-route.pid
  411. [ -f $LOCK ] && kill `cat $LOCK`
  412.  
  413. # Execute these commands after connecting:
  414. #/usr/sbin/sendmail -q
  415.  
  416.  
  417. The 'idle-disconnect'-option automatically disconnects an idle link, use
  418. 'ppp-off'
  419. is you want to disconnect immediately:
  420.  
  421. /usr/sbin/ppp-off:.
  422.  
  423. #!/bin/sh
  424. LOCK=/var/run/request-route.pid
  425. DEVICE=ppp0
  426.  
  427. rm -f $LOCK
  428. #
  429. # If the ppp0 pid file is present then the program is running. Stop it.
  430. if [ -r /var/run/$DEVICE.pid ]; then
  431.         kill -INT `cat /var/run/$DEVICE.pid`
  432. #
  433. # If unsuccessful, ensure that the pid file is removed.
  434. #
  435.         if [ ! "$?" = "0" ]; then
  436.                 echo "removing stale $DEVICE pid file."
  437.                 rm -f /var/run/$DEVICE.pid
  438.                 exit 1
  439.         fi
  440. #
  441. # Success. Terminate with proper status.
  442. #
  443.         echo "$DEVICE link terminated"
  444.         exit 0
  445. fi
  446. #
  447. # The link is not active
  448. #
  449. echo "$DEVICE link is not active"
  450.  
  451. exit 1
  452.  
  453. ----------------------------------------------------------------------------
  454.  
  455. ---
  456.  
  457.  
  458. 7. Network Configuration:
  459.  
  460. If your Linux-box has another network interface, like an Ethernet-card or
  461. if you
  462. use PLIP to connect to another machine, you can configure this box to
  463. function as
  464. a router. This is how I configured my network, I always enter all
  465. IP-addresses in
  466. /etc/hosts so I only have one file to maintain:
  467.  
  468. /etc/hosts:
  469.  
  470. 127.0.0.1       localhost
  471. 10.0.0.1        your.domain.com host
  472. 10.0.0.2        some.other.machine
  473.  
  474.  
  475. /etc/networks:
  476.  
  477. loopback        127.0.0.0
  478. localnet        10.0.0.0
  479.  
  480.  
  481. /etc/rc.d/inet1:
  482.  
  483. # Loopback interface:
  484. ifconfig lo localhost
  485. route add -net loopback
  486.  
  487. # Local interface:
  488. ifconfig eth0 host
  489. route add -net localnet eth0
  490.  
  491.  
  492. The last rule adds a route to the local network. We don't need to enter
  493. the
  494. default
  495. gateway here, since we don't have one until a PPP-link is setup.
  496.  
  497. ----------------------------------------------------------------------------
  498.  
  499. ---
  500.  
  501.  
  502. 8. Masquerading Configuration:
  503.  
  504. If you need to connect multiple machines, but only have one IP-address,
  505. you
  506. can use
  507. the Linux masquerading feature. This allows you to configure an internal
  508. network-
  509. number (preferably a private IP-address) which gets translated to the
  510. IP-address
  511. assigned to the PPP-interface.
  512.  
  513. You are free to use the following network numbers:
  514.  
  515. Class A: 10.0.0.0
  516. Class B: 172.16.0.0 - 172.31.0.0
  517. Class C: 192.168.0.0 - 192.168.254.0
  518.  
  519.  
  520. Add the following rules to /etc/rc.d/rc.inet1:
  521.  
  522. FW=/sbin/ipfwadm
  523.  
  524. ${FW} -F -f
  525.  
  526. ${FW} -F -a m -P tcp -S localnet/8 -D default/0
  527. ${FW} -F -a m -P udp -S localnet/8 -D default/0
  528.  
  529. # Masquerading timeout-values (tcp tcpfin udp), defaults:
  530. ${FW} -M -s 3600 0 0
  531.  
  532. # Load module for special protocols:
  533. /sbin/modprobe ip_masq_ftp
  534. /sbin/modprobe ip_masq_raudio
  535. /sbin/modprobe ip_masq_irc
  536.  
  537.  
  538. The two masquerading rules will translate UDP and TCP-traffic to the
  539. IP-address
  540. used as the default gateway (the PPP-interface). Ping, which uses the
  541. ICMP-protocol,
  542. will fail from other hosts, it will only work from the router.
  543. I used network 10.0.0.0 with subnet mask 255.0.0.0 or in CIDR-notation:
  544. '/8'.
  545.  
  546. The next rule prevents FTP-DATA connections from timing out, by increasing
  547. the TCP-
  548. timeout value.
  549.  
  550. The modules are only required if you want to use these protocols across
  551. the
  552. firewall.
  553. E.g. if you want to use normal ftp through the firewall, you need to load
  554. the
  555. ip_masq_ftp-module.
  556.  
  557. ----------------------------------------------------------------------------
  558.  
  559. ----
  560.  
  561. 9. Workstation Configuration:
  562.  
  563. Configure your other machine for your local network number and set them up
  564. to
  565. use the Linux-box as their default gateway.
  566.  
  567. ----------------------------------------------------------------------------
  568.  
  569. ----
  570.  
  571. 10. Disclaimer
  572.  
  573. This document describes a configuration that works for me, use it at your
  574. own
  575. risk. If anything substantial is missing or if something is terribly
  576. wrong,
  577. please let me know!
  578.  
  579. One thing I could add is a description of how to setup a local nameserver.
  580.  
  581.  
  582. Rodney van den Oever <Rodney.van.den.Oever@tip.nl>
  583.