为linux dns (bind named)服务器配置 单独的笔记

2023-03-14,,

注意: 当在把 named.ca文件下载好13个根dns服务器的 全球记录后, 就不再需要别的 dns服务器来辅助获得了. 只要把所有 本地服务器 不能解析的请求, 都发送到 . 点根去就行了, 所以 这个时候, 要把本地dns服务器的 /etc/reslov.conf 中的nameserver 改成 : 127.0.0.1

默认的dns服务器都是要支持 recursive 递归查询的: 即如果你的dns服务器指定的 是 相隔很远的, 不同的顶级域的时候, 服务器会 依次, 多次的 向上一级, 甚至 根级 转发查询请求, 知道找到要查找的请求. 比如,我要查找a.b.com. , 但是我连com的域都不知道, 那么我就要发给 点根服务器, 让点根服务器告诉我 管理com域的dns服务器(ip地址)有哪些, 点根返回结果给我, 然后我又向 com域 的dns管理服务器 查询 b.com这个域dns服务器在哪里, com域dns管理服务器告诉我 b.com 域服务器的(ip)地址, 然后我再 根 b.com 域dns服务器联系, 让他告诉我 a.b.com的地址在哪里... 这个就叫做递归查询.

需要注意的是, 在递归查询中, 所有的查询都是都是本地机器指定的 nameserver 去做的, 根级dns服务器, 顶级域名服务器如com, cn, org等 都只是告诉 nameserver_specified , 根级服务器和顶级dns服务器并不会去查的, 因为 每一次根级服务器 /顶级 服务器 都只是查找 自己的 缓存 记录的.

所以 dns服务器 通过 internet 网 查询 会 影响 网速的. 而如果采用本地的 /局域网内部的 dns服务器, (也是查询内部dns服务器的缓存, 即每一次查询结果, 都会 保存/缓存) , 会加快网速.


**linux的命令名和它的选项名称, 一定是 某个单词的 简写, 所以 你用不着 去刻意去记忆的. 真的知道了/记住了 对应的单词, 才会永远的 记得住! **

dns分四级: 点根服务器, 全球有13个, 他是不参与域名解析的, 其次是 顶级域, 包括com, cn, org, edu等, (要注意, 顶级域比 根域要小), 再次是二级域(即子域), 比如 redhat.com, 最后是 主机 名如www等.

    named域名服务 , 他的包名称叫 bind: Berkeley internet named daemon. 因为有很多 named 的软件, bind只是其中的一个.

    配置和启动文件的名称 都是 named...

    其实进行域名名称 解析, 还有两种方式, 一是 hosts, 另一个是 NIS. 以前的解析方式, 还真的是通过 hosts文件 来实现的 当你要上网的时候, 首先就是 到一个 服务器上去 手工下载/ 更新 hosts文件???

    isc.org是 internet system/software consortium: 因特网软件(系统??)联盟 con'sortium 联盟, 财团

    设置机器的dns服务器地址, 的命令, 不是 dns... , 而是 nameserver 1.1.1.1

    第一次去挖掘named.ca文件内容的时候, 需要指定一个 远程的 ns服务器, 比如: 202.98.96.69, 当配置好本地dns服务器, 作为 "生产dns服务器"时, 就要指定 127.0.0.1 , 如果是局域网内的其他机器, 就要指定 本地局域网内的 这台生产dns服务器的 ip地址..

    windows上的 共享,使用的协议是ms开发的 叫 CIFS: common internet filesystem. 通用internet 文件系统. 可以被 linux直接 mount. mount的时候要指定 类型是 -t cifs 就可以了.

    Windows机器上 有几个 默认的 共享 包括 几个分区的共享, 比如: C$, D$, 还有一个 IPC$ 共享

    linux的程序包rpm 就类似 于win中的 exe程序文件, 是已经编译好了的文件. 因此, 要查看某个软件是否安装了, 就是查看 这个 对应的rpm包是否安装了.

    dnf是一种包管理软件, 因为 linux中 为了避免包和包之间的 功能的重复 开发, 所以 就把 大家都要使用的 功能 单独拿出来, 形成 一个包, 这样以后大家使用时 就只依赖这一个包就行了.


    DHCP是基于255.255.255.255的广播机制进行的, dhcp不能穿越路由器,所以是 局域网内的协议, 因此, 在一个 lan中, 只能有一个 dhcp, 否则就会发生冲突!

    dhcp是由 internet 软件联盟: isc.org 提供的,

    通过查看 /var/log/ messages: 这个message是复数 所以有 复数后缀s

    dhcp的启动命令, 是 /usr/bin/dhcpd 这个命令文件, 不是 用 service dhcp 来启动的.

    httpd, vsftpd 主要是 远程网络 进行共享和连接的, 对于 局域网内的 文件共享, 主要 是通过 smb / samber 协议 来实现的 samber主要 是用来 **让windows 的机器 来 对 linux 主机 进行 文件共享的, ** 因为对于 linux 共享win的文件来说, 可以直接 mount -t cifs 就行了.

    而另一个 共享程序, nfs : network filesystem 协议, 则 只能 是用在 linux主机和 linux主机进行文件共享. win的主机 不能使用 nfs共享 ??


直接用 yum 安装的 bind 比较容易, 以下是用 tar 编译安装的 bind-9.10.6 的包

    ./configure 配置时, 当然需要gcc , 不需要 gcc-c++, 但是 需要 open-ssl 的开发包 openssl-devel
    配置时 应该指定 --prefix=/usr/local/named --sysconfdir=/etc/named 中 有的教材上说的, 没有配置 --prefix, 那样 (自己安装的程序包通常放在 /usr/local中 当然这个 很多软件包 都是 /一般 是由 configure 自己默认的...)将放在/usr/local/bin...等中, 如果只是自己编译安装一个包还行, 如果安装多个 都混合放置就混乱了 所以 还是 最好的指定 --prefix. 同样的, 很多工作目录 是默认的 放在 --prefix/var中, 这里 可以 单独指定到 /var/named 中, 这个看你 自己的 风格和 习惯了..
    但是 编译安装的时候, 在 /etc/named/ 中 并没有提供 named.conf 主配置文件, 需要自己 手动写.

**/usr/local/named/sbin/named -g 会列出 named运行的 全局 (global) 信息, 比如有多个worker thread, 有多少个 udp listener, 载入的配置文件是哪个, 结果怎样. 用 named -v | -V 可以 看到更多的 信息. **

    在 named/man下有 man1, man3, man5, man8, man1是关于dig.1 host.1 等工具的文档; man5 是关于 主配置文件named.conf.5 rndc.conf.5的说明文档, man8 是关于一些dns扩展功能的帮助,包括rndc.8 rndc-confgen.8
    主配置文件 named.conf 的语法要求: 完全类似 于 C语言的写法, 每一个 语句写完都要 用 分号结束; 然后所有的单词 (任何单词, 包括 大括号 之间 )之间 都用 空格 分隔, 不用 冒号. 通常 服务器的配置文件 要求都比较严格, 所以 要 注意 空格, 和 大括号等的 问题.

这里要特别 注意的是 , 区域的 type 类型 有 master, slave, hint 等, 这些类型 是 不能 加 引号的!! 其他 像 文件名, 目录路径要加引号.


关于多个目录的操作

    dirs只是列出 显示目录的结构, 他本身并不能切换
    pushd 本身有两个作用, 一个是压入栈, 另一个 他本身 也是 切换目录, 比如你在 压入一个 目录的时候, 是不是 同时也切换了 当前目录? 所以

    pushd 不带什么的, 就是 在 最近的两个目录之间切换; pushd +n...
    popd 则纯粹是 删除目录...
    那么, 怎么知道当前目录的排列呢 : 目录的排列是: 打pushd改变的时候, 会显示当前的目录排列, 从左到右,是 依次从小到大进行排列的, 而且第一个总是从0 开始的. 也就是从左到右是按从0 到大开始排列的...

more的另一种使用方式, 通常使用的是用more做管道, cat foo.txt | more, 而实际上, more 还可以直接 more 分屏显示 文件: more foo.txt 所以 , 以后只是在 没有文件, 只有控制台的命令输出 使用分屏时, 才使用 管道!


如何 能够 找到 全部 的 全球 点根 . dns服务器的ip地址?

    要设置 /etc/resolv.conf 只需要 重定向一句话就可以了: echo 1.1.1.1 > /etc/resolv.conf 每次 都用 完全覆盖的方式.
    **就是 要用 点根 . dns服务器的 ip地址 来查 点根 服务器! 所以 就是 第一次 dig -t NS . 找到一个 点根地址后, 要 将 resolv.conf 中的 nameserver 的地址 换成 那个 第一次查出的 点根 ip地址 . 一定要 直到 列出 全部的 13个 点根dns服务器 的地址, 就是 从 A.ROOT-SERVERS.NET. 一直到 M.ROOT-SERVERS.NET.

确实是启动 named 服务的时候, 是 直接打 named 这个命令的, 因为在自己 编译安装的时候, 是没有作为service 服务来注册的, 所以 就不能使用 service 的方式启动. 直接使用 named 命令就成了. 当然: 需要将 named的路径 /usr/local/named/sbin 放到 PATH环境变量中.

    named服务一定要有 rndc服务器的支持, 才能 运行成功. **而rndc 服务器 只要 具有了/配置好了 /etc/rndc.conf 配置文件, 直接运行 rndc就可以运行了. **

    运行 rndc-confgen命令 , 重定向到 > /etc/rndc.conf , 就生成 /etc/rndc.conf, 按照文件中所说的那样, 要把 rndc.conf 文件后面的 部分的内容 追加到 named.conf中.

    这个实际上, 是生成了 rndc.key 用来让 rndc和named 通信联络的 tcp/ip套接字, 然后 将 key "rndc.key" {...} controls .... 中的key内容 拷贝到named.conf中, 这样 named.conf和 rndc.conf中 就都有了 相同的 共享的 密钥key了.

    好像 rndc 这个服务器命令本身 就 一同 跟 named 放在 --prefix/sbin目录中的???

    配置 好rndc.conf 后, 先直接 运行rndc , 然后 运行 named, 就好. 监视 /var/log/messages 和 ps -aux | grep named ...

直到 用 127.0.0.1的resolv.conf 能解析 公网的域名了, 就说明了 本地dns服务器可以工作了. 本地服务器 只要 配置好了 点根 dns服务器 就可以工作.


要注意在 dns的 区域文件中, 会在 多个地方 出现多个 localhost. 同样 是 localhost. 但是 在不同的地方表示的意义 不一样.

    要注意 , 区域定义文件中的 @ 是一个变量, 这个变量是 来自 named.conf 主 配置文件中 的 zone 区域中指定的 区域名
    在 类型 为 SOA和 NS 的 entry中 最前面的 @ 表示的 是 区域, 而 类型 为 A的 entry中, 最前面的 @ 表示 的 是 主机.
    而且 在 SOA 和 NS 和 A等 entry中 的点. 不是代表 zone区域名称, 而是表示 结束 ??? 比如: localhost. 就表示 的是 "localhost"这个区域, 这个区域就是localhost, 后面没有别的什么.com什么的了, 因为这个区域名称 在主配置文件中已经写明 限死了的了 . 如果表示 myzone.com这个区域, 那么就是: myzone.com. 了, 表示 到com后面就结束了.
    @是一个变量, 所以凡是 "字面写法上" 相同的, 不管它的意思是否相同, 都可以用@ 来代替.
    对于 几个条目中 只有第一个条目的最前面是@的解释, 不是因为 下面的是 内容 是同一条条目, 而是因为 : 仍然是 几条 独立的 / 分离的 entries. 比如 3条entry, 注意, 每一行 都表示 一个 单独的 条目; 只是 因为, 后面的几个 entry, 第一个单词, 是相同的, 比如 也是 localhost. , 所以都用 @ 来代替了, 又因为 同时@ , 所以 就 继承省略了. 但是要注意, 既然是继承, 就不能顶格写了, 前面一定要留言 空格 或 tab键 ...

rndc 是用来管理named服务的, 也就是说, 只要当 named服务启动后, 以后 就用rndc来管理他了. 包括named.conf修改了配置文件后, 你用不着去重启 named 服务, 而是 直接用 rndc reload就可以了.

rndc的操作, 只有两步: 一是: 配置 rndc-confgen >> /etc/rndc.conf 生成配置文件, 第二步是, 运行 rndc的相关命令: 包括 : 启动命令: rndc, 重新加载/重启 命令 : rndc reload, 查看命令: rndc status.


    whereis 和which的区别, 从他们的语义上来就能看出: whereis说的是, 在哪里, 就是问你 某个命令 /文件, 存在于哪些地方, 即找到/显示这个命令及相关内容的存放位置(whereis 根 $PATH 没有什么关系的) ; 而which 指的是 **在当前的可执行命令环境中, 即$PATH显示的目录中(注意 $PATH不包含 目录的子目录) **是哪一个, 指的是, 如果一个命令 有alternatives, 那么当前直接执行 某个命令 使用的是 哪一个(几个中的哪一个?)

    more和cat 的区别, 都是打印, 以后的使用方法是: 如果不显示行号, 就都用more, 如果要显示行号, 才使用 cat -n.. 同时cat还有 连接 的 含义和 用法.

    默认的 rndc 的配置文件 rndc.conf 和 rndc.key文件都是 放在 跟 named.conf同一个目录中的, 比如你配置 named.conf是放在 /etc/named目录中的话, 那么 rndc.conf 和 rndc.key 就同样是放在 /etc/named目录中的.

    为什么输入rndc-confgen没有反应呢? 是因为 要产生 rndc.key 要使用 随机伪设备, rndc.key 的长度 是 from 1 through 512, DEFAULT 256.

    rndc-confgen的选项:

-A 指定使用的算法, 默认的是 hmac-md5
-b 指定key 的 长度
-c 指定要产生的 key的文件名称 , 默认的是 在 named.conf同目录下的 rndc.key 文件
-k 指定 named.conf 和 rndc.conf中 要使用 的key 的名称, 默认的是 " key 'rndc.key' "
-r 指定要使用的 随机文件, random file, 默认的是使用 /dev/random或 /dev/urandom. 也可以自己创建 一个 足够长的随机字符串组成的文件, 来作为 random file

### 所以说, 不是输入 rndc-confgen 没有反应, 而是因为随机数 要从 /dev/random 伪随机设备来 产生, 而是因为 产生随机字符的速度比较慢而已!

配置 /etc/rc.conf 文件, 告知内核  使用特定中断作为随机事件的源。你可以通过在/etc/rc.conf中设置rand_irqs来使之永久生效。
/etc/rc.conf
rand_irqs="3 14 15"

===========================

关于 /dev/random 和 /dev/urandom?

    他们是产生 随机数字节流的 伪设备 文件. 可以产生永不为空的 随机数. 许多加密/解密的应用 程序如 ssh, ssl等 都会用到它, 还有比如这里的 rndc-confgen要产生的随机数key文件也要用到它.

    其中 /dev/random依赖于系统的中断, 当中断数量不够的时候, 会阻塞挂起...而/dev/urandom则不依赖于系统的中断, 所以前者产生的随机数较慢, 但是 前者的字节流数据的随机性更好.

    od是 octal ( [2ktl] 八的; 八进制的... ) dump的意思. 是用来 显示一些特殊内容和格式的文件内容的 . 他默认的是用 octal 来显示的, 但是还可以用 -d -x(十六进制)来查看

    比如 executalbe 可执行文件, 直接用more / cat等来查看会显示乱码或不显示, 但是可以用 od -x转换后查看..

    dd 是 **data dump? **的意思, 是 将数据 进行 copy and convert . 主要的参数有 : if=/dev/cdrom, of=./cdrom.iso bs=100M count=1 (bs是说一次读入写出的 字节数 等于 数字加单位,如512K, 100M等, count是说转换dump 多少块/多少次) 比如 dd if=/dev/zero of=./zero.txt bs=1M count=1

    特殊设备文件 ? 在linux中, 所有的设备 都当作是 文件来看待的, 比如硬盘是 当作block 块文件的, 键盘鼠标是当作 character字符设备看待的. 还有一些 特殊功能的 "伪" 设备文件, 用来产生特殊字符或实现特殊功能的, 比如: /dev/zero(产生空字符 0 字符,但并没有 真实的 字符0,或空格) , /dev/random 用来产生随机数的... /dev/null是无底洞 设备, 可以存放任何多的任何内容, 且永远不会被撑着...

    linux中, 可以直接使用 命令 : CDRECORD 将 iso文件 刻录到 cd盘 或 dvd盘都可以, 不用再找其他刻录软件了, 就一条命令:

    cdrecord -v -eject speed=8 dev=0,3,0 driveopts=burnfree test.iso

    一般不用指定 speed, 刻录倍速, 刻录机会自动检查最佳的 刻录倍速

    刻录设备, 使用 cdrecord --scanbus 来查看可用的 刻录机设备.

================

rndc使用的是 tcp/udp的 953端口

[root@localhost named]# grep rndc /etc/services
rndc 953/tcp # rndc control sockets (BIND 9)
rndc 953/udp # rndc control sockets (BIND 9)
[root@localhost named]#

rndc.conf的配置文件是 规定了 key "rndc-key" 和 options. 然后对应的 named后面 也加上 相应的 rndc-key 和 controls

# Start of rndc.conf
key "rndc-key" {
algorithm hmac-md5; 注意 只有 纯粹的字符串才加引号, 如果不是 则不能加引号, 比如这里, 还比如 在named.conf 中的 type 的 master, hint等.
secret "Ak/Nf2ERn+H4yOrzji6b/A==";
}; options {
default-key "rndc-key";
default-server 127.0.0.1;
default-port 953;
}; // 这里要注意, 配置文件的格式 是很严格的: 比如 每一行 / 每一条语句 后面都要加上 分号, 最后的 大括号后面 也要 加上 分号.
# End of rndc.conf # Use with the following in named.conf, adjusting the allow list as needed:
# key "rndc-key" {
# algorithm hmac-md5;
# secret "Ak/Nf2ERn+H4yOrzji6b/A==";
# };
#
# controls {
# inet 127.0.0.1 port 953
# allow { 127.0.0.1; } keys { "rndc-key"; };
# };
# End of named.conf

注意, rndc 不是一个单独的命令, 他有很多options 和子命令, 比如 rndc status/reload/flush 等等, 另外 同httpd, firewalld, sshd等其他 服务 一样, 如果修改了 named的配置文件, 也要 重启启动 named: 即先要停止 named服务 killall -9 named 然后 ,再 重新 启动 named 服务. 直到 使用 host能够解析 外网了, 那么就表示 本地dns服务器配置成功了.

如何修改 wget的目的地址和名称?

有两个参数, 可以 更正 wget的默认设置,

-P --directory-prefix 可以指定 wget 下载的 路径, 默认的下载路径是 当前使用 wget的 目录, 这个通常不太合适, 你可以自己重新指定

-O ( --output-document )可以重新指定 下载的文件的名称, 有些站点如果地址是一个目录, 这时即使你获得的资源是一个 tar.gz文件, 它也默认保存为index.html 这个就不好了, 而且下载完成后, 很容易忘记更改名称, 从而造成 误解和误操作!!

=======================

配置named时, 为什么要配置localhost?

hostname 是一个 显示主机名的命令, 其实它还有 很多选项:

-a 显示别名alias

-i 显示对应的 ipaddress

-I 显示 更多的本机ip, 即网卡的ip地址

-d 显示他的域名

-f 显示完全限定域名

所以 127.0.0.1 localhost.localhostdomain localhost 都是 机器名, 后面的那个 localhost 是机器的别名.

dns服务器分为: master dns 服务区 + slave dns 服务器 + 缓存服务器

    service named restart|reload, 最好是不用 restart, 因为这个会引起 网络的断开, 可以使用 reload, 在不断开dns网络服务的情况下, 重新加载修改后的配置文件

    named-checkconf 检查配置文件是否正确,

    named-checkzone 是 检查区域文件的配置是否正确的命令: 格式是 named-checkzone "域名的名称" "域名的文件名", 比如: named-checkzone "localhost" /usr/local/namedvar/localhost.zone (这些域名 和 域名文件名 可以加引号, 也可以不加引号)

    如果配置有错误, 会报告出来, 然后就可以 照着 去修改.

    comment(s): 主要有三种意思: 注释/注解, 比如编程语言中的注释; 评论, 评语; 最后还有一个意思是: 意见.

    比如: 征求意见: Request For Comments: RFC 可以叫做 "意见征求书, 意见征求稿"

    RFC是internet机构的engineers和计算机科学家制定的一些标准和规范. 你可以对它提出建议等... 比如: dns的 zone文件的格式不是由BIND制定的,而是DNS标准文档制定的(见RFC1035)

注意zone文件的格式:

    控制指令是 以$ 开头, 而不是以 @ 开头的
    区域文件中的 点号, 表示 "结束"! 表示 一个区域名, 或 一个主机名 的结束了, 否则 就要在这个 主机名 或 域名的后面 要再加上 区域名称, 才是 完全的/完整的 域名和主机了.
    区域文件中的 @ 表示的是一个 变量名, 这个变量名的名称就是 带点号的区域的名称, 即 localhost. 定义 区域 zone "localhost" IN {...} , 然后 在 区域文件中 这个 @ 就等于 localhost.
参考: www.phpfans.net/ask/fansa1/1021757816.html
在正向中, @ 就代表 home. 算是根域吧
在反向中, @ 就代表 123.168.192.in-addr.arpa. 这个。 所以在使用中,要不就用@ 省写代替,要不就统一写完整的。

zone区域文件中, SOA记录中 括号内的数字 不必 分别写在 各行, 可以写在一行内:

[root@localhost named]# sbin/named-checkzone localhost var/localhost.zone
zone localhost/IN: loaded serial 1
OK
[root@localhost named]# more var/localhost.zone
$TTL 86400
$ORIGIN localhost. @ 1D IN SOA @ root ( 1 3H 15M 1W 1D )
IN NS @
IN A 127.0.0.1 [root@localhost named]#

### 终于清楚了: 为什么在localhost区域中, 使用 `host localhost 或 host localhost. 能够正确地解析出 127.0.0.1, 但是 使用 host localhost.localhost 就会报错? ` 这是因为, @ 就等于 `localhost.` 注意这里的主机名就是localhost, 因为不管是SOA 后面的主机名称, 还是 下面的 A记录 的 localhost. 都是 `带点号结尾的localhost. 记录`, (点号表示 结束, 表示 这个主机名称 或域名 是 fqdn, 即 主机名 就是 localhost了, 后面不能/不需要再加上 .localhost这个域名了. 也就是说, 这里的 localhost. 就相当于 完整的 www.baidu.com 了) 所以...

第二, 就是, 在 zone 区域文件中, 关于主机名称或域名, 你既可以用 完全的/完整的名称(用点号结尾的名称, 如 http://www.home., www.foodom.com. , localhost. , 也可以使用 相对的 , 不完整的 主机名或域名 这时的主机名或域名 就会自动的 在 后面 加上 当前域名, 比如: 管理员root 就等于: root.foodom.com. 主机: locolhost 就等于 localhost.foodom.com. 注意这里的localhost后面没有带点. www就等于 www.foodom.com.

    soa记录中的 serial表示 更改次数/版本, 每次修改时都应该 增加数字, 因为slave dns server会将 自己的 serial 数值根主机的 serial 数值相比较, 只有当 主dns服务器的版本号(即这个serial值)大于自己的对应值时, 才会去更新, 否则就会认为主dns记录没有改变/更新, 就不会去 更新自己的 数据库记录的...

=============================

    localhost通常来说, 是一个域名主机名称, 他可以设置为 任意的 ip地址, 比如: localhsot - 192.168.0.10 但是通常都是设置为 127.0.01 的

    而127.0.0.1 这个ip地址 是回环loopback这个网卡(虚拟的)的地址, 是机器内部 很多 内部 网络程序进行通信的地址.

### 如果rndc提示, 127.0.0.1#953 connection refused. 一定是 named.conf 和 rndc.conf 的配置 的问题, 说明 他们的 rndc-key 没有 传递到, 要么没有 配置 rndc-key, 要么就是 named.conf 中的 拷贝rndc.conf中的部分没有 被 解开注释.
解开注释的方法, 有两种, 一种是在vim中, 解开: 这个可以支持 $-1 的行号的写法, 比如: ` : ., $-1 s/^#\ // `
另一种方法是 使用 sed , 但是在 sed 命令中 是 不支持 $-1 的写法的: 比如: ` sed -i -e '10, $-1s/^#\ //' ./etc/named.conf ` 这时会提示 说 - character 不合法...

在localhost域, 为什么 localhost 主机可以直接解析, 而其他主机必须加上 .localhost?

[root@localhost named]# host www.localhost
www.localhost has address 192.168.0.104
[root@localhost named]# host www.localhost.
www.localhost has address 192.168.0.104
[root@localhost named]# more var/localhost.zone
$TTL 86400
$ORIGIN localhost. @ 1D IN SOA @ root ( 1 3H 15M 1W 1D )
IN NS @
IN A 127.0.0.1 /// 是因为在这里就隐含了 localhost 这个域名/主机名??? www IN A 192.168.0.104
[root@localhost named]#

在 zone区域文件中, 每一条记录都是 以 区域名称 或 主机名称 开头的! 同时 master和 slave的 区域版本号的 写法,是 以 年月日的数字+版本号, 比如: 2017121001 这样, 正好 如果是后面的日期 修改了的, 那么 后面的 日期数字 也要比 前面的日期数字大~

区域文件中, SOA后面的表示 的是: 这个域名 授权 的 区域是 哪些? 管理员是谁. 所以 , SOA后面的 是一个区域名称, 不必写 主机名称??

    测试主机和 域名 的工具, 既可以使用 host, 也可以使用dig, dig命令的信息更详细...
    dig的类型可以有多种, 比如 -t NS , -t MX 10 , -t A 等 比如 : dig -t A www.foodom.com
    一个域名 同时也可以是 一个主机名, 或者说, 在任何一个区域中, 你 完全可以定义一个 和 区域名称 相同的 主机名. 比如: 有一个域名 叫 foodom.com, 你也可以定义一个主机名, 为: foodom.com
@ 1D  IN SOA @ (这里的@ 表示 一个 根域名称同名的 主机名) root ( 2017101001 3H 15M 1W 1D)
IN NS ns  (或@)
IN MX 10 mail
IN A 10.10.1.254 ns IN A 10.10.1.254 (10.0.0.1) 可以是自己, 也可以是别的主机, 根据具体情况.
如果用的是自己, 那么 上面的 NS 和 MX 就可以写自己 , 即: @  NS是指明 这个区域 的 名称服务器, 就是用 的ns主机, 这里用的是 省略的名称, 所以 在后面一定补上 ns的记录 entry 条目.
mail 是指明这个区域的 邮件服务器, 就是用的 mail主机, 完整的名称 是: mail.foodom.com. 在后面也要补上条目
    如果在本地域, 本机域, 可以 使用 简写的缩写 的名称, 即只写省略的名称, 不写 域名, 那么就是 在 /etc/resolv.conf 文件中, 加上 一句 search foodom.com 表示解析主机的时候, 可以在后面自动的加上 这个 search的域名...

再看一下 SOA 应该是 : section of authority , 是指的 授权区域, 而不是 "开始授权"?

SOA, 其中的 s 表示的是 section . 即SOA = section of authority 授权区域, 所以 SOA的后面是 一个 域! 而不是主机???

;; AUTHORITY SECTION:
foodom.com. 86400 IN NS ns.foodom.com.

dns的端口号53 和 953 的区别?

DNS 本身的端口为53 UDP是用来做DNS解析的。一般域名提供商,提供的dns服务器,都是走udp53端口的。

搭建dns服务器,提供域名解析,也是同样做udp53端口。如果端口没开放,或是被其他内容给占用了,都会导致域名解析不正常。

而机子的 953 端口, 是提供给 rndc来 连接 dns的

[root@localhost named]# sbin/rndc reload
rndc: connect failed: 127.0.0.1#953: connection refused
[root@localhost named]# [root@localhost named]# cat /etc/services | grep rndc
rndc 953/tcp # rndc control sockets (BIND 9)
rndc 953/udp # rndc control sockets (BIND 9)
[root@localhost named]# 这个953 和 好记: 一个是bind 9的 dns版本, 然后 他控制的 是 dns的运行端口 53. 就是这两个数字的 结合: 9 + 53 = 953

每次查询时, 主要是看 那个 回应的 section. 即answer section:

;; ANSWER SECTION: dig -t SOA ....
foodom.com. 86400 IN SOA foodom.com. root.foodom.com. 2018011001 10800 900 604800 86400 ;; ANSWER SECTION: dig -t A ....
www.foodom.com. 86400 IN A 1.1.1.10

=================================================

反向区域 如: 0.168.192.in-addr.arpa .zone 文件的配置 跟正向区域配置的区别和不同

    配置 反向区域的 时候, 里面的 所有关于 主机名称的 地方 就 都不 能 省略了, 因为你省略的话, 默认的就是要加上 0.168.192.in-addr.arpa. 后缀, 很明显这个是要不得的, 比如, 管理员 要用 root.localhost. 而不能只是写root, 后面的 NS, MX等 都要 写成 正确的 完整的 主机名称, 如: ns.localhost. mail.localhost. 而不能写成 @ 等等.

    但是 SOA后面的 区域 可以用 @ 来表示, 因此, 再一次说明了 SOA 后面的 @ 表示的 是 "授权的区域", 不是什么管理主机. 是区域, 因此, 总是可以用 @ 来表示的

    特别注意的 是, 就是 反向区域中的 IN类型是 PTR, 不再是 A了.

在 dig命令的 显示中, 有几个区域 其中 "question section: 表示的是 提问区域即 提交查询的主机/ " 而 answer section 就是 应答区域了.

;; QUESTION SECTION:  //提问区域
;1.0.0.127.in-addr.arpa. IN PTR ;; ANSWER SECTION: // 应答区域
1.0.0.127.in-addr.arpa. 86400 IN PTR localhost. ;; AUTHORITY SECTION:
0.0.127.in-addr.arpa. 86400 IN NS localhost. ;; ADDITIONAL SECTION:
localhost. 86400 IN A 127.0.0.1

### 在 zone区域文件中, 每一条 entry之间 可以 间隔 空行的! 而且对于 一条 entry, 如果 他是一空格 , tab等 whitespace 字符开始的 , 都表示 他的 设置目标 是 继承上一条 entry的 对象!

对反向区域的测试工具命令

    可以直接使用 host 来测试反向区域的ip地址:
[root@localhost named]# host 127.0.0.1
1.0.0.127.in-addr.arpa domain name pointer localhost.
    也可以使用 dig 来测试 反向区域 , 但是, 使用的dig的时候, 不能直接 挖掘 ip地址, 因为会把ip地址当作一个 正向 的主机地址来看. 所以 要
[root@localhost named]# dig -x 127.0.0.1   // 使用 -x选项 后面跟 正常的ip地址
或者
使用 -t ptr类型, 但是后面要跟 完整的 反向地址域名
[root@localhost named]# dig -t ptr 1.0.0.127.in-addr.arpa

关于反向区域的命名: 域名 必须严格的 写作 : 0.168.192.in-addr.arpa, 但是 区域文件的名称 通常还是写作 正向ip区域的zone: 比如: 192.168.0.zone

zone区域文件中的 关键字, 可以大写 , 也可以 小写, 比如 IN 可以写成 in, PTR可以写成 ptr, A可以写成a等等

[root@localhost named]# sbin/named-checkzone "0.168.192.in-addr.arpa" var/192.168.0.zone
var/192.168.0.zone:1: no TTL specified; using SOA MINTTL instead // 当没有在 区域文件中 明显地指定 TTL的时候, 就是用 soa中的 最小ttl minttl来代替
zone 0.168.192.in-addr.arpa/IN: loaded serial 2018101001
OK
[root@localhost named]# more var/192.168.0.zone
@ IN SOA bardom.com root.bardom.com. ( 2018101001 3H 15M 1W 1D )
IN NS ns.bardom.com. 254 IN PTR ns.bardom.com.
1 IN ptr www.bardom.com.
2 in ptr ftp.bardom.com. // **这里使用的是 小写的 in, 小写的ptr**// 但是 named-checkzone 是 ok的! [root@localhost named]#

如果正确的 解析了的话, 应该在 dig 显示区域 看到 answer section! 如果没有看到 answer section 就说明 出错了, 可能是, 服务器没有起来, 或者是 你的 解析地址 写错了,

[root@localhost named]# dig -t ptr 254.0.168.192.in-add.arpa

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> -t ptr 254.0.168.192.in-add.arpa
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 63773
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0 ;; QUESTION SECTION:
;254.0.168.192.in-add.arpa. IN PTR /// 这里 没有看到 answer section, 是因为 : 上面的 in-add 写错了, 正确 的 应该是 in-addr. ;; AUTHORITY SECTION:
arpa. 10733 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018011600 1800 900 604800 86400

其他dns服务的配置 还有 子域的授权, 辅助dns服务器(slave 服务器)的配置等等. 就是进阶的 暂时不做了.

为linux dns (bind named)服务器配置 单独的笔记的相关教程结束。

《为linux dns (bind named)服务器配置 单独的笔记.doc》

下载本文的Word格式文档,以方便收藏与打印。