1.搭建dhcp服务,实现ip地址申请分发。需要有DHCP原理分析,需要画图
1.1 dhcp的基本概念
dhcp (Dynamic Host Configuration Protocol) 动态主机配置协议, 是一种C/S架构, 作用是自动为局域网内的主机自动分配IP, 子网掩码,网关,DNS等信息。客户端获得ip信息后自动配置相应IP。
1.2 dhcp的实现原理
-
DHCP 客户端在启动时向网络广播 DHCP Discover报文,以寻求可用的 DHCP 服务器。
-
DHCP 服务器接收到 DHCP Discover 报文后,将 DHCP Offer报文广播回客户端。该报文包含可用的 IP 地址、子网掩码、默认网关、DNS 服务器等网络配置信息。(可能会有多台DHCP服务器响应)
-
DHCP 客户端从多个 DHCP Offer 报文中选择其中一个,并向 DHCP 服务器发送 DHCP Request报文,请求分配选中的 IP 地址。
-
DHCP 服务器接收到 DHCP Request 报文后,将分配给客户端的 IP 地址等配置信息打包在 DHCP ACK报文中,向客户端广播该报文。
-
DHCP 客户端接收到 DHCP ACK 报文后,将分配给它的 IP 地址和其他网络配置信息应用于自己的网络接口,完成网络配置。
在 DHCP 的实现过程中,所有的通信都是通过广播报文进行的,包括 DHCP Discover、DHCP Offer、DHCP Request 和 DHCP ACK 报文。DHCP 的实现可以提高网络管理的效率和可靠性,减少手动配置的工作量,并避免 IP 地址冲突等问题。
需要注意的是"DHCP租约"的概念, 相当于IP的有效期, 在租约期内客户端向DHCP服务器发生 DHCP REQUEST报文请求续租。如果租约到期改IP地址可能会被分配给其其它的客户端。
DHCP服务器中通过"客户端的MAC地址"标识客户端, 客户端申请IP地址后, DHCP服务器会把客户端的MAC地址和分配的IP记录到"租约数据库"中, 避免该IP被重复分配。
1.3 DHCP服务器部署
#1. 安装dhcp软件包
yum install dhcp-server -y
#2.编辑配置文件
#拷贝示例配置文件
cp /usr/share/doc/dhcp-server/dhcpd.conf.example /etc/dhcp/dhcpd.conf
vim /etc/dhcp/dhcpd.conf
#修改全局配置项, 添加dns设置
option domain-name "gopherabc.com";
option domain-name-servers dns1.gopherabc.com;
#添加子网
#子网172.16.0.0/24
subnet 172.16.0.0 netmask 255.255.255.0 {
range 172.16.0.100 172.16.0.120; #ip地址范围 100-120
option domain-name-servers dns1.gopherabc.com; #该子网的dns配置,优先于全局配置
option domain-name "gopherabc.com";
option routers 172.16.0.11; #子网的默认网关
option broadcast-address 172.16.0.255; #广播地址
default-lease-time 600; #默认的DHCP租约时间, 此时间段内客户端续约继续使用此IP
max-lease-time 7200; #最大的客户端租用时间, 时间达到客户端不能续约, 避免某个客户端长期占用某IP
}
#3. 启动服务
systemctl enable --now dhcpd
dhcp服务器的 172.16.0.11/24 这个地址使用的是 LAN区段, 找台虚拟机网卡改为同样的LAN区段, 然后将IP配置为DHCP尝试自动获取:
可以看到 客户端的地址自动获取为了 IP地址池中的第一个地址。
2. 简述DNS服务器原理,并搭建主-辅服务器,画出架构图(有几个主机,在什么网络,什么域名),再有原理解释文字,再是代码格式化块,编写代码,代码对必要的选项,完成流程有文字描述,有实践的过程和实践的结果。
2.1 DNS正向解析流程
以浏览器访问`www.gopherabc.com`为例:
1. 浏览器会先查询浏览器缓存和本机的hosts文件
2. 然后查询运营商的DNS服务器, local dns, 
3. local dns会先查询自己的缓存, 
4. local dns如果没有再到, 则会查询根服务器
5. 根服务器将 `.com`顶级域名服务器地址返回给local dns
6. local dns 再向`.com`顶级域名服务器发起查询请求, 
7. `.com`服务器将`.gopherabc.com`这个`域`所在的`权威DNS`地址返回(权威DNS服务器通常是你的域名服务的接入商, 比如域名在阿里云解析, 那权威域名服务器就会是阿里云的DNS服务器)
8. local dns 向`权威DNS`服务器查询,
9.  `权威DNS`服务器 查询到`www`主机的地址, 返回给local dns。
10. local dns得到`www.gopherabc.com`的地址后, 返回给客户端也就是浏览器, 并缓存在本地方便下次查询。
递归查询: 客户端--->local dns这一段是递归查询, local dns将最终结果返回给了客户端
迭代查询: local dns--->根域名服务器查询, 根域名服务器没有直接返回结果, 而是返回的.com服务器的地址;
local dns不得向.com服务器查询,而.com服务器返回的却是权威DNS服务器, 这样一次又一次的查询是迭代
DNS缓存: 将解析数据放在离客户端近的地方,以此减少迭代查询的过程。
Local DNS: 又称缓存DNS, 像114.114.114.114就是国内最大的中立缓存DNS
2.2 搭建主辅DNS
搭建过程:
1. 主从服务器安装bind及基本配置
#安装bind
dnf -y install bind bind-utils
#修改监听地址
vi /etc/named.conf
options {
#注释掉下面两行
// listen-on port 53 { 127.0.0.1; };
// allow-query { localhost; };
}
#检查配置文件语法
#主配置文件
named-checkconf
2. 修改主服务器配置文件, 添加配置允许区域传输
vim /var/named/gopherabc.com.zone
options {
...
allow-transfer { 192.168.56.13; };
...
}
#修改主服务器, 区域数据库解析文件, 添加从服务器NS记录
$TTL 1D
$ORIGIN gopherabc.com.
@ IN SOA dns1 admin.gopherabc.com. (
2023022701 ; serial
3m ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
IN NS dns1
IN NS dns3 ; 从服务器的NS记录
dns1 IN A 192.168.56.11
dns3 IN A 192.168.56.13 ; 从服务器的IP地址
www IN A 192.168.56.12
#检查语法并重启服务
[root@node01 etc]# systemctl restart named
[root@node01 etc]# named-c
named-checkconf named-checkzone named-compilezone
[root@node01 etc]# named-checkconf
[root@node01 etc]# named-checkzone gopherabc.com /var/named/gopherabc.com.zone
zone gopherabc.com/IN: loaded serial 2023022701
OK
[root@node01 etc]# systemctl restart named
[root@node01 etc]# rndc reload
server reload successful
[root@node01 etc]#
3. 修改从节点配置, 指向主节点
#安装bind
[root@node03 ~]# dnf -y install bind bind-utils
#修改主配置文件
[root@node03 ~]# vim /etc/named.conf
options {
// listen-on port 53 { 127.0.0.1; };
// allow-query { localhost; };
// 不允许其它主机进行区域传输
allow-transfer { none;};
}
#添加区域要传输的配置
[root@node03 ~]# vim /etc/named.rfc1912.zones
zone "gopherabc.com" IN { // 要传输的区域
type slave; // 角色是从节点类型
masters { 192.168.56.11; }; // 要同步的主节点是
file "slaves/gopherabc.com.slave"; // 区域数据库配置文件的路径
};
// 从节点的区域数据库配置文件是通过拉取主节点自动生成的, 不需要自己写
#从节点启动服务
[root@node03 ~]# named-checkconf
[root@node03 ~]# systemctl enable named --now
[root@node03 ~]# rndc reload
server reload successful
[root@node03 ~]#
4. 验证测试
#测试节点
echo -e 'nameserver 192.168.56.11\nnameserver 192.168.56.13' >/etc/resolv.conf
dig www.gopherabc.com
关闭主节点的named服务, 然后测试:
然后启动主节点, 关闭从节点再测试:
3.搭建并实现智能DNS,架构图,原理解释文字,编写代码 ,代码对必要的选项,完成流程有文字描述,有实践的过程和实践的结果。
实现目标:
对于同一个域名 blog.gopherabc.org 来自172.16.0.0/24网段的请求解析为 172.16.0.20;
来自192.168.56.0/24网段的请求解析为 192.168.56.20
概念:
acl: 划分ip地址。
view: 将acl划分的IP地址与指定的 区域数据库配置文件绑定。
dns01配置:
1.写主配置文件, 添加acl, 并使用view绑定到独立的区域配置文件
[root@node01 ~]# cat /etc/named.conf
//定义acl
acl bjnet { //来至北京的流量
192.168.56.0/24; //192.168.56.0/24网段属于bjnet这个acl
192.168.56.7; //仅指定IP
};
acl njnet { //来至南京的流量
172.16.0.0/24;
172.16.0.7;
};
acl othernet { //其他地区的流量
any;
};
//定义view
view bjview {
match-clients { bjnet; }; //绑定acl
//有两种写法
//zone "gopherabc.org" {
// type master;
// file "gopherabc.org.bj.zone";
//};
include "/etc/named.bj.zone"; //绑定区域数据库配置文件
};
view njview {
match-clients { njnet; };
include "/etc/named.sh.zone";
};
view otherview {
match-clients { othernet; }; //这里把北京和南京之外的查询请求都由/etc/named.rfc1912.zones这个区域数据库处理
include "/etc/named.rfc1912.zones";
};
acl 和view 要写在options前面
需要注意的是一