Linux基础之DHCP服务篇
简介
-
DHCP
相信大家对这个词不陌生,他走的是UDP
协议,用的是他的连个端口67
,68
端口
-
67DHCP
服务端用的端口,68
是客户端用的端口
- 那他是什么原理是什么,童鞋们大概也很难说出一个道理出来
- 其实也没什么难的
- 今天就和童鞋们讨论讨论下
DHCP
服务器和实验自己搭建一个DHCP
服务器
- 供童鞋们和我一起学习
静态IP和动态IP
- 说到
DHCP
服务器这就得说到IP
- 因为
DHCP
服务器就是为了给客户端分配IP
而存在
- 当然分配
IP
也有静态绑定和动态自动分配
- 什么是静态绑定
- 每个网卡都有他独一无二的
MAC
地址,把MAC
地址和IP
绑在一起,以后这个IP
只给这个网卡用,其他客户机都用不了这个IP
- 这就是静态
IP
绑定,但是这种方式很浪费IP
,比如一个客户机,关机了,这个IP
就一直放在那里,那岂不是浪费
- 缺点就是浪费
IP
,现在在世界IPv4
已经已经非常紧张了,虽然有了ipv6
但是还不是很普及,不过听书我们中国有了ipv9
,可以兼容ipv6
和ipv4
哦,不过到底咋样,等他出来了才知道
- 但是静态
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:客户端到服务器,只要求本地配置参数,客户端已经具有外部配置的网络地址
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-1
和CentOS6.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
来查看错误提示
- 这里为大家贴图,不然看清
- 倒数第三行出现红色,说我们配置文件里面缺东西
- 在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
-
号是注释
- 接下来我修改下,给自己改域名和自己的DNS网段
- 修改完成以后,我们在启动以下看看,运行命令
service dhcp status
[root@localhost ~]# service dhcp status
Redirecting to /bin/systemctl status dhcp.service
Unit dhcp.service could not be found.
- 启动了接下来我们用命令
ss-nul
命令查看下端口
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
- 还可以用命令
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-1
和CentOS6.9-2
可以获取到地址了吗
- CentOS6.9-1已经获取的IP,还可以和主机192.168.202.133ping通了
- 接下来我们看
CentOS6.9-2
,怎么样了
-
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.88
给CentOS6.9-1
机器
- 我只把
192.168.202.89
给CentOS6.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
11.png
- 修改玩以后一定要重启DHCP服务,运行命令
systemctl restart dhcpd
- 重启过下我们来看下成功
- 先看
CentOS6.9-1
怎么样了
- 已经成功,DNS也有了
- 在看下CentOS6.9-2怎么样了
- 也成功了
- 还有如果你服务搭建好了或者重启网卡或者重启机器是客户机不是主机,因为租期的原因,有可能会导致不会马上拿到地址
网友评论