linux DNS

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux DNS相关的知识,希望对你有一定的参考价值。

linux DNS



笔记日期20180503



目录

专业名词解释

DNS and Bind

主DNS名称服务器

反向区域

主从复制

Bind 高级

定义转发服务器

DNS中基础的安全相关的配置

View功能

bind性能测试






专业名词解释


DNS (Domain Name Server)

tld Top Leven Domain



DNS查询类型

递归查询

迭代查询



名称服务器:域内负责解析本域内的名称主机

根服务器:全世界只有13组



解析类型

Name --> IP

IP --> Name


注意:正反向解析是两个不同的名称空间,是两棵不同的解析树



DNS服务器的类型

主DNS服务器

辅助DNS服务器

缓存DNS服务器

转发器



主DNS服务器:维护所负责的域内解析库服务器,解析库由管理员维护

从DNS服务器:从主DNS服务器或其它的从服务器那里“复制”(区域传递)一份解析库

序列号:解析库的版本号;前提;主服务器解析库内容发生变化,其序列递增。

刷新时间间隔:从服务器从主服务器请求同步解析库的时间间隔;

重试时间间隔:从服务器从主服务器请求同步解析库失败时,再次尝试的时间间隔;

过期时长:从服务器始终联系不到主服务器时,多久之后放弃从服务器角色,停止提供服务;


"通知"机制: 


区域传递

全量传送:传送整个解析库

增量传送:传递解析库变化的那部分内容




DNS

Domain

正向: FQDN --> IP

反向: IP --> FQDN


各需要一个解析库来分别负责本地域名的正向和反向解析

正向区域

反向区域


FQDN: Full Qualified Domain Name

www.winthcloud.com.


一次完整的查询请求经过流程

Client --> hosts文件 -->(递归) DNS Service

Local Cache --> DNS Server --> Server Cache --> iteration(迭代)




区域解析库: 由众多RR组成

资源记录: Resource Record, RR

记录类型: A, AAAA, PTR, SOA, NS, CNAME, MX


SOA: Start Of Authority 起始授权记录:一个区域解析库有且仅能有一个SOA记录,而且必

须为解析库的第一条记录;

A: Internet Address, 作用FQDN --> IP

AAAA: FQDN --> IPv6

PTR: PoinTeR IP --> FQDN

MS: Name Server, 专用于标明当前区域的DNS服务器

CNAME: Canonical Name, 别名记录

MX: Mail eXchanger, 邮件交换器


资源记录定义格式

语法 name  [TTL]    IN  rr_type    value


注意

1. TTL可从全局继承

2. @可用于引用当前区域的名字

3. 同一个名字可以通过多条记录定义多个不同的值;此时DNS服务器会以轮询方式响应

4. 同一个值也可能有多个不同的定义名字;通过多个不同的名字指向同一个值进行定义



SOA

name 当前区域的名字,例如"winthcloud.com"

value 有多部分组成

1. 当前区域的主DNS服务器FQDN,也可以使用当前区域的名字

2. 录前区域管理员的邮箱地址:但地址中不能使用@符号,一般用.来替换

  如Mini.winthcloud.com

3. 主从服务协调属性的定义以及否定的答案的统一的TTL


例如:

winthcloud.com    86400    IN    SOA    ns.winthcloud.com.   mini.winthcloud.com. (

 2018041301    ; 序列号

 2H ; 刷新时间

 10M ; 重试时间

 1W ; 过期时间

 1D ; 否定答案的TTL值

)



NS

name 当前区域的名字

value 当前区域的某DNS服务器的名字,例如ns.winthcloud.com.;

注意:一个区域可以有多个NS记录


例如

winthcloud.com. IN NS ns1.winthcloud.com.

winthcloud.com. IN NS ns2.winthcloud.com.


注意:

相邻的两个资源记录的name相同时,后续的可省略

对NS记录而言,任何一个ns记录后面的服务器名字,都应该在后续有一个A记录


MX

name 当前区域的名字

value 当前区域的某邮件服务器(smtp服务器)的主机名;

一个区域内,MX记录可有多个:但每个记录的value之前应该有一个数字(0-99),

表示此服务器的优先级;数字越小优先级越高;


例如

winthcloud.com. IN MX 10 mx1.winthcloud.com.

IN MX 20 mx2.winthcloud.com.


注意

对MX记录而言,任何一个MX记录后面的服务器名字,都应该在后续有一个A记录



A

name 某主机的FQDN 例如 www.winthcloud.com

value 主机名对应主机的IP地址


例如

www.winthcloud.com. IN A 1.1.1.1

www.winthcloud.com. IN A 1.1.1.2


mx1.winthcloud.com. IN A 1.1.1.3

mx2.winthcloud.com. IN A 1.1.1.3


注意

*.winthcloud.com. IN A 1.1.1.4

避免用户写错名称时给错误答案,可通过泛域名解析进行解析至某特定地址;



AAAA

name FQDN

value IPv6


PTR

name IP, 有特定格式,把IP地址反过来写,IP 1.2.3.4 要写成 4.3.2.1;

in-addr.arpa.    因此完整写法为 4.3.2.1.in-addra.arpa.

value FQDN


例如

4.3.2.1.in-addra.arpa. IN PTR    www.winthcloud.com.


简写成

4 IN PTR www.winthcloud.com.


注意:网络地址及后缀可省略;主机地址依然需要反着写;



CNAME

name 别名的FQDN

value 正式名字的FQDN


例如

web.winthcloud.com. IN CNAME www.winthcloud.com.





DNS and BIND

子域授权:每个域的名称服务器,都是通过其上级名称服务器在解析库进行授权


类似根域授权tld

.com. IN NS ns1.com.

.com. IN NS ns2.com.

ns1.com. IN A 1.1.1.1

ns2.com. IN A 2.2.2.2


winthcloud.com 在.com的名称服务器上,解析库中加添资源记录

winthcloud.com. IN NS ns1.winthcloud.com.

winthcloud.com. IN NS ns2.winthcloud.com.

ns1.winthcloud.com. IN A 4.4.4.4

ns2.winthcloud.com. IN A 5.5.5.5


gjue record 粘合记录



域名注册

这个是要收费的如果想在互联网上注册一个域名,下方所提供几个供应域名的提供商

代理商:万网,新网,godaddy


注册完成后 进入管理后台:把NS记录指向的服务器名称,和A记录指向的服务器地址



BIND (Berkeley Internet Name Domain)

dns服务,程序包名bind, 程序名named


程序包

bind

bind-libs

bind-utils


bind-chroot /var/named/chroot



bind 配置文件(centos 7)

服务脚本 /usr/lib/systemd/system/named.service

主配置文件  /etc/named.conf

/etc/named.iscdlv.key

/etc/named.rfc1912.zones

/etc/named.root.key

/etc/rndc.conf

/etc/rndc.key

解析库文件 /var/named/ZONE_NAME.ZONE


注意

一台物理服务器可同时为多个区域提供解析

必须要有根区域文件 named.ca

应该有两个(如果包括ipv6的应该更多)实现localhost和本地回环地址的解析库



rndc (remote name domain controller),默认与bind安装在同一主机,且只能通过

127.0.0.1来连接named进程;提供辅助性的管理功能; 935/tcp



主配置文件内容解析

全局配置 options {}

日志子系统配置 logging {}

区域定义:本机能够为哪些zone进行解析,就要定义哪些zone

zone "ZONE_NAME" IN {}


注意:任何服务程序如果期望其能够通过网络被其它主机访问,至少应该监听在一个能与外

 部主机通信的IP地址上。


缓存名称服务器的配置

监听外部地址即可:


dnssec:

建议测试时关闭dnssec



主DNS名称服务器

1 在主配置文件中定义区域

zone "ZONE_NAME" IN {

type {master|slave|hint|forward};

file "ZONE_NAME.zone";

};


2 定义区域解析库文件

$TTL 86400

$ORIGIN winthcloud.com.

@       IN      SOA     ns1.winthcloud.com.     admin.winthcloud.com (

                       2018041701

                       1H

                       5M

                       7D

                       1D )

       IN      NS      ns1

       IN      NS      ns2

       IN      MX 10   mx1

       IN      MX 20   mx2

ns1     IN      A       10.10.100.142

ns2     IN      A       10.10.100.148

mx1     IN      A       10.10.100.142

mx2     IN      A       10.10.100.143

www     IN      A       10.10.100.142

ftp     IN      CNAME   www


注意

区域文件创建后需要修改属组和文件权限,不然无法访问

因为named的进程属主是named的用户运行的,如果你是以root编辑的文件

named会无法访问,区域文件建议权限为640,区域文件属组改为named



named的错误检查命令

named-checkconf 检查/etc/named.conf和关联的配置文件语法问题

named-checkzone 检查zone名称以及其配置文件是否存在语法问题



状态命令

rndc status  检查当前dns服务状态


测试命令

dig [-t type] name [@server]


dig用于测试dns服务,因此,不会查询hosts文件进行解析

测试反向解析

dig -x IP @SERVER

模拟区域传送

dig -t axfr ZONE_NAME @SERVER

dig -t axfr winthcloud.com

反向区域

区域名称 网络地址反写.in-addr.arpa.

172.16.100. --> 100.16.172.in-addr.arpa.

定义区域

zone "ZONE_NAME" IN {

type {master|slave|forward};

file "网络地址.zone";

};

定义区域解析库文件

$TTL 86400

$ORIGIN 128.10.10.in-addr.arpa.

@ IN SOA ns1.winthcloud.com. admin.winthcloud.com. (

2018042201

1H

5M

7D

1D )

IN NS ns1.winthcloud.com.

IN NS ns2.winthcloud.com.

142 IN PTR ns1.winthcloud.com.

143 IN PTR ns2.winthcloud.com.

142 IN PTR www.winthcloud.com.

143 IN PTR mx1.winthcluod.com.


注意:不需要MX和A,以及AAAA记录

主从复制

DNS从服务器作用

减轻主DNS负责名称解析的任务


注意

1. 应该为一台独立的名称服务器

2. 主服务器的区域解析库文件中必须有一条NS记录指向从服务器

3. 从服务器只须定义区域,而无须提供解析库文件,它会自动从主服务器同步生成

解析库文件应放置于/var/named/slaves目录中

4. 主服务器得允许从服务器作区域传送

5. 主从服务器时间应该同步,可通过ntp进行

6. bind程序的版本应该保持一致;如有差异,从服务器版本理应比主版本要高


从服务器配置解析库文件放在刚刚那个目录是因为这个目录已经定义了相应的权限

定义从服务器区域的方法

zone "winthcloud.com" IN {

type slave;

masters { MASTER_IP; };

file "slaves/ZONE_NAME.zone";

};

rndc 命令使用

rndc --> rndc (953/tcp)

rndc command:

reload

reload zone

retransfer zone

freeze zone

notify zone

reconfig

status

trace level

querylog



Bind 高级


子域授权: 分布式数据库


正向解析区域添加子域

ops.winthcloud.com IN NS ns1.ops.winthcloud.com.

ops.winthcloud.com IN NS ns2.ops.winthcloud.com.

ns1.ops.winthcloud.com. IN A 10.10.10.200

ns1.ops.winthcloud.com. IN A 10.10.10.201



定义转发服务器

注意:被转发的服务器需要能够为请求者做递归,否则,转发请求不予进行


1. 全部转发:凡是对非本机所有负责解析的区域的请求,统统转发给指定的服务器

Options {

forward {first|only};

fowarders { ip; };

};


first 首一次转发,如果没有回信就找根

only 一直转发,如果查询不到,不会去找根迭代


2. 区域转发:仅转发对特定的区域请求至某服务器

zone "ZONE_NAME" IN {

type forward;

forward {first|only};

forwarders { IP; };

};



注意: 关闭options段中的 dnssec功能

dnssec-enable no;

dnssec-validation no;





DNS中基础的安全相关的配置

acl 把一个或多个地址归并为一个集合,并通过一个统一的名称调用


acl ACL_name {

ip;

ip;

network/mask;

}


示例

acl mynet {

10.10.10.0/24;

192.168.1.1;

};


bind 有四个内置的acl

none 没有一个主机

any 任意主机

local 本机

localnet 本机的IP同掩码运算后得到的网络地址



注意:只能先定义,后使用,因此,其一般定义在配置文件中的options的前面


访问控制的指令

allow-query {};  允许查询的主机:白名单;

allow-transfer {}; 允许区域传送的主机: 

allow-recursion {}; 允许递归的主机

allow-update {}; 允许更新区域数据库中的内容




View功能

可以将不同的客户端发来的同样的域名解析成为不同的IP地址


一个bind服务器可定义多个view,每个view中定义一个或多个zone

每个view用来匹配一组客户端

多个view内可能需要对同一个区域进行解析,但使用不同的区域解析库文件


view VIEW_NAME {

match-clients { ip|acl };


};


注意

1. 一旦启用了view,所有的zone都只能定义在view之中

2. 仅有必要在匹配到允许递归请求的客户所在view中定义根区域

3. 客户端请求到达时,是自上而下检查每个view所服务的客户端列表



CDN Content Delivery Network




编译安装bind

isc.org


1. 解压源码文件

2. 添加用户组和用户named

3. 配置bind安装初始化

4. make | make install



bind性能测试

在源码文件中有一个文件夹queryperf此文件夹里有测试bind解析性能

./configure | make 

会产生一个queryperf执行文件


执行文件

queryperf -d /path/somefile -s Server-IP


文件内容

网址 A

网址 NS

网址 max



测试时如果打开查询追踪和不打开,性能有差别很大,查询追踪就是在日志里记录哪个客户端来

服务器这里请求解析,由于写日志需要i/o所以会导入bind性能


以上是关于linux DNS的主要内容,如果未能解决你的问题,请参考以下文章

Linux学习导航

Linux 文件/目录管理(初级)

Linux 内核Linux 内核源码结构 ( 下载 Linux 内核源码 | 使用 VSCode 阅读 Linux 内核源码 )

嵌入式linux怎么学

Linux一步一步学Linux——Linux发展史(01)

linux查看进程id命令(linux查看进程id)