DNS and BIND
DNS:Domain Name Service, 协议(C/S,53/udp,53/tcp)
BIND: Bekerly Internet Name Domain, ISC (www.isc.org)
TCP:面向连接的协议(三次握手,四次断开)
UDP:User Datagram Protocol 无连接协议
本地名称解析hosts
/etc/hosts
%WINDOWS%/system32/drivers/etc/hosts
Top Level Doamin 顶级域(一级域) tld
com(公司),edu,mil,gov,net,org(非盈利),int(国际性)
三类:组织域、国家域(.cn,.iq,.hk,.tw)、反向域
DNS查询类型
迭代查询
递归查询
名称服务器:域内负责解析本域内的名称的主机
根服务器:13组服务器
解析类型:
Name -->IP
IP--Name
正反向解析是不同的解析树
DNS服务器类型
主DNS服务器
辅助DNS服务器
缓存DNS服务器
转发器
主DNS服务器:维护所负责解析的域内解析库服务器
从DNS服务器:从主服务器或其他服务器“复制”(区域传递)一份解析库;
序列号:解析库的版本号;前提:主服务器解析库内容发生变化;其序列递增
刷新时间:从服务器从主服务器请求同步解析库的时间间隔
重试时长:从服务器从主服务器请求同步解析库失败是,再次尝试的时间间隔
过期时长:从服务器时钟联系不到主服务器时,多久后放弃从服务器角度,停止提供服务。
"通知"机制
区域传输:
全量传送
增量传送
DNS:
Domain
正向: FQDN-->IP
反向: IP-->FQDN
FQDN: Full Qualified Domain Name
完全合格域名
一次完整的查询请求经过的流程
client-->hosts文件-->DNS Service
Local Cache -->DNS Server (recursion) --> Server Cache --> iteration (迭代) -->
解析答案:肯定答案;否定答案;权威答案;非权威答案
资源记录: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 指针,用来解析
NS :Nameserver 转用于标明当前区域的DNS服务器
CNAME: Canonical Name 别名记录
MX :Mail exchanger 邮件交换器
资源记录定义的格式
语法: name [TTL] IN rr_type value
IN:internet
TTL:可缓存时长
rr_type 资源记录类型
value 把名字(name)解析为结果
注意:
(1)TTL 可从全局继承
(2)@可以用于引用当前区域的名字
(3)同一个名字可以通过多条记录定义多个不同的值;此时DNS服务器会以轮询方式响应
(4)同一个值也可能有多个不同的定义名字;通过多个不同的名字指向同一个值进行定义;此仅表示通过多个不同的名字可以找到同一个主机。
SOA:
name:当前区域的名字, example.com
value:有多部分组成
当前区域的主DNS服务器的FQDN,也可以使用当前区域的名字:@
记录当前区域管理员的邮箱信息;地址中不能用@一般用. 例如hanzaip.example.com
(主从服务协调属性的定义以及否定的答案的同一的TTL)
例如:
example.com. 86400 IN SOA ns.example.com. nsadmin.example.com. ( #都要用.结尾
2015042201 ; #序列号
2H ; #刷新时间
10M ; #重试时间
1W ;#过期时间
1D ;#否定答案的TTL值
)
NS:
name:当前区域的名字
value :当前区域的某DNS服务器的名字,例如:ns.example.com
注意:一个区域可以有多个NS记录
例如:
example.com. IN NS ns1.example.com
example.com. IN NS ns2.example.com
注意:
(1)相邻的两个资源记录的Name相同时,后续的可省略
(2)对于NS记录而言,任何一个ns记录后面的服务器名字,都应该在后续有一个A记录
MX:
name:当前区域的名字
value :当前区域的某邮件服务器(smtp服务器)的主机名
一个区域内,MX记录可由多个,单每个记录的value之前应该有一个数字(0-99),
表示此服务器的有限级,数字越小优先级越高。
例如:
example.com. IN MX 10 mx1.example.com
IN MX 20 mx2.example.com
注意:
(1)对MX记录,任何一个MX记录后面的服务器名字,都应该在后续有一个A记录
A:
name:某主机的FQDN,例如:www.example.com
value:主机名对应的IP地址
例如:
www.example.com. IN A 172.25.11.10
www.example.com. IN A 172.25.11.11
mx1.example.com. IN A 172.25.11.12
mx2.example.com. IN A 172.25.11.12
注意:
*.example.com. IN A 1.1.1.4
example.com. IN A 1.1.1.4
避免用户写错名称时给错误答案,可通过泛域名解析进行解析至某特定地址;
AAAA:
name:FQDN
value:ipv6
PTR:
name : IP 有特定格式,把IP反过来写 1.2.3.4 写为4.3.2.1 有特定后缀 in-addr.arpa. 所以完整写法为: 4.3.2.1.in-addr.arpa.
value : FQDN
例如
4.3.2.1.in-addr.arpa. IN PTR www.example.com
简写成
4 IN PTR www.example.com
网络地址(后缀可省) IN PTR www.example.com
主机地址依然需要反着写
CANME
name:别名的FQDN
valule: 正式名字的FQDN
例如:
web.example.com IN CNAME www.example.com
BIND:
RR(资源记录)类型: A PTR NS MX CNAME SOA AAAA
子域授权:每个域的名称服务器,都是通过其上级名称服务器在解析库中进行授权
类似根域授权tld
.com. IN NS ns1.com.
.com. IN NS ns2.com.
ns1.com. IN A 2.2.2.1
ns2.com. IN A 2.2.2.2
example.com. 在.com的名称服务器上,解析库中添加资源记录
exmaple.com. IN NS ns1.example.com.
exmaple.com. IN NS ns2.example.com.
exmaple.com. IN NS ns3.example.com.
ns1.example.com. IN A 3.3.3.1
ns2.example.com. IN A 3.3.3.2
ns3.example.com. IN A 3.3.3.3
glue record 粘合记录
域名注册:
代理商:万网,新网;godaddy
初测完成以后
(1)管理后台,把NS记录指向的服务器名称,和A记录指向的服务器地址;
BIND的安装配置
dns服务的程序包名bind,程序名named
程序包:
bind;bind-libs;bind-utils
bind-chroot:/var/named/chroot/
bind:
服务脚本:/etc/rc.d/init.d/named
主配置文件:/etc/named.conf,/etc/named.rfc1912.zones,/etc/rndc.key
解析库文件:/var/named/ZONE_NAME.ZONE
注意:
(1)一台物理服务器可同时为多个区域提供解析;
(2)必须要有根区域文件;named.ca
(3)应该有两个(如果包括ipv6,应该更多)实现localhost和本地回环地址的解析库
rndc:remote name domain controller ,默认与bind安装在同一主机,
且只能通过127.0.0.1来连接named进程;提供辅助性的管理功能。
953/tcp
全球13个根节点 cat /var/named/named.ca
主配置文件:
全局配置:options {}
日志子系统配置:logging{}
区域定义:本机能为哪些zone进行解析,就要定义哪些zone
zone "ZONE_NAME" IN {}
注意:任何武器程序如果期望其能够通过网络被其他主机访问,至少应该监听在一个能与外部主机通信的地址上。
cp -v /etc/named.conf{,.bak} 自动创建自己的一个备份,{}中,前不写东西代表自己本身
/* ... */ 段落注释 //注释
service named restart
ss -tunlp |grep :53 查看named服务端口
缓存名称服务器的配置:
监听外部地址即可
dnssec:
建议测试时关闭dnssec
加入options {}中
dnssec-enable no;
dnssec-validation no;
dig [-t type] www.exmaple.com
+[no]trace 跟踪解析过程
+[no]recurse 进行递归解析
正向解析区域
(1) zone "name" IN {
type master;
file "zone_name.zone";
};
(2)区域解析库
SOA,NS,MX,A,CNAME
反向
(1)zone "1.1.1.1.in-addr.arpa" IN {
type master;
file "somefile.zone"
};
(2)区域解析库
SOA,NS,PTR
测试工具 dig host nslookup
主从同步:
主服务器:授权允许同步
(1)NS记录
(2)授权允许区域传输
从服务器:
(1)只需定义区域
子域授权:分布式数据库
正向解析区域子域方法:
定义一个子区域:
ops.example.com. IN NS ns1.ops.example.com.
ops.example.com. IN NS ns2.ops.example.com.
ns1.ops.example.com IN A 1.1.1.1
ns2.ops.example.com IN A 1.1.1.2
定义转发服务器
注意被转发的服务器需要能够为请求者做递归,否则,转发请求不予进行;
(1)全部转发:凡是非本机所有负责解析的区域的请求,统统转发给指定的服务器;
Options {
forward {first|only} # first是先转发给你,only是仅递归
forwarders #定义转发给谁
}
(2)局部转发:仅转发对特定区域的请求至某服务器
zone "" IN {
type forward|master|slave|hint;
forward {first|only}
forwarders { 172.25.0.1; };
}
rndc reload 重载服务
rndc flush 刷新
named-checkzone "example.com" /var/named/example.com.zone
检测是否书写正确
dig -t A ww.example.com @172.25.100.12 这样就不用在/etc/hosts里写了
dns中基础的安全相关的配置
acl把一个或多个主机归并为一个集合,并通过一个统一的名称调用;
用法 acl acl_name {
ip;
ip;
net/prelen; #指明长度的掩码格式
};
例如:
acl localnet_1 {
172.25.0.0/16;
;}
但是 bind有四个内置的acl
none没有一个主机
any任一主机
local本机
localnet本机的IP同掩码运算后得到的网络地址
注意:只能先定义,后使用;因此,一般定义在options前面
访问控制的指令:
allow-query {}; 允许查询的主机,即白名单;
allow-transfer {}; 允许传送的=主机,白名单 测试 dig -t AXFR .. @..
allow-recursion {}; 允许递归的主机
allow-update {};允许更新区域数据库中的内容
bind view :
视图:
一个bind服务器可定义多个view;每个view中可定义一个或多个zone;
每个view用来匹配一组客户端;
多个view内可能需要对同一个区域进行解析,但是用不同的区域解析库文件;
view VIEW_NAME {
match-clients {}; #匹配的客户端
};
注意:
(1)一旦启用了view,所有的zone都只能定义在view中;不能例外
(2)仅有必要在匹配到允许递归请求的客户所在view中定义根区域
(3)客户端请求到达时,是自上而下检查每个view所服务的客户端列表
view external {
match-clients { any; };
zone "example.com" IN {
type master;
file "magedu.com.external";
allow-update { none; };
};
};
CDN: Content Delivery Network 内容分发网络
智能DNS:
dnspod
dns.la
yum groupinstall "Development Tools" "Server Platform Development" -y
编译安装bind (纯手动配置)
get bind-9.10.1-P1.tar.gz
tar xf ...
cd bind-9
cat README
groupadd -g 53 named
useradd -u 53 -g named named -r (创建系统用户 -r)
./configure --prefix=/usr/local/bind9 --sysconfidir=/etc/named/ --disable-ipv6 --disable-chroot
--enable-threads (启动线程threads 多核可以更好工作)
make && make install
cd /usr/local/bind9/
没办法直接调用
导入路径
vim /etc/profile.d/named.sh
写入 export PATH=/usr/local/bind9/bin:/usr/local/bin9/sbin:$PATH
然后导出库文件
vim /etc/ld.so.conf.d/named.conf
/usr/local/bind9/lib
然后
ldconfig -v
导入头文件
ln -sv /usr/local/bind9/include /usr/include/named
vim /etc/man.config
MANPATH /usr/local/bind9/share/man
然后 man named
mkdir /var/named/
vim /etc/named/named.conf
options {
directory "/var/named";
};
zone "." IN {
type hint;
file "named.ca";
};
zone "localhost" IN {
type master;
file "localhost.zone";
allow-update { none; };
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "named.local";
allow-update { none; };
};
named-checkconf
dig -t NS . @172.16.0.1 > /var/named/named.ca
vim localhost.zone
$TTL 1d
@ IN SOA localhost. admin.localhost. (
2015042501
1h
5m
7d
1d)
IN NS localhost.
localhost. IN A 127.0.0.1
vim named.local
$TTL 1d
@ IN SOA localhost. admin.localhost. (
2015042501
1h
5m
7d
1d)
IN NS localhost.
1 IN PTR localhost.
chmod 640 ./*
chown :named * 修改组
chmod 640 /etc/named/named.conf
chown :named /etc/named/named.conf
man named
named -u named -f -g -d 3
ss -tunl
named -u named 后台运行
killadd named 就关掉了
重新修改添加域
vim /etc/named/named.conf
options {
directory "/var/named";
};
zone "." IN {
type hint;
file "named.ca";
};
zone "localhost" IN {
type master;
file "localhost.zone";
allow-update { none; };
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "named.local";
allow-update { none; };
};
zone "example.com" IN {
type master;
file "example.com.zone";
allow-update { none; };
};
vim example.com.zone
$TTL 86400
$ORIGIN example.com.
@ IN SOA ns.example.com. admin.exmaple.com.(
2015042501
2h
10m
1w
1d)
IN NS ns
ns IN A 172.16.100.11
www IN A 172.26.100.11
chmod 640 example.com.zone
chmod :named example.com.zone
named -u named
rndc reload
ss -tunl 就可以了实现自己手动编译安装了
其中 rndc 命令
rndc-confgen -r /dev/urandom > /etc/named/rndc.conf
vim /etc/named.conf 写入 rndc.conf后面部分的内容
killall named
named -u named 重新启动
cd contrib/scripts/queryperf/
./configure
make
就可以使用这个脚本了 queryperf 提升性能的脚本
直接写文本
vim test
www.example.com
example.com NS
queryperf -d test -s 172.25.100.11