Linux下dhcp的配置
一.dhcp的介绍
1.作用
为电脑自动分配ip地址
2.  dhcp作用:
 1>减少管理员的工作量
 2>减小输入错误的可能
 3>避免IP的冲突
 4>当网络更改IP地址段时,不需要重新配置每台计算机的IP
 5>提高了IP地址的利用率
3.DHCP动作原理
 1>DHCP的几个名词
 DHCP客户:DHCP客户是通过DHCP来获得网络配置参数的Internet主机,通常就是所说的普通用户的工作站
 DHCP服务器:DHCP服务器是提供网络设置参数给DHCP客户的Internet主机
  2>租约的产生
客户端在启动时会发生租约的产生过程,它的工作原理可以使用下图来概括:
 


(1)客户端请求IP租约.
     在客户端连接上网络时会在网络中广播一个DHCP Discover包,该数据包使用的是UDP的67端口,因为本身还没有IP地址,所以广播时它的IP地址是:0.0.0.0,目的IP地址是255.255.255.255,该包还包含客户端的MAC地址和计算机主机名
(2)服务器响应
      当服务器收到客户端发送的请求IP地址的数据包之后,就会在自己的IP数据库中查找是否有可用的IP地址,如果有的话,DHCP服务器就广播一个DHCP Offer包,该数据包使用的是UDP的68端口,源IP地址为DHCP服务器的IP地址,目的IP地址为255.255.255.255,发送出去的Offer包内包含的内容有:DHCP客户端的MAC地址;DHCP服务器提供的合法的IP地址;子网掩码;租约期限;服务器IP地址
(3)客户端选择ip地址
     有时一个网段内会有多个DHCP服务器,也就是说,在客户端发送Discover时会有多个DHCP服务器响应,这就需要DHCP客户端选择一个IP地址来使用,系统规定DHCP客户端会从接收到的第一个DHCP Offer包中选择IP地址,并且发送DHCP Request包进行广播,表明它使用ip地址的服务器,该数据包使用UDP的67端口,源IP地址0.0.0.0,目的IP地址:255.255.255.255
(4)服务器确认
     DHCP服务器在收到DHCP Request包后,会以ACK包向客户端广播确认成功,该数据包使用UDP的68端口,源IP为DHCP服务器IP地址,目的IP为255.255.255.255,当客户端收到DHCP ACK后,就使用得到的IP地址,这时整个租约产生过程就成功结束.

 3>关于租约的更新
 当客户端重新启动时客户端会重新提出租约的租用
 当租约到达50%时,也需要重新更新租约,这里客户端直接向服务器端发送DHCP Request包,要求更新租约,如果更新不成功的话,则客户端会再次等到租约的87.5%时,会再次进行租约的更新,但这次DHCP客户端是向网络上所有的DHCP服务器进行广播来更新现有的租约.
 二.  DHCP的配置
[root@localhost ~]# yum install -y dhcp
Loaded plugins: katello, product-id, security, subscription-manager
Updating certificate-based repositories.
[root@localhost ~]# rpm -ql dhcp
/etc/dhcpd.conf          //dhcp的配置文件
/etc/rc.d/init.d/dhcpd   //dhcp 的启动脚本
/etc/rc.d/init.d/dhcrelay
/usr/share/doc/dhcp-3.0.5   //帮助文档/var/lib/dhcpd/dhcpd.leases     //dhcp租约
[root@localhost ~]# vim /etc/dhcpd.conf 
#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.sample  
#
[root@localhost ~]# cp /usr/share/doc/dhcp*/dhcpd.conf.sample  /etc/dhcpd.conf 
cp: overwrite `/etc/dhcpd.conf'? y
[root@localhost ~]# vim /etc/dhcpd.conf
ddns-update-style interim;         //定义所支持的DNS动态更新的型{none|adhoc|interim
ignore client-updates;             //allow/ignore允许/忽略客户机更新DNS记录
subnet 172.16.0.0 netmask 255.255.0.0 {        //定义dhcp服务的子网
# --- default gateway
        option routers                  172.16.1.1;       / /定义默认路由
        option subnet-mask              255.255.0.0;     //定义分配的子网掩码
        option nis-domain               "domain.org";
       option domain-name              "domain.org";
        option domain-name-servers      192.168.1.1;    #定义dns地址
        option time-offset              -18000; # Eastern Standard Time
#       option ntp-servers              192.168.1.1;
#       option netbios-name-servers     192.168.1.1;
# --- Selects point-to-point node (default is hybrid). Don't change this unless
# -- you understand Netbios very well
#       option netbios-node-type 2;
        range dynamic-bootp 172.16.1.20 172.16.1.200;      //ip地址池,从大向小分配ip

        default-lease-time 21600;        //默认租约时间,单位:秒
      max-lease-time 43200;              //最大租约时间
     # we want the nameserver to appear at a fixed address
        host ns {                                     //静态分配ip
                next-server marvin.redhat.com;
                hardware ethernet 12:34:56:78:AB:CD; // 写一台固定机器的mac地址
                fixed-address 207.175.42.254;     //写这台机器的ip地址,分配固定ip
        }
}
[root@localhost ~]# /etc/init.d/dhcpd start
Starting dhcpd:                                            [  OK  ]
获取ip在另外一个redhat linux上,把ip设置成dhcp主机的ip地址。[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# ls
ifcfg-eth0    ifdown-isdn    ifup-aliases  ifup-plip    ifup-wireless
[root@localhost network-scripts]# vim ifcfg-eth0 
DEVICE=eth0
BOOTPROTO=dhcp            //这里改为dhcp方式
HWADDR=00:0c:29:9f:44:0a
ONBOOT=yes
NETMASK=255.255.0.0
IPADDR=172.16.63.3
TYPE=Ethernet
[root@localhost network-scripts]# /etc/init.d/network restart
Shutting down interface eth0:                              [  OK  ]
[root@localhost ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:E6:BA:E8  
          inet addr:172.16.1.200  Bcast:172.16.255.255  Mask:255.255.0.0
          inet6 addr: fe80::20c:29ff:fee6:bae8/64 Scope:Link
   //Ip地址变成了172.16.1.200