为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的命令名和它的选项名称, 必定是 某个单词的 简写, 因此 你用不着 去刻意去记忆的. 真的知道了/记住了 对应的单词, 才会永远的 记得住! php

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

  1. named域名服务 , 他的包名称叫 bind: Berkeley internet named daemon. 由于有不少 named 的软件, bind只是其中的一个.
    配置和启动文件的名称 都是 named...
    其实进行域名名称 解析, 还有两种方式, 一是 hosts, 另外一个是 NIS. 之前的解析方式, 还真的是经过 hosts文件 来实现的 当你要上网的时候, 首先就是 到一个 服务器上去 手工下载/ 更新 hosts文件???html

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

  3. 设置机器的dns服务器地址, 的命令, 不是 dns... , 而是 nameserver 1.1.1.1
    第一次去挖掘named.ca文件内容的时候, 须要指定一个 远程的 ns服务器, 好比: 202.98.96.69, 当配置好本地dns服务器, 做为 "生产dns服务器"时, 就要指定 127.0.0.1 , 若是是局域网内的其余机器, 就要指定 本地局域网内的 这台生产dns服务器的 ip地址..c++

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

  5. Windows机器上 有几个 默认的 共享 包括 几个分区的共享, 好比: C$, D$, 还有一个 IPC$ 共享数据库

  6. linux的程序包rpm 就相似 于win中的 exe程序文件, 是已经编译好了的文件. 所以, 要查看某个软件是否安装了, 就是查看 这个 对应的rpm包是否安装了.
    dnf是一种包管理软件, 由于 linux中 为了不包和包之间的 功能的重复 开发, 因此 就把 你们都要使用的 功能 单独拿出来, 造成 一个包, 这样之后你们使用时 就只依赖这一个包就好了.编程


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

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

  3. 经过查看 /var/log/ messages: 这个message是复数 因此有 复数后缀s缓存

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

  5. httpd, vsftpd 主要是 远程网络 进行共享和链接的, 对于 局域网内的 文件共享, 主要 是经过 smb / samber 协议 来实现的 samber主要 是用来 让windows 的机器 来 对 linux 主机 进行 文件共享的, 由于对于 linux 共享win的文件来讲, 能够直接 mount -t cifs 就好了.

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


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

  1. ./configure 配置时, 固然须要gcc , 不须要 gcc-c++, 可是 须要 open-ssl 的开发包 openssl-devel
  2. 配置时 应该指定 --prefix=/usr/local/named --sysconfdir=/etc/named 中 有的教材上说的, 没有配置 --prefix, 那样 (本身安装的程序包一般放在 /usr/local中 固然这个 不少软件包 都是 /通常 是由 configure 本身默认的...)将放在/usr/local/bin...等中, 若是只是本身编译安装一个包还行, 若是安装多个 都混合放置就混乱了 因此 仍是 最好的指定 --prefix. 一样的, 不少工做目录 是默认的 放在 --prefix/var中, 这里 能够 单独指定到 /var/named 中, 这个看你 本身的 风格和 习惯了..
  3. 可是 编译安装的时候, 在 /etc/named/ 中 并无提供 named.conf 主配置文件, 须要本身 手动写.

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

  1. 在 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
  2. 主配置文件 named.conf 的语法要求: 彻底相似 于 C语言的写法, 每个 语句写完都要 用 分号结束; 而后全部的单词 (任何单词, 包括 大括号 之间 )之间 都用 空格 分隔, 不用 冒号. 一般 服务器的配置文件 要求都比较严格, 因此 要 注意 空格, 和 大括号等的 问题.

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

关于多个目录的操做

  1. dirs只是列出 显示目录的结构, 他自己并不能切换
  2. pushd 自己有两个做用, 一个是压入栈, 另外一个 他自己 也是 切换目录, 好比你在 压入一个 目录的时候, 是否是 同时也切换了 当前目录? 因此
    pushd 不带什么的, 就是 在 最近的两个目录之间切换; pushd +n...
  3. popd 则纯粹是 删除目录...
  4. 那么, 怎么知道当前目录的排列呢 : 目录的排列是: 打pushd改变的时候, 会显示当前的目录排列, 从左到右,是 依次从小到大进行排列的, 并且第一个老是从0 开始的. 也就是从左到右是按从0 到大开始排列的...

more的另外一种使用方式, 一般使用的是用more作管道, cat foo.txt | more, 而实际上, more 还能够直接 more 分屏显示 文件: more foo.txt 因此 , 之后只是在 没有文件, 只有控制台的命令输出 使用分屏时, 才使用 管道!


如何 可以 找到 所有 的 全球 点根 . dns服务器的ip地址?

  1. 要设置 /etc/resolv.conf 只须要 重定向一句话就能够了: echo 1.1.1.1 > /etc/resolv.conf 每次 都用 彻底覆盖的方式.
  2. **就是 要用 点根 . 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环境变量中.

  1. named服务必定要有 rndc服务器的支持, 才能 运行成功. 而rndc 服务器 只要 具备了/配置好了 /etc/rndc.conf 配置文件, 直接运行 rndc就能够运行了.
  2. 运行 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了.

  3. 好像 rndc 这个服务器命令自己 就 一同 跟 named 放在 --prefix/sbin目录中的???
  4. 配置 好rndc.conf 后, 先直接 运行rndc , 而后 运行 named, 就好. 监视 /var/log/messages 和 ps -aux | grep named ...

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


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

  1. 要注意 , 区域定义文件中的 @ 是一个变量, 这个变量是 来自 named.conf 主 配置文件中 的 zone 区域中指定的 区域名
  2. 在 类型 为 SOA和 NS 的 entry中 最前面的 @ 表示的 是 区域, 而 类型 为 A的 entry中, 最前面的 @ 表示 的 是 主机.
  3. 并且 在 SOA 和 NS 和 A等 entry中 的点. 不是表明 zone区域名称, 而是表示 结束 ??? 好比: localhost. 就表示 的是 "localhost"这个区域, 这个区域就是localhost, 后面没有别的什么.com什么的了, 由于这个区域名称 在主配置文件中已经写明 限死了的了 . 若是表示 myzone.com这个区域, 那么就是: myzone.com. 了, 表示 到com后面就结束了.
  4. @是一个变量, 因此凡是 "字面写法上" 相同的, 无论它的意思是否相同, 均可以用@ 来代替.
  5. 对于 几个条目中 只有第一个条目的最前面是@的解释, 不是由于 下面的是 内容 是同一条条目, 而是由于 : 仍然是 几条 独立的 / 分离的 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.


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

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

  3. 默认的 rndc 的配置文件 rndc.conf 和 rndc.key文件都是 放在 跟 named.conf同一个目录中的, 好比你配置 named.conf是放在 /etc/named目录中的话, 那么 rndc.conf 和 rndc.key 就一样是放在 /etc/named目录中的.
  4. 为何输入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?

  1. 他们是产生 随机数字节流的 伪设备 文件. 能够产生永不为空的 随机数. 许多加密/解密的应用 程序如 ssh, ssl等 都会用到它, 还有好比这里的 rndc-confgen要产生的随机数key文件也要用到它.
    其中 /dev/random依赖于系统的中断, 当中断数量不够的时候, 会阻塞挂起...而/dev/urandom则不依赖于系统的中断, 因此前者产生的随机数较慢, 可是 前者的字节流数据的随机性更好.

  2. od是 octal ( [2ktl] 八的; 八进制的... ) dump的意思. 是用来 显示一些特殊内容和格式的文件内容的 . 他默认的是用 octal 来显示的, 可是还能够用 -d -x(十六进制)来查看
    好比 executalbe 可执行文件, 直接用more / cat等来查看会显示乱码或不显示, 可是能够用 od -x转换后查看..

  3. dddata 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

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

  5. 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 服务器 + 缓存服务器

  1. service named restart|reload, 最好是不用 restart, 由于这个会引发 网络的断开, 可使用 reload, 在不断开dns网络服务的状况下, 从新加载修改后的配置文件
  2. named-checkconf 检查配置文件是否正确,
    named-checkzone 是 检查区域文件的配置是否正确的命令: 格式是 named-checkzone "域名的名称" "域名的文件名", 好比: named-checkzone "localhost" /usr/local/namedvar/localhost.zone (这些域名 和 域名文件名 能够加引号, 也能够不加引号)
    若是配置有错误, 会报告出来, 而后就能够 照着 去修改.

  3. comment(s): 主要有三种意思: 注释/注解, 好比编程语言中的注释; 评论, 评语; 最后还有一个意思是: 意见.
    好比: 征求意见: Request For Comments: RFC 能够叫作 "意见征求书, 意见征求稿"
    RFC是internet机构的engineers和计算机科学家制定的一些标准和规范. 你能够对它提出建议等... 好比: dns的 zone文件的格式不是由BIND制定的,而是DNS标准文档制定的(见RFC1035)

注意zone文件的格式:

  1. 控制指令是 以$开头, 而不是以 @ 开头的
  2. 区域文件中的 点号, 表示 "结束"! 表示 一个区域名, 或 一个主机名 的结束了, 不然 就要在这个 主机名 或 域名的后面 要再加上 区域名称, 才是 彻底的/完整的 域名和主机了.
  3. 区域文件中的 @ 表示的是一个 变量名, 这个变量名的名称就是 带点号的区域的名称, 即 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.

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

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

  1. 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后面的 是一个区域名称, 没必要写 主机名称??

  1. 测试主机和 域名 的工具, 既可使用 host, 也可使用dig, dig命令的信息更详细...
  2. dig的类型能够有多种, 好比 -t NS , -t MX 10 , -t A 等 好比 : dig -t A www.foodom.com
  3. 一个域名 同时也能够是 一个主机名, 或者说, 在任何一个区域中, 你 彻底能够定义一个 和 区域名称 相同的 主机名. 好比: 有一个域名 叫 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.  在后面也要补上条目
  1. 若是在本地域, 本机域, 能够 使用 简写的缩写 的名称, 即只写省略的名称, 不写 域名, 那么就是 在 /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 文件的配置 跟正向区域配置的区别和不一样

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

  2. 可是 SOA后面的 区域 能够用 @ 来表示, 所以, 再一次说明了 SOA 后面的 @ 表示的 是 "受权的区域", 不是什么管理主机. 是区域, 所以, 老是能够用 @ 来表示的

  3. 特别注意的 是, 就是 反向区域中的 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的 对象!

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

  1. 能够直接使用 host 来测试反向区域的ip地址:
[root@localhost named]# host 127.0.0.1
1.0.0.127.in-addr.arpa domain name pointer localhost.
  1. 也可使用 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 服务器)的配置等等. 就是进阶的 暂时不作了.

相关文章
相关标签/搜索