DNS(Name)域名系统是将某个URL解析为IP的服务。 对于私有云解决方案,可以自己搭建一个DNS服务器,这样所有的配置文件都可以以域名的形式存在并自动部署。 那么就不需要因为IP地址不同而改变太多的环境变量了。 是不是很方便呢?
当然,这样一来,如果你更换别人首选的DNS服务器,转发部分网站流量,制作一个假网站来欺骗别人的密码,那不是很好吗?
PS:如果本节有不懂的名词,可以拉到最后。
DNS 基本概念
如果您已经了解本节中的概念,可以直接跳至
其实无论是开发还是运维,大家都在一定程度上接触过DNS。 域名是这样的,每次点击一个域名,最多四个域名。 使用域名(字符串)来标记URL的方式是为了让人们更容易记住。 ,计算机不在乎是IP还是域名!
顶级域名可以分为三类:
通用顶级域名(.com 商业组织、.org 非营利组织、.net 网络服务组织等) 国家顶级域名(.cn 中国、.uk 英国、.us 美国、.jp 日本) 反向域名(基础设施顶级域名,.arpa)
如果我们自己注册域名,就不用担心使用哪个顶级域名。 让别人知道你的网站可能用来做什么,这只是一个潜规则。 我们通常通过ICP申请的域名都是二级域名。 申请后,可以随意自己添加三级、四级域名,因为很多人拥有相同的顶级域名,而申请二级域名。 然后你可以自己添加所有三级、四级域名,它们都属于你了。 根据这个逻辑域名系统就像一棵树
任何人都可以申请一个域名并用它建立一个网站,只需几十块钱。 比如我在腾讯云申请的域名一年费用是60元。
域名解析流程
域名解析有多种类型。 www、@、*、邮件、二级域名、手机网站对应不同的用法。
您可以在腾讯云上看到提示。 通常www前缀为主域名,但输入比较麻烦。 我将其重定向到 ,即 @ 方法。 各自的功能如上图所示。
记录类型分为以下几种:
常用的是A类型,直接指向服务器的IP,以及CNAME类型,指向另一个域名。 例如,我们可以利用提供给我们的快递建站服务,搭建一个免费博客,并提供域名进行转让。 我们还可以使用您自己的域名来解析MX类型,构建您自己的后缀邮件服务器。
下面是详细的域名解析流程,重点突出!这里有考试
如上图所示,
在浏览器中输入域名,操作系统会首先检查其本地的hosts文件是否有这个URL映射关系。 如果有,就会先调用IP地址映射来完成域名解析。 如果hosts中没有该域名的映射,则搜索本地DNS解析器缓存,查看是否存在该URL的映射关系。 如果有则直接返回完成域名解析。 如果主机与本地DNS解析器缓存之间没有对应的URL映射关系,则首先查找TCP/IP参数中设置的首选DNS服务器。 这里我们称之为本地DNS服务器。 当本服务器收到查询时,如果查询的域名包含在本地配置区资源中,则将解析结果返回给客户端,完成域名解析。 这个决议具有权威性。 如果要查询的域名没有被本地DNS服务器区域解析,但服务器缓存了URL映射关系,则调用该IP地址映射来完成域名解析。 这个决议并不具有权威性。 如果本地DNS服务器的本地区域文件和缓存解析无效,则根据本地DNS服务器的设置(是否设置转发器)进行查询。 如果不使用转发方式,本地DNS会将请求发送到“根DNS服务器”、“根DNS服务器”、“根DNS服务器”。 “DNS服务器”收到请求后,会判断谁授权管理这个域名(.com),并返回一个负责顶级域名服务器的IP。 本地DNS服务器收到IP信息后,会联系负责.com域的服务器。 负责.com域的服务器收到请求后,如果无法解析,就会寻找管理.com域的下级DNS服务器地址(),交给本地DNS服务器。 当本地DNS服务器收到这个地址后,就会查找域服务器,重复上述动作,进行查询,直到找到主机。 如果采用转发方式,DNS服务器会将请求转发给上级DNS服务器,由上级DNS服务器进行解析。 如果上层服务器无法解析,则要么查找根DNS,要么将请求转发给上层服务器进行解析。 这个循环。
不管是本地DNS服务器使用的、转发的、还是root的,结果最终都会返回给本地DNS服务器,由DNS服务器返回给客户端。
DNS查询方法包括递归和迭代,解析方法包括正向解析和反向解析。 原理知道了,我们来实践一下吧!
设置本地 DNS 服务器
如果你使用它来部署服务,它的 kube-dns 组件会自动进行域名解析,允许服务使用服务之间特定的名称规则自动完成服务发现。
DNS只是一个协议,真正的服务是bind软件,所以现在安装它:
sudo yum install bind-utils bind bind-chroot
安装后有几个目录或文件需要记住:
了解了这些重要的配置文件和目录之后,我们就开始配置吧。 让我们尝试劫持流量。
修改配置文件之前的一个重要习惯就是先制作一份副本,这样一旦出错就可以轻松恢复。
更改主配置文件named.conf,找到对应的配置位置,改成我的。
listen-on port 53 { any; };
listen-on-v6 port 53 { any; };
allow-query { any; };
recursion yes;
这意味着开放53端口用于任意地址的监控,允许所有主机访问我们,拒绝递归查询方式,采用迭代查询方式来提高资源利用率。
滚动到底部可以看到这个配置文件,您可以在其中定义正解(反解)区域。
include "/etc/named.rfc1912.zones";
在 /etc/named..zones 底部添加以下内容。
zone "baidu.com" IN { //一级域名为.com、二级域名为.baidu
type master; //类型为主DNS服务器
file "named.baidu.com"; //指向正解文件为/var/named/named.baidu.com
};
修改/var/named/文件如下,其中127.0.0.1 IP可以改为你想要的。
$TTL 600 ;定义下列所有记录缓存在客户端的时间
@ IN SOA dns.yu.com. root.localhost (
0 ; serial #序列号,用于主从dns中判断是否为最新版本
1H ; refresh #一小时更新一次
15M ; retry #若连接不上,等待15分钟后重新尝试连接
1W ; expire #超过一周仍无法下载便放弃下载
3D ) ; minimum #客户端找服务端做dns解析时,否定答案的缓存时间为3天
@ IN NS dns.baidu.com. ; NS记录表明了dns服务器的SDQN为dns.baidu.com.
dns.baidu.com. IN A 127.0.0.1 ; 下面三条A记录表明了域内主机的IP地址
www.baidu.com. IN A 127.0.0.1
ftp IN A 127.0.0.1
重启服务,检查并启用防火墙的dns服务
systemctl restart named #重启服务
setenforce 0 #关闭SELinux
firewall-cmd --add-service=dns #开启防火墙的dns服务
修改DNS服务器指向
在Linux中,DNS服务器指向的配置有一个固定的文件。 以下文件有一个主服务器和一个备份服务器。 DNS 服务器设置后将修改此文件。
$ cat /etc/resolv.conf
nameserver 192.168.3.1
nameserver 114.114.114.114
测试
ping www.baidu.com
PING www.baidu.com (127.0.0.1) 56(84) bytes of data.
64 bytes from VM-0-11-centos (127.0.0.1): icmp_seq=1 ttl=64 time=0.006 ms
64 bytes from VM-0-11-centos (127.0.0.1): icmp_seq=2 ttl=64 time=0.021 ms
^C
--- www.baidu.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.006/0.013/0.021/0.008 ms
它还可以用于检查域名的解析。 如果新的DNS服务器位置发生变化,可以使用该命令进行查询。
$ nslookup coding3min.com
Server: 192.168.3.1
Address: 192.168.3.1#53
Non-authoritative answer:
coding3min.com canonical name = coding3min.com.cdn.dnsv1.com.
coding3min.com.cdn.dnsv1.com canonical name = 6yucorit.dispatch.spcdntip.com.
Name: 6yucorit.dispatch.spcdntip.com
Address: 112.67.251.116
Name: 6yucorit.dispatch.spcdntip.com
Address: 113.105.165.183
Name: 6yucorit.dispatch.spcdntip.com
Address: 113.96.98.77
Name: 6yucorit.dispatch.spcdntip.com
Address: 125.78.252.121
DNS协议运行在UDP协议之上,因此使用端口53。 当无法查询到完整信息时,会使用TCP协议再次查询。 因此,防火墙需要释放TCP和UDP的53端口。 端口号您可以在 /etc/ 文件中看到:
cat /etc/services | grep domain
domain 53/tcp # name-domain server
domain 53/udp
domaintime 9909/tcp # domaintime
domaintime 9909/udp # domaintime
词汇表
DNS服务器:运行存储DNS数据库信息的DNS服务器程序的计算机。
DNS缓存:当DNS服务器解析客户端的域名请求时,如果本地没有该域名的记录,则会询问其他DNS服务器。 当其他域名将解析结果返回给DNS服务器时,DNS会将相应的记录保存在本地。 生成DNS缓存,以便下次客户端再次请求时,DNS服务器可以直接使用缓存中的DNS记录。
DNS查询方式:递归查询和迭代查询
递归查询:当客户端向DNS服务器发起域名解析请求时,DNS服务器首先检查自己的DNS记录。 如果没有DNS记录,则会向其他DNS服务器发起解析请求。 迭代查询:当客户端向DNS服务器发起域名解析请求时,DNS服务器不会为客户端解析地址,而是告诉客户端另一台DNS服务器,客户端再向这台DNS服务器发起地址解析请求服务器。
正向解析和反向解析 正向解析:指域名解析为IP地址的解析过程。 反向解析:指IP地址到域名的解析过程。
课后提问
这里我只是对带www前缀的域名做了A记录的正确解决方案。 您可以自己实施其他一种吗? 比如A记录的@分析,试试吧!
引用
**新年到了,这是一张3天免费试用卡,一个人只能使用一次。 欢迎加入体验,长按二维码识别加入,即可下载【知识星球】APP接收更新通知**