DNS 是域名系统 (Domain Name System) 的缩写,是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。
域名对应ip
www.baidu.com.这个域名--对应IP---110.242.68.66
比如:www.aliyun.com.
- DNS里面顶层是: "." 表示根域 ( 一共有十三台根服务器)
- “.com”是顶级域名;分类:职能:com域,.org域(非营利机构),edu域名(教育)国家:.cn ,.us ,
- “aliyun.com”是主域名(二级域),主要指企页名;
- “example.aliyun.com”是子域名(也可称为托管三级域名);
- “www.example.aliyun.com”是子域名的子域(也可称为托管四级域名)。
每个层的域名上都有自己的域名服务器,最顶层的是根域名服务器
每一级域名服务器都知道下级域名服务器的IP地址,以便于一级一级向下查询
下面的示例则概述了本地域名服务器没有缓存的情况下,DNS查询所需的8个步骤:
1.用户在Web浏览器中输入“www.example.com”,浏览器先检查自身缓存中有没有解析过的这个域名对应的ip地址,如果有,解析结束.如果浏览器没有缓存,那么就检查操作系统的hosts文件,称为本地解析,比如windows就是C:\Windows\System32\drivers\etc\hosts文件,linux在/etc/hosts文件中配置。如果命中域名解析结束。如果没有命中域名解析,浏览器会向本地的DNS服务器查询,如果命中域名解析就结束。
2. 如果本地DNS服务器没有命中域名解析,那么本地DNS服务器采用递归查询的方法,向根域名服务器进行查询。
3. 根域名服务器开启迭代查询方法告诉本地域名服务器,下一步应该查询的顶级域名服务器.com TLD的IP地址
4. 本地域名服务器向顶级域名服务器.com TLD进行查询
5. .com TLD服务器告诉本地域名服务器,下一步查询example.com权威域名服务器的IP地址
6. 本地域名服务器向example.com权威域名服务器发送查询
7. example.com权威域名服务器告诉本地域名服务器所查询的主机IP地址
8. 本地域名服务器最后把查询的IP地址响应给web浏览器
- 一旦DNS查询的8个步骤返回了example.com的IP地址,浏览器就能够发出对网页的请求:
9. 浏览器向IP地址发出HTTP请求
10. 该IP处的web服务器返回要在浏览器中呈现的网页
是指DNS服务器在收到用户发起的请求时,必须向用户返回一个准确的查询结果。如果DNS服务器本地没有存储与之对应的信息,则该服务器需要询问其他服务器,并将返回的查询结果提交给用户。( 根服务器不会开递归查询。会开迭代查询)
是指DNS服务器在收到用户发起的请求时,并不直接回复查询结果,而是告诉另一台DNS服务器的地址,用户再向这台DNS服务器提交请求,这样依次反复,直到返回查询结果。
英文全称Time To Live ,这个值是告诉本地域名服务器,域名解析结果可缓存的最长时间,缓存时间到期后本地域名服务器则会删除该解析记录的数据,删除之后,如有用户请求域名,则会重新进行递归查询/迭代查询的过程。
英文全称Top-level domains Server,指顶级域名服务器。
指本地域名服务器,它是DNS查找中的第一站,是负责处理发出初始请求的DNS服务器。运营商ISP分配的DNS、谷歌8.8.8.8等都属于DNS Resolver。
指根域名服务器,当本地域名服务器在本地查询不到解析结果时,则第一步会向它进行查询,并获取顶级域名服务器的IP地址。
DNS支持A、CNAME、AAAA、NS等记录类型
记录类型 功能描述
A ipv4记录,支持将域名映射到ipv4的地址使用
AAAA ipv6记录,支持将域名映射到ipv6的地址使用
CNAME 别名记录, 支持将域名指向另外一个域名 360buy
NS 名称服务器记录,支持将子域名委托给其他DNS服务商解析
域名查询工具,可以用来测试域名系统工作是否正常。
功能与 nslookup 类似,建议使用 dig 来取代 nslookup
[root@sxw ~]# yum install bind-utils -y #安装dig命令(包括host、nslookup)
# 解析域名对应的IP地址等信息
[root@sxw ~]# dig www.baidu.com
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-16.P2.el7_8.6 <<>> www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 65304
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; MBZ: 0x0005, udp: 4096
;; QUESTION SECTION: #展示查询信息
;www.baidu.com. IN A
;; ANSWER SECTION:
www.baidu.com. 5 IN CNAME www.a.shifen.com.
www.a.shifen.com. 5 IN A 183.232.231.172
www.a.shifen.com. 5 IN A 183.232.231.174
;; Query time: 8 msec
;; SERVER: 192.168.153.2#53(192.168.153.2)
;; WHEN: 三 8月 05 06:45:14 CST 2020
;; MSG SIZE rcvd: 101
HEADER(标题):显示查询的内容有哪些,
QUESTION SECTION:展示发起的DNS 请求参数。其中A表示我们默认查询A类型的记录。
ANSWER SECTION:这一部分展示DNS服务的响应流程。
===============================================
IN:代表类别为IP协议,即Internet
====================================================================
1.www.baidu.com 通过 CNAME 映射到 www.a.shifen.com,但是无法直接访问 www.a.shifen.com 。
2.CNAME (CanonicalName)记录,(alias from one domain name to another)通常称别名指向
解析域名对应的IP地址和别名等信息
[root@sxw ~]# yum install -y bind-utils-9.11.4-16.P2.el7_8.3.x86_64 #安装host命令
[root@sxw ~]# host www.baidu.com
www.baidu.com is an alias for www.a.shifen.com.
www.a.shifen.com has address 183.232.231.172
www.a.shifen.com has address 183.232.231.174
本机解析:/etc/hosts 默认先使用本机解析
[root@sxw ~]# vim /etc/hosts #本机解析文件---添加如下内容
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.246.160 www.soso666.cn
表示:cn域下面有一个soso666,soso666下面有一子域名www。仅供本地解析。
DNS: domain name service
客户端设置(指定)DNS:
# vim /etc/resolv.conf #本地dns配置文件
# Generated by NetworkManager
search localdomain
nameserver 192.168.246.2
nameserver 114.114.114.114 #新添加
## DNS 服务器
1.递归查询 直接把结果给客户端
2.迭代查询 如果知道结果,把结果告诉客户端,如果不知道结果,会把查询转发到下一台DNS服务器
DNS服务器知识点: SOA 记录:起始授权记录 NS 记录:指定管理某一个域的服务器是谁子域授权 A 记录:正向解析 把域名解析成IP PTR 记录:反向解析 MX 记录:指定邮件服务器 CNAME:别名 泛域名解析 负载均衡 主从 只缓存 转发 子域授权 View 视图
服务器3台、系统centos
yum install -y bind bind-utils bind-chroot
bind 主包
bind-utils 客户端测试工具(host 、dig 、nslookup)
bind-chroot chroot环境 禁锢dns服务器的工作目录
caching-nameserver(rhel5提供模板文本,缓存服务) rhel6不需要
systemctl stop firewalld && setenforce 0
# systemctl start named
如果启动服务没有工作目录的文件夹
/var/named/chroot/etc 存放主配置文件
/var/named/chroot/var/named
备份配置文件
cp /etc/named.conf /etc/named.conf.backup
修改配置文件:
[root@wing etc]# vim /etc/named.conf
options {
# 监听在主机的53端口上。any代表监听所有的主机
listen-on port 53 { any; };
listen-on-v6 port 53 { ::1; };
# 如果此档案底下有规范到正反解的zone file 档名时,该档名预设应该放置在哪个目录底下
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";
# 谁可以对我的DNS服务器提出查询请求。any代表任何人
allow-query { any; };
/*
- If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
- If you are building a RECURSIVE (caching) DNS server, you need to enable
recursion.
- If your recursive DNS server has a public IP address, you MUST enable access
control to limit queries to your legitimate users. Failing to do so will
cause your server to become part of large scale DNS amplification
attacks. Implementing BCP38 within your network would greatly
reduce such attack surface
*/
recursion yes;
dnssec-enable yes;
dnssec-validation yes;
dnssec-lookaside auto;
forwarders {
# 指定上层DNS服务器(网关)
192.168.1.1;
};
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
zone "." IN {
type hint;
file "named.ca";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
增加zone信息
vim /etc/named.rfc1912.zones
zone "baidu.com" IN {
# 定义要解析主域名
type master;
file "baidu.com.zone";
# 具体相关解析的配置文件保存在 /var/named/baidu.com.zone 文件中
};
编辑区域配置文件
vim /var/named/baidu.com.zone
$TTL 1D 或者86400
@ IN SOA baidu.com. root (
1 ; serial
1D ; refresh
1H ; retry
1W ; expire
0 ) ; minimum
IN NS baidu.com.
IN A 192.168.101.1
www IN A 192.168.101.244
test IN A 192.168.101.129
增加权限 并启动服务
chown root:named /var/named/baidu.com.zone
systemctl restart named
systemctl enable named