bind介绍在局域网环境中,一般我们要搭建DNS服务,使用的是BIND(Berkeley Internet Name Domain)软件来实现,BIND提供了一个名为named(也叫named daemon)的服务程序,用于处理DNS查询。 BIND 由 Internet Systems Consortium (ISC) 开发和维护,所以可以访问ISC 的官方网站来获取关于 BIND的相关信息。 除了BIND外,还有其它的软件也可以用来搭建DNS服务,例如powerdns,dnsmasq,unbound,coredns(主要用在k8s环境中)等。 ISC官网:https://www.isc.org/ 搭建正向解析DNS服务正向解析:将域名转换为与之关联的IP地址的过程 反向解析:一个查找与特定IP地址关联的域名的过程 1、安装bind一般通过Linux发行版提供的软件包管理工具(例如yum、apt)进行安装即可,如果需要进行编译安装,可以去官网或者github下载源码,参考管理员手册进行编译安装。
使用包管理工具进行安装: 例如:ubuntu2004安装bind9 # ubuntu 2、修改配置通过软件包管理工具安装了bind9服务后,配置文件一般放在 /etc/bind/ 目录下,主配置文件一般是 named.conf 例如:在ubuntu2004中使用apt进行安装后,默认带的配置文件有这些 在主配置文件中,使用include 指令来引入了其它的配置文件。 有一个叫作named.conf.options的配置文件,包含了一个 options配置块,options块用于指定全局服务器选项。这些选项会影响BIND服务器的整体行为。 例如:端口指定、工作目录指定、上层DNS、查询权限等。 端口配置bind默认监听UDP和TCP的53端口,如果要修改端口可以在这个配置文件(named.conf.options)中进行修改。(一般情况下这个端口不用改) # any 表示any 允许所有的机器访问本机这个dns服务器 说明: 当使用 ss -ntl | grep 53 查看端口监听时,有一个 127.0.0.53%lo:53 。这个是 systemd-resolved 服务默认监听的地址和端口,在ubuntu1804及其以上的版本中默认启用 systemd-resolved服务。 日志配置默认情况下,BIND把日志消息写到系统日志里面的,例如centos是/var/log/messages文件,ubuntu则是/var/log/syslog。如果我们想要自定义bind的日志存放位置话,可以通过loging配置块来实现。(如果没需求可以不改) loging配置块定义如何记录服务器的活动。您可以指定记录哪些类别的消息、它们的严重性以及它们应该记录到哪里。 (1)一般是/etc/bind目录下单独创建一个文件,叫作 named.conf.logging,通过在这个配置文件里面添加日志的相关配置。 sudo vim /etc/bind/named.conf.logging 说明:
(2)编写好配置文件后,将配置文件通过在主配置文件中通过include指令来引入。 include "/etc/bind/named.conf.logging"; logging的指令说明:
(3)重启服务后即可生效 访问控制通过option配置块的allow-query 和 allow-transfer可以用于设置访问控制。如果不设置默认就是允许任何客户端进行查询和请求区域传输。
options { 上层DNS指定当BIND服务器收到一个它无法直接回答的DNS查询时(例如,因为它不是查询的域的权威服务器,并且查询结果也不在其缓存中),会默认到互联网上找根。为了提高查询效率,将这个查询转发(forward)到 forwarders 列表中指定的一个或多个DNS服务器上去。 options { 区域配置这是配置DNS正向解析的第一步。bind的区域配置是通过 zone 配置块来实现的。区域配置就是配置域名解析的规则。 例如:自带的 named.conf.default-zones 这个文件中,就配置了一些默认的解析规则。 例如:我需要将 www.yongshen.com 这个FQDN解析为ipv4地址10.0.0.66,可以这样做: (1)先创建区域配置文件,命名方式一般是 域名.zones。 一般单独创建一个目录来存放,方便后期管理 mkdir /etc/bind/yongshen 然后在这个目录下编辑区域配置文件: sudo vim /etc/bin/yongshen/yongshen.zones 区域配置文件说明zone配置块,大致的格式就是: zone "要解析的域名" { type指令说明 type用于指定定义区域的类型,常见的类型有以下这些:
file指令说明 file指令用于指定 区域文件,也叫 区域数据文件。这个文件包含了若干条资源记录,通过这个文件可以为域名提供详细的解析信息。 这个文件的作用就是告诉BIND:“当有人查询某个FQDN时,请给他这个IP地址作为答案”。 (2)编辑区域数据文件 区域配置文件搞定后,需要创建zone配置块中file指定的区域数据文件,一个区域数据文件由若干条区域数据记录组成。 sudo vim /etc/bind/yongshen/db.yongshe.com 区域数据文件说明一个区域数据文件由若干条区域数据记录组成,每条区域记录由 5 部分组成: NAME [TTL] IN type value NAME NAME:指定当前负责解析的域名,可以使用 @ 符号来表示当前解析的域名就是 区域配置里面改zone配置块指定的域名 例如: www IN A 10.0.0.66 表示要解析的FQDN就是 www.yongshen.com TTL TTL:表示缓存过期的时间,当一个客户端(或者递归DNS服务器)向权威DNS服务器查询一个域名并得到答案后,这个答案(DNS记录)会被缓存在客户端或递归服务器上。TTL值就是告诉这些客户端或服务器应该缓存这条记录多长时间。在这个缓存时间内,如果再次有对同一条DNS记录的查询,客户端或递归服务器可以直接从自己的缓存中获取答案,超过TTL指定的时间了记录就会从缓存中被移除,相同的查询请求就需要重新请求。 IN IN:指的就是这个记录属于Internet类,其他类基本上都没用了 type type用于指定区域记录的类型,不同类型的区域记录有不同的作用。并且不同的类型,对应的value值也不同。
例如: www IN A 10.0.0.66
例如: mail IN AAAA 2001:db8::1
例如: @ IN NS master.yongshen.com. 表明权威服务器是 master.yongshen.com. 具体过程如下: 1、当客户端(或其他DNS服务器)想要解析一个特定的域名,例如 www.yongshen.com, 它首先会查询其本地缓存或前置DNS服务器。如果没有找到答案,它可能会进一步查询根服务器或其他已知的上级服务器来寻找关于yongshen.com域的权威服务器信息。 2、在此情境中,权威服务器的标识为 master.yongshen.com,这是通过NS记录 @ IN NS master.yongshen.com. 指定的。这告诉询问者,如果想要解析属于yongshen.com域的任何主机名,它应该联系master.yongshen.com。 3、 但这还不够,因为询问者需要知道master.yongshen.com的实际IP地址才能与之联系。为了提供这一信息,还有一条A记录:master IN A 10.0.0.66,告诉询问者master.yongshen.com的IPv4地址是10.0.0.66。 4、当查询请求到达IP地址10.0.0.66的服务器时,因为该服务器已经配置为yongshen.com域的权威服务器并拥有该域的完整区域文件(通过zone配置块的type和file实现的),它会查找关于www.yongshen.com的记录。在此例中,它找到了记录www IN A 10.0.0.66,所以它会将10.0.0.66这个地址返回给询问者。
# 邮箱只起到说明作用,不起实质的作用 字段说明:
(3)将区域文件加入主配置文件 区域文件和区域数据文件都创建和配置后,需要将区域文件加入主配置文件中。 sudo vim /etc/bind/named.conf 3、重启服务重启bind服务后测试是否生效,我在ubuntu2004中使用apt安装bind后,发现有bind9和named这两个服务。 查看named的service文件时,发现使用Alias=bind9.service指定了一个叫作bind9.service的别名。 所以在使用ssytemctl enable named后,/lib/systemd/system/named.service在 /etc/systemd/system/下创建了两个service文件, /etc/systemd/system/bind9.service和/etc/systemd/system/multi-user.target.wants/named.service。
sudo systemctl restart bind9.service 4、测试可以通过dig工具来测试,dig默认使用的是53端口,如果修改了bind服务器的端口,需要使用 -p 参数来指定端口号 # dig通过 @ 来指定DNS服务器地址 除了使用dig来测试dns是否可用外,还可以使用以下工具进行测试:
说明: 如果DNS服务器的端口不是默认的53,只有dig提供了 -p参数来指定,host和nslookup都是不能手动指定端口的, 注意事项BIND中FQDN说明:在DNS和bind中,完全限定域名的表现形式为由一个点(.)结尾的域名。这个点代表DNS层级结构的根,所以FQDN实际上是从某个节点一直到DNS的根的完整表示。末尾不带点就是一个相对于名。 在zone配置块中: 定义了一个区域,这个zone配置块负责处理关于yongshen.com的DNS请求,在指定区域名称的时候,如果最后加了点(.)表示这是一个完全限定域名(不加点BIND也通常将其视为FQDN),但是可能会出现在不带点的情况下,把他当作一个相对域,从而给它加上后缀。 例如:特定的网络(企业或大学网络)里面会自动加上后缀,不带点可能就给加上后缀了 在区域数据文件中
$TTL说明$TTL 是一个全局默认TTL,用于指定那些没有明确设置TTL的记录的生存时间。只需要在文件的顶部定义一次TTL,它会自动应用到所有后续的记录上,除非这些记录自己有明确的TTL设置 @ 符号说明@ 符号是一个简写,代表当前区域的主域名,即在zone配置块中指定的域名。 除了@符号外,经常用的还有一个 * 号, 符号是一个通配符,和shell中的*效果一样,用来匹配该域中的任何未明确指定的主机名。 例如: www IN A 10.0.0.66 查询www.yongshen.com 会范围10.0.0.66,查询其它的,例如mail.yongshen.com就返回10.0.0.67 区域数据文件省略说明在BIND的区域文件中,连续的资源记录(RRs)可以省略与前一条相同的部分。例如: # 域名 example.com. 在后续的记录中被省略了,因为它与前一条记录相同。 BIND配置文件特点
配置文件检查编写完配置文件后,可以通过named-checkconf和named-checkzone检查配置文件是否有语法错误。 named-checkconf 检查的是named.conf这个配置文件,也可以手动指定配置文件 # 不指定配置文件 默认检查named.conf named-checkzone 检查的是域名对应的区域数据库文件 格式为: named-checkzone [zone-name] [zone-file-path] 主从结构配置通过配置BIND的主从结构,实现区域数据的冗余和负载分担。 具体操作就是: 1、主服务器配置区域信息、如果发生数据的更改只能在主服务器上完成。 2、从服务器负责从主服务器复制区域数据信息,从服务器也可以回答关于其区域的DNS查询 主服务器配置:(1)在options配置快中通过allow-transfer设置只能从服务器进行区域传输,如果不写默认所有的服务器都能进行传输,太危险。 options { (2)区域配置和区域数据配置,实现方法就和上面搭建正向解析DNS步骤是一样的。 # 区域配置 从服务器配置;(1)在options配置快中通过allow-transfer设置不允许所有的服务器都能进行传输,保证安全 options { (2)区域配置和主服务器的区域配置略有不同,首先就是要使用masters 指定主服务器的ip地址,而且file指定不在指定一个区域数据文件了,而是指定指定同步过来的资源记录存放位置 # 区域配置 说明: 从服务器(Slave)通过file指令指定同步过来的资源记录(zone data)的存放位置。这个位置是一个文件系统路径,指向一个文件,当从服务器从主服务器(Master)进行区域传输时,这个文件会被更新。 例如:
说明;如果需要将同步过来的资源文件存放在一个指定的位置,需要修改一些去安全权限才行。 (3)测试 AppArmor在ubuntu2004中搭建主从架构的时候,从服务器上通过file指定同步过来的资源记录存放位置,默认是存放在/var/cache/bind下,如果自定义一个目录会出现 “dumping master file: xxxxx: open: permission denied”这种提示,这是因为受到了AppArmor定义的策略影响。 这个输出说明了named有一个策略被激活了,策略的名字是(/usr/sbin/named),这个策略影响着正在运行的named进程(PID 468483) AppArmor说明AppArmor是Linux的一个内核安全模块,它是基于路径来限制程序能够访问的资源,从而增强系统的安全性。大多数情况下,在 Ubuntu 和 openSUSE 等发行版中默认启用AppArmor模块,Red Hat系列的发行版默认启动的是SELinux模块。 AppArmor一般用于在特定路径下隔离应用程序的环境,例如可以限制一个进程只能访问必要的文件和目录,即使文件系统给予它足够的权限了,通过AppArmor进行限制后照样没权限。 AppArmor有两种工作模式:enforce(强制)模式和complain(投诉)模式,强制模式下不符合策略的操作会被拒绝。而投诉模式下不会组织不符合策略的操作,只会记录到日志。 AppArmor为进程定义的策略规则是存放在 /etc/apparmor.d/ 目录中,策略规则文件命名方式按照 进程所在的绝对路径命名(需要把/换为.) 例如:为 /usr/sbin/named 定义的 AppArmor 策略文件将命名为 usr.sbin.named。因为named进程的路径是:/usr/sbin/named AppArmor 策略文件也是特别简单的,只需要在配置文件里面加入相关文件路径,然后指定权限。策略生效后进程就只能按照定义的策略队则权限去访问一个文件了。 文件路径 权限 例如:给某个进程编写一个策略文件,策略规则是只能以读权限访问A文件,那么除了A文件他有读权限,其它目录相对于这个进程来说,什么操作权限都没有。 named的默认策略: 根据AppArmor策略文件的定义规则,为 /usr/sbin/named 定义的 AppArmor 策略文件将命名为 usr.sbin.named。 ehigh@ubuntu:~$ cat /etc/apparmor.d/usr.sbin.named 解决方法; 为了解决自定义区域数据文件没权限这个问题,可以采取以下方案: 方法一: 将AppArmor工作模式改为complain模式实现进程不受到策略的影响。 # 修改策略模式 方法二: 修改named的策略文件,将存放区域数据文件的目录加到策略文件中,并赋予对应的权限。 sudo vim /etc/apparmor.d/usr.sbin.named 例如:自定义从服务器存储资源数据文件的目录为/etc/bind/zones 1、修改策略文件,将自定义的目录加入到策略文件中,并指定操作权限 sudo vim /etc/apparmor.d/usr.sbin.named 2、修改区域配置文件,让 同步过来的资源记录存放位置 自定义存放到/etc/bind/zones中 zone "foreverhigh.com" { 3、修改目录权限,让bind拥有读写权限 sudo chmod 755 /etc/bind/zones 4、重新加载策略文件并且重启bind服务 sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.named 5、检查是否生效 链接:https://www.cnblogs.com/arthinking/p/14450337.html (版权归原作者所有,侵删) 上一篇:搭建网络平台虚构玉石交易 传销组织头目获刑五年八个月 下一篇:深度学习06神经网络搭建_笔记 |