Linux —— dns服务

简介

域名系统 (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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值