1、不同主机程序(进程)间通讯机制:
socket:ip+port
2、裸套接字:
无需调用传输层的tcp和utp协议端口号,而自身可以实现此功能,并能借助网络层发送出去。
3、DNS:domain name server;是一个应用层程序
协议端口:tcp:53,udp:53
tcp53:用于区域传送
udp53:用于负责解析
4、客户端名称解析过程:
先查本地的hosts文件,在去查dns缓存,如果都没有,在去查dns服务器。
5、hosts文件:
它记录了要通信主机的主机名和ip地址,主机不多时,可以用,多了就会降低解析效率。host文件是通用的,可以作为库文件供开发人员调用。
库:getipbyhostname( )
库:gethostnamebyip( )
6、dns基础知识介绍:
dns是一个分层结构的名称解析程序。
由根(.)、一级域(也叫顶级域:tlp,top level domain)、二级域、三级域(可以继续往下分层)组成。
DNS缓存(dns cache):
为了减少每次输入域名主机时,都要去dns服务器查找提供服务的主机,因此,每次去访问dns服务器时,都缓存一份名称库解析在dns cache中,缓存时间的定义(即缓存有效期)是由DNS服务器来设定的,它通过设置一个递减的时间(TTL)来实现此功能。
DNS查询类型:
递归查询:一般是主机到指定的DNS服务器进行查询,需要DNS服务器帮自己去完成解析
迭代查询:一般是DNS服务器向根、顶级域及二级域之间的查询
DNS解析方式:
正向解析:从名称解析得到ip
反向解析:从ip解析得到名称
注意:正向解析和反向解析是两种完全不同的解析功能,他们不是同一个名称空间,是彼此间独立的,因此二者的数据库也是不一样的。
常见的域名提供商:万网(国内备案商)、godaddy(国外,无需备案)
域和FQDN的区别:FQDN:full qualified domain name。
域:mageedu.com
FQDN:www.magedu.com
DNS服务器类型:
负责解析至少一个域:主机名称服务器,辅助名称服务器
不负责域解析: 缓存名称服务器。
7、一次完整的DNS查询请求经过的过程:
client--->查找本地hosts文件--->dns本地缓存--->dns服务器(如果是dns负责的域,直接返回查询结果;否则进行迭代查询)。
解析应答结果分类:
分类一:
肯定答案
否定答案(不存在查询的键,因此不存在与其查询键对应的值)
分类二:
权威应答:由直接负责的DNS服务器回答的结果
非权威应答:
8、DNS服务器类别:主dns服务器、从(辅助)dns服务器
主DNS服务器:维护所负责解析域数据库的那台服务器,读写操作均可进行。
从(辅助)DNS服务器:从主DNS服务器那里或从其他的从(辅助)服务器那里“复制”一份解析库,但只能进行读操作,即查询操作。
8.1、主从(辅助)DNS服务器“复制”操作的实施方式:
serial:序列号,也即是数据库的版本号,主服务器数据库内容发生变化时,其版本号递增。
refresh:刷新时间间隔,从(辅助)服务器每次多久到主服务器检查序列号更新状况。
retry:重试时间间隔,重试时间间隔短于(小于)刷新时间间隔,辅助服务器从主服务器那里请求同步解析库失败时,再次发起尝试请求的时间间隔。
expire:过期时长,辅助服务器始终联系不到主服务器时,多久之后放弃从主服务器同步数据,辅助服务器停止提供服务。
否定答案的时长:
注意:DNS主服务器“通知”从服务器随时更新数据。
8.2、主从(辅助)DNS同步方式:即区域数据传送
axfr:全量传递,传送整个数据库,一般发生在同步的第一次
ixfr:增量传递,仅传送变量的数据。
8.3、区域和域:
域:mageedu.com
区域:正向区域、反向区域
注意:域和区域没有绝对大小之分,如上,域有两个区域,但是域(magedu.com)又是.com区域中的一个记录。同时,dns权限都是由上级指派的。
9、DNS区域数据文件组成:主要由资源记录组成
区域文件中每一行一个资源记录(Resourse Record ,简称RR)
资源记录有类型的概念区分,常见的类型有:A AAAA PTR SOA NS CNAME MX9.1
9.1、资源记录类型:
SOA:start of authority;起始授权记录,一个区域解析库有且只能有一个soa记录,而且必须放在第一条;它用来标识是哪个区域的
NS:name service;域名服务记录,一个区域解析库可以有多个ns记录,其中一个为主的;它用来标识区域内哪些服务器是dns服务器。
A:address,地址记录,FQDN--->IPv4
AAAA:address,地址记录,FQDN--->IPv6
CNAME:canonical name,别名记录
PTR:pointer,IP--->FQDN
MX:mail exchange;邮件交换器,可以有多个,有优先级的概念,mx优先级0-99,数值越小优先级越高
9.2、资源记录的定义格式:注意资源记录中的“.”是不能少的
语法:name [TTL] IN RR_NAME VLAUE
name:名称或ip
ttl:ttl存活时间,可省,
IN:关键字
RR_NAME:资源记录类型
VALUE:name对应的值
各类型定义格式说明:
SOA类型资源记录: name:当前区域的名字,例如:magedu.com或者2.3.4.in-addr-arpa value:由多部分组成 第一部分:当前区域的区域名称,也可以使用主dns服务器的名称 第二部分:当前区域管理员的邮箱地址,但地址中不能有“@”符号,一般用“.”(点)来代替 第三部分:(主、从服务协调属性的定义以及否定答案的TTL) //放在括号中来说明主从复制的参数 示例: $TTL 1D magedu.com.IN SOA magedu.com. admin.magedu.com. ( 0; serial 1D; refresh 1H; retry 1W; expire 3H ); minimum )
|
NS类型资源记录: name:当前区域的区域名称 value:当前区域的某dns服务器的名字,例如ns.magedu.com. ;注意一个区域可以有多个ns记录 示例: magedu.com. 86400 IN NS ns1.magedu.com. magedu.com. 86400 IN NS ns2.magedu.com. |
MX类型资源记录: name:当前区域的区域名称 value:当前区域某邮件交换器的主机名 注意:邮件交换器是smtp,不是pop,MX记录可以有多个,但每个记录的value之前应该有一个数字表示的优先级,数字越小,优先级越高 示例: magedu.com. 86400 IN MX 10 mx1.magedu.com. magedu.com. 86400 IN MX 20 mx2.magedu.com. |
A类型资源记录: name:某FQDN,例如:www.magedu.com value:某IPv4地址。 注意:A记录的name和value是多对多的关系 示例: www.magedu.com. 86400 IN A 1.1.1.1 www.magedu.com. 86400 IN A 1.2.3.4 bbs.magedu.com. 86400 IN A 1.1.1.1 |
AAAA类型资源记录: name:某FQDN,例如:www.magedu.com value:某IPv6地址。 注意:AAAA记录的name和value是多对多的关系 |
PTR类型资源记录: name:ip地址,但是有特定格式,ip要反过来写而且还要加特定后缀。如:1.2.3.4的记录应写成:4.3.2.1.in-addr.arpa. value:FQDN 示例: 4.3.2.1.in-addr.arpa. 86400 IN PTR www.magedu.com.
|
CNAME记录: name:别名,FQDN格式的别名 value:FQDN格式的正式名字 示例: web.magedu.com. 86400 IN CNAME www.magedu.com. |
注意: ①、TTL可以从全局继承,但要事先定义,如:$TTL 86400 ②、@表示当前区域的区域名称,因此,任何用到当前区域的的名称的地方都可以用“@”来替代 ③、相邻的两条资源记录的“name”相同时,后面的name可省略,如下: www.magedu.com. 86400 IN A 1.1.1.1 www.magedu.com. 86400 IN A 1.2.3.4 可写成: www.magedu.com. 86400 IN A 1.1.1.1 86400 IN A 1.2.3.4 ④、对于正向区域来说,各MX、NS等类型的记录value值为FQDN时,此FQDN应该有一个A记录。 |
10、DNS and bind
bind:Berkeley internet name domain,现由ISC.org组织维护
dns是协议,bind是dns协议的一种实现工具
named:bind程序运行的进程名称。
10.1、bind程序包安装:
查看程序包是否安装:
[root@localhost ~]# yum info bind //查看程序包信息
[root@localhost ~]# yum list all *bind*
[root@localhost ~]# rpm -q bind //查询是否安装bind
bind-9.9.4-37.el7.x86_64
[root@localhost ~]#
bind程序包:
bind-libs:被bind和bind-units包中的程序共同用到的库文件
bind-utils:bind客户端程序集,例如dig、host、nslookup等
bind:提供dns server程序,以及几个常用的测试程序
bind-chroot:选装项,让named进程运行于jail(容器或沙箱)模式下。
10.2、bind安装后程序文件:
主配置文件:
/etc/named.conf
其他辅助性配置文件:
/etc/named.iscdlv.key
/etc/named.rfc1912.zones //区域一般定义在此文件中。
/etc/named.root.key
解析库文件:
/var/named //一般名字为zone_name.zone
注意: ①一台dns服务器可同时为多个区域提供解析(包括正向和反向)
②、必须要有根区域解析文件,一般为:/var/named/named.ca
③、还应该有两个区域解析库文件:localhost和127的正、反向解析库文件。
正向:/var/named/named.localhost
反向:/var/named/named.loopback
远程名称服务器管理工具:rndc
/usr/sbin/rndc;默认工作与tcp的953端口,但默认监听于127.0.0.1地址,因此仅允许本地使用。
注意:bind程序安装完成后,默认即可做缓存名称服务器使用,如果没有专门负责解析的区域,直接可启动服务。
centos6:service named start
centos7:systemctl strart named
10.3、bind主配置文件格式:/etc/named.conf
由三段组成:
全局配置段:
options {.....}
示例:部分配置
options {
listen-on port 53 { 127.0.0.1; }; //监听能与外部通信的地址
listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query { localhost; }; //允许哪些主机查询
日志配置段:
logging{.....}
区域配置段: 主要配置那些有本机负责解析的区域或转发的区域。
zone {.....}
10.4、缓存名称服务器的配置:不负责解析
①、在options段添加监听能与外部主机通讯的地址,如添加192.168.0.107
listen-on port 53 { 127.0.0.1; 192.168.0.107 }; //注意地址与花括号前后都有空格隔开
②、注释掉:options中 allow-query { localhost; };选项,或者添加可以访问的地址、地址段
注释方法:
多行注释:/*........*/
单行注释://
③、关闭dns安全配置,(学习是建议关闭);将两处yes改为“no”
dnssec-enable yes;
dnssec-validation yes;
④、检查配置文件语法是否有错误
[root@localhost named]# named-checkconf /etc/named.conf //可以写要检查的配置文件,也可以不写
[root@localhost named]# named-checkconf -h //查看named-checkconf的使用方法
usage: named-checkconf [-h] [-j] [-p] [-v] [-z] [-t directory] [named.conf]
注意:生产环境中一定要在重启前检查配置文件,防止因配置错误导致服务不能正常启动。
⑤、启动服务:并查看服务
centos6:service named start
centos7:systemctl strart named
[root@localhost named]# systemctl status named
⑥、查看相应端口是否开启:
[root@localhost named]# ss -utnlp
tcp53:用于区域传送
udp53:用于负责解析
⑦、测试是否能正常完成;测试工具dig、host、nslookup
dig命令:用于测试DNS系统,因此不会查询hosts文件
dig命令格式:dig [-t RR_TYPE] name [@server] [query options] //@server指定以哪台服务器去测试解析;不加@server:表示以本机测试
[query options]
+[no]trace:跟踪解析过程
+[no]recurse:进行递归解析
示例:[root@localhost named]# dig -t A wwww.baidu.com @192.168.0.107 +trace
#dig -x IP //反向解析
#dig -t axfr domain [@server] //模拟完全区域传送
[root@localhost /]# dig -t a www.baidu.com ; <<>> DiG 9.9.4-RedHat-9.9.4-37.el7 <<>> -t a www.baidu.com ;; global options: +cmd //全局属性配置项 ;; Got answer: //已经得到应道 ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33057 ;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 5, ADDITIONAL: 6 //flags:标志位;qr:查询请求;ra请求答案 ;; OPT PSEUDOSECTION: //伪选项段 ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: //问题段,请求的问题是什么 ;www.baidu.com.IN A //重复问题是什么,解析www.baidu.com的A记录 ;; ANSWER SECTION: //应答段部分 www.baidu.com. 433 IN CNAME www.a.shifen.com. //www.baidu.com是一个www.a.shifen.com.的别名记录 www.a.shifen.com. 274 IN A 180.97.33.107 //www.a.shifen.com.的A记录是180.97.33.107 www.a.shifen.com. 274 IN A 180.97.33.108 //www.a.shifen.com.的A记录是180.97.33.108 ;; AUTHORITY SECTION: //权威段;谁来负责解析的 a.shifen.com. 413 IN NS ns2.a.shifen.com. //a.shifen.com.域是由ns2.a.shifen.com.(dns服务器)负责解析 a.shifen.com. 413 IN NS ns4.a.shifen.com. a.shifen.com. 413 IN NSns5.a.shifen.com. a.shifen.com. 413 IN NSns1.a.shifen.com. a.shifen.com. 413 IN NSns3.a.shifen.com. ;; ADDITIONAL SECTION: // 附加段,将权威段的dns服务器解析为IP地址 ns1.a.shifen.com. 449 IN A 61.135.165.224 ns2.a.shifen.com. 452 IN A 180.149.133.241 ns3.a.shifen.com. 27 IN A 61.135.162.215 ns4.a.shifen.com. 24 IN A 115.239.210.176 ns5.a.shifen.com. 503 IN A 119.75.222.17 ;; Query time: 103 msec //查询指令时长 ;; SERVER: 192.168.1.1#53(192.168.1.1) //由哪个服务器负责解析的,基于迭代的方式查询并返回解析结果 ;; WHEN: Sun Feb 04 09:04:19 CST 2018 ;; MSG SIZE rcvd: 271 [root@localhost /]# |
host命令格式:host [-t] [RR_type] name server_ip //server_ip指定使用指定的ip去测试解析,而不用本机测试
nslookup命令格式:nslookup [-options] [name] [server]
交互模式:nslookup>
server IP //以指定的IP作为server进行解析
set q=RR_TYPE //要查询的资源记录类型
name //要查询的名称。
rndc命令:named服务控制命令
#rndc status
#rndc flush //清空缓存
10.5、配置一个正向区域的步骤:
①、定义区域:在主配置文件中或主配置文件的辅助配置文件中实现 //主配置文件:/etc/named.conf,主配置文件的辅助配置文件:/etc/named.rfc1912.zone
基本格式:
zone "zone-name" IN {
type {master | slave | hint | forward };
file "zone_name.zone";
};
注意:每行的分号(;)是不能少的,否则为语法错误,hint表示定义为根服务器;file “zone_name.zone”此处的路径是相对路径(/var/named/目录下),也可以使用绝对路径。
②、建立区域数据文件:在/var/named目录下建立区域数据文件,主要记录为A、AAAA
③、让服务器重载配置文件和区域数据文件;注意:重载前要记得检查配置语法是否有错误。
正向区域配置示例:以magedu.com域为例:
①、定义区域:
[root@localhost named]# vim /etc/named.rfc1912.zones //添加如下语句
zone "magedu.com" IN {
type master;
file "magedu.com.zone";
};
②、建立区域数据文件:
[root@localhost named]# vim /var/named/magedu.com.zone
$TTL 1D //定义区域全局TTL时间,下面的资源记录不写ttl,从此处继承。
$ORIGIN magedu.com. //如果下面的资源记录不写全的话,则自动为其补上此magedu.com.后缀。如果不写此项,则从/etc/named.rfc1912.zones中定义的“zone_name”字符串补全
@ IN SOA @ admin.magedu.com. (
2018020401
1H
20M
1D
1W
)
@ IN NS ns1.magedu.com. //@代表区域的名称
@ IN NS ns2 //会自动补上magedu.com. ;补上/etc/named.rfc1912.zones中定义的“zone_name”字符串,此时不要加点(.),和$ORIGIN不冲突
@ IN MX 10 mx1.magedu.com.
@ IN MX 20 mx2.magedu.com.
ns1 IN A 192.168.100.100
ns2 IN A 192.168.100.101
mx1 IN A 192.168.100.103
IN A 192.168.100.104
www.magedu.com. IN A 192.168.100.105
IN A 192.168.100.106 //如果此处的name和上次一样,可以不写name
web1.magedu.com. IN CNAME www.magedu.com.
web2 IN CNAME www
web3 IN A 192.168.100.107
[root@localhost named]#
注意:区域数据文件的权限要设置成其他用户没有权限;区域数据文件的属主、属组为root named;然后在检查主配置文件,区域数据文件的语法是否有错误。
[root@localhost named]# chgrp named magedu.com.zone
[root@localhost named]# chmod o= magedu.com.zone
[root@localhost named]# ll magedu.com.zone
-rw-r-----. 1 root named 561 Feb 4 07:11 magedu.com.zone
[root@localhost named]#
[root@localhost named]# named-checkconf
[root@localhost named]# named-checkzone magedu.com. /var/named/magedu.com.zone
③、让服务器重载配置文件和区域数据文件:
[root@localhost named]# rndc status
[root@localhost named]# rndc reload
④、检验:
dig -t a www.magedu.com
dig -t a www.magedu.com @192.168.0.107
dig -t a web1.magedu.com @192.168.0.107
dig -t a www.magedu.com @192.168.0.107
dig -t a web1.magedu.com @192.168.0.107
dig -t a web2.magedu.com @192.168.0.107
dig -t a web3.magedu.com @192.168.0.107
10.6、配置解析一个反向区域:
①、定义区域:在主配置文件中或主配置文件的辅助配置文件中实现 //主配置文件:/etc/named.conf,主配置文件的辅助配置文件:/etc/named.rfc1912.zone
基本格式:
zone "zone-name" IN {
type {master | slave | hint | forward };
file "zone_name.zone";
};
注意:每行的分号(;)是不能少的,否则为语法错误,hint表示定义为根服务器;
zone-name:一般写法为ip地址的反写,遵循特定格式:反写的网段.in-addr.arpa.;如:1.2.3.4的记录应写成:3.2.1.in-addr.arpa.
file “zone_name.zone”此处的路径是相对路径(/var/named/目录下),也可以使用绝对路径。
②、建立区域数据文件:在/var/named目录下建立区域数据文件,主要记录为PTR
③、让服务器重载配置文件和区域数据文件;注意:重载前要记得检查配置语法是否有错误。
正向区域配置示例:以magedu.cn域为例:
①、定义区域:
[root@localhost named]# cat /etc/named.rfc1912.zones
zone "3.2.1.in-addr.arpa" IN {
type master;
file "1.2.3.zone";
};
②、定义反向区域数据文件
[root@localhost named]# vim /var/named/1.2.3.zone
$TTL 8H
$ORIGIN 3.2.1.in-addr.arpa. //自动补上区域名字,但是此时不再是magedu.cn;而是3.2.1.in-addr.arpa. ;因此名字要写全了。简写的只能是IP不能是主机名
@ IN SOA magedu.cn admin.magedu.cn (
2018020214
1D
2H
30M
1W
)
IN NS ns1.magedu.cn.
IN NS ns2.magedu.cn.
67 IN PTR ns1.magedu.cn.
68 IN PTR ns1.magedu.cn.
69 IN PTR ns2.magedu.cn.
70 IN PTR www.magedu.cn.
[root@localhost named]#
[root@localhost named]# chgrp named 1.2.3.zone
[root@localhost named]# chmod o= 1.2.3.zone
③、验证:
[root@localhost named]# rndc reload
[root@localhost named]# dig -x 192.168.0.70 @192.168.0.107