home *** CD-ROM | disk | FTP | other *** search
/ PC World 1999 August / PCWorld_1999-08_cd.bin / doc / HOWTO / unmaintained / mini / DHCPcd < prev    next >
Text File  |  1998-05-07  |  17KB  |  456 lines

  1. [ 9 May 1998
  2.   The Linux DHCPcd mini-HOWTO is no longer being maintained.  The DHCPd and
  3.   DHCPcd have been merged into a single mini-HOWTO called DHCP.  Please
  4.   feel free to contact me at <linux-howto@sunsite.unc.edu> if you have any
  5.   questions or concerns. ]
  6.  
  7.  
  8.                      How to setup Linux as DHCP client
  9.      _________________________________________________________________
  10.    
  11.    Disclaimer: The information contained herein is NOT official
  12.    information of any kind and there are no warranties to the accuracy of
  13.    the data. All information is provided in good faith. Use at your own
  14.    risk.
  15.      _________________________________________________________________
  16.    
  17.    Vladimir Vuksan, vuksan@veus.hr
  18.    $Revision: 1.5 $ $Date: 1998/04/21 12:21:11 $
  19.    
  20.   Introduction
  21.   
  22.    This HOWTO explains how to setup your Linux system to work in a DHCP
  23.    environment as a client (DHCPcd). If you are looking for a DHCP server
  24.    you need to read DHCPd mini-HOWTO at
  25.    http://sunsite.unc.edu/LDP/HOWTO/mini/DHCPd. DHCP stands for Dynamic
  26.    Host Configuration Protocol. It is a protocol that allows a client
  27.    machine to obtain network information from a server. Many
  28.    organizations are starting to use it because it eases network
  29.    administration especially on large networks or networks which have
  30.    lots of mobile users. DHCP is also being heavily used by cable
  31.    Internet service provider such as MediaOne Express, Time Warner etc.
  32.    More info about DHCP can be found in DHCP FAQ.
  33.    
  34.   Road Runner Service
  35.   
  36.    If you have Road Runner cable service check out
  37.    http://people.qualcomm.com/karn/rr/index.html. If that doesn't solve
  38.    your problem try following.
  39.    
  40.   2.1.x kernels
  41.   
  42.    If you are running a > 2.1.30 kernel (don't remember the exact number
  43.    and www.linuxhq.com is down currently) you might encounter a problem
  44.    with the dhcpc. According to Dan Khabaza:
  45.    "The changes are due to differences in ipv4 network package, in the
  46.    way it sets the defaults for several fields."
  47.    
  48.    Dan has provided a patch for it that can be obtained at
  49.    http://www.cro.net/~vuksan/dhcppatch. To apply it just copy it to the
  50.    dhcpcd source directory (instruction how to get source are in the
  51.    following section) and type
  52.    
  53. patch < dhcppatch
  54.  
  55.    dhcpcd should compile cleanly after the patch has been applied. Note
  56.    that this patch works only against dhcpcd 0.65 :-(.
  57.    
  58.    Another patch has been provided by Paul Rossington if you have
  59.    problems with the one above. It is actually the whole if.C file. Get
  60.    it at http://www.cro.net/~vuksan/if.C and copy it to the dhcpcd source
  61.    directory.
  62.    
  63.    Other alternative when running 2.1.x kernels is to use dhcpcd 1.3.3
  64.    which is a modified version that has been written by Sergei Viznyuk
  65.    sergei@phystech.com in order to avoid problems with 2.1.x kernels. You
  66.    can fetch it at:
  67.    
  68.    http://www.cps.msu.edu/~dunham/out/dhcpcd-1.3.3.tar.gz
  69.    
  70.   RedHat 5.0 users
  71.   
  72.    DHCPcd configuration under RedHat 5.0 is really easy. All you need to
  73.    do is start the Control Panel by typing
  74.    
  75. control-panel
  76.  
  77.    Then select "Network Configuration" and under eth0 interface define
  78.    DHCP as your protocol. Other parameters should be left blank.
  79.    
  80.   Token Ring network
  81.   
  82.    If you are trying to run dhcpcd on the Token Ring Network it will not
  83.    work. This is the solution provided to me by Henrik Stoerner:
  84.    
  85.    The problem is that dhcpcd only knows about Ethernet cards. If it
  86.    finds a Token-Ring card, it refuses to do anything with it and reports
  87.    "interface is not ethernet". 
  88.    
  89.    The solution is to apply a simple patch to the dhcpcd-0.65 sources. I
  90.    have put up a small web page with the patch, RedHat RPM-files and a
  91.    precompiled binary at http://eolicom.olicom.dk/~storner/dhcp/
  92.    
  93.    The patch has been sent to the dhcpcd maintainer, so hopefully it will
  94.    be included in a future release of dhcpcd.
  95.    
  96.   Method
  97.   
  98.    Step 1) No matter what distribution you are using you will need to
  99.    download the DHCP client daemon for Linux. The package you need to
  100.    download is called dhcpcd and the current version is 0.70. The
  101.    description of the package reads:
  102. Title:          dhcpcd
  103. Version:        0.70
  104. Entered-date:   05NOV97
  105. Description:    dhcpcd is an RFC2131 compliant DHCP client daemon. It
  106.                 gets an IP address and other information from a
  107.                 corresponding DHCP server, configures the network
  108.                 interface automatically, and tries to renew the lease
  109.                 time according to RFC2131. It works in the RFC1541
  110.                 compliant mode when the '-r' option is specified.
  111.                 So far it is found that dhcpcd 0.70 works with the
  112.                 following DHCP servers:
  113.                   1. ISC's dhcpcd-BETA-5.15
  114.                   2. DHCP server on Windows NT server 3.51
  115.                   3. DHCP server version 1.3b by WIDE project.
  116.                   4. DHCP server in the SolarNet PC-Admin 1.5 package
  117.                   5. DHCP server used in Time Warner Cable's
  118.                      Internet Access Service
  119.                   6. DHCP server used in Bell Atlantic ADSL
  120.                 See the "Changes" file if you want to know the difference
  121.                 from the previous version.
  122. Keywords:       DHCP, client, Linux
  123. Author:         yoichi@fore.com (Yoichi Hariguchi)
  124. Maintained-by:  yoichi@fore.com (Yoichi Hariguchi)
  125. Primary-site:   ftp.kobe-u.ac.jp /pub/PC-UNIX/Linux/network/dhcp
  126.                 33kB dhcpcd-0.70.tar.gz
  127. Alternate-site: sunsite.unc.edu /pub/Linux/system/Network/daemons
  128.                 33kB dhcpcd-0.70.tar.gz
  129. Original-site:
  130. Platforms:       Linux 1.2.xx, 1.3.xx, 2.0.x
  131. Copying-policy: GPL
  132.  
  133.   Slackware
  134.   
  135.    You can download the latest copy of the DHCPcd from any sunsite mirror
  136.    or following:
  137.    
  138.      ftp://ftp.cdrom.com/pub/linux/sunsite/system/network/daemons/.
  139.    
  140.      ftp://sunsite.unc.edu/pub/Linux/system/network/daemons
  141.    
  142.      ftp://ftp.kobe-u.ac.jp/pub/PC-UNIX/Linux/network/dhcp (Primary site
  143.    in Japan)
  144.    
  145.    Download the latest version of dhcpcd.tar.gz
  146.    
  147.      Unpack it
  148. tar -zxvf dhcpcd-0.70.tar.gz
  149.  
  150.      cd into the directory
  151. cd dhcpcd-0.70
  152.  
  153. make
  154.  
  155.      You need to be root to do the following
  156. make install
  157.  
  158.    This will create the directory /etc/dhcpc where DHCPcd will store the
  159.    DHCP information and dhcpcd file will be copied into /usr/sbin. Now
  160.    skip to Step 2
  161.    
  162.   RedHat
  163.   
  164.    DHCPcd is included in the standard RedHat distribution as an RPM and
  165.    you can find it on your distribution's CD-ROM in RPMS directory or you
  166.    can download it from:
  167.    
  168.      ftp://tsx-11.mit.edu/pub/linux/distributions/redhat/redhat-4.2/i386/
  169.    RedHat/RPMS/dhcpcd-0.6-2.i386.rpm.
  170.    
  171.      and install it with
  172. rpm -i dhcpcd-0.6-2.i386.rpm
  173.  
  174.    Alternatively you can compile your own version by following the steps
  175.    outlined in the Slackware part. When done go to Step 2
  176.    
  177.   Debian
  178.   
  179.    There is deb package of DHCPcd at
  180.    
  181.      ftp://ftp.debian.org/debian/stable/binary/net/
  182.    
  183.    or you can follow the Slackware installation instructions.
  184.    
  185.    In order to unpack the deb package type
  186. dpkg -i /where/ever/your/debian/packages/are/dhcpd*deb
  187.  
  188.    When done go to Step 2
  189.      _________________________________________________________________
  190.    
  191.    Step 2)
  192.    
  193.    Following step(s) are depended on your needs.
  194.    
  195.    a) If you need network connectivity only occasionally you can start
  196.    dhcpcd from the command line (you need to be root to execute it) by
  197.    typing
  198.    
  199. /usr/sbin/dhcpcd
  200.  
  201.    When you need to down (turn off) the network type
  202. /usr/sbin/dhcpcd -k
  203.  
  204.    You now only lack nameservers configuration file (/etc/resolv.conf).
  205.    For instructions on how to create a resolv.conf go to Step 3
  206.    
  207.    b) If you want (need) network connectivity all the time and would like
  208.    dhcpcd to start at boot time follow the steps below.
  209.    
  210.   Slackware
  211.   
  212.    In order to make the system initialize using DHCP during boot type:
  213. cd /etc/rc.d
  214. mv rc.inet1 rc.inet1.OLD
  215.  
  216.    This will move the old network initialization script into
  217.    rc.inet1.OLD. You now need to create the new rc.inet1. It should look
  218.    as follows:
  219. #!/bin/sh
  220. #
  221. # rc.inet1      This shell script boots up the base INET system.
  222. #
  223. # Version:      @(#)/etc/rc.d/rc.inet1  1.01    05/27/93
  224. #
  225.  
  226. HOSTNAME=`cat /etc/HOSTNAME` #This is probably not necessary but I
  227.                              #will leave it in anyways
  228.  
  229. # Attach the loopback device.
  230. /sbin/ifconfig lo 127.0.0.1
  231. /sbin/route add -net 127.0.0.0 netmask 255.0.0.0 lo
  232.  
  233. # IF YOU HAVE AN ETHERNET CONNECTION, use these lines below to configure the
  234. # eth0 interface. If you're only using loopback or SLIP, don't include the
  235. # rest of the lines in this file.
  236.  
  237. /usr/sbin/dhcpcd
  238.  
  239.    Save the above file as rc.inet1. Reboot your computer. Go to Step 3.
  240.    
  241.   RedHat
  242.   
  243.    This information was provided to me by nothing (nothing@cc.gatech.edu)
  244.    
  245.      Removed my static ip and name from /etc/resolv.conf. However, I did
  246.    leave in the search line and my two nameserver lines (for some reason
  247.    my dhcpcd never creates a /etc/dhcpc/resolv.conf, so I have to use a
  248.    static /etc/resolv.conf).
  249.    
  250.      In /etc/sysconfig/network I removed the HOSTNAME and GATEWAY
  251.    entries. I left the other entries as is (NETWORKING, DOMAINNAME,
  252.    GATEWAYDEV).
  253.    
  254.      In /etc/sysconfig/network-scripts/ifcfg-eth0 I removed the IPADDR,
  255.    NETMASK, NETWORK, and BROADCAST entries. I left DEVICE and ONBOOT as
  256.    is. I changed the BOOTPROTO line to BOOTPROTO=dhcp.
  257.    
  258.    Save the file. Reboot your computer and go to Step 3
  259.    
  260.   Debian
  261.   
  262.    It appears that there isn't a need for any DHCPcd configuration
  263.    because:
  264. From: Heiko Schlittermann
  265.  
  266.      The dhcpcd package installs it's startup script as usual for debian
  267.    packages in /etc/init.d/, here as /etc/init.d/dhcpcd, and links this
  268.    to the various /etc/rc?.d/ directories.
  269.    
  270.    The contents of the /etc/rc?.d/ dirs is then executed at boot time.
  271.    
  272.      If you don't reboot after installing you should consider starting
  273.    the daemon manually:
  274.    
  275. /etc/init.d/dhcpcd start
  276.  
  277.    Go to Step 3.
  278.      _________________________________________________________________
  279.    
  280.    Step 3) This step should be the same for all distributions.
  281.    
  282.    After your machine reboots your network interface should be
  283.    configured. Type:
  284. ifconfig
  285.  
  286.      You should get something like this
  287. lo        Link encap:Local Loopback
  288.           inet addr:127.0.0.1  Bcast:127.255.255.255  Mask:255.0.0.0
  289.           UP BROADCAST LOOPBACK RUNNING  MTU:3584  Metric:1
  290.           RX packets:302 errors:0 dropped:0 overruns:0 frame:0
  291.           TX packets:302 errors:0 dropped:0 overruns:0 carrier:0 coll:0
  292.  
  293. eth0      Link encap:Ethernet  HWaddr 00:20:AF:EE:05:45
  294.           inet addr:24.128.53.102  Bcast:24.128.53.255  Mask:255.255.254.0
  295.           ^^^^^^^^^^^^^^^^^^^^^^^
  296.           UP BROADCAST NOTRAILERS RUNNING MULTICAST  MTU:1500  Metric:1
  297.           RX packets:24783 errors:1 dropped:1 overruns:0 frame:1
  298.           TX packets:11598 errors:0 dropped:0 overruns:0 carrier:0 coll:96
  299.           Interrupt:10 Base address:0x300
  300.  
  301.    If you have some normal number under inet. addr you are set. DHCPcd is
  302.    a daemon and will stay running as long as you have your machine on.
  303.    Every three hours it will contact the DHCP server and try to renew the
  304.    IP address lease. It will log all the messages to the syslog (on
  305.    Slackware /var/adm/syslog) if you need to check up on it.
  306.    
  307.    One final thing. You need to specify your nameservers. There are two
  308.    ways to do it, you can either ask your provider to provide you with
  309.    the addresses of your name server and then put those in the
  310.    /etc/resolv.conf or DHCPcd will obtain the list from the DHCP server
  311.    and will build a resolv.conf in /etc/dhcpc. I decided to use DHCPcds
  312.    resolv.conf by doing the following:
  313.    
  314.      Back up your old /etc/resolv.conf
  315. mv /etc/resolv.conf /etc/resolv.conf.OLD
  316.  
  317.      If directory /etc/dhcpc doesn't exist create it
  318. mkdir /etc/dhcpc
  319.  
  320.      Make a link from /etc/dhcpc/resolv.conf to /etc/resolv.conf
  321. ln -s /etc/dhcpc/resolv.conf /etc/resolv.conf
  322.  
  323.    If that doesn't work try this (fix suggested by nothing@cc.gatech.edu
  324.    with a little amendment by Henrik Stoerner)
  325.    
  326.      This last step I had to perform only because my dhcpcd doesn't
  327.    create an /etc/dhcpc/resolv.conf. In
  328.    /etc/sysconfig/network-scripts/ifup I made the following changes
  329.    (which are a very poor hack, but they work for me):
  330.    
  331. #################################
  332. elif [ "$BOOTPROTO" = dhcp -a "$ISALIAS" = no ]; then
  333.     echo -n "Using DHCP for ${DEVICE}... "
  334.     /sbin/dhcpcd -c /etc/sysconfig/network-scripts/ifdhcpc-done ${DEVICE}
  335.     echo "echo \$$ > /var/run/dhcp-wait-${DEVICE}.pid; exec sleep 30" | sh
  336.  
  337.     if [ -f /var/run/dhcp-wait-${DEVICE}.pid ]; then
  338.         ^^^^
  339.         echo "failed."
  340.         exit 1
  341. #################################
  342.  
  343.    I changed to:
  344.    
  345. #################################
  346. elif [ "$BOOTPROTO" = dhcp -a "$ISALIAS" = no ]; then
  347.     echo -n "Using DHCP for ${DEVICE}... "
  348.     /sbin/dhcpcd
  349.     echo "echo \$$ > /var/run/dhcp-wait-${DEVICE}.pid; exec sleep 30" | sh
  350.  
  351.     if [ ! -f /var/run/dhcp-wait-${DEVICE}.pid ]; then
  352.         ^^^^^^
  353.        echo "failed."
  354.        exit 1
  355. #################################
  356.  
  357.    Notice the ! (bang) in
  358. if [ ! -f /var/run/dhcp-wait-${DEVICE}.pid ];
  359.  
  360.    Now sit back and enjoy :-).
  361.    
  362.   Troubleshooting
  363.   
  364.    If you have followed the steps outlined above and you are unable to
  365.    access the network there are several possible explanations:
  366.    
  367.    I. Your network card is not configured properly.
  368.    
  369.    During the boot up process your Linux will probe your network card and
  370.    should say something along these lines:
  371. eth0: 3c509 at 0x300 tag 1, 10baseT port, address  00 20 af ee 11 11, IRQ 10.
  372. 3c509.c:1.07 6/15/95 becker@cesdis.gsfc.nasa.gov
  373.  
  374.    If a message like this doesn't appear your ethernet card might not be
  375.    recognized by your Linux system. If you have a generic ethernet card
  376.    (a NE2000 clone) you should have received a disk with DOS utilities
  377.    that you can use to set up the card. Try playing with IRQs until Linux
  378.    recognizes your card (IRQ 9,10,12 are usually good).
  379.    
  380.    II. Your DHCP server supports RFC 1541
  381.    
  382.    Try running dhcpcd by typing
  383.    
  384. dhcpcd -r
  385.  
  386.    Use ifconfig to check if your network interface is configured (wait
  387.    few seconds for the configuration process, initally it will say
  388.    Inet.addr=0.0.0.0)
  389.    
  390.    If this solves your problem add the "-r" flag to the boot up scripts
  391.    from Step 2) ie. instead of
  392. /sbin/dhcpcd
  393.  
  394.    you will have
  395. /sbin/dhcpcd -r
  396.  
  397.    III. During bootup I get error message "Using DHCP for eth0 ...
  398.    failed" but my system works fine.
  399.    
  400.    You are most likely using RedHat and you haven't followed instructions
  401.    acurately :-). You are missing the ! (bang) in one of the if
  402.    statements Jump back up and read it again.
  403.    
  404.    IV. My network works for few minutes and then stops responding
  405.    
  406.    There are some reports of gated (gateway daemon) screwing up routing
  407.    on Linux boxes which results in problem described above. Check if
  408.    gated is running
  409.    
  410. ps -auxww | grep gate
  411.  
  412.    If it is try removing it with RedHat's RPM manager or removing the
  413.    entry in /etc/rc.d/
  414.    
  415.    V. My ethernet card is recognized during boot up but I still get "NO
  416.    DHCPOFFER" message in my logs. I also happen to have a PCMCIA ethernet
  417.    card.
  418.    
  419.    You need to make sure that you have the 10BaseT port ("phone" plug) on
  420.    your network card activated. Best way to verify it is to check what
  421.    kind of connector your card is configured for during bootup e.g.
  422. eth0: 3c509 at 0x300 tag 1, 10baseT port, address  00 20 af ee 11 11, IRQ 10.
  423.                             ^^^^^^^^^^^^
  424. 3c509.c:1.07 6/15/95 becker@cesdis.gsfc.nasa.gov
  425.  
  426.    I have received reports of laptop users having this kind of problems
  427.    due to the PCMCIA utilities (specifically ifport) which would set the
  428.    connector type to 10Base2 (thinnet). You have to make sure you use
  429.    10BaseT for your connection. If you are not reconfigure the card and
  430.    restart the computer.
  431.    
  432.    VI. I have followed all the steps but still my machine is not able to
  433.    connect
  434.    
  435.      The cable modem will usually memorize the ethernet address of your
  436.    network card so if you connect a new computer or switch network cards
  437.    you will somehow have to "teach" your cable modem to recognize the new
  438.    computer/card. Usually you can turn of the modem and bring it back up
  439.    while computer is on or you will have to call tech support and tell
  440.    them that you have changed a network card in the computer.
  441.    
  442.      You have firewall rules (ipfwadm rules) that disallow port 67/68
  443.    traffic used by DHCP to distribute configuration info. Check your
  444.    firewall rules carefully.
  445.      _________________________________________________________________
  446.    
  447.    Thanks to all the people that contributed with their ideas and
  448.    suggestions. Especially the following:
  449.    
  450.    Heiko Schlittermann (heiko@os.inf.tu-dresden.de)
  451.    Jonathan Smith (jps2@ra.msstate.edu)
  452.    Dan Khabaza (danyh@iil.intel.com)
  453.    Hal Sadofsky (sadofsky@math.uoregon.edu)
  454.    Henrik Stoerner (henrik_stoernet@olicom.dk)
  455.    Paul Rossington (paulrossington@unn.unisys.com)
  456.