为linux dns (bind named)服务器配置 单独的笔记
注意: 当在把 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这个网卡(虚拟的)的地址, 是机器内部 很多 内部 网络程序进行通信的地址.
在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