本节所讲内容:
•DHCP服务器工作原理
•使用DHCP为局域网中的机器分配IP地址
•使用DHCP为服务器分配固定IP地址
•ntpdate加计划任务同步服务器时间
--------------------------------------------------------
扩展:查看默认的服务监听端口
cat /etc/services #所有服务默认端口都保存在这个文件中
cat /etc/services | grep ssh
route -n #查看路由表信息
[root@xiaogan120 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.31.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
192.168.171.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
169.254.0.0 0.0.0.0 255.255.0.0 U 1003 0 0 eth1
0.0.0.0 192.168.31.1 0.0.0.0 UG 0 0 0 eth1
--------------------------------------------------------
DHCP Server (推荐使用Windows)
一些小的服务 windows做的比linux好
DHCP服务概述:
名称:DHCP (Dynamic Host Configuration Protocol --动态主机配置协议)
功能:是一个局域网协议,动态的给局域网内的客户端分派IP地址
它有两个用途--->
1. 给内部网络或网络服务供应商自动分配IP地址,主机名,DNS服务器,域名
2. 配合其他服务使用,实现集成化管理功能. 如:无人值守安装服务器
特点:C/S模式
自动分配IP地址,方便管理
DHCP不会同时租借相同的IP地址给两台主机(避免IP冲突)
DHCP管理员可以约束特定的计算机使用特定的IP地址(规定分配的IP池)
可以为每个DHCP作用域设置很多选项(绑定IP地址)
客户机在不同子网间移动时,不需要重新设置IP地址.每次都自动获取IP地址就可以了.
缺点:
当网络中存在多台DHCP服务器时,一个DHCP服务器,不知道其他服务器租借出去的IP地址(可能造成IP冲突);
DHCP服务器不能跨服务器与客户机通信,除非路由器允许BOOTP协议转发.
DHCP 服务端口:默认监听 67 68端口
vim /etc/services
运行原理:(经常问到,面试)(下面是我自己的理解描述)
DHCP Client ---> DHCP客户端
DHCP Server ---> DHCP服务器
请求分配IP过程:
1. DHCP Client --discover--> DHCP Server
在DHCP Client启动后,会发送一个discover包的广播,用来寻找DHCP Server.
2. DHCP Server --offer--> DHCP Client
DHCP Server当收到discover包后,会对DHCP Client 发送一个offer包,告诉DHCP Client,已经收到他的请求,offer包中含有(一个在尚未使用的IP地址和其他信息).
3. DHCP Client --request--> DHCP Server
DHCP Client在收到DHCP Server的应答包后,会再次发送一个request包的广播,这个request包中含有第一个发来信息的DHCP Server为发来的信息.意思是告知所有DHCP Server,他已经使用某个DHCP Server分配的IP信息.
4. DHCP Server --ack--> DHCP Client
DHCP Server收到DHCP Client发送的request包后,会为DHCP Client发送一个确认收到的信息,告知其可以使用这个IP地址.而其他的DHCP Server会收回为其分配的IP地址信息.
DHCP Client重新登录网络:
1. DHCP Client --request--> DHCP Server
当DHCP Client重新登录网络后,会对上次的DHCP Server服务器发送request请求原来使用过的IP地址.
2. DHCP Server --ack--> DHCP Client
DHCP Server判断这个地址尚未被分配以后,会对DHCP Client发送一个确认信息,确认其可以继续使用这个地址.
若DHCP Server判断这个地址已被其他Client使用时,会回复其不能使用这个地址,这是DHCP Client会再次发送discovery广播,获取IP地址.
请求IP续期过程:
1. DHCP Client --request--> DHCP Server
DHCP Client获取的IP信息,都有一个租约.
当DHCP Client的IP地址还有一半时间就要过期时,会再次对DHCP Server服务器发送续期请求renew.
2. DHCP Server --ack--> DHCP Client
DHCP Server收到续期请求后,确认可以继续让其使用后,会回复应答包,重新为DHCP Client续期.
--------------------------------------------------
安装DHCP
[root@xiaogan120 ~]# rpm -qa | grep dhcp
dhcp-common-4.1.1-51.P1.el6.centos.x86_64
[root@xiaogan120 ~]# rpm -qa | grep dhc
dhclient-4.1.1-51.P1.el6.centos.x86_64
dhcp-common-4.1.1-51.P1.el6.centos.x86_64
[root@xiaogan120 ~]# ls /mnt/Packages/dhc*
/mnt/Packages/dhclient-4.1.1-51.P1.el6.centos.x86_64.rpm
/mnt/Packages/dhcp-4.1.1-51.P1.el6.centos.x86_64.rpm
/mnt/Packages/dhcp-common-4.1.1-51.P1.el6.centos.x86_64.rpm
软件包:
/mnt/Packages/dhclient-4.1.1-51.P1.el6.centos.x86_64.rpm
/mnt/Packages/dhcp-4.1.1-51.P1.el6.centos.x86_64.rpm
/mnt/Packages/dhcp-common-4.1.1-51.P1.el6.centos.x86_64.rpm
安装方法:
Way 1:
rpm -ivh /mnt/Packages/dhcp*
Way 2:
yum -y install dhcp
查看生成文件:
rpm -ql dhcp
主要配置文件路径:
/etc/dhcp/dhcpd.conf
配置文件:
1. 主配置文件: /etc/dhcp/dhcpd.conf
2. DHCP 主程序包安装好后会自动生成主配置文件的范本文件
/usr/share/doc/dhcp-3.0.5/dhcpd.conf.sample
安装好dhcp服务后,dhcp的配置文件默认是空的,需要我们按照.sample模版文件来修改进行配置
注意:1. .sample 模版样例文件
2. 尚未配置的DHCP服务,是启动不了的!启动时,会失败!!!
#启动失败的原因是dhcp服务器配置的IP地址和默认配置文件里定义的地址段不相同。
#在启动DHCP服务之前,需要给DHCP Server配置一个静态的IP地址
配置网卡IP地址命令:
Usage: ifconfig <EthernetName> <IPADDR>[/<prefixlen>]
例如:ifconfig eth2 192.168.1.1/24
DHCP服务,添加开机自启动:
chkconfig dhcpd on #添加开机自启动
chkconfig --list dhcpd #检查
主配置文件参数说明:
可以看出整个配置文件分成全局和局部两个部分。但是并不容易看出哪些属于参数,哪些属于声明和选项。
注释信息 以#开头
配置信息 每行以;结束,大括号所在行除外
--- /usr/share/doc/dhcp/dhcpd.conf ---
# 定义全局配置,通用于所有支持的网络选项.
option domain-name "example.org"; #定义客户端所属域
option domain-name-servers ns1.example.org, ns2.example.org;#为客户端指定DHS服务器地址,有多个dns服务器时,使用,间隔
default-lease-time 600; #定义默认租约时长
当租约时长过去50%时:发送续约请求。(续不上继续用)
当租约时长过去87.5%:再次发送续约请求。(续不上找别人)
DHCP工作站除了在开机的时候发出 DHCPrequest 请求之外,在租约期限一半的时候也会发出 DHCPrequest ,如果此时得不到 DHCP服务器的确认的话,工作站还可以继续使用该IP;当租约期过了87.5%时,如果客户机仍然无法与当初的DHCP服务器联系上,它将与其它 DHCP服务器通信。如果网络上再没有任何DHCP协议服务器在运行时,该客户机必须停止使用该IP地址,并从发送一个Dhcpdiscover数据包开始,再一次重复整个过程。要是您想退租,可以随时送出 DHCPRELEASE 命令解约,就算您的租约在前一秒钟才获得的。
max-lease-time 7200; #定义最大时长(当客户端没有想DHCP Server续约成功时,客户机可以使用这个IP的最大时间)
作用:定义客户端IP租约时间的最大值,当客户端超过租约时间,却尚未更新IP 时,最长可以使用该IP 的时间;
比如,机器在开机获得IP地址后,然后关机了。这时,当时间过了default-lease-time 600秒后,没有机器向DHCP续约,DHCP会保留7200秒,保留此IP地址不用于分配给其它机器。 当超过7200秒后,将不再保留此IP地址给此机器。
注意:default-lease-time 和 max-lease-time都是以秒为单位的租约时间,该项参数可以作用在全局配置中,也可以作用在局部配置中。
# 使用如下设置启动/关闭全面的动态域名更新
#ddns-update-style none; #dns更新样式none --> 不更新
#authoritative; #当DHCP服务器是本地局域网唯一时,需取消此行备注
log-facility local7; #日志类型local7
# 没有服务将在这个子网,但宣称它帮助DHCP服务器理解网络拓扑。
subnet 10.152.187.0 netmask 255.255.255.0 {
}
# This is a very basic subnet declaration.
# 基本的作用域声明
subnet 10.254.239.0 netmask 255.255.255.224 {
range 10.254.239.10 10.254.239.20;
option routers rtr-239-0-1.example.org, rtr-239-0-2.example.org;
}
# A slightly different configuration for an internal subnet.
# 配置内部子网 通用模块
subnet 10.5.5.0 netmask 255.255.255.224 { #定义作用域
range 10.5.5.26 10.5.5.30; #地址池
option domain-name-servers ns1.internal.example.org; #dns地址
option domain-name "internal.example.org"; #域名
option routers 10.5.5.1; #网关
option broadcast-address 10.5.5.31; #广播地址
default-lease-time 600; #租约时长
max-lease-time 7200; #租约最大时长
}
Sub net:
声明一般用来指定IP 作用域、定义为客户端分配的IP 地址池等等
声明格式如下:
subnet 网络号 netmask 子网掩码 {
选项或参数
}
注意:网络号必须与DHCP 服务器的网络号相同
range 起始IP 地址 结束IP 地址
作用:指定动态IP 地址范围
注意:可以在subnet(子网) 声明中指定多个range,但多个range 所定义IP 范围不能重复
option routers IP 地址
作用:为客户端指定默认网关
如:option routers 10.5.5.1;
option domain-name
作用:为客户端指定默认的域
option domain-name-servers IP 地址
作用:为客户端指定DNS 服务器地址
注意:option routers、option domain-name、option domain-name-servers选项可以用在全局配置中,也可以用在局部配置中。
# 为特定的主机分配专一的描述信息
host passacaglia {
hardware ethernet 0:0:c0:5d:bd:95;
filename "vmunix.passacaglia";
server-name "toccata.fugue.com";
}
# 为特定主机绑定固定IP
host fantasia { #定义作用的主机名是fantasia
hardware ethernet 08:00:07:26:c0:a5;#主机网卡mac地址
fixed-address fantasia.fugue.com; #绑定的IP地址或域名
}
# 为foo的组分配IP地址10.17.224.0网段,为其他的组分配10.0.29.0网段
class "foo" {
match if substring (option vendor-class-identifier, 0, 4) = "SUNW";
} #这行,没看懂!!!substring (option vendor-class-identifier, 0, 4)
shared-network 224-29 {
subnet 10.17.224.0 netmask 255.255.255.0 {
option routers rtr-224.example.org;
}
subnet 10.0.29.0 netmask 255.255.255.0 {
option routers rtr-29.example.org;
}
pool {
allow members of "foo";
range 10.17.224.10 10.17.224.250;
}
pool {
deny members of "foo";
range 10.0.29.10 10.0.29.230;
}
}
实战:使用DHCP服务,为客户端分配IP地址,并实现IP绑定
注释:在实验过程中,使用xshell进行实验,为了避免xshell断开连接,对两台虚拟机分别添加了一块新的网卡,并保证两块网卡在一个局域网中.
xiaogan120.cn ---> ifconfig eth1 192.168.1.1/24
xiaogan121.cn ---> 添加一块网卡后,需要对新的网卡建立一个配置文件,修改mac地址等信息
案例:公司有60台计算机,
IP地址段为192.168.1.1-192.168.1.254,
子网掩码是255.255.255.0,
网关为192.168.1.1,
客户端可以使用IP范围:192.168.1.100-192.168.1.200,
剩余IP地址保留.
实验环境:虚拟机中原本的网卡不能使用桥接模式(因为局域网中可能已经存在DHCP服务器,这样,就很难让新添加的DHCP服务区获取到该服务器的IP地址.)
另外,可能造成公司局域网中,其他极其因为获得了新添加的DHCP服务器上的IP地址,而不能上网.
服务端:xiaogan120.cn 虚拟机网卡:vmnet6
客户端:xiaogan121.cn 虚拟机网卡:vmnet6
Start :
环境搭建:
在VMware中,对两台虚拟机添加网卡,并进行设置,如下图:
服务端:xiaogan120.cn:
1. 安装DHCP服务
yum -y install dhcp
2. 配置DHCP服务器
DHCP服务安装完成后,默认是没有进行配置的,需要拷贝样例进行修改.
2.1 拷贝样例文件到配置目录
cp /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample /etc/dhcp/dhcpd.conf
2.2 配置DHCP服务器
vim /etc/dhcp/dhcpd.conf
进行如下修改,其他配置信息删除:
log-facility local7; #日志类型
subnet 192.168.1.0 netmask 255.255.255.0 { #作用域
range 192.168.1.100 192.168.1.200; # IP范围段
option domain-name-servers 192.168.1.1; # DNS服务器地址
option domain-name "xiaogan.org"; # 域名
option routers 192.168.1.1; # 网关
option broadcast-address 255.255.255.255; #广播地址
default-lease-time 600; # 租约时长
max-lease-time 7200; #最大租约时长
}
2.3 配置服务器IP地址
ifconfig eth1 192.168.1.1/24
并编写eth1的配置文件,如下:
vim /etc/sysconfig/network-scripts/ifcfg-eth1
--- ifcfg-eth1 start ---
DEVICE=eth1
HWADDR=00:0C:29:A1:20:70
TYPE=Ethernet
NM_CONTROLLED=yes
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.1.1
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=192.168.1.1
--- ifcfg-eth1 end ---
这样做,是为了便于在下次重启时,配置服务器的IP,不然,开机启动会失败!!
2.3 开启自动开机启动
chkconfig --add dhcpd #添加 dhcpd 开机启动
chkconfig --list dhcpd #查看 dhcpd服务开机启动状态
2.3 启动网络服务
/etc/init.d/dhcpd start #启动DHCP服务
netstat -anlpu | grep dhcpd #检查DHCP服务监听端口,看其是否已经启动
客户端xiaogan121.cn:
3. 为新添加的网卡,修改配置文件:
cd /etc/sysconfig/network-scripts/
cp ifcfg-eth0 ifcfg-eth1
删除mac地址等与eth0有关的信息,并修改成eth1的信息,详情如下:
DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=dhcp
4.重启网络服务,并查看eth1网络信息:
ifconfig eth1
OK,由此可知,DHCP服务器已经成功了!
5. 查看DNS服务器信息:
cat /etc/resolv.conf
6. 查看网关信息:
route -n | grep eth1
7. 查看DHCP租约数据库文件
cat /var/lib/dhcpd/dhcpd.leases
DHCP服务器,IP地址和mac地址绑定:
在DHCP 中的IP 地址绑定用于给客户端分配固定IP 地址。比如服务器需要使用固定IP 地址就可以使用IP 地址绑定,通过MAC 地址与IP 地址的对应关系为指定的物理地址计算机分配固定IP地址。
整个配置过程需要用到 host 声明和hardware、fixed-address 参数。
(1)host 主机名 {......}
作用:用于定义保留地址
(2)hardware 类型 硬件地址
作用:定义网络接口类型和硬件地址。常用类型为以太网(ethernet),地址为MAC 地址。
(3)fixed-address IP 地址
作用:定义DHCP 客户端指定的IP 地址。
Usage:
host [hostname]{
hardware ethernet [mac address];
fixed-address [IPADDR];
}
上一个实验成功后!!
客户端xiaogan121.cn:
1. 查看新添加网卡的mac地址和主机名称:
ifconfig eth1 | grep HWaddr
cat /etc/hosts
服务端xiaogan120.cn:
2. 编辑DHCP服务配置文件/etc/dhcp/dhcpd.conf
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 "xiaogan.org";
option routers 192.168.1.1;
option broadcast-address 192.168.1.255;
default-lease-time 600;
max-lease-time 7200;
host xiaogan121.cn {
hardware ethernet 00:0C:29:0E:47:77;
fixed-address 192.168.1.123;
}
}
保存退出!!!
3. 重启服务器的DHCP服务
/etc/init.d/dhcpd restart
客户端xiaogan121.cn:
4.重启网络服务
/etc/init.d/network restart
或
service restart dhcpd
查看eth1网络信息:
ifconfig eth1
补 充:
其他的理解方式1:
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@xiaogan121 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.31.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
192.168.171.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
169.254.0.0 0.0.0.0 255.255.0.0 U 1003 0 0 eth1
0.0.0.0 192.168.31.1 0.0.0.0 UG 0 0 0 eth1
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报文来续约租期。
其他的理解方式2:
为了便于理解,我们把DHCP客户机比做餐馆里的客人,DHCP服务器工作原理当中,服务器比做服务员(一个餐馆里也可以有多个服务员),IP地址比做客户需要的食物。那么可以这样描述整个过程:客人走进餐馆,问:“有没有服务员啊?”(DHCP discover),多个服务员同时回答:“有,我这有鸡翅”“有,我这有汉堡”(DHCP offer)。客人说:“好吧,我要一份汉堡”(DHCP request,这个客人比较死板,总是选择第一次听到的食物),端着汉堡的服务员回应了一声:“来啦”(DHCP ack),并把食物端到客人面前,供其享用(将网卡和IP地址绑定)。客人下次来的时候,就直接找上次那个服务员点自己喜欢的汉堡了(DHCP request),如果还有汉堡,服务员会再次确认并上菜(DHCP ack),而如果已经卖完了,服务员则会告诉客人:“不好意思,已经卖完了”(DHCP nack)。当然,服务员隔一段时间会来收拾一次桌子,除非客人特别说明这菜还要继续吃的,服务员会将剩菜端走。
NTP 服务---时间同步服务(ntpdate命令 ntpd服务)
不同机器之间的时间同步
为了避免主机时间因为长期运作下所导致的时间偏差,进行时间同步(synchronize)的工作是非常必要的。Linux系统下,一般使用ntp服务器来同步不同机器的时间。一台机器,可以同时是ntp服务器和ntp客户机。在网络中,推荐使用像DNS服务器一样分层的时间服务器来同步时间。
同步时间,可以使用ntpdate命令,也可以使用ntpd服务。
ntpdate命令同步时间
Usage:
ntpdate [ipaddr]
ntpdate [域名]
ntp服务:
简介:局域网中的客户机,添加计划任务,定时同步ntp服务器的时间,让局域网内所有机器时间保持一致!!!
作用:同步时间的服务器,客户端可以从ntp服务器中同步时间到本机
端口: 123
安装:yum -y install ntp
配置文件:/etc/ntp.conf
使用方法:安装完成后,直接启动即可.在配置文件中,可查看ntp服务器域名
客户端同步命令如下:
ntpdate 192.168.171.121
或
ntpdate 0.centos.pool.ntp.org
方法一:
ntpdate time.windows.com #同步windows时间服务器的时间
同步公网时间:
echo "0 3 * * * ntpdate time.windows.com" >> /var/spool/cron/root
方法二:
Server端:
安装ntpd服务
yum -y install ntp
启动ntp服务并添加开机自启动
/etc/init.d/ntpd start
chkconfig --add ntpd
客户端:
ntpdate 192.168.171.121 # NTP服务器的IP地址
或
ntpdate 0.centos.pool.ntp.org #这里的域名,在/etc/ntpd.conf 中设置
添加计划任务:
echo "0 3 * * * ntpdate 192.168.171.121" >> /var/spool/cron/root
扩展:
Linux系统存在两个时间,系统时间,bios时间
他们可能不同步!
查看系统时间:
date
查看BIOS时间:
hwclcok -r #-r读
用系统时间设置BIOS时间
hwclock -w #写入
想要使用ntp服务来同步BIOS时间,需修改配置文件如下:
#/etc/sysconfig/ntpd
SYNC_HWCLOCK = yes