Installing dhcpd on your LAN interface under Red Hat 7.3

Sins committed in Dec 2002, but Jan K. Labanowski, jkl@ccl.net
Disclaimer: all stuff below is a nonsense, and you cannot rely on any of this. Only laywers can tell you how to install your software reliably, or how to sue someone for giving you the wrong advice. The advice below is wrong, and you should not use it, and you cannot sue me either, since you have been warned that this is nonsense. You can also post it wherever you want, provided that you include this notice, or remove any trace of my identity from this memo. -- Jan Labanowski, jkl@ccl.net. Please send corrections to me at jkl@ccl.net and be lenient on me if I do not answer -- I am kind of busy lately.

You may often prefer to have an option that your firewall acts also as DHCP server, i.e., it assigns a dynamic, temporary IP address to a computer when it requests it, e.g., when it boots. Note that static and dynamic IP addresses can coexists safely on the LAN. You need to specify the range of addresses to be used for static addressing, and select a range of addresses to be used for dynamic assignment. In my case, I use static addresses for the desktop computers (which do not move), and the dynamic addresses for the laptops. Static addresses have the advantage since you can assign some services to them (e.g., print server, NFS server, etc) and they will not change their IP addresses. However, when your computer is a client by definition (e.g., a laptop which you carry to work, to hotels, and then bring home), the DHCP is very handy.

Installing dhcpd

To do this, you need to install dhcp (namely, dhcpd -- DHCP daemon). DO not confuse this with a dhcpcd (DHCP client daemon). The DHCP is the server which provides the IP addresses for computers which request it. The DHCP Client daemon is the program running on the computer which requests the address, and renews/maintains it.

I used the RPM package: dhcp-2.0pl5-8.i386.rpm which is available on the 2nd CD in RH 7.3 distribution under RedHat/RPMS. You can also get it from the net, e.g.: ftp://rpmfind.net/linux/redhat/7.3/en/os/i386/RedHat/RPMS/dhcp-2.0pl5-8.i386.rpm
Being a root, I unpacked it as:

rpm -Uhv dhcp-2.0pl5-8.i386.rpm
By default it will come inactive on boot. You need to add a few things.

dhcpd.conf

The /etc/dhcpd.conf file:


subnet 192.168.0.0 netmask 255.255.255.0 { 
        range 192.168.0.127 192.168.0.254; 
        option subnet-mask 255.255.255.0; 
        option broadcast-address 192.168.0.255; 
        option routers 192.168.0.1; 
        option domain-name-servers 192.159.44.10, 211.158.23.19; 
        option domain-name "mylan"; 

This assumes that you will be returning addresses for the "nonroutable"
subnet:  192.168.0.0. Only addresses in the range from 192.168.0.127
to 192.168.0.254 will be served. This way you can use addresses in the
range: 192.168.0.2 to 192.168.0.126 for your computers with static assigned 
addresses. The routers option relates to the IP address of your
router interface (in my case eth1) which is connected to the internal
LAN. In my case, it has the IP address: 192.168.0.1. The domain-name-servers
is a VERY IMPORTANT ENTRY. It is intentionally BOGUS in the above
example (note that digits are larger than 7 in the example above).
You take these numbers from the file: /etc/resolv.conf on
your firewall. Those are usually assigned by your Internet Service 
Provider. You can also run your own DNS server, and then you give
its address here (e.g., if you ran it on the firewall [bad idea], than
it would be 192.168.0.1). Domain name in the above example is what you
want to assigne to your internal network internally. It does not matter
for the world outside, since they only see your firewall, and the
name/address assigned to it.

/etc/sysconfig/dhcpd

The /etc/sysconfig/dhcpdf contains parameters to be entered on the command line of dhcpd when it is started. In my case, I only give there the interface name on which I want DHCP to run. In my case, my LAN is attached to the eth1 interface of my firewal, so this is where it need to be:

# Command line options here 
DHCPDARGS=eth1

/etc/rc.d/init.d/dhcpd

The script which starts the DHCP server on boot-up is located in /etc/rc.d/init.d/dhcpd with other startup scripts of RH7.3 linux. You do not need to edit the script, and look for the line:
# chkconfig: - 65 35
or something similar. Change it to:
# chkconfig: 345 65 35
The boot-up links for DHCP are usually inactive, so you need to add them. What I did is:
cd /etc/rc.d
find . -name "[SK]*dhcpd" -exec rm {} \;       # this deletes old links
cd init.d
chkconfig --add dhcpd
chkconfig --list dhcpd
You should see "on" at runlevels: 3, 4, and 5.

Your firewall script

By default, the firewall will usually block the broadcasts and will not allow your LAN computers to query the DHCP for address. You need to put something like this close to the top of your firewall script, to allow for the DHCP to serve your LAN

$IPTABLES -t nat -A PREROUTING -i eth1 -p UDP -s 192.168.0.1 \
       --sport 68 --dport 67 -j ACCEPT

$IPTABLES -A OUTPUT -o eth1 -p UDP -s 0.0.0.0/32 --sport 67  \
       -d 255.255.255.255/32 --dport 68 -m state --state ESTABLISHED -j ACCEPT

$IPTABLES -A INPUT  -i eth1 -p UDP -s 0.0.0.0/32 --sport 68 \
      -d 255.255.255.255/32 --dport 67 -m state --state NEW,ESTABLISHED \
      -j ACCEPT

$IPTABLES -A OUTPUT -o eth1 -p UDP -s any/0--sport 67 -d 192.168.0.1 \
      --dport 68 -m state --state ESTABLISHED -j ACCEPT

$IPTABLES -A INPUT  -i eth1 -p UDP -s 192.168.0.1 --sport 68 
     -d any/0 --dport 67 -m state --state NEW,ESTABLISHED -j ACCEPT

                  Rgds





   $IPTABLES -A OUTPUT -o eth1 -p tcp -s 0.0.0.0/32 --sport 67 -d 255.255.255.255/32 --dport 68 -j ACCEPT
        $IPTABLES -A OUTPUT -o $internal_int -p udp -s $internal_ip --sport 67 -d 255.255.255.255 --dport 68 -j ACCEPT
        
        $IPTABLES -A INPUT -i $internal_int -p tcp --sport 68 --dport 67 -j ACC\EPT
   $IPTABLES -A INPUT -i $internal_int -p udp --sport 68 --dport 67 -j ACCEPT



The 

http://www.nobell.org/~gjm/linux/gateway/