简介
域名系统 (Domain Name System) 的缩写,它是由解析器和域名服务器组成的,又名“域名解析服务器”.
作用:进行域名解析
www.baidu.com -->ip 14.215.177.39
正向解析: 域名--》ip
反向解析: ip--》域名
dns解析的过程:先看hosts文件里是否有对应的域名,如果没有就问dns服务器要,进行域名解析
hosts文件的缺点: 只能给自己做域名解析
dns的好处: 整个互联网里的机器都可以解析,服务的范围要广
域名解析的过程,就是引导客户机去访问哪里
域名哪里可以购买?
阿里云
腾讯云
华为云
等
. 根域名
.com. 根域名下的com域名 commercial 商业的
.edu. 根域名下的edu域名 education 教育
.org. 根域名下的org域名 organization 非盈利组织
.gov. 政府 government
.mil 军队
.net 组织 network
https://www.kernel.org/
.cn. china
.hk. hongkong 香港
.ko korea
.jp Japan
.us 美国
.uk 英国
.au 澳大利亚
.tw 台湾
FQDN:完全符合要求的域名 (Fully Qualified Domain Name)
主机名+域名 www.qq.com www.baidu.com
dns服务器类型
缓存域名服务器
也称为 唯高速缓存服务器
通过向其他域名服务器查询获得域名->IP地址记录
将域名查询结果缓存到本地,提高重复查询时的速度
主域名服务器
特定DNS区域的官方服务器,具有唯一性,权威性
负责维护该区域内所有域名->IP地址的映射记录
从域名服务器
也称为 辅助域名服务器
其维护的 域名->IP地址记录 来源于主域名服务器
记录类型
常用命令
nslookup
一个域名查询的命令
host
ping
dig
set type=ns #查询ns记录对应的域名服务器,想知道有多少台域名服务器
> qq.com
Server: 114.114.114.114
Address: 114.114.114.114#53
Non-authoritative answer:
qq.com nameserver = ns1.qq.com.
qq.com nameserver = ns2.qq.com.
qq.com nameserver = ns4.qq.com.
qq.com nameserver = ns3.qq.com.
Authoritative answers can be found from:
> exit 退出
hosts文件: 只是给本机提供域名解析的服务,不能给其他人提供
C:\Windows\System32\drivers\etc\hosts
/etc/hosts
dns: 可以给全球的人提供域名查询服务
工作原理
DNS的解析过程
www.baidu.com为例:
- 1.浏览器有缓存,查看浏览器缓存里是否有对应的dns域名解析或者本机里是否有dns缓存 --》浏览器缓存和客户机系统缓存,都可以缓存dns域名解析
- 2.操作系统缓存,客户机先查看本机的hosts文件是否有对应的域名
- 3. 路由器缓存 – 请求继续发送到您的路由器,路由器通常有自己的 DNS 缓存
- 4.如果缓存里都没有,hosts文件里也没有对应的域名解析记录,如果都没有就向本地dns服务器发起域名解析的请求
- 5.本地域名服务器先查看缓存,如果缓存里有直接给用户,如果没有就会问根域名服务器要,向根域名服务器发起请求
- 6.递归搜索,根域名服务器获得了本地dns服务器需要查询的域名www.baidu.com后,再告诉本地dns域名服务器下一级的域名服务器.com.的域名服务器的ip地址,然后我们的本地dns服务器就会问.com服务器,查询www.baidu.com域名,.com服务器然后查询出baidu.com这个域名对应的dns服务器,然后告诉本地dns服务器,本地dns服务器又去访问baidu.com.域名服务器,查询www对应的ip,然后本机dns服务器获取到www.baidu.com对应的ip后,马上添加到缓存里,接着告诉客户机www.baidu.com域名的ip地址
- 6.客户机然后去访问www.baidu.com域名对应的ip地址的服务器
到底是先看缓存还是先看本机的hosts文件?
先看浏览器缓存,再看操作系统缓存
简单来说,一条域名的DNS记录会在本地有两种缓存:浏览器缓存和操作系统(OS)缓存。在浏览器中访问的时候,会优先访问浏览器缓存,如果未命中则访问OS缓存,最后再访问DNS服务器(一般是ISP提供),
DNS记录会有一个ttl值(time to live),单位是秒,意思是这个记录最大有效期是多少。经过实验,OS缓存会参考ttl值,但是不完全等于ttl值,而浏览器DNS缓存的时间跟ttl值无关,每种浏览器都使用一个固定值。
无线路由器也是一个dns服务器(缓存的dns服务器),当它不知道的时候,就会问根域名服务器要。
搭建dns服务器,安装和配置
准备工作:关闭防火墙服务和selinux
[root@nameserver ~]# service firewalld stop
Redirecting to /bin/systemctl stop firewalld.service
[root@nameserver ~]# systemctl disable firewalld
root@nameserver ~]# iptables -L 查看iptables防火墙规则
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@nameserver ~]#
[root@nameserver ~]# getenforce
Disabled
[root@nameserver ~]#
[root@nameserver ~]# cat /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled 修改disabled
# SELINUXTYPE= can take one of three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
1.安装软件bind,bind是历史非常悠久,性能非常好的dns域名系统软件,其中bind-utils 提供了很多dns域名查询的命令,在此直接使用通配符 * 安装与bind相关的所有软件。
[root@lianyu sysconfig] yum install bind* -y
[root@sanchuang ~]# which nslookup
/bin/nslookup
[root@sanchuang ~]# rpm -qf /bin/nslookup 查询/bin/nslookup是通过哪个软件包安装过来的
bind-utils-9.11.4-26.P2.el7_9.10.x86_64
[root@sanchuang ~]#
[root@sanchuang ~]# which dig
/bin/dig
[root@sanchuang ~]# rpm -qf /bin/dig
bind-utils-9.11.4-26.P2.el7_9.10.x86_64
2.设置named服务开机启动,并且立马启动DNS服务
name deamon --》named 提供域名服务的进程的名字
守护进程: 一直在内存里运行的,除非人为的停止
named 是dns的服务的名字
[root@nameserver ~]# systemctl enable named
Created symlink from /etc/systemd/system/multi-user.target.wants/named.service to /usr/lib/systemd/system/named.service.
[root@nameserver ~]#
[root@nameserver ~]# systemctl start named 立马启动named进程
[root@nameserver ~]# ps aux|grep named
named 14474 3.6 5.7 168300 57340 ? Ssl 15:13 0:00 /usr/sbin/named -u named -c /etc/named.conf
root 14481 0.0 0.0 112824 980 pts/0 R+ 15:13 0:00 grep --color=auto named
[root@nameserver ~]#
[root@nameserver ~]# netstat -anplut|grep named
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 14474/named
tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 14474/named
tcp6 0 0 ::1:53 :::* LISTEN 14474/named
tcp6 0 0 ::1:953 :::* LISTEN 14474/named
udp 0 0 127.0.0.1:53 0.0.0.0:* 14474/named
udp6 0 0 ::1:53 :::* 14474/named
端口号中显示的127.0.0.1代表本机地址,所有机器都拥有的本地环回地址(loopback接口),用来测试tcp/ip协议在本机是否能正常运行,但该ip地址只能在本机访问。
LAN: 接局域网里的电脑接口 local area network --》内网
WAN: wide area network 外面的区域的网络 --》外网
路由器: 转发数据的,把数据从一个网络转发到另外一个网络 --》路由 router路由器
3.修改本机的dns解析文件,增加我们自己的dns服务器地址
[root@sanchuang ~]# vim /etc/resolv.conf
# Generated by NetworkManager
#nameserver 114.114.114.114
#把dns服务器地址改为本机
nameserver 127.0.0.1
4.测试查询
进入nslookup的交互模式,在本机联网的基础上搜索任意域名,若显示为本机的dns服务器地址以及端口号解析的相关域名,则说明搭建成功。
[root@sanchuang ~]# nslookup
> www.qq.com
Server: 127.0.0.1
Address: 127.0.0.1#53
Non-authoritative answer:
www.qq.com canonical name = ins-r23tsuuf.ias.tencent-cloud.net.
Name: ins-r23tsuuf.ias.tencent-cloud.net
Address: 121.14.77.201
Name: ins-r23tsuuf.ias.tencent-cloud.net
Address: 121.14.77.221
Name: ins-r23tsuuf.ias.tencent-cloud.net
Address: 2402:4e00:1020:1404:0:9227:71a3:83d2
Name: ins-r23tsuuf.ias.tencent-cloud.net
Address: 2402:4e00:1020:1404:0:9227:71ab:2b74
5.修改配置文件,重启服务器允许其他电脑能过来查询dns域名
[root@nameserver ~]# vim /etc/named.conf 配置文件
options {
listen-on port 53 { any; }; 修改 #允许任意ip访问53端口
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";
recursing-file "/var/named/data/named.recursing";
secroots-file "/var/named/data/named.secroots";
allow-query { any; }; 修改 #允许任意dns解析
[root@nameserver ~]# service named restart 重启named服务
Redirecting to /bin/systemctl restart named.service
[root@nameserver ~]#
[root@nameserver ~]# netstat -anplut|grep named
tcp 0 0 192.168.0.180:53 0.0.0.0:* LISTEN 16137/named
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 16137/named
tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 16137/named
tcp6 0 0 :::53 :::* LISTEN 16137/named
tcp6 0 0 ::1:953 :::* LISTEN 16137/named
udp 0 0 192.168.0.180:53 0.0.0.0:* 16137/named
udp 0 0 127.0.0.1:53 0.0.0.0:* 16137/named
udp6 0 0 :::53 :::* 16137/named
出现192.168.0.180 说明可以对外进行服务,dns服务器搭建成功。
[root@dns-client ~]# cat /etc/resolv.conf 查看dns服务器地址
# Generated by NetworkManager
nameserver 192.168.2.197
[root@dns-client ~]# ip route 查看路由表--》网关
default via 192.168.2.1 dev ens33 proto static metric 100
192.168.2.0/24 dev ens33 proto kernel scope link src 192.168.2.120 metric 100
[root@dns-client ~]# ip add 查看ip地址
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:27:30:f9 brd ff:ff:ff:ff:ff:ff
inet 192.168.2.120/24 brd 192.168.2.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe27:30f9/64 scope link
valid_lft forever preferred_lft forever
dig +trace www.baidu.com 查询追踪整个域名解析的过程
主配置文件: /etc/named.conf
次要配置文件:/etc/named.rfc1912.zones
named.ca 记录13台根域名服务器地址的文件
主进程名字:named
监听的端口: 53 tcp/udp 查询用udp 主从复制用tcp
数据文件: 存放域名解析相关的数据的
[root@sanchuang named]# dig qq.com NS
[root@sanchuang named]# nslookup
> set type=ns
> qq.com
Server: 127.0.0.1
Address: 127.0.0.1#53
Non-authoritative answer:
qq.com nameserver = ns4.qq.com.
qq.com nameserver = ns3.qq.com.
qq.com nameserver = ns2.qq.com.
qq.com nameserver = ns1.qq.com.
Authoritative answers can be found from:
ns3.qq.com internet address = 183.192.164.81
ns3.qq.com internet address = 203.205.195.94
ns3.qq.com internet address = 112.60.1.69
ns4.qq.com internet address = 203.205.221.79
ns4.qq.com internet address = 218.68.91.143
ns4.qq.com internet address = 58.144.154.100
ns4.qq.com internet address = 59.36.132.142
搭建主域名服务器
1. 编辑dns次要配置文件/etc/named.rfc1912.zones,增加一条主域名记录
告诉named为sc.com提供域名解析
[root@nameserver named]# vim /etc/named.rfc1912.zones
zone "sc.com" IN {
type master; #类型为主域名
file "sc.com.zone"; #sc.com.zone域名的数据文件,需要去/var/named/下创建
allow-update { none; };
};
添加上面的配置,建议在localhost的后面
2.创建sc.com.zone主域名的数据文件
/var/named/ 存放dns域名解析的数据文件的 --》创建sc.com的数据文件
[root@nameserver named]# pwd
/var/named
[root@nameserver named]# ls
chroot chroot_sdb data dynamic dyndb-ldap named.ca named.empty named.localhost named.loopback slaves
named.ca 存放13台根服务器的ip地址
[root@nameserver named]# cp -a named.localhost sc.com.zone 复制产生一个sc.com的数据文件
复制文件保留原来文件的所有的属性: 用户,组,时间,权限等
[root@nameserver named]# ls
chroot chroot_sdb data dynamic dyndb-ldap named.ca named.empty named.localhost named.loopback sc.com.zone slaves
[root@nameserver named]#
[root@sanchuang named]# ll
总用量 20
drwxr-x--- 7 root named 61 12月 5 11:55 chroot
drwxr-x--- 7 root named 61 12月 5 11:55 chroot_sdb
drwxrwx--- 2 named named 23 12月 5 11:57 data
drwxrwx--- 2 named named 60 12月 5 15:17 dynamic
drwxrwx--- 2 root named 6 4月 1 2020 dyndb-ldap
-rw-r----- 1 root named 2253 4月 5 2018 named.ca
-rw-r----- 1 root named 152 12月 15 2009 named.empty
-rw-r----- 1 root named 152 6月 21 2007 named.localhost
-rw-r----- 1 root named 168 12月 15 2009 named.loopback
-rw-r----- 1 root named 152 6月 21 2007 sc.com.zone
drwxrwx--- 2 named named 6 10月 4 15:06 slaves
[root@sanchuang named]# cat sc.com.zone
$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS @
A 192.168.2.197
www A 192.168.2.197
vue A 192.168.2.88
ftp A 192.168.2.120
tongtong A 192.168.2.136
tiankai A 112.1.1.1
kaikai CNAME tiankai
3. 刷新named服务
[root@sanchuang named]# service named restart
当服务启动不了的时候,如何排错?
1.看日志
2.使用检测工具:
检测配置文件和数据文件
3.查看提醒
/var/log/messages 日志文件
检测工具: 检测配置文件 named-checkconf
[root@lb1 named]# named-checkconf /etc/named.rfc1912.zones
检测数据文件 named-checkzone
[root@nameserver data]# tail -f /var/log/messages
[root@nameserver data]# named-checkzone sc.com /var/named/sc.com.zone -=--》检查数据文件是否有错误
zone sc.com/IN: loaded serial 0
OK
[root@nameserver data]# named-checkconf /etc/named.rfc1912.zones --》检查配置文件
配置负载均衡功能
通过添加多条A记录相同的名字对应不同的ip地址,实现dns域名的负载均衡,把流量分散到不同的服务器上
[root@sanchuang named]# cat sc.com.zone
$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS @
IN MX 10 mail.sc.com
A 192.168.2.197 #默认指向本机ip地址
www IN A 192.168.2.197 #负载均衡记录指向不同的ip地址
www IN A 192.168.2.198
www IN A 192.168.2.199
www IN A 192.168.2.196
mail IN A 192.168.2.197
vue IN A 192.168.2.88
ftp IN A 192.168.2.120
tongtong IN A 192.168.2.136
ztt IN A 192.168.2.136
tiankai IN A 112.1.1.1
kaikai IN CNAME tiankai
* IN A 192.168.2.197
刷新dns服务
[root@dns named]# service named restart
修改windows客户机的dns服务器的地址为搭建的dns服务器 192.168.2.197
效果测试
用window服务器ping www.sc.com 看是否实现负载均衡功能
转发器
BIND的forward转发机制的这样的:
当设置了forwarders转发器后,所有非本域的和在缓存中无法找到的域名查询都将转发到设置的DNS转发器上,由这台DNS来完成解析工作并做缓存,因此这台转发器的缓存中记录了丰富的域名信息。因而对非本域的查询,很可能转发器就可以在缓存中找到答案,避免了再次向外部发送查询,减少了流量。
配置
[root@nameserver ~]# vim /etc/named.conf
options {
listen-on port 53 { any; };
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";
recursing-file "/var/named/data/named.recursing";
secroots-file "/var/named/data/named.secroots";
allow-query { any; };
forward only;
forwarders { 192.168.2.130; 114.114.114.114; };
forward first | only;
forward指令用于设置DNS转发的工作方式:
1)forward first设置优先使用forwarders DNS服务器做域名解析,如果查询不到再使用本地DNS服务器做域名解析。
2)forward only设置只使用forwarders DNS服务器做域名解析,如果查询不到则返回DNS客户端查询失败。
从域名服务器
配置
主域名服务器的配置
192.168.2.150 -->slave的ip
192.168.2.130 -->master的ip
[root@lb1 named]# vim /etc/named.rfc1912.zones
zone "cali.com" IN {
type master;
file "cali.com.zone";
allow-transfer { 192.168.2.150; };
};
从域名服务器的配置
[root@lb2 ~]# vim /etc/named.rfc1912.zones
zone "cali.com" IN {
type slave;
file "slaves/cali.com.zone";
masters { 192.168.2.130 ;};
};
[root@lb2 ~]# service named restart
Redirecting to /bin/systemctl restart named.service
[root@lb2 ~]# ls /var/named/slaves/
cali.com.zone
[root@lb2 ~]#
数据目录
[root@lb2 slaves]# pwd
/var/named/slaves
[root@lb2 slaves]# ls
cali.com.zone
多个NS记录的使用
dig查询
[root@lb2 slaves]# dig cali.com NS
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.9 <<>> cali.com NS
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 8440
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;cali.com. IN NS
;; ANSWER SECTION:
cali.com. 86400 IN NS ns1.cali.com.
cali.com. 86400 IN NS ns2.cali.com.
;; ADDITIONAL SECTION:
ns1.cali.com. 86400 IN A 192.168.2.130
ns2.cali.com. 86400 IN A 192.168.2.150
;; Query time: 0 msec
;; SERVER: 192.168.2.150#53(192.168.2.150)
;; WHEN: 二 3月 15 17:23:46 CST 2022
;; MSG SIZE rcvd: 105