DHCP以及部署DHCP

linux dhcp client配置

linux dhcp client配置

[root@clientlinux ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
NM_CONTROLLED=no
ONBOOT=yes              #自动启用该网卡
BOOTPROTO=dhcp          #使用dhcp
linux dhcp client配置

dchp 原理

基于UDP,端口号67、68
服务器监听67 端口,客户端监听68 端口

DHCP 获取地址的过程:

(1)发现阶段:
    DHCP客户端通过发送DHCP DISCOVER报文来寻找DHCP服务器。
    由于DHCP服务器的IP地址对于客户端来说是未知的,所以DHCP客户端以广播方式(三层广播)发送DHCP DISCOVER报文。
    所有收到DHCP DISCOVER报文的DHCP服务器都会发送回应报文,DHCP客户端据此可以知道网络中存在的DHCP服务器的位置。
    说明:
        1、DHCP报文源IP:0.0.0.0 ,目的IP:255.255.255.2552、RFC2131中定义了DHCP报文的广播标志字段(flags),当标志字段的最高位为0时,表示客户端希望服务器以单播方式发送DHCPOFFER/DHCP ACK报文;当标志字段的最高位为1时,表示客户端希望服务器以广播方式发送DHCP OFFER/DHCP ACK报文。

(2)提供阶段:
    网络中接收到DHCP DISCOVER 报文的DHCP 服务器,会从地址池选择一个合适的IP 地址,连同IP 地址租约期限和其他配置信息(如网关地址、域名服务器地址等)通过DHCP OFFER 报文发送给DHCP 客户端
    说明:
        1、DHCP报文源IP:server的IP地址,目的IP:即将要分配给client的IP地址。
        2、此阶段DHCP服务器分配给客户端的IP地址不一定是最终确定使用的IP地址,因为DHCP OFFER报文发送给客户端等待16秒后如果没有收到客户端的响应,此地址就可以继续分配给其他客户端。通过下面的选择阶段和确认阶段后才能最终确定客户端可以使用的IP地址。

(3)选择阶段:
    如果有多台DHCP 服务器向DHCP 客户端回应DHCP OFFER 报文,则DHCP 客户端只接收第一个收到的DHCP OFFER 报文。然后以广播方式发送DHCP REQUEST 请求报文,该报文中包含服务器标识选项(Option54),即它选择的DHCP 服务器的IP 地址信息。
    说明:
        以广播方式发送DHCP REQUEST报文,是为了通知所有的DHCP服务器,它将选择某个DHCP服务器提供的IP地址,其他DHCP服务器可以重新将曾经分配给客户端的IP地址分配给其他客户端。

(4)确认阶段:
    当DHCP 服务器收到DHCP 客户端回答的DHCP REQUEST 报文后,DHCP 服务器会根据DHCP REQUEST 报文中携带的MAC 地址来查找有没有相应的租约记录。
    如果有,则向客户端发送包含它所提供的IP 地址和其它设置的DHCP ACK 确认报文。
    DHCP 客户端收到该确认报文后,会以广播的方式发送免费ARP 报文,探测是否有主机使用服务器分配的IP 地址,如果在规定的时间内没有收到回应,客户端才使用此地址。
    说明:
        当DHCP 服务器收到DHCP 客户端发送的DHCP REQUEST 报文后,如果DHCP 服务器由于某些原因(例如协商出错或者由于发送REQUEST 过慢导致服务器已经把此地址分配给其他客户端)无法分配DHCP REQUEST报文中Opton50 填充的IP 地址,则发送DHCP NAK 报文作为应答,通知DHCP 客户端无法分配此IP 地址。DHCP 客户端需要重新发送DHCPDISCOVER 报文来申请新的IP 地址。
DHCP 获取地址的过程
DHCP续约的过程:
    1. 当租期达到50%(T1)时,DHCP客户端会自动以单播的方式向DHCP服务器发送DHCP REQUEST报文,请求更新IP地址租期。
        如果收到DHCP服务器回应的DHCP ACK报文,则租期更新成功(即租期从0开始计算);
        如果收到DHCP NAK报文,则重新发送DHCP DISCOVER报文请求新的IP地址。
    2. 当租期达到87.5%(T2)时,如果仍未收到DHCP服务器的应答,DHCP客户端会自动以广播的方式向DHCP服务器发送DHCP REQUEST报文,请求更新IP地址租期。
        如果收到DHCP服务器回应的DHCP ACK报文,则租期更新成功(即租期从0开始计算);
        如果收到DHCP NAK报文,则重新发送DHCP DISCOVER报文请求新的IP地址。
    3. 如果租期时间到时都没有收到服务器的回应,客户端停止使用此IP地址,重新发送DHCP DISCOVER报文请求新的IP地址。
DHCP续约的过程

 

DHCP 中继和Option82
===============================================================================================================
DHCP 中继:
(1)定义:DHCP Relay 即DHCP 中继,它实现了不同网段间的DHCP 服务器和客户端之间的报文交互。
(2)作用:DHCP 中继承担处于不同网段间的DHCP 客户端和服务器之间中继服务,将DHCP 协议报文跨网段透传到目的DHCP 服务器,最终使网络上的DHCP 客户端可以共同使用一个DHCP 服务器。
(3)工作原理:DHCP 客户端发送请求报文给DHCP 服务器, DHCP 中继收到该报文并适当处理后,以单播形式发送给指定的位于其它网段上的DHCP 服务器。服务器根据请求报文中提供的必要信息,通过DHCP中继将配置信息返回给客户端,完成对客户端的动态配置。

---------------------------------------------------------------------------------------------------------------
 Option82:
    称为中继代理信息选项,该选项记录了DHCP 客户端的位置信息。DHCP 中继或DHCP Snooping 设备接收到DHCP 客户端发送给DHCP 服务器的请求报文后,在该报文中添加Option82,并转发给DHCP 服务器。
    管理员可以从Option82 中获得DHCP 客户端的位置信息,以便定位DHCP 客户端,实现对客户端的安全和计费等控制。支持Option82 的服务器还可以根据该选项的信息制定IP 地址和其他参数的分配策略,提供更加灵活的地址分配方案。
    Option82 最多可以包含255 个子选项。若定义了Option82,则至少要定义一个子选项。目前设备只支持两个子选项:sub-option1(Circuit ID,电路ID 子选项)和sub-option2(Remote ID,远程ID 子选项)。
DHCP 中继和Option82

防止DHCP Server 仿冒者攻击
DHCP 报文泛洪攻击
DHCP Server 服务拒绝攻击(饿死)
仿冒DHCP 报文攻击
结合IPSG、DAI 技术进行防护

 配置dhcp服务端

安装dhcp
rpm -q dhcp
rpm -ql dhcp

yum install -y dhcp
systemctl status dhcpd

-------------------------------------------------------------
    [root@centos7 ~]# which dhcpd
    /usr/sbin/dhcpd

    [root@centos7 ~]# rpm -q dhcp
    dhcp-4.2.5-83.el7.centos.1.x86_64

    [root@centos7 ~]# rpm -ql dhcp
    /etc/NetworkManager
    /etc/NetworkManager/dispatcher.d
    /etc/NetworkManager/dispatcher.d/12-dhcpd
    /etc/dhcp/dhcpd.conf                        #dhcp配置文件
    /etc/dhcp/dhcpd6.conf
    /etc/dhcp/scripts
    /etc/dhcp/scripts/README.scripts
    /etc/openldap/schema/dhcp.schema
    /etc/sysconfig/dhcpd
    /usr/bin/omshell
    /usr/lib/systemd/system/dhcpd.service
    /usr/lib/systemd/system/dhcpd6.service
    /usr/lib/systemd/system/dhcrelay.service
    /usr/sbin/dhcpd                                 #dhcp的执行文件
    /usr/sbin/dhcrelay
    /usr/share/doc/dhcp-4.2.5
    /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example    #dhcp配置模板文件
    /usr/share/doc/dhcp-4.2.5/dhcpd6.conf.example
    /usr/share/doc/dhcp-4.2.5/ldap
    /usr/share/doc/dhcp-4.2.5/ldap/README.ldap
    /usr/share/doc/dhcp-4.2.5/ldap/dhcp.schema
    /usr/share/doc/dhcp-4.2.5/ldap/dhcpd-conf-to-ldap
    /usr/share/man/man1/omshell.1.gz
    /usr/share/man/man5/dhcpd.conf.5.gz
    /usr/share/man/man5/dhcpd.leases.5.gz
    /usr/share/man/man8/dhcpd.8.gz
    /usr/share/man/man8/dhcrelay.8.gz
    /usr/share/systemtap/tapset/dhcpd.stp
    /var/lib/dhcpd
    /var/lib/dhcpd/dhcpd.leases                     #储存了各个dhcp client的租约信息
    /var/lib/dhcpd/dhcpd6.leases


[root@centos7 ~]# cat /var/lib/dhcpd/dhcpd.leases   #储存了各个dhcp client的租约信息
[root@centos7 ~]#
安装dhcp
/etc/dhcp/dhcpd.conf文件中参数详解
规范:
    『 # 』为批注符号;
    除了右括号 ")" 后面之外,其他的每一行设定最后都要以『 ; 』做为结尾!重要!
    设定项目语法主要为:『 <参数代号> <设定内容> 』,例如:default-lease-time 259200;
    某些设定项目必须以 option 来设定,基本方式为『 option <参数代码> <设定内容> 』例如:option domain-name "your.domain.name";

1、设置默认搜索域:option domain-name
    option domain-name配置项用来为客户机指定解析主机名时的默认搜索域,该配置项将体现在客户机的“/etc/resolv.conf”配置文件中(如 “search benet.com”)。配置文件中默认的搜索域是example.org,配置信息如下:
    option domain-name "example.org"; 
 
2、设置DNS服务器地址:option domain-name-servers
    option domain-name-servers配置项用来为客户机指定解析域名时使用的DNS服务器地址,该配置项同样将体现在客户机的/etc /resolv.conf配置文件中(如“nameserver 202.106.0.20”)。若需要设置多个DNS服务器地址,可以使用逗号“,”进行分割。配置文件中默认设置如下:
    option domain-name-servers ns1.example.org, ns2.example.org; 
 
3、默认租约时间:default-lease-time
    default-lease-time配置项用来设置默认租约时间,它的单位为秒,表示客户端可以从DHCP服务器租约某个IP地址的默认时间。默认配置如下:
    default-lease-time 600; 
 
4、设置最大租约时间:max-lease-time
    max-lease-time配置项用来配置允许DHCP客户端请求的最大租约时间,当客户端未请求明确的租约时间时,服务器将采用默认租约时间。默认配置如下:
    max-lease-time 7200; 

5、设置动态DNS更新模式:ddns-update-style
    ddns-update-style配置项用来设置与DHCP服务相关联的DNS数据动态更新模式,实际的DHCP应用中很少用的该参数,将值设为none即可。默认配置如下:
    #ddns-update-style none; 

6、设置子网属性:subnet
在主配置文件dhcpd.conf中,包括声明、参数和选项3种基本类型的配置项,其作用与表现形式如下。
(1)“声明”用来描述dhcpd服务器中对网络布局的划分,是网络设置的逻辑范围。
(2)“参数”由配置关键字和对应的值组成,多用来确定DHCP服务的相关运行参数(如默认租约时间、最大租约时间等)。参数总是以分号“;”结束,可以位于全局配置或指定的声明中。
(3)“选项”由option引导,后面跟具体的配置关键字和对应的值,一般用于指定分配给客户端的配置参数(如默认网关地址、子网掩码、DNS服务器地址等)。选项也是以分号“;”结束,可以位于全局配置或指定的声明中。

7、设置主机属性:host

8、配置超级作用域:shared-network

ddns-update-style 类型:
因为 DHCP 客户端所取得的 IP 通常是一直变动的,所以某部主机的主机名与 IP 的对应就很难处理。此时 DHCP 可以透过 ddns (请参考第十章与第十九章 DNS 的说明) 来更新主机名与 IP 的对应。不过我们这里不谈这么复杂的东西,所以你可以将他设定为 none 喔。

ignore client-updates:
与上一个设定值较相关,客户端可以透过 dhcpd 服务器来更新 DNS 相关的信息。不过,这里我们也先不谈这个, 因此就将它设定为 ignore (忽略) 了。

option routers 路由器的地址:
设定路由器的 IP 所在,记得那个『 routers 』要加 s 才对!
/etc/dhcp/dhcpd.conf文件中参数详解

 

/etc/dhcp/dhcpd.conf配置实例1
===========================================================
vim /etc/dhcp/dhcpd.conf
    # 1. 整体的环境设定
    ddns-update-style            none;                      <==不要更新 DDNS 的设定
    ignore client-updates;                                  <==忽略客户端的 DNS 更新功能
    default-lease-time           259200;                    <==预设租约为 3 天
    max-lease-time               518400;                    <==最大租约为 6 天
    option routers               192.168.100.254;           <==这就是预设路由
    option domain-name           "centos.vbird";            <==给予一个领域名
    option domain-name-servers   168.95.1.1, 139.175.10.20;# 设定 DNS 的 IP ,这个设定值会修改客户端的 /etc/resolv.conf 内容

    # 2. 关于动态分配的 IP
    subnet 192.168.100.0 netmask 255.255.255.0 {
        range 192.168.100.101 192.168.100.200;              <==分配的 IP 范围

        host win7 {                                         
            hardware ethernet    08:00:27:11:EB:C2;         <==客户端网卡 MAC
            fixed-address        192.168.100.30;            <==给予固定的 IP
        }
    }
    ###注意:以上的配置其实有问题,若存在多个接口的话,dhcp会监听多个接口,而这明显是不合适的
    ###貌似现在的dhcpd会自动优化这个选项了。。。
/etc/dhcp/dhcpd.conf配置实例1
/etc/dhcp/dhcpd.conf配置实例2
===========================================================
#cat /etc/dhcp/dhcpd.conf
ddns-update-style interim;
log-facility local6;
authoritative;
ping-check true;
ping-timeout 3;
default-lease-time 3600;
max-lease-time 3600;
deny bootp;
failover peer "xxx_peer" {
    primary;
    address 10.100.100.1;
    port 520;
    peer address 10.100.100.2;
    peer port 520;
    max-response-delay 60;
    max-unacked-updates 10;
    mclt 3600;
    split 128;
    load balance max seconds 3;
}
subnet 10.100.100.0 netmask 255.255.255.0 {
    option routers 10.100.100.247;
    option subnet-mask 255.255.255.0;

    pool {
        failover peer "xxx_peer";
        deny dynamic bootp clients;
        range 10.100.100.10 10.100.100.246;
    }
}

on commit {
       set ClientIP = binary-to-ascii(10, 8, ".", leased-address);
       set ClientMac = concat (suffix (concat ("0", binary-to-ascii (16, 8, "",
                        substring(hardware,1, 1))),2),":",suffix (concat ("0", binary-to-ascii (16,
                        8, "", substring(hardware, 2, 1))),2),":",suffix (concat("0",
                        binary-to-ascii (16, 8, "", substring(hardware, 3, 1))),2),":",suffix
                        (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,
                        4,1))),2),":",suffix (concat ("0", binary-to-ascii (16, 8, "",
                        substring(hardware, 5, 1))),2),":",suffix (concat ("0", binary-to-ascii (16,
                        8, "",substring(hardware, 6, 1))),2));
       execute("/usr/sbin/cm.py", ClientIP, ClientMac,"commit");
}
/etc/dhcp/dhcpd.conf配置实例2

cat /var/lib/dhcpd/dhcpd.leases         #查看租约记录,这里是实时信息!

让大量 PC 都具有固定 IP 的脚本
[root@www ~]# vim setup_dhcpd.conf
#!/bin/bash
read -p "Do you finished the IP's settings in every client (y/n)? " yn
read -p "How many PC's in this class (ex> 60)? " num
if [ "$yn" = "y" ]; then
        for site in $(seq 1 ${num})
        do
                siteip="192.168.100.${site}"
                allip="$allip $siteip"
                ping -c 1 -w 1 $siteip > /dev/null 2>&1
                if [ "$?" == "0" ]; then
                        okip="$okip $siteip"
                else
                        errorip="$errorip $siteip"
                        echo "$siteip is DOWN"
                fi
        done
        [ -f dhcpd.conf ] && rm dhcpd.conf
        for site in $allip
        do
                pcname=pc$(echo $site | cut -d '.' -f 4)
                mac=$(arp -n | grep "$site " | awk '{print $3}')
                echo "  host $pcname {"
                echo "          hardware ethernet ${mac};"
                echo "          fixed-address     ${site};"
                echo "  }"
                echo "  host $pcname {"                         >> dhcpd.conf
                echo "          hardware ethernet ${mac};"      >> dhcpd.conf
                echo "          fixed-address     ${site};"     >> dhcpd.conf
                echo "  }"                                      >> dhcpd.conf
        done
fi
echo "You can use dhcpd.conf (this directory) to modified your /etc/dhcp/dhcpd.conf"
echo "Finished."
让大量 PC 都具有固定 IP 的脚本

 

dhcp日志
tail -30 /var/log/messages



# 1. 启动后观察一下埠口的变化:
[root@www ~]# /etc/init.d/dhcpd start
[root@www ~]# chkconfig dhcpd on
[root@www ~]# netstat -tlunp | grep dhcp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address PID/Program name
udp        0      0 0.0.0.0:67    0.0.0.0:*       1581/dhcpd

# 2. 固定去看看登录文件的输出信息
[root@www ~]# tail -n 30 /var/log/messages
Jul 27 01:51:24 www dhcpd: Internet Systems Consortium DHCP Server 4.1.1-P1
Jul 27 01:51:24 www dhcpd: Copyright 2004-2010 Internet Systems Consortium.
Jul 27 01:51:24 www dhcpd: All rights reserved.
Jul 27 01:51:24 www dhcpd: For info, please visit https://www.isc.org/software/dhcp/
Jul 27 01:51:24 www dhcpd: WARNING: Host declarations are global.  They are not 
limited to the scope you declared them in.
Jul 27 01:51:24 www dhcpd: Not searching LDAP since ldap-server, ldap-port and 
ldap-base-dn were not specified in the config file
Jul 27 01:51:24 www dhcpd: Wrote 0 deleted host decls to leases file.
Jul 27 01:51:24 www dhcpd: Wrote 0 new dynamic host decls to leases file.
Jul 27 01:51:24 www dhcpd: Wrote 0 leases to leases file.
Jul 27 01:51:24 www dhcpd: Listening on LPF/eth1/08:00:27:2a:30:14/192.168.100.0/24
Jul 27 01:51:24 www dhcpd: Sending on   LPF/eth1/08:00:27:2a:30:14/192.168.100.0/24
dhcp日志

 

 

Linux下dhcpd服务中主配置文件/etc/dhcp/dhcpd.conf文件中参数详解

鸟哥的DHCP

posted @ 2022-04-26 09:45  雲淡風輕333  阅读(68)  评论(0编辑  收藏  举报