• 搭建DHCP服务实现动态分配IP地址-NTP网络时间同步


    本节所讲内容:

    • DHCP服务器工作原理
    • 使用DHCP为局域网中的机器分配IP地址
    • 使用DHCP为服务器分配固定IP地址
    • ntpdate加计划任务同步服务器时间

     

    实验环境:

    服务端:xuegod63.cn   IP:192.168.0.63

    客户端:xuegod64.cn   IP:192.168.0.64

     

    DHCP服务概述:

    名称:DHCP  - Dynamic Host Configuration Protocol  动态主机配置协议

    功能:DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网的网络协议,使用UDP协议工作, 主要有两个用途:

    1、 给内部网络或网络服务供应商自动分配IP地址,主机名,DNS服务器,域名

    2、 配合其它服务,实现集成化管理功能。如:无人执守安装服务器

     

    特点: C/S 模式

    自动分配IP地址,方便管理

    DHCP不会同时租借相同的IP地址给两台主机;

    DHCP管理员可以约束特定的计算机使用特定的IP地址;

    可以为每个DHCP作用域设置很多选项;

    客户机在不同子网间移动时不需要重新设置IP地址。每次都自动获取IP地址就可以了。

    DHCP的缺点:

    当网络上存在多服务器时,一个DHCP服务器不能查出已被其它服务器租出去的IP地址;

    DHCP服务器不能跨路由器与客户机通信,除非路由器允许BOOTP协议转发。

    端口:

    DHCP服务使用:端口67(bootps) 68(bootpc) 。

    例:查看

    # vim /etc/services

     

    DHCP协议由 bootp协议发展而来,是BOOTP的增强版本bootps代表服务端端口, bootpc代表客户端端口

    bootp协议:引导程序协议(BOOTP)它可以让无盘工作站从一个中心服务器上获得IP地址,为局域网中的无盘工作站分配动态IP地址,并不需要每个用户去设置静态IP地址

     

    BOOTP有一个缺点您在设定前须事先获得客户端的硬件地址,而且,MCA地址IP的对应是静态的。换而言之,BOOTP非常缺乏“动态性 ”,若在有限的IP资源环境中,BOOTP的一对一对应会造成非常可观的浪费

       DHCP可以说是BOOTP的增强版本,它分为两个部分:一个是服务器端,而另一个是客户端。所有的IP网络设定数据都由DHCP服务器集中管理,并负责处理客户端的DHCP要求;而客户端则会使用从服务器分配下来的IP环境数据。比较BOOTP, DHCP透过“租约”的概念,有效且动态的分配客户端的TCP/IP设定,而且,作为兼容考虑,DHCP也完全照顾了BOOTP Client的需求。

     

     

    DHCP服务运行原理:

     

    运行原理,面试经常问到,需要大家注意下!

    DHCP Client发现阶段:

    DHCP客户端寻找DHCP服务端的过程,对应于客户端发送DHCP Discovery,因为DHCP Server对应于DHCP客户端是未知的,所以DHCP 客户端发出的DHCP Discovery报文是广播包,源地址为0.0.0.0目的地址为255.255.255.255。网络上的所有支持TCP/IP的主机都会收到该DHCP Discovery报文,但是只有DHCP Server会响应该报文。

    注意:客户端执行DHCP DISCOVER 后,如果没有DHCP 服务器响应客户端的请求,客户端会随机使用169.254.0.0/16 网段中的一个IP 地址配置本机地址。

     

    169.254.0.0/16是windows的自动专有IP寻址范围,也就是在无法通过DHCP获取IP地址时,由系统自动分配的IP地址段。 


    早先的Linux上并不会产生这条路由,现在有这条路由大概是为了和windows兼容。

     

    [root@xuegod63 ~]# route -n

    Kernel IP routing table

    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface

    192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0

    169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0

    0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 eth0

    DHCP Server 提供阶段:

    DHCP Server提供阶段,即为DHCP Server响应DHCP Discovery所发的DHCP Offer阶段,即DHCP服务器提供IP地址的阶段。在网络中接收到DHCPdiscover发现信息的DHCP服务器都会做出响应,它从尚未出租的IP地址中挑选一个分配给DHCP客户机,向DHCP客户机发送一个包含出租的IP地址和其他设置的DHCPoffer提供信息

    DHCP Client 确认阶段:

    DHCP客户机选择某台DHCP服务器提供的IP地址的阶段。如果有多台DHCP服务器向DHCP客户机发来的DHCPoffer提供信息,则DHCP客户机只接受第一个收到的DHCPoffer提供信息,然后它就以广播方式回答一个DHCPrequest请求信息,该信息中包含向它所选定的DHCP服务器请求IP地址的内容。之所以要以广播方式回答,是为了通知所有的DHCP服务器,他将选择某台DHCP服务器所提供的IP地址

     

    DHCP Server确认阶段:

     

    DHCP服务器确认所提供的IP地址的阶段。当DHCP服务器收到DHCP客户机回答的DHCPrequest请求信息之后,它便向DHCP客户机发送一个包含它所提供的IP地址和其他设置的DHCPack确认信息,告诉DHCP客户机可以使用它所提供的IP地址。然后DHCP客户机便将其TCP/IP协议与网卡绑定,另外,除DHCP客户机选中的服务器外,其他的DHCP服务器都将收回曾提供的IP地址

     

    DHCP Client重新登录网络:

     

    DHCP Client重新登录后,就不需要再发送DHCP discover发现信息了,而是直接发送包含前一次所分配的IP地址的DHCP request请求信息。当DHCP服务器收到这一信息后,它会尝试让DHCP客户机继续使用原来的IP地址,并回答一个DHCP ack确认信息。如果此IP地址已无法再分配给原来的DHCP客户机使用时(比如此IP地址已分配给其它DHCP客户机使用),则DHCP服务器给DHCP客户机回答一个DHCP nack否认信息。当原来的DHCP客户机收到此DHCP nack否认信息后,它就必须重新发送DHCP discover发现信息来请求新的IP地址。

    DHCP Client更新租约:

     

    DHCP获取到的IP地址都有一个租约,租约过期后,DHCP Server将回收该IP地址,所以如果DHCP Client如果想继续使用该IP地址,则必须更新租约。更新的方式就是,当当前租约期限过了一半后,DHCP Client都会发送DHCP Renew报文来续约租期。

     

     

    为了便于理解,我们把DHCP客户机比做餐馆里的客人,DHCP服务器工作原理当中,服务器比做服务员(一个餐馆里也可以有多个服务员),IP地址比做客户需要的食物。那么可以这样描述整个过程:客人走进餐馆,问:“有没有服务员啊?”(DHCP discover),多个服务员同时回答:“有,我这有鸡翅”“有,我这有汉堡”(DHCP offer)。客人说:“好吧,我要一份汉堡”(DHCP request,这个客人比较死板,总是选择第一次听到的食物),端着汉堡的服务员回应了一声:“来啦”(DHCP ack),并把食物端到客人面前,供其享用(将网卡和IP地址绑定)。客人下次来的时候,就直接找上次那个服务员点自己喜欢的汉堡了(DHCP request),如果还有汉堡,服务员会再次确认并上菜(DHCP ack),而如果已经卖完了,服务员则会告诉客人:“不好意思,已经卖完了”(DHCP nack)。当然,服务员隔一段时间会来收拾一次桌子,除非客人特别说明这菜还要继续吃的,服务员会将剩菜端走。

     

    安装DHCP

     

    [root@localhost Packages]#

    dhcp-common-4.1.1-25.P1.el6.x86_64.rpm   #包括DHCP客户端和服务端共同需要的一些文件

    dhclient-4.1.1-25.P1.el6.x86_64.rpm       #dhcpclient

    dhcp-4.1.1-25.P1.el6.x86_64.rpm      # dhcp 服务端包

    yum -y install dhcp

    配置文件位置:

    1、 主配置文件:

    /etc/dhcp/dhcpd.conf

     

    打开这个配置文件发现提示寻找模板配置文件

     

    2DHCP主程序包安装好后会自动生成主配置文件的范本文件

    /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample

    补充:开源服务软件里, .sample 结尾的文件是软件的模板样例文件,需要关注下。

    现在我们将范本配置文件复制到/etc 目录下替换掉空白dhcpd.conf 主配置文件。

    [root@xuegod63~]# cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf

    cp: overwrite `/etc/dhcp/dhcpd.conf'? y

    服务启动关闭脚本,查看端口

    xuegod63 ~]# service dhcpd restart

     

    此时不要启动,启动会失败

    #启动失败的原因是 dhcp服务器配置的IP地址和默认配置文件里定义的地址段不相同。

     

    ##在启动DHCP服务之前,需要给DHCPServer配置一个静态的IP地址

    保证开机启动:

    chkconfig dhcpd on   #配置的服务要保证开机启动

    DHCP配置文件参数说明

    1、主配置文件介绍

    说明:

    dhcp 范本配置文件内容包含了部分参数、声明以及选项的用法,其中注释部分可以放在任何位

    置,并以#”号开头,当一行内容结束时,以;”号结束,大括号所在行除外

     

    可以看出整个配置文件分成全局和局部两个部分。但是并不容易看出哪些属于参数,哪些属于声明和选项。

    概念与协议:

    作用域:可以分配IP的范围 subnet

    地址池:可以分配给客户端的IP,range包括的IP

    保留地址:指定某个客户端使用一个特定IP,通过host配置的

    租约(时间):客户端可以使用这个IP地址的时间

    配置文件:/etc/dhcp/dhcpd.conf部分配置解释

    # option definitions common to all supported networks...    #定义全局配置,通用于所有支持的网络选项.

    option domain-name "example.org";    #为客户端指定所属的域

    option domain-name-servers ns1.example.org, ns2.example.org;  #为客户端指定DNS服务器地址

     

    default-lease-time number(数字)

      default-lease-time 600;

    作用:定义默认IP 租约时间,以秒为单位的租约时间。

    50%:续约。(续不上继续用)

    87.5%:再次续约。(续不上找别人)

    DHCP工作站除了在开机的时候发出 DHCPrequest 请求之外,在租约期限一半的时候也会发出 DHCPrequest ,如果此时得不到 DHCP服务器的确认的话,工作站还可以继续使用该IP;当租约期过了87.5%时,如果客户机仍然无法与当初的DHCP服务器联系上,它将与其它 DHCP服务器通信。如果网络上再没有任何DHCP协议服务器在运行时,该客户机必须停止使用该IP地址,并从发送一个Dhcpdiscover数据包开 始,再一次重复整个过程。要是您想退租,可以随时送出 DHCPRELEASE 命令解约,就算您的租约在前一秒钟才获得的。

    max-lease-time 7200; (数字)

    作用:定义客户端IP租约时间的最大值,当客户端超过租约时间,却尚未更新IP 时,最长可以使用该IP 的时间;

    例:

    比如,机器在开机获得IP地址后,然后关机了。这时,当时间过了default-lease-time 600秒后,没有机器向DHCP续约,DHCP会保留7200秒,保留此IP地址不用于分配给其它机器。 当超过7200秒后,将不再保留此IP地址给此机器。

    注意:3)、(4)都是以秒为单位的租约时间,该项参数可以作用在全局配置中,也可以作用在局部配置中。

    log-facility local7;   #定义日志类型为  local7

     

    subnet

    声明一般用来指定IP 作用域、定义为客户端分配的IP 地址池等等

    声明格式如下:

    subnet 网络号 netmask 子网掩码 {

    选项或参数

    }

    例:

    常见声明的使用如下:

    1subnet 网络号 netmask 子网掩码 {......}

    作用:定义作用域,指定子网

    如:

     

    注意:网络号必须与DHCP 服务器的网络号相同

    下面介绍以下每个选项的含意:

    1)range 起始IP 地址结束IP 地址

    作用:指定动态IP 地址范围

    注意:可以在subnet(子网)声明中指定多个range,但多个range 所定义IP 范围不能重复

    常用选项介绍

    选项通常用来配置DHCP 客户端的可选参数,比如定义客户端的DNS 地址、默认网关等等。选项

    内容都是以option 关键字开始。

    常见选项使用如下:

    1option routers IP 地址

    作用:为客户端指定默认网关

    如:option routers 10.5.5.1;

    2option domain-name

    作用:为客户端指定默认的域

    3option domain-name-servers IP 地址

    作用:为客户端指定DNS 服务器地址

    注意:(1)(2)(3)选项可以用在全局配置中,也可以用在局部配置中。

    2、租约数据库文件

    租约数据库文件用于保存一系列的租约声明,其中包含客户端的主机名、MAC 地址、分配到的IP地址,以及IP地址的有效期等相关信息。这个数据库文件是可编辑的ASCII 格式文本文件。每

    当发生租约变化的时候,都会在文件结尾添加新的租约记录。

    DHCP 刚安装好后租约数据库文件dhcpd.leases 是个空文件

    /var/lib/dhcpd/dhcpd.leases

    DHCP 服务正常运行后就可以使用cat 命令查看租约数据库文件内容了

    这里注意下上课的时候为了适应Xshell 远程连接上演示需要给DHCP主机添加一块网卡,放在VMNET4,让添加的网卡分配地址服务

    xuegod63ifconfig eth1 192.168.1.22/24

    xuegod64: 把网卡改到VMNET4

    实例:

    应用案例

    公司有60 台计算机,IP 地址段为192.168.1.1-192.168.1.254,子网掩码是255.255.255.0,网关为192.168.1.1192.168.1.2-192.168.1.30 网段地址给服务器配置,客户端可以使用的地址段为192.168.1.100-200其余剩下的IP 地址为保留地址。

    实验环境:

    我的虚拟机使用桥接模式是否可行? 不行,因为你的局域网中有可能就有DHCP服务器,这样你就很难,让你的客户端是从你的DHCP服务器获得IP地址。

    另外,也可能造成公司局域网中其它机器因为获得了你DHCP服务器上的IP地址,而上不了网。

    xuegod65 服务端     虚拟机网卡: vmnet4

    xuegod66 客户端     虚拟机网卡: vmnet4

     

    xuegod63和xuegod64 的网卡模式改为:

     

     

    1、先给DHCP服务器配置一个192.168.1.0网段的静态地址,否则服务不能启动。

    2配置好地址后修改配置文件如何

    [root@xuegod63 ~]# vim /etc/dhcp/dhcpd.conf

    只保留,:

    subnet 192.168.1.0 netmask 255.255.255.0 {

      range 192.168.1.100 192.168.1.200;

      option domain-name-servers 192.168.1.1;

      option domain-name "xuegod.cn";

      option routers 192.168.1.1;

      option broadcast-address 192.168.1.255;

      default-lease-time 600;

      max-lease-time 7200;

    }

    [root@xuegod63 ~]# systemctl start dhcpd

     

    [root@xuegod63 ~]# ps aux|grep dhcp

    dhcpd      1971  0.1  0.9 116344 18496 ?        Ss   21:07   0:00 /usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid

    查看端口:

     

    [root@xuegod63 ~]# netstat -tlunp|grep dhcpd

    udp        0      0 0.0.0.0:67              0.0.0.0:*                           1971/dhcpd          

    udp        0      0 0.0.0.0:30086           0.0.0.0:*                           1971/dhcpd          

    udp6       0      0 :::31454                :::*                                1971/dhcpd

    然后xuegod64改为自动获取IP地址。

     [root@xuegod64 ~]# cd /etc/sysconfig/network-scripts/

    [root@xuegod64 network-scripts]# cp ifcfg-ens32  ifcfg-ens35

    [root@xuegod64 network-scripts]# vim ifcfg-ens35

    TYPE="Ethernet"

    PROXY_METHOD="none"

    BROWSER_ONLY="no"

    BOOTPROTO="dhcp"    ##改成dhcp模式

    DEFROUTE="yes"

    IPV4_FAILURE_FATAL="no"

    NAME="ens35"

    UUID="5e02ab66-a084-404a-bb4c-50bf47bd1bd5"

    DEVICE="ens35"

    ONBOOT="yes"

     

    重启网卡:

     

    [root@xuegod64 network-scripts]# ifdown ens35 && ifup ens35

    然后xuegod64改为自动获取IP地址。

    查看:

    [root@xuegod64 network-scripts]# ifconfig ens35

    ens35: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

            inet 192.168.1.100  netmask 255.255.255.0  broadcast 192.168.1.255

            inet6 fe80::20c:29ff:fe07:3630  prefixlen 64  scopeid 0x20<link>

            ether 00:0c:29:07:36:30  txqueuelen 1000  (Ethernet)

            RX packets 5  bytes 864 (864.0 B)

            RX errors 0  dropped 0  overruns 0  frame 0

            TX packets 9  bytes 1242 (1.2 KiB)

            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

     

    查看默认网关

    [root@xue64~]# route -n

    Kernel IP routing table

    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface

    192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0

    169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0

    0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 eth0

    查看DNS

    [root@xuegod64 network-scripts]# cat /etc/resolv.conf

    ; generated by /sbin/dhclient-script

    search xuegod.cn

    nameserver  192.168.1.1

     

    查看租约数据库文件

     

    [root@xuegod63 dhcp]# cat  /var/lib/dhcpd/dhcpd.leases

    # The format of this file is documented in the dhcpd.leases(5) manual page.

    # This lease file was written by isc-dhcp-4.1.1-P1

     

    server-duid "0001000130233206H0014)H200237";

     

    lease 192.168.0.200 {

     starts 3 2013/01/30 07:30:16;

      ends 3 2013/01/30 07:40:16;

      cltt 3 2013/01/30 07:30:16;

      binding state active;

      next binding state free;

      hardware ethernet 00:0c:29:12:ec:1e;

    }

    2:IP 地址绑定

    DHCP 中的IP 地址绑定用于给客户端分配固定IP 地址。比如服务器需要使用固定IP 地址就可以使用IP 地址绑定,通过MAC 地址与IP 地址的对应关系为指定的物理地址计算机分配固定IP地址。

    整个配置过程需要用到 host 声明和hardwarefixed-address 参数。

    1host 主机名 {......}

    作用:用于定义保留地址

    2hardware 类型硬件地址

    作用:定义网络接口类型和硬件地址。常用类型为以太网(ethernet,地址为MAC 地址。

    3fixed-address IP 地址

    作用:定义DHCP 客户端指定的IP 地址。

    [root@xuegod63 ~]# vim /etc/dhcp/dhcpd.conf   # 找到对应的子网范围,修改成以下内容

    subnet 192.168.0.0 netmask 255.255.255.0 {

      range 192.168.1.100 192.168.1.200;

      option domain-name-servers 192.168.1.1;

      option domain-name "internal.example.org";

      option routers 192.168.1.1;

      option broadcast-address 192.168.1.255;

      default-lease-time 600;

      max-lease-time 7200;

    host xuegod63 {    #这一段内容,要写在subnet字段中,和subnet配合使用。

        hardware ethernet 00:0C:29:12:ec:1e;

        fixed-address 192.168.1.251;

     }

    }

     

    注意:

    在生成环境中使用DHCP服务,往往需要结合实际是网络环境来搭建,很多公司采用路由器的DHCP服务来提供IP地址

     

    ntpdata 同步时间用法:

     

     客户端配置:

    不同机器之间的时间同步

        为了避免主机时间因为长期运作下所导致的时间偏差,进行时间同步(synchronize)的工作是非常必要的。Linux系统下,一般使用ntp服务器来同步不同机器的时间。一台机器,可以同时是ntp服务器和ntp客户机。在网络中,推荐使用像DNS服务器一样分层的时间服务器来同步时间。

    同步时间,可以使用ntpdate命令,也可以使用ntpd服务。

    [root@xuegod63 ~]# yum install ntpdate -y    ##安装ntpdate

     方法一:

    使用ntpdate比较简单。格式如下:

    [root@linux ~]# ntpdate [-nv] [NTP IP/hostname]
    [root@linux ~]# ntpdate 192.168.0.2
    [root@linux ~]# ntpdate ntp1.aliyun.com

        但这样的同步,只是强制性的将系统时间设置为ntp服务器时间。只是治标不治本。所以,一般配合cron命令,来进行定期同步设置。比如,在crontab中添加:

    0 12 *  * * /usr/sbin/ntpdate 192.168.0.1

    这样,会在每天的12点整,同步一次时间。ntp服务器为192.168.0.1。

      方法二:

    使用ntpd服务,要好于ntpdate加cron的组合。因为,ntpdate同步时间,会造成时间的跳跃,对一些依赖时间的程序和服务会造成影响。比如sleep,timer等。而且,ntpd服务可以在修正时间的同时,修正cpu tick。理想的做法为,在开机的时候,使用ntpdate强制同步时间,在其他时候使用ntpd服务来同步时间。

        要注意的是,ntpd 有一个自我保护设置: 如果本机与上源时间相差太大, ntpd 不运行. 所以新设置的时间服务器一定要先 ntpdate 从上源取得时间初值, 然后启动 ntpd服务。ntpd服务 运行后, 先是每64秒与上源服务器同步一次, 根据每次同步时测得的误差值经复杂计算逐步调整自己的时间, 随着误差减小, 逐步增加同步的间隔. 每次跳动, 都会重复这个调整的过程.

    扩展知识

    1、让NTP服务同步硬件时间

        最后提及一点,ntp服务,默认只会同步系统时间。如果想要让ntp同时同步硬件时间,可以设置/etc/sysconfig/ntpdate 文件。

    /etc/sysconfig/ntpdate 文件中,把SYNC_HWCLOCK=no 改成SYNC_HWCLOCK=yes

    就可以让硬件时间与系统时间一起同步。

     

    2linux系统时间和BIOS时间是不是一定一样?

    互动:linux系统时间和BIOS时间是不是一定一样?

    查看硬件BIOS时间:

    hwclock -r    :读出BIOS的时间参数

    hwclock -w    :将当前系统时间写入BIOS中。

    例:

    [root@xuegod63 ~]# date -s "2015-3-6 21:13"

    Fri Mar  6 21:13:00 CST 2015

    [root@xuegod63 ~]# hwclock -r

    Fri 06 Mar 2015 08:17:56 PM CST  -0.720333 seconds

    [root@xuegod63 ~]# date

    Fri Mar  6 21:13:05 CST 2015

    [root@xuegod63 ~]# hwclock -w

    [root@xuegod63 ~]# hwclock -r

    Fri 06 Mar 2015 09:13:20 PM CST  -0.095199 seconds

     

  • 相关阅读:
    【LeetCode】46. 全排列(回溯)
    [P2894][USACO08FEB] 酒店Hotel (线段树+懒标记下传)
    [P2680][NOIP2015T6] 运输计划 (LCA+树上差分+二分)
    静态主席树学习笔记
    [P1941][NOIP2014T3] 飞扬的小鸟 (0/1背包+完全背包)
    [P1084][NOIP2012T6] 疫情控制 (二分+贪心+LCA)
    [P3959][NOIP2017T5] 宝藏 (状压DP+DFS)
    [P2679][NOIP2015T5] 子串 (DP+滚动数组)
    [P1314][NOIP2011T5] 聪明的质检员 (二分+前缀和)
    [P1966][NOIP2013T2] 火柴排队 (求逆序对+归并排序/树状数组)
  • 原文地址:https://www.cnblogs.com/Mercury-linux/p/11462995.html
Copyright © 2020-2023  润新知