DHCP可以分配我们的网卡信息(我们的路由器里面就有DHCP)
动态主机地址管理协议
动态主机配置协议(DHCP)是一种基于UDP协议且仅限于在局域网内部使用的网络协议,主要用于大型的局域网环境或者存在较多移动办公设备的局域网环境中,其主要用途是为局域网内部的设备或网络供应商自动分配IP地址等参数。
简单来说,DHCP协议就是让局域网中的主机自动获得网络参数的服务。在图14-1所示的拓扑图中存在多台主机,如果手动配置每台主机的网络参数会相当麻烦,日后维护起来也让人头大。而且当机房内的主机数量进一步增加时(比如有100台,甚至1000台),这个手动配置以及维护工作的工作量足以让运维人员崩溃。借助于DHCP协议,不仅可以为主机自动分配网络参数,还可以确保主机使用的IP地址是唯一的,更重要的是,还能为特定主机分配固定的IP地址。
DHCP协议的应用十分广泛,无论是服务器机房还是家庭、机场、咖啡馆,都会见到它的身影。比如,本书的某位读者开了一家咖啡厅,在为顾客提供咖啡的同时,还为顾客免费提供无线上网服务。这样一来,顾客就可以一边惬意地喝着咖啡,一边连着无线网络刷朋友圈了。但是,作为咖啡厅老板的您,肯定不希望(也没有时间)为每一位造访的顾客手动设置IP地址、子网掩码、网关地址等信息。另外,考虑到咖啡馆使用的内网网段一般为192.168.10.0/24(C类私有地址),最多能容纳的主机数为200多台。而咖啡厅一天的客流量肯定不止200人。如果采用手动方式为他们分配IP地址,则当他们在离开咖啡厅时并不会自动释放这个IP地址,这就可能出现IP地址不够用的情况。这一方面会造成IP地址的浪费,另外一方面也增加的IP地址的管理成本。而使用DHCP协议,这一切都迎刃而解—老板只需安心服务好顾客,为其提供美味的咖啡;顾客通过运行DHCP协议的服务器自动获得上网所需的IP地址,等离开咖啡厅时IP地址将被DHCP服务器收回,以备其他顾客使用。
既然确定在今后的生产环境中肯定离不开DHCP了,那么也就有必要好好地熟悉一下DHCP涉及的常见术语了。
作用域:一个完整的IP地址段,DHCP协议根据作用域来管理网络的分布、分配IP地址及其他配置参数。
超级作用域:用于管理处于同一个物理网络中的多个逻辑子网段。超级作用域中包含了可以统一管理的作用域列表。
排除范围:把作用域中的某些IP地址排除,确保这些IP地址不会分配给DHCP客户端。
地址池:在定义了DHCP的作用域并应用了排除范围后,剩余的用来动态分配给DHCP客户端的IP地址范围。
租约:DHCP客户端能够使用动态分配的IP地址的时间。(默认 最大,就是一段时间会检查你在不在这个局域内了,如果不在,过一段时间会再检查,然后到了最大时间的话就会被回收)
预约:保证网络中的特定设备总是获取到相同的IP地址。(IP地址绑定,就是你预约了这个IP,别人用的话就回跳过去这个IP)
作用域=地址池+排除范围
前文讲到,作用域一般是个完整的IP地址段,而地址池中的IP地址才是真正供客户端使用的,因此地址池应该小于或等于作用域的IP地址范围。另外,由于VMware Workstation虚拟机软件自带DHCP服务,为了避免与自己配置的dhcpd服务程序产生冲突,应该先按照图14-3和图14-4所示将虚拟机软件自带的DHCP功能关闭。
部署dhcpd服务程序
我们先安装dhcp服务。
然后配置他的配置文件/etc/dncp/dhcp.conf
我们看一下,没看错,5行注释,全部要我们自己写。
dhcpd服务程序配置文件中使用的常见参数以及作用
参数 | 作用 |
ddns-update-style 类型 | 定义DNS服务动态更新的类型,类型包括: none(不支持动态更新)、interim(互动更新模式)与ad-hoc(特殊更新模式) |
allow/ignore client-updates | 允许/忽略客户端更新DNS记录 |
default-lease-time 21600 | 默认超时时间 |
max-lease-time 43200 | 最大超时时间 |
option domain-name-servers 8.8.8.8 | 定义DNS服务器地址 |
option domain-name "domain.org" | 定义DNS域名 |
range | 定义用于分配的IP地址池 |
option subnet-mask | 定义客户端的子网掩码 |
option routers | 定义客户端的网关地址 |
broadcast-address 广播地址 | 定义客户端的广播地址 |
ntp-server IP地址 | 定义客户端的网络时间服务器(NTP) |
nis-servers IP地址 | 定义客户端的NIS域服务器的地址 |
hardware 硬件类型 MAC地址 | 指定网卡接口的类型与MAC地址 |
server-name 主机名 | 向DHCP客户端通知DHCP服务器的主机名 |
fixed-address IP地址 | 将某个固定的IP地址分配给指定主机 |
time-offset 偏移差 | 指定客户端与格林尼治时间的偏移差 |
dhcpd服务程序配置文件中使用的参数以及作用
参数 | 作用 |
ddns-update-style none; | 设置DNS服务不自动进行动态更新 |
ignore client-updates; | 忽略客户端更新DNS记录 |
subnet 192.168.10.0 netmask 255.255.255.0 { | 作用域为192.168.10.0/24网段 |
range 192.168.10.50 192.168.10.150; | IP地址池为192.168.10.50-150(约100个IP地址) |
option subnet-mask 255.255.255.0; | 定义客户端默认的子网掩码 |
option routers 192.168.10.1; | 定义客户端的网关地址 |
option domain-name "linuxprobe.com"; | 定义默认的搜索域 |
option domain-name-servers 192.168.10.1; | 定义客户端的DNS地址 |
default-lease-time 21600; | 定义默认租约时间(单位:秒) |
max-lease-time 43200; | 定义最大预约时间(单位:秒) |
} | 结束符 |
我们删除掉自己写,下面介绍一下参数的作用
ddns-update-style none ddns是动态DNS地址更新技术,因为我们现在没有所以写个none给她关闭下来。
ignore client-updates然后我们忽略掉客户端给我们更新,因为我们不需要客户端给我们更新什么东西。ignore忽略。client是客户端的意思。
subent 192.168.10.0 netmask 255.255.255.0,然后我们定义一下我们的作用域。我们只是声明一下这个IP段,并不是真实为用户分配的IP,就是比如我们吃饭,我们会先说这两个菜是我的啊,但是其实我们还没吃,只是定义为我的,等你吃下去之后才是你的,也就是我们的地址池。
range 192.168.10.50 192.168.10.150;然后我们定义一个地址池,从50到150.然后这个才是我们真实作用于用户的的地址池。
option subnet-mask 255.255.255.0然后我们定义一个子网掩码,这个才是未用户真实分配给用户的一个子网掩码的地址,待会我们客户端的网卡上面就会被分配上这个地址
option routers 192.168.10.10;然后分配我们路由地址,就是我们的下一跳,就是下一跳的地址,下一次就是我们出网关的地址。这个就是我们的参考。
option domain-name-servers 192.168.10.10;这是我们DNS信息,我们这里只是写个格式,我们暂时并没有。
default-lease-time 租约时间,这里是按秒来计算的。21600秒(6小时)
max-lease-time 最大租约时间是43200秒
这样其实我们就做好了,然后我们找一台客户端(Windows Linux 都可以)。
别忘了要重启服务,然后添加开机启动项。
然后我们打开客户端,打开网卡。
我们给他改成DHCP模式
然后关闭网卡再开启
这时候我们发现他没分配过来,那我们清空一下服务器上的iptables -F.
好了,分配过来了,从50开始。
分配固定IP地址
在DHCP协议中有个术语是“预约”,它用来确保局域网中特定的设备总是获取到固定的IP地址。换句话说,就是dhcpd服务程序会把某个IP地址私藏下来,只将其用于相匹配的特定设备。
要想把某个IP地址与某台主机进行绑定,就需要用到这台主机的MAC地址。MAC地址是网卡上面的一串独立的标识符,具备唯一性,因此不会存在冲突的情况,如图
在Linux系统或Windows系统中,都可以通过查看网卡的状态来获知主机的MAC地址。在dhcpd服务程序的配置文件中,按照如下格式将IP地址与MAC地址进行绑定。
host 主机名称 { | ||||
hardware | ethernet | 该主机的MAC地址; | ||
fixed-address | 欲指定的IP地址; | |||
} |
然后重启服务。
如果不方便查看主机的MAC地址,该怎么办呢?比如,要给老板使用的主机绑定IP地址,总不能随便就去查看老板的主机信息吧。针对这种情况,我告诉大家一个很好的办法。我们首先启动dhcpd服务程序,为老板的主机分配一个IP地址,这样就会在DHCP服务器本地的日志文件中保存这次的IP地址分配记录。然后查看日志文件,就可以获悉主机的MAC地址了(即下面加粗的内容)。
他是在/var/log/messages里面,我们cat也行,tail -f也行。
我们就可以轻松查到他的mac地址和主机名。我们再换一个。
名字改为boss,然后换个88的,重启服务。
看到了吧,很简单吧这个。