DNS协议
一、DNS: 域名名称系统
主机解析
正向解析:将计算机名转换成IP地址
反向解析:将IP地址转换成计算机名
FQDN(Fully Qualified Domain Name)完全合格域名/全称域名,例如www.yutianedu.com.
DNS查询的具体工作原理
1. 用户输入网址
当你在浏览器中输入一个网址,比如 www.example.com
,浏览器首先需要知道这个域名对应的IP地址。因为计算机只能通过IP地址进行通信,所以DNS的作用就是将域名转换为IP地址。
2. 本地缓存查找
浏览器会先查找自己本地的DNS缓存。每次你访问一个网站,操作系统和浏览器都会缓存DNS查询结果。这样,当你再次访问相同的网站时,系统就可以直接从缓存中提取IP地址,而无需重新进行DNS查询。
如果缓存中有对应的记录,浏览器就直接使用这个IP地址进行访问。
3. 操作系统查询DNS服务器
如果缓存中没有相关记录,操作系统就会查询配置的DNS服务器。通常,操作系统会使用ISP(Internet Service Provider,互联网服务提供商)提供的DNS服务器,或者你自己设置的第三方DNS(比如Google的8.8.8.8,Cloudflare的1.1.1.1等)。
4. 递归查询过程
如果本地DNS服务器也没有域名的记录,它会开始一个递归查询的过程。这个过程涉及多个DNS服务器的逐级查询。
- 根DNS服务器:首先,DNS请求会被发送到根DNS服务器。根DNS服务器是DNS系统的顶级服务器,管理着所有顶级域(如
.com
,.org
,.net
等)。 - 顶级域名服务器(TLD):根服务器会根据请求的域名(如
example.com
),将查询请求指向对应的TLD服务器(例如.com
域的TLD服务器)。 - 权威DNS服务器:TLD服务器会返回指定域名的权威DNS服务器地址。这个权威服务器拥有该域名的确切记录,可以返回最终的IP地址。
5. 获取IP地址
一旦查询到权威DNS服务器,它会返回对应域名的IP地址。这个地址可以是IPv4(如 192.0.2.1
)或IPv6(如 2001:db8::1
)格式。
返回结果后,DNS查询过程就结束了,操作系统将会把这个IP地址返回给浏览器,浏览器就可以通过这个IP地址连接到目标网站的服务器,获取网站的内容。
6. 本地缓存
为了提高效率,DNS服务器和操作系统都会缓存结果。这样,当再次访问相同的网站时,就不需要重新进行整个查询过程,而是直接从缓存中取出IP地址。
DNS查询过程图解
浏览器请求域名解析 →
操作系统查询本地缓存 →
缓存命中:直接使用缓存的IP地址(如果有)。
未命中:查询DNS服务器 →
DNS服务器查询根DNS服务器 →
根DNS服务器返回TLD服务器地址 →
TLD服务器返回权威DNS服务器地址 →
权威DNS服务器返回最终的IP地址 →
浏览器访问IP地址,加载网页内容。
DNS的类型
A记录(Address Record):将域名映射到IPv4地址。
AAAA记录:将域名映射到IPv6地址。
CNAME记录(Canonical Name):将一个域名别名映射到另一个域名。
MX记录(Mail Exchange):定义邮件交换服务器,用于处理电子邮件。
NS记录(Name Server):指示负责某一域的权威DNS服务器。
TXT记录:存储文本信息,常用于验证域名所有权等用途。
配置dns服务器
1.安装bind包
[root@web01 network-scripts]# yum install -y bind
2.启动named服务
[root@web01 network-scripts]# systemctl enable named.service --now
3.注意事项
dns服务尽量reload,因为restart会清空dns缓存
3.查看端口
[root@web01 network-scripts]# netstat -tunpl |grep -w 53
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 3617/named
tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 2032/dnsmasq
tcp6 0 0 ::1:53 :::* LISTEN 3617/named
udp 0 0 127.0.0.1:53 0.0.0.0:* 3617/named
udp 0 0 192.168.122.1:53 0.0.0.0:* 2032/dnsmasq
udp6 0 0 ::1:53 :::* 3617/named
4.修改配置文件
[root@web01 network-scripts]# vim /etc/named.conf
options {
# 设置 DNS 服务器监听的地址和端口。这里限制仅在本地回环地址上监听。
listen-on port 53 { 127.0.0.1; }; # 只在 IPv4 本地地址上监听 53 端口
listen-on-v6 port 53 { ::1; }; # 只在 IPv6 本地地址上监听 53 端口
# 设置 DNS 数据存储目录,通常包含数据库文件、日志文件等。
directory "/var/named"; # 数据库文件存储的默认目录,通常是 Zone 文件所在位置。
# 设置缓存转储文件的路径,用于调试和分析缓存数据。
dump-file "/var/named/data/cache_dump.db"; # 缓存转储文件,记录当前缓存内容
# 设置统计信息存储文件路径,用于记录 DNS 查询统计信息。
statistics-file "/var/named/data/named_stats.txt"; # 存储统计数据的文件路径
# 设置内存统计信息文件,用于记录内存使用情况。
memstatistics-file "/var/named/data/named_mem_stats.txt"; # 存储内存统计信息的文件路径
# 设置安全根密钥文件,通常用于 DNSSEC(域名系统安全扩展)。
secroots-file "/var/named/data/named.secroots"; # 存储根密钥的文件路径
# 设置递归查询过程中需要的文件路径,用于记录递归查询状态。
recursing-file "/var/named/data/named.recursing"; # 存储递归查询过程中的文件路径
# 配置允许查询的客户端,只有 localhost(本地地址)可以查询。
allow-query { localhost; }; # 只能本机查询本机,可以设置为网段或者any
recursion yes; # 启用递归查询功能,表示此 DNS 服务器是一个递归服务器
};
zone "8.168.192.in-addr.arpa" IN {
type master; #主dns
file "named.yutianedu"; #指定zone解析文件,绝对路径/var/named
allow-update { none; }; #是否允许自动更新,none代表不允许
};
#这是根dns的zone
zone "." IN {
type hint;
file "named.ca";
};
配置正向dns(权限要注意)
[root@web01 named]# cat /etc/named.rfc1912.zones 在这个配置文件中加一行
zone "myopenai.com" IN {
type master;
file "named.myopenai";
allow-update { none; };
};
[root@web01 named]# cp -p named.localhost named.myopenai 权限问题
[root@web01 named]# cat named.myopenai
$TTL 1D
@ IN SOA ns.myopenai.com. root.myopenai.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS ns.myopenai.com.
ns A 192.168.5.11
www A 192.168.5.11
ftp A 192.168.5.12
web CNAME www.baidu.com.
#配置文件解析
$TTL 1D ###生命周期,dns缓存文件最长时间
###SOA记录:起始授权机构:Start of Authority Record
1D:每天主DNS与备DNS同步一次
1H: 如果主从同步不成功,则每小时重试一次
1W:每小时重试一次,1周内还未同步成功,则放弃
3H: 失败的解析保留3小时在缓存中
0:序列号:每次备DNS主动询问主DNS,你有记录更新吗?如果主DNS更新了记录,需要增加序列号,备份DNS才会同步新的记录
ns:name server 它用于指定一个域名所对应的 权威 DNS 服务器,即负责管理该域名的 DNS 信息的服务器。
CNAME:别名
将database这个主机添加两条A记录,实现DNS轮询
#测试
[root@kvm ~]# nslookup
> www.myopenai.com
Server: 192.168.5.101
Address: 192.168.5.101#53
Name: www.myopenai.com
Address: 192.168.5.11
配置反向解析
1.
[root@dns named]# cat /etc/named.rfc1912.zones
zone "5.168.192.in-addr.arpa" IN {
type master;
file "named.my";
allow-update { none; };
};
2.
[root@dns named]# cat named.my
$TTL 1D
@ IN SOA ns.myopenai.com. root.myopenai.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS ns.myopenai.com.
ns A 192.168.5.11
11 PTR www.myopenai.com. #PTR: Point Record 反向解析
#配置文件解析
3.测试
[root@kvm ~]# nslookup 192.168.5.11
11.5.168.192.in-addr.arpa name = www.myopenai.com.
DNS记录
A: 将一个主机名转换为IPV4 Address
AAAA: 将一个主机名转换为IPV6 Address
辅助dns搭建
搭建高可用集群
主--->从
但从端不能同步给主端
从端DNS不能修改
只能由主端同步数据给从端
环境规划
主dns:192.168.5.101
从dns:192.168.5.102
从dns配置:
1.修改配置文件
[root@dns2 slaves]# cat /etc/named.conf
options {
listen-on port 53 { any; };
listen-on-v6 port 53 { any; };
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";
secroots-file "/var/named/data/named.secroots";
recursing-file "/var/named/data/named.recursing";
allow-query { any; };
[root@dns2 slaves]# cat /etc/named.rfc1912.zones
zone "myopenai.com" IN {
type slave;
file "slaves/named.myopai";
masters { 192.168.5.101; };
};
zone "5.168.192.in-addr.arpa" IN {
type slave;
file "slaves/myopai.zone";
masters { 192.168.5.101; };
};
2.测试
先断开主dns
[root@dns ~]# systemctl stop named.service
[root@kvm ~]# nslookup www.myopenai.com
Server: 192.168.5.102 -----> 是备dns在工作
Address: 192.168.5.102#53
Name: www.myopenai.com
Address: 192.168.5.11
转发dns
[root@web01 ~]# vim /etc/named.conf
options {
listen-on port 53 { any; };
listen-on-v6 port 53 { any; };
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";
secroots-file "/var/named/data/named.secroots";
recursing-file "/var/named/data/named.recursing";
allow-query { any; };
forwarders { 192.168.8.254; }; ####转发DNS
forward first;
forward only;则先通过DNS查询,如果DNS能解析到,直接返回结果,如果解析不到,尝试丢给转发DNS来解析,如果转发DNS能解析到,则返回给客户端,如果转发DNS也解析不到,则返回查询失败
forward first; 则先通过DNS查询,如果DNS能解析到,直接返回结果,如果解析不到,尝试丢给转发DNS来解析,如果转发DNS能解析到,则返回给客户端,如果转发DNS也解析不到,则从根DNS开始查询
forwarders { 114.114.114.114; };
forward only;
标签:named,DNS,file,var,服务器,com
From: https://www.cnblogs.com/cloudwangsa/p/18563730