<!-- $Id: userppp.sgml,v 1.16 1997/05/12 16:29:48 brian Exp $ -->
<!-- The FreeBSD Documentation Project -->

<sect>Setting up user PPP<label id="userppp">

<!--  This FAQ/HowTo is intended to get you up and running with
   iijppp, also known as <em>user level ppp</em> or just
   simply <em>ppp</em> for FreeBSD 2.0.5 and above.

<p>It also outlines how to use iijppp as a ppp server.

<p>This document has originally written by Nik Clayton, and has
   turned into a collaborative effort over the years.

-->

<p>User PPP was introduced to FreeBSD in release 2.0.5 as an
   addition to the existing kernel implementation of PPP.  So,
   what is different about this new PPP that warrants its
   addition?  To quote from the manual page:

<quote>
   This is a user process PPP software package. Normally, PPP is
   implemented as a part of the kernel (e.g. as managed by pppd) and
   it is thus somewhat hard to debug and/or modify its behavior. However,
   in this implementation PPP is done as a user process with the help of
   the tunnel device driver (tun).
</quote>

  In essence, this means that rather than running a PPP daemon, the ppp
  program can be run as and when desired. No PPP interface needs to be
  compiled into the kernel, as the program can use the generic tunnel
  device to get data into and out of the kernel.

  From here on out, user ppp will be referred to simply as ppp unless a
  distinction needs to be made between it and any other PPP client/server
  software.  Unless otherwise stated, all commands in this section should
  be executed as root.

<sect1><heading>Before you start</heading>

<p>This document assumes you are in roughly this position:

   You have an account with an Internet Service Provider (ISP) which lets you
   use PPP. Further, you have a modem (or other device) connected and
   configured correctly which allows you to connect to your ISP.

   You are going to need the following information to hand:

<itemize>
   <item>The IP address of your ISP's gateway.  The gateway is the
         machine to which you will connect and will
         be set up as your <tt>default route</tt>.

   <item>Your ISP's netmask setting.  If you can't determine this,
         assume a netmask of 0xffffff00.

   <item>The IP addresses of one or more nameservers.  Normally, you
         will be given two IP numbers.

   <item>If your ISP allocates you a static IP address and/or hostname
         then you will need that as well.  If not, you will need to know
         from what range of IP addresses your allocated IP address will
         belong.  If you havn't been given this range, you can accept
         any IP number (as explained later).
</itemize>

   If you do not have any of this information then contact your ISP and make
   sure they provide it to you.

   In addition, it is assumed that because your connection to the
   Internet is  not full time you are not running a name server
   (<tt>named(8)</tt>).  If this is not the case, ignore any
   information on setting up the <tt>/etc/resolv.conf</tt> file.

<sect1><heading>Building a ppp ready kernel</heading>

<p>As the description states, ``ppp'' uses the kernel ``tun'' device.
   It is necessary to make sure that your kernel has support for this
   device compiled in.

   To check this, go to your kernel compile directory (probably
   /sys/i386/conf) and examine your kernel configuration file.
   It needs to have the line

<tscreen><verb>
   pseudo-device tun 1
</verb></tscreen>

   in it somewhere. The stock GENERIC kernel has this as standard, so
   if you have not installed a custom kernel or you do not have a /sys
   directory, you do not have to change anything.
   If your kernel configuration file does not have this line in it, or
   you need to configure more than one tun device (for example, if
   you are setting up a server and could have 16 dialup ppp connections
   at any one time then you will need to use ``16'' instead of ``1''),
   then you should add the line, re-compile, re-install and boot the new
   kernel.  Please refer to the 
   <ref id="kernelconfig" name="Configuring the FreeBSD Kernel">
   section for more information on kernel configuration.

<p>You can check how many tunnel devices your current kernel has by
   typing the following:

<tscreen><verb>
   # ifconfig -a
   tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500
           inet 200.10.100.1 --> 203.10.100.24 netmask 0xffffffff
   tun1: flags=8050<POINTOPOINT,RUNNING,MULTICAST> mtu 576
   tun2: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500
           inet 203.10.100.1 --> 203.10.100.20 netmask 0xffffffff
   tun3: flags=8050<POINTOPOINT,RUNNING,MULTICAST> mtu 1500
</verb></tscreen>

   which in this case shows four tunnel devices, two of which are
   currently configured and being used.

<p>If you have a kernel without the tun device, and you can not
   rebuild it for some reason, all is not lost.  You should be
   able to dynamically load the code.  Refer to the appropriate
   modload(8) and lkm(4) pages for further details.

<p>You may also wish to take this opportunity to configure a firewall.
   Details can be found in the <ref id="firewalls" name="Firewalls">
   section.

<sect1><heading>Check the tun device</heading>

<p>Most users will only require one ``tun'' device (tun0). If you have
   used more (i.e., a number other than `1' in the pseudo-device line
   in the kernel configuration file) then alter all references to ``tun0''
   below to reflect whichever device number you are using.

   The easiest way to make sure that the tun0 device is configured correctly
   is to re-make it. To this end, execute the following commands:

<tscreen><verb>
   # cd /dev
   # ./MAKEDEV tun0
</verb></tscreen>

<p>If you require 16 tunnel devices in your kernel, you will need to
   create more than just tun0:

<tscreen><verb>
   # cd /dev
   # ./MAKEDEV tun0 tun1 tun2 tun3 tun4 tun5 tun6 tun7 tun8 tun9
   # ./MAKEDEV tun10 tun11 tun12 tun13 tun14 tun15
</verb></tscreen>

<p>Also, to confirm that the kernel is configured correctly,
   the following command should give the indicated output:

<tscreen><verb>
   $ ifconfig tun0
   tun0: flags=8050<POINTOPOINT,RUNNING,MULTICAST> mtu 1500
   $ 
</verb></tscreen>

<sect1><heading>PPP Name Resolution Configuration</heading>

<p>The resolver is the part of the networking system that turns IP
   addresses into hostnames and vice versa.  It can be configured
   to look for maps that describe IP to hostname mappings in one
   of two places.  The first is a file called <tt>/etc/hosts</tt>
   (<tt>man 5 hosts</tt>).  The second is the Internet Domain Name
   Service (DNS), a distributed data base, the discussion of which
   is beyond the scope of this document.

<p>This section describes briefly how to configure your resolver.  If
   you are already running a DNS, this section may be skipped.

<p>The resolver is a set of system calls that do the name mappings, but
   you have to tell them where to get their information from.  You do
   this by first editing the file <tt>/etc/host.conf</tt>.  Do
   <bf>not</bf> call this file <tt>/etc/hosts.conf</tt> (note the extra
   ``s'') as the results can be confusing.

<sect2><heading>Edit the /etc/host.conf file</heading>

<p>This file should contain the following two lines:

<tscreen><verb>
   hosts
   bind
</verb></tscreen>
   which instructs the resolver to first look in the file
   <tt>/etc/hosts</tt>, and then to consult the DNS if the
   name was not found.

<sect2><heading>Edit the /etc/hosts(5) file</heading>

<p>This file should contain the IP addresses and names of machines on your
   network. At a bare minimum it should contain entries for the machine
   which will be running ppp. Assuming that your machine is called
   foo.bar.com with the IP address 10.0.0.1, <tt>/etc/hosts</tt> should
   contain:

<tscreen><verb>
   127.0.0.1    localhost
   10.0.0.1     foo.bar.com	       foo
</verb></tscreen>

   The first line defines the alias ``localhost'' as a synonym for the
   current machine. Regardless of your own IP address, the IP address for
   this line should always be 127.0.0.1. The second line maps the name
   ``foo.bar.com'' (and the shorthand ``foo'') to the IP address 10.0.0.1.

   If your provider allocates you a static IP address then use this in place
   of 10.0.0.1.

<sect2><heading>Edit the /etc/resolv.conf file</heading>

<p><tt>/etc/resolv.conf</tt> contains some extra information required when
   you are not running a nameserver. It points the resolver routines at real
   nameservers, and specifies some other information.

   At the very least, <tt>/etc/resolv.conf</tt> should contain one line with
   a nameserver which can be queried, but two nameservers are preferable.
   You should enter these as IP addresses, for example:

<tscreen><verb>
   nameserver 1.2.3.4
   nameserver 1.2.3.5
</verb></tscreen>

   Add as many ``nameserver'' lines as your ISP provides nameservers.
   Refer to the resolv.conf manual page for further details of entries
   in this file.

<sect1><heading>PPP Configuration</heading>

<p>Both user ppp and pppd (the kernel level implementation of PPP)
   use configuration files located in the <tt>/etc/ppp</tt> directory.
   The sample configuration files provided are a good reference for
   user ppp, so don't delete them.

<p>Configuring ppp requires that you edit up to three files, depending
   on your requirements. What you put in them depends to some extent
   on whether your ISP allocates IP addresses statically (i.e., you get
   given one IP address, and always use that one) or dynamically (i.e.,
   your IP address can be different during different PPP sessions).

<sect2><heading>PPP and static IP addresses</heading>

<p>You will need to create three files in the <tt>/etc/ppp</tt>
   directory.

<p>The first of these files is <tt>ppp.conf</tt>. It should look
   similar to the example below.  Note that lines that end in a
   ``:'' start in column 1, all other lines should be indented as
   shown using spaces or tabs.

   <tt>/etc/ppp/ppp.conf</tt>
<tscreen><verb>
1     default:
2       set device /dev/cuaa0
3       set speed 38400
4       set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5 \"\" ATE1Q0 OK-AT-OK
\\dATDT\\T TIMEOUT 40 CONNECT"
5      provider:
6        set phone 01234567890
7        set login "TIMEOUT 10 gin:-BREAK-gin: foo word: bar col: ppp"
8        set timeout 120
9        set ifaddr x.x.x.x y.y.y.y
10       delete ALL
11       add 0 0 y.y.y.y
12       set openmode active
</verb></tscreen>
   Do not include the line numbers, they are just for reference in
   this discussion.

<descrip>
<tag/Line 1:/  Identifies the default entry.  Commands in this entry are
               executed automatically when ppp is run.

<tag/Line 2:/  Identifies the device to which the modem is connected.
               COM1: is <tt>/dev/cuaa0</tt> and COM2: is <tt>/dev/cuaa1</tt>.

<tag/Line 3:/  Sets the speed you want to connect at.

<tag/Line 4:/  The dial string.  User ppp uses an expect-send syntax similar
               to the <tt>chat(8)</tt> program.  Refer to the manual page
               for information on the features of this language.

<tag/Line 5:/  Identifies an entry for a provider called ``provider''.

<tag/Line 6:/  Sets the phone number for this provider.  Multiple phone
               numbers may be specified using the `:' character as a
               seperator.

<tag/Line 7:/  The login string.  The login string is of the same
               syntax as the dial string.  In this example, the string is
	       for a service who's login session looks like

<tscreen><verb>
   J. Random Provider
   login: foo
   password: bar
   protocol: ppp
</verb></tscreen>

	       You will need to alter this script to suit your own needs.

<tag/Line 8:/  Sets the default timeout (in seconds) for the connection.
               Here, the connection will be closed automatically after
               120 seconds of inactivity.

<tag/Line 9:/  Sets the interface addresses. The string x.x.x.x should be
               replaced by the IP address that your provider allocates you.
               The string y.y.y.y should be replaced by the IP address that
               your ISP indicated for their gateway (the machine to which
               you connect).

<tag/Line 10:/ Deletes all existing routing table entries for the
               acquired tun device.

<tag/Line 11:/ Adds a default route to your ISPs IP number.  The IP
               number should always be that of your ISPs gateway.

<tag/Line 12:/ Tells our side to begin negotiation.  This is not always
               necessary, but it does no harm to have both sides initiating
               the Line Control Protocol (LCP).
</descrip>

<p>The second of these files is <tt>/etc/ppp/ppp.linkup</tt>:

<tscreen><verb>
   x.x.x.x:
    delete ALL
    add 0 0 HISADDR
</verb></tscreen>

<p>Replace x.x.x.x with your IP address as before. This file is used to
   automatically delete all existing routes for the acquired line and
   add a default route from your ISP (who's address is automatically
   inserted with the HISADDR macro) to you.

<p>With a static IP number assigned by your ISP, you don't actually
   need an entry in <tt>/etc/ppp.linkup</tt>, but again, it doesn't
   do any harm to have it.

<p>Finally, the third of these files is <tt>/etc/ppp/ppp.secret</tt>.
   This file allows you to set some passwords to control access to
   your ppp server.  You may or may not want to configure this file,
   depending on how many people have access to your ppp system.

<p>Examples can be found in the <tt>/etc/ppp</tt> directory.

<sect2><heading>PPP and Dynamic IP addresses</heading>

<p>If your service provider does not assign static IP numbers,
   <tt>ppp</tt> can be configured to negotiate the local and
   remote addresses.  This is done by "guessing" an IP number
   and allowing ppp to set it up correctly using the LCP at
   connection time.  Otherwise, the configuration is the same as
   that of a static IP configuration.

<p>Put the following lines in your <tt>ppp.conf</tt> file:

<tscreen><verb>
   ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.0
   delete ALL
   add 0 0 10.0.0.2
</verb></tscreen>

<p>You should NOT use 0 as either IP address.  If you do, ppp will not be
   able to set up the correct initial entries in the routing table.

<p>The number after the ``/'' character is the number of bits of
   the address that ppp will insist on.

<p>Note also that the HISADDR macro is not yet available in
   <tt>ppp.conf</tt>, only in <tt>ppp.linkup</tt>.

<p>See the pmdemand entry in the files <tt>/etc/ppp/ppp.conf.sample</tt> and
   <tt>/etc/ppp/ppp.linkup.sample</tt> for a detailed example.

<sect2><heading>Receiving incoming calls with PPP</heading>

<p>This section describes setting up iijppp in a server role.

<p>When you configure <tt>ppp</tt> to receive incoming calls, you
   must decide whether you wish to forward packets for just
   <tt>ppp</tt> connections, for all interfaces, or not at all.
   To forward for just ppp connections, include the line

<tscreen><verb>
    enable proxy
</verb></tscreen>

   in your <tt>ppp.conf</tt> file.  If you wish to forward packets on all
   interfaces, use the

<tscreen><verb>
    gateway=YES
</verb></tscreen>

   option in <tt>/etc/rc.conf</tt> (this file used to be called
   <tt>/etc/sysconfig</tt>).

<sect3><heading>Which getty?</heading>

<p><ref id="dialup" name="Configuring FreeBSD for Dialup Services">
   provides a good description on enabling dialup services using getty.

<p>An alternative to getty is
   <url url="http://www.leo.org/~doering/mgetty/index.html" name="mgetty">,
   a smarter version of getty designed with dialup lines in mind.

<p>The advantages of using mgetty is that it actively <em>talks</em> to
   modems, meaning if port is turned off in <tt>/etc/ttys</tt> then
   your modem won't answer the phone.

<p>Later versions of mgetty (from 0.99beta onwards) also support the
   automatic detection of PPP streams, allowing your clients script-less
   access to your server.

<p>Obtaining and configuring mgetty correctly is beyond the scope of
   this document.

<sect3><heading>Setting up a PPP shell for dynamic-IP users</heading>

<p>Create a file called <tt>/etc/ppp/ppp-shell</tt> containing the
   following:

<tscreen><verb>
   #!/bin/sh
   IDENT=`echo $0 | sed -e 's/^.*-\(.*\)$/\1/'`
   CALLEDAS="$IDENT"
   TTY=`tty`

   if [ x$IDENT = xdialup ]; then
       IDENT=`basename $TTY`
   fi

   echo "PPP for $CALLEDAS on $TTY"
   echo "Starting PPP for $IDENT"

   exec /usr/sbin/ppp -direct $IDENT
</verb></tscreen>

<p>This script should be executable.  Now make a symbolic link called
   <tt>ppp-dialup</tt> to this script using the following commands:

<tscreen><verb>
   # ln -s /etc/ppp/ppp-shell /etc/ppp/ppp-dialup
</verb></tscreen>

<p>You should use this script as the <em>shell</em> for all your dialup
   ppp users.  This is an example from <tt>/etc/password</tt>
   for a dialup PPP user with username pchilds. (remember don't directly
   edit the password file, use <tt>vipw</tt>)

<tscreen><verb>
   pchilds:*:1011:300:Peter Childs PPP:/home/ppp:/etc/ppp/ppp-dialup
</verb></tscreen>

<p>Create a <tt>/home/ppp</tt> directory that is world readable
   containing the following 0 byte files

<tscreen><verb>
   -r--r--r--   1 root     wheel           0 May 27 02:23 .hushlogin
   -r--r--r--   1 root     wheel           0 May 27 02:22 .rhosts
</verb></tscreen>

   which prevents <tt>/etc/motd</tt> from being displayed.

<sect3><heading>Setting up a PPP shell for static-IP users</heading>

<p>Create the <tt>ppp-shell</tt> file as above and for each account with
   statically assigned IPs create a symbolic link to <tt>ppp-shell</tt>.

<p>For example, if you have three dialup customers fred, sam, and mary,
   that you route class C networks for, you would type the following:

<tscreen><verb>
   # ln -s /etc/ppp/ppp-shell /etc/ppp/ppp-fred
   # ln -s /etc/ppp/ppp-shell /etc/ppp/ppp-sam
   # ln -s /etc/ppp/ppp-shell /etc/ppp/ppp-mary
</verb></tscreen>

<p>Each of these users dialup accounts should have their shell set
   to the symbolic link created above. (ie. mary's shell should be
   <tt>/etc/ppp/ppp-mary</tt>).

<sect3><heading>Setting up ppp.conf for dynamic-IP users</heading>

<p>The <tt>/etc/ppp/ppp.conf</tt> file should contain something along
   the lines of

<tscreen><verb>
   default:
    set debug phase lcp chat
    set timeout 0

   ttyd0: 
    set ifaddr 203.14.100.1 203.14.100.20 255.255.255.255
    enable proxy

   ttyd1:
    set ifaddr 203.14.100.1 203.14.100.21 255.255.255.255
    enable proxy
</verb></tscreen>
 
<p>Note the indenting is important.

<p>The <tt>default:</tt> section is loaded for each session.  For each
   dialup line enabled in <tt>/etc/ttys</tt> create an entry similar
   to the one for <tt>ttyd0:</tt> above.  Each line should get a unique
   IP from your pool of ip address for dynamic users.

<sect3><heading>Setting up ppp.conf for static-IP users</heading>

<p>Along with the contents of the sample <tt>/etc/ppp/ppp.conf</tt>
   above you should add a section for each of the statically assigned
   dialup users.  We will continue with our fred, sam, and mary example.
 
<tscreen><verb>
   fred:
    set ifaddr 203.14.100.1 203.14.101.1 255.255.255.255
 
   sam:
    set ifaddr 203.14.100.1 203.14.102.1 255.255.255.255
 
   mary:
    set ifaddr 203.14.100.1 203.14.103.1 255.255.255.255
</verb></tscreen> 

<p>The file <tt>/etc/ppp/ppp.linkup</tt> should also contain routing
   information for each static IP user if required.  The line below 
   would add a route for the <tt>203.14.101.0</tt> class C via 
   the client's ppp link.

<tscreen><verb>
   fred:
    add 203.14.101.0 netmask 255.255.255.0 HISADDR
 
   sam:
    add 203.14.102.0 netmask 255.255.255.0 HISADDR
 
   mary:
    add 203.14.103.0 netmask 255.255.255.0 HISADDR
</verb></tscreen> 

<sect3><heading>More on mgetty, AutoPPP, and MS extensions</heading>

<sect4><heading>Mgetty and AutoPPP</heading>

<p>Configuring and compiling mgetty with the AUTO_PPP option enabled
   allows mgetty to detect the LCP phase of PPP connections and automatically
   spawn off a ppp shell.  However, since the default login/password sequence
   does not occur it is necessary to authenticate users using either PAP
   or CHAP.

<p>This section assumes the user has successfully configured, compiled, and
   installed a version of mgetty with the AUTO_PPP option (v0.99beta or later)
 
<p>Make sure your <tt>/usr/local/etc/mgetty+sendfax/login.config</tt> file
   has the following in it:
 
<tscreen><verb>
   /AutoPPP/ -     -       /etc/ppp/ppp-pap-dialup
</verb></tscreen>
 
<p>This will tell mgetty to run the <tt>ppp-pap-dialup</tt> script for
   detected PPP connections.
 
<p>Create a file called <tt>/etc/ppp/ppp-pap-dialup</tt> containing the
   following (the file should be executable):

<tscreen><verb>
   #!/bin/sh
   TTY=`tty`
   IDENT=`basename $TTY`
   exec /usr/sbin/ppp -direct pap$IDENT
</verb></tscreen>   

<p>For each dialup line enabled in <tt>/etc/ttys</tt> create a corresponding
   entry in <tt>/etc/ppp/ppp.conf</tt>.  This will happily co-exist with
   the definitions we created above.
 
<tscreen><verb>
   papttyd0:
    enable pap
    set ifaddr 203.14.100.1 203.14.100.20 255.255.255.255
    enable proxy
 
   papttyd1:
    enable pap
    set ifaddr 203.14.100.1 203.14.100.21 255.255.255.255
    enable proxy
</verb></tscreen>
 
<p>Each user logging in with this method will need to have a username/password
   in <tt>/etc/ppp/ppp.secret</tt> file, or alternatively add the

<tscreen><verb>
  enable passwdauth
</verb></tscreen>

   option to authenticate users via pap from the <tt>/etc/password</tt>d
   file. (*) 

<p>(*) Note this option only available in 2.2-961014-SNAP or later, or by
   getting the updated ppp code for 2.1.x. (see MS extensions below for details)

<sect4><heading>MS extentions</heading>

<p>From 2.2-961014-SNAP onwards it is possible to allow the automatic
   negotiation of DNS and NetBIOS name servers with clients supporting
   this feature (namely Win95/NT clients).  See RFC1877 for more details
   on the protocol.

<p>An example of enabling these extensions in your
   <tt>/etc/ppp/ppp.conf</tt> file is illustrated below.

<tscreen><verb>
   default:
    set debug phase lcp chat
    set timeout 0
    enable msext
    set ns 203.14.100.1 203.14.100.2
    set nbns 203.14.100.5
</verb></tscreen>  

<p>This will tell the clients the primary and secondary
   name server addresses, and a netbios nameserver host.

<sect1><heading>Final system configuration</heading>

<p>You now have PPP configured, but there are a few more things to
   do before it is ready to work. They all involve editing the
   <tt>/etc/rc.conf</tt> file (was <tt>/etc/sysconfig</tt>).

   Working from the top down in this file, make sure the ``hostname='' line
   is set, e.g.:

<tscreen><verb>
   hostname=foo.bar.com
</verb></tscreen>

<p>Look for the network_interfaces variable.  If you want to configure
   your system to dial your ISP on demand, make sure the tun0 device is
   added to the list, otherwise remove it.

<tscreen><verb>
   network_interfaces="lo0 tun0"
   ifconfig_tun0=
</verb></tscreen>

   Note, the <tt>ifconfig_tun0</tt> variable should be empty, and
   a file called /etc/start_if.tun0 should be created.  This file
   should contain the line

<tscreen><verb>
   ppp -auto mysystem
</verb></tscreen>

   This script is executed at network configuration time, starting
   your ppp daemon in automatic mode.

<p>Set the router program to ``NO'' with the line

<tscreen><verb>
   router_enable=NO            (/etc/rc.conf)
   router=NO                   (/etc/sysconfig)
</verb></tscreen>

   It is important that the <tt>routed</tt> daemon is not started
   (the default) as <tt>routed</tt> tends to delete the default
   routing table entries created by ppp.

<p>It is probably worth your while ensuring that the ``sendmail_flags'' line
   does not include the ``-q'' option, otherwise sendmail will attempt to do
   a network lookup every now and then, possibly causing your machine to dial
   out.  You may try:

<tscreen><verb>
   sendmail_flags="-bd"
</verb></tscreen>

   The upshot of this is that you must force sendmail to re-examine the
   mail queue whenever the ppp link is up by typing:

<tscreen><verb>
   # /usr/sbin/sendmail -q
</verb></tscreen>

   If you don't like this, it is possible to set up a "dfilter" to block
   SMTP traffic.  Refer to the sample files for further details.  You
   can also use a script in the <tt>ppp.linkup</tt> file to execute this
   command.

   All that is left is to reboot the machine.

   You can now either type
<tscreen><verb>
   # ppp
</verb></tscreen>

   and then ``dial provider'' to start the PPP session, or, if you
   want ppp to establish sessions automatically when there is outbound
   traffic (and you havn't created the start_if.tun0 script) , type

<tscreen><verb>
   # ppp -auto provider
</verb></tscreen>

<sect1><heading>Summary</heading>

<p>To recap, the following steps are necessary when setting up ppp
   for the first time:

<p>Client side:

<itemize>
   <item>Ensure that the tun device is built into your kernel.
   <item>Ensure that the tunX device file is available in the
         <tt>/dev</tt> directory.
   <item>Create an entry in <tt>/etc/ppp.conf</tt>.  The
         <tt>pmdemand</tt> example should suffice for most
         ISPs.
   <item>Create an entry in <tt>/etc/ppp.linkup</tt>.
   <item>Update your rc.conf (or sysconfig) file.
   <item>Create a start_if.tun0 script if you require demand
         dialing.
</itemize>

<p>Server side:
<itemize>
   <item>Ensure that the tun device is built into your kernel.
   <item>Ensure that the tunX device file is available in the
         <tt>/dev</tt> directory.
   <item>Create an entry in /etc/passwd (using the vipw(8)
         program).
   <item>Create a profile in this users home directory that
         runs ``ppp -direct direct-server'' or similar.
   <item>Create an entry in <tt>/etc/ppp.conf</tt>.  The
         <tt>direct-server</tt> example should suffice.
   <item>Create an entry in <tt>/etc/ppp.linkup</tt>.
   <item>Update your rc.conf (or sysconfig) file.
</itemize>

<sect1><heading>Acknowledgments</heading>

<p>Thanks to the following for their comments & suggestions:

<p>&a.nik
<p>&a.dirkvangulik
<p>&a.pjc
