Linux基础之DHCP服务篇

Linux基础之DHCP服务篇

简介

  • DHCP相信大家对这个词不陌生,他走的是UDP协议,用的是他的连个端口6768端口
  • 67DHCP服务端用的端口,68是客户端用的端口
  • 那他是什么原理是什么,童鞋们大概也很难说出一个道理出来
  • 其实也没什么难的
  • 今天就和童鞋们讨论讨论下DHCP服务器和实验自己搭建一个DHCP服务器
  • 供童鞋们和我一起学习

静态IP和动态IP

  • 说到DHCP服务器这就得说到IP
  • 因为DHCP服务器就是为了给客户端分配IP而存在
  • 当然分配IP也有静态绑定和动态自动分配
  • 什么是静态绑定
    • 每个网卡都有他独一无二的MAC地址,把MAC地址和IP绑在一起,以后这个IP只给这个网卡用,其他客户机都用不了这个IP
    • 这就是静态IP绑定,但是这种方式很浪费IP ,比如一个客户机,关机了,这个IP就一直放在那里,那岂不是浪费
    • 缺点就是浪费IP,现在在世界IPv4已经已经非常紧张了,虽然有了ipv6但是还不是很普及,不过听书我们中国有了ipv9,可以兼容ipv6ipv4哦,不过到底咋样,等他出来了才知道
    • 但是静态IP优点还是有很多的,比如不会IP冲突,稳定性强等等
    • 不过这多用于服务器,很多公司都还是用的动态IP
  • 动态IP
    • 动态IP很常见,他的作用于公司和家庭领域
    • 优点节省很多IP ,会自动回收IP
    • 缺点客户机过多会容易IP冲突但是只限于IPv4

DHCP服务

  • DHCP服务相关消息
    • DHCP DISCOVER:客户端到服务器
    • DHCP OFFER :服务器到客户端
    • DHCP REQUEST:客户端到服务器
    • DHCP ACK :服务器到客户端
    • DHCP NACK:服务器到客户端指示客户端的网络地址的概念是不正确的 <<拒绝的意思
    • DHCP DECLINE :客户端到服务器,指示地址已被使用 <<表示某个地址已经被使用
    • DHCP RELEASE:客户端到服务器,放弃网络地址和取消剩余的租约时间
    • DHCP INFORM:客户端到服务器,只要求本地配置参数,客户端已经具有外部配置的网络地址

《Linux基础之DHCP服务篇》

DHCP续租

  • 续租机制,这是DHCP里面的一种机制但是是单播,一般设置的是时间达到%50以后,客服端开始向服务端发送续租包,来保证IP使用正常
  • 当然你也可以自己改续租的时间长短
  • 如果服务器没有响应,客户端会等到时间%70%80在发送续租包,来达到IP使用正常
  • IP续租服务器一般是给客户端原来的IP来当地址,不会乱换地址
  • 如果经常会那岂不是经常掉线等
  • 只有客户机长时间离线,服务器IP回收了以后这个IP才会给别的客户机用,但是只限于动态IP
  • 50%:租赁时间达到50%时来续租,刚向DHCP服务器发向新的DHCPREQUEST请求, 如果dhcp服务没有拒绝的理由,则回应DHCPACK信息,当DHCP客户端收到该应答信息后,就重新开始新的租用周期
  • 87.5%:如果之前DHCP Server没有回应,等到租约期的7/8时,主机会在发送一次广播请求,看网络中有没有新的DHCP服务器,如果有新的主机将会用新的IP

DHCP服务器搭建

  • 接下来我将演示搭建DHCP服务器,
  • 这里我用CentOS7,当主机,CentOS6.9-1CentOS6.9-2当客户端
  • 主机IP192.168.202.133,客户机现在没有IP等会获取
  • 接下来开始搭建
  • 首先用命令yum repolist 查看下你自己电脑的yum源是否正常
  • 刚刚我的源都自动掉了我还找了半天查问题
  • 源配好了以后开始安装一个DHCP
  • 运行命令yum isntall dhcp
  • 安装完成以后用rpm -ql dhcp
[root@localhost ~]# rpm -ql dhcp
/etc/NetworkManager
/etc/NetworkManager/dispatcher.d
/etc/NetworkManager/dispatcher.d/12-dhcpd
/etc/dhcp
/etc/dhcp/dhcpd.conf              <<配置文件是这个
/etc/dhcp/dhcpd6.conf
/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
/usr/sbin/dhcrelay
/usr/share/doc/dhcp-4.2.5
/usr/share/doc/dhcp-4.2.5/dhcpd.conf.example
/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
/var/lib/dhcpd/dhcpd6.leases
  • 既然已经安装成功
  • 那我们来启动下DHCP服务看能启动不
  • 运行命令systemctl start dhcpd
[root@localhost ~]# systemctl start dhcpd
Job for dhcpd.service failed because the control process exited with error code. See "systemctl status dhcpd.service" and "journalctl -xe" for details.
  • 好像起不来,我们来看看错误
  • 运行命令systemctl -l status dhcpd来查看错误提示

《Linux基础之DHCP服务篇》

  • 这里为大家贴图,不然看清
  • 倒数第三行出现红色,说我们配置文件里面缺东西
  • 在DHCP没有启动之前他对应的端口应该也是没有打开的
  • DHCP服务器对应的端口是67,客户端对应的端口是68
  • 我们可以用查看下,运行命令 ss-nul
[root@localhost ~]# ss -nul
State       Recv-Q Send-Q                                 Local Address:Port                                                Peer Address:Port              
UNCONN      0      0                                          127.0.0.1:323                                                            *:*                  
UNCONN      0      0                                                ::1:323                                                           :::*   
  • 没有67端口表示也没有启动
  • 接下来我们准备配置文件
  • 他的配置的文件路径是/etc/dhcp/dhcpd.conf
  • 我们先查看下,可以用命令cat
[root@localhost ~]# cat /etc/dhcp/dhcpd.conf
#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.example
#   see dhcpd.conf(5) man page
#
  • 里面啥也没有
  • 不过他给我们说了要我们去/usr/share/doc/dhcp*/dhcpd.conf.example这个路径下修改就可以了
  • 那我们直接覆盖他就可以了他不是没用吗
  • 运行命令cp /usr/share/doc/dhcp*/dhcpd.conf.example /etc/dhcp/dhcpd
  • 覆盖成功以后,我们进入看下,用命令vim /etc/dhcp/dhcpd.conf

《Linux基础之DHCP服务篇》

  • 号是注释

  • 接下来我修改下,给自己改域名和自己的DNS网段

《Linux基础之DHCP服务篇》

  • 修改完成以后,我们在启动以下看看,运行命令service dhcp status
[root@localhost ~]# service dhcp status
Redirecting to /bin/systemctl status  dhcp.service
Unit dhcp.service could not be found.
  • 启动了接下来我们用命令 ss-nul命令查看下端口

《Linux基础之DHCP服务篇》 5.png

[root@localhost ~]# ss -nul
State       Recv-Q Send-Q                                 Local Address:Port                                                Peer Address:Port              
UNCONN      0      0                                          127.0.0.1:323                                                            *:*                  
UNCONN      0      0                                                  *:20231                                                          *:*                  
UNCONN      0      0                                                  *:67                                                             *:*                  
UNCONN      0      0                                                ::1:323                                                           :::*                  
UNCONN      0      0                                                 :::24688                                                         :::*     
  • 端口已经出现,表示已经DHCP服务已经启动
  • 我们在查看下他的详细信息,运行命令systemctl -l status dhcpd

《Linux基础之DHCP服务篇》

  • 还可以用命令ss -nlup 查看谁在监听67端口
[root@localhost ~]# ss -nlup
State       Recv-Q Send-Q                                 Local Address:Port                                                Peer Address:Port              
UNCONN      0      0                                          127.0.0.1:323                                                            *:*                   
users:(("chronyd",pid=1063,fd=1))UNCONN      0      0                                                  *:20231                                                          *:*                   
users:(("dhcpd",pid=34715,fd=20))UNCONN      0      0                                                  *:67                                                             *:*                   
users:(("dhcpd",pid=34715,fd=7))UNCONN      0      0                                                ::1:323                                                           :::*                   
users:(("chronyd",pid=1063,fd=2))UNCONN      0      0                                                 :::24688                                                         :::*                   
users:(("dhcpd",pid=34715,fd=21))
  • DHCP服务器已经我们现在开机查看下CentOS6.9-1CentOS6.9-2可以获取到地址了吗

《Linux基础之DHCP服务篇》

  • CentOS6.9-1已经获取的IP,还可以和主机192.168.202.133ping通了
  • 接下来我们看CentOS6.9-2,怎么样了

《Linux基础之DHCP服务篇》

  • CentOS6.9-2也可以了
  • 如果你想知道那些客户端在你那里拿到了地址可以用,cat /var/lib/dhcpd/dhcpd.leases来查看
[root@localhost ~]# 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.2.5

server-duid "\000\001\000\001!\013.\307\000\014)\323\362O";

lease 192.168.202.80 {
  starts 3 2017/07/26 10:59:14;
  ends 3 2017/07/26 11:09:14;
  cltt 3 2017/07/26 10:59:14;
  binding state active;
  next binding state free;
  rewind binding state free;
  hardware ethernet 00:0c:29:43:1a:52;
}
lease 192.168.202.81 {
  starts 3 2017/07/26 10:59:25;
  ends 3 2017/07/26 11:09:25;
  cltt 3 2017/07/26 10:59:25;
  binding state active;
  next binding state free;
  rewind binding state free;
  hardware ethernet 00:0c:29:b1:52:0a;
}



  • 接下来我们查看下他们拿到了DNS没,运行命令cat /etc/resolv.conf
[root@localhost ~]# cat /etc/resolv.conf 
; generated by /sbin/dhclient-script
search lilin.com
nameserver 114.114.114.114
nameserver 8.8.8.8
  • 这表示DHCP服务器已经搭建成功
  • 接下来演示,DHCP服务器IP绑定

IP绑定

  • 所谓IP绑定就是固定的把这个IP给一个机器,这个IP只给他其他的都不给
  • 首先我先规定下一个IP比如说我只把192.168.202.88CentOS6.9-1机器
  • 我只把192.168.202.89CentOS6.9-2机器
  • 在拿到他们的MAC地址
  • CentOS6.9-1:00:0C:29:B1:52:0A
  • CentOS6.9-2:00:0C:29:43:1A:52
  • 要做到的话我们要改下配置文件
  • 用命令打开DHCP配置文件,运行命令vim /etc/dhcp/dhcpd.conf

《Linux基础之DHCP服务篇》

  • 然后我们开始修改

《Linux基础之DHCP服务篇》 11.png

  • 修改玩以后一定要重启DHCP服务,运行命令systemctl restart dhcpd
  • 重启过下我们来看下成功
  • 先看CentOS6.9-1怎么样了

《Linux基础之DHCP服务篇》

  • 已经成功,DNS也有了
  • 在看下CentOS6.9-2怎么样了

《Linux基础之DHCP服务篇》

  • 也成功了
  • 还有如果你服务搭建好了或者重启网卡或者重启机器是客户机不是主机,因为租期的原因,有可能会导致不会马上拿到地址
    原文作者:O感悟人生O
    原文地址: https://www.jianshu.com/p/142e6ad62f45
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞