今天的文章有点长,因为DNS三两句话说不完,容我慢慢道来。

DNS(Domain Name System)域名系统,也就是把某个网址解析成 ip 的服务,对于私有云的方案,有可能会自建 DNS 服务器,这样可以让所有的配置文件都以域名的形式存在,自动化部署的时候就不需要因为 ip 不同而改动太多的环境变量,是不是很方便?

当然了,这种方式如果你在替换了别人的首选DNS服务器,把一些网站流量转发过来,自己做一个假网站来骗别人的密码什么的,是不是很爽?

PS: 本节内容如有名词听不懂可以拉到最后看名词解释

DNS 基本概念

本节概念,如果已知可以直接跳到 搭建 DNS 服务器

其实不管是开发还是运维,多少都接触过DNS,一个域名长这样,一个点一个域,最多四个域,用域名也就是一个字符串来标记一个网址的方式,是为了让人更好记,计算机才不在乎是ip还是用域名呢!

顶级域又可以分为三类:

  1. 通用顶级域(.com 商业机构,.org 非营利性组织,.net 网络服务机构等)
  2. 国家顶级域(.cn 中国,.uk 英国,.us 美国,.jp 日本)
  3. 反向域(基础建设顶级域,.arpa)

我们如果自己注册一个域名,完全不用在乎用哪个顶级域名,只是一个潜规则,给别人知道大概你的网站可能有什么用,我们通常在ICP那里申请的域名是二级域名,申请下来以后就可以随意自己加三级、四级域名,因为很多人顶级域名是一样的,申请的是二级域名,然后所有的三级四级域名你都可以自己加,都属于你,按这种逻辑来看域名系统就像一颗树

我们任何人都可以申请域名,只要花几十块钱就可以用他来搭网站,比如我在腾讯云上申请的域名 coding3min.com 就是 60 块一年的。

域名解析的过程

域名解析有多种类型,www@*mail二级域名手机网站对应不同的用法。

可以在腾讯云上看到提示,通常www为前缀的是主域名,但是输入麻烦,我把他重定向到了coding3min.com上,也就是@方式,各个的作用看上图。

记录类型又分为下面这几种

常用的是A类型,直接指向一个服务器的 ip,CNAME类型是指向另一个域名,比如我们用github给我们提供的表态网站服务就可以搭建起来一个免费的博客会提供一个域名用来中转,我们也可以借助自己的域名来解析到MX类型,搭建自己后缀的邮件服务器。

下面是一个详细的域名解析过程,划重点!这里考试要考

如上图,

  1. 在浏览器中输入www.baidu.com域名,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个 IP 地址映射,完成域名解析。
  2. 如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。
  3. 如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/IP参数中设置的首选DNS服务器,在此我们叫它本地 DNS 服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。
  4. 如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。
  5. 如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地 DNS 服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至 “根DNS服务器”,“根DNS服务器”收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个 IP。
    本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS服务器地址(baidu.com)给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找baidu.com域服务器,重复上面的动作,进行查询,直至找到www.baidu.com主机。
  6. 如果用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根 DNS 或把转请求转至上上级,以此循环。

不管是本地 DNS 服务器用还是转发,还是根提示,最后都是把结果返回给本地 DNS 服务器,由此 DNS 服务器再返回给客户机。

DNS 查询方式包含递归和迭代,解析方式包含正向解析和反向解析。我们知道了原理,实战一下看看吧!

搭建本地 DNS 服务器

如果你用的是kubernetes来部署服务,他的kube-dns组件会自动做好域名解析,让服务和服务之间用特定的名称规则自动完成服务发现。

DNS 只是一种协议,真正提供服务的是 bind 软件,因此,现在来安装它:

sudo yum install bind-utils bind bind-chroot

安装后有几个目录或文件是需要记得的:

  • /etc/named.conf: 主配置文件
  • /etc/sysconfig/named: 配置是否启动 chroot 及额外的参数
  • /var/named: 数据库文件存放目录,存放主机名对应 ip 的文件
  • /var/run/named: named 程序执行时 pid-file 文件存放目录(在 ubuntu 系统中,目录为/run/named)

知道了这几个重要配置文件和目录后,下面开始配置,我们把baidu.com的流量劫持了试试看

修改配置文件前一个重要习惯是先复制一份,这样改错了方便恢复。

改主配置文件 named.conf,找到相应的配置位置,改成我这个

listen-on port 53 { any; };
listen-on-v6 port 53 { any; };
allow-query     { any; };
recursion yes;

意思是开放 53 号端口对于任意地址的监听,允许所有主机对我们进行访问,拒绝递归查询方式,使用迭代查询方式,增加资源利用率。

拉到底部可以看到 include 了这个配置文件,你可以在里面对正解(反解)区域进行定义。

include "/etc/named.rfc1912.zones";

/etc/named.rfc1912.zones底部添加如下内容。

zone "baidu.com" IN {           //一级域名为.com、二级域名为.baidutype master;               //类型为主DNS服务器file "named.baidu.com";    //指向正解文件为/var/named/named.baidu.com
};

修改/var/named/named.baidu.com文件如下,其中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

重启服务,检查 SELinux 并开启防火墙的 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

也可以用nslookup来查看域名的解析,如果改完了新的DNS服务器的位置就可以用这个命令来查询。

$ nslookup coding3min.com
Server:     192.168.3.1
Address:    192.168.3.1#53Non-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
  • Server 后的就是DNS服务器的地址
  • 因为我用了CDN,所以DNS解析出了多个地址,下面的Address比如112.67.251.116就是解析出来的真实ip

DNS协议运行在UDP协议之上,因此使用的53号端口,当没有办法查询到完整的信息时,就会再次以 TCP 协议来查询,因此,防火墙需要放行TCPUDP的 53 号端口,端口号可以在/etc/services文件查看到:

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 服务器,客户即再向这台服务器发起地址解析请求。

正向解析和反向解析
正向解析:指域名解析到 IP 地址的解析过程。
反向解析:指 IP 地址解析到域名的解析过程。

课后问题

这里我只是做了A记录的正解到www前缀的域名,你还可以自己实现任意一个其他的吗?比如A记录的@解析,试试看吧!

引用

  • DNS:从零搭建公司内网 DNS 服务器
  • 搭建 DNS 服务器实现域名解析
  • DNS 递归查询和迭代查询
  • 如何搭建本地 DNS 服务器(正解:即将域名解析为 IP 地址)
  • 自己搭建 DNS 服务器–基于 Centos

**新的一年到了,这是一张 3 天免费体验卡,一人只能使用一次,欢迎加入体验,长按二维码识别加入,可下载【知识星球】app 方便收到更新通知
**

DNS与服务器搭建-Linux每日一练(10)相关推荐

  1. linux每日一练:Enable multithreading to use std::thread: Operation not permitted问题解决

    linux每日一练:Enable multithreading to use std::thread: Operation not permitted问题解决 在linux在需要使用c++11时会遇到 ...

  2. 服务器搭建--Linux安装nginx

    安装所需环境 Nginx 是 C语言 开发,建议在 Linux 上运行,当然,也可以安装 Windows 版本,本篇则使用 CentOS 7 作为安装环境. 一. gcc 安装 安装 nginx 需要 ...

  3. linux搭建ca服务器搭建,linux下安装EJBCA 搭建私有CA服务器

    linux下安装EJBCA 搭建私有CA服务器 EJBCA是一个全功能的JAVA的CA系统软件,我们可以用此搭建私有CA服务器: 一:首先我的测试环境: 1.  linux mint18.3 62位: ...

  4. 小码农UU手把手教你云服务器搭建linux环境,还用什么虚拟机啊

    文章目录 linux环境搭建 主要有三种方式 云服务器优点 告诫 购买服务器(我买的是腾讯云) 1. 进入官网 2.登录 3.认证购买 找到自己的IP 设置root密码 小结: 使用 XShell 远 ...

  5. linux pptp 服务器搭建,Linux搭建pptp ***服务器

    大家好,今天我要做的是一个使用linux搭建一个pptp的***服务器,使用客户端能够连接到***虚拟网络来实现互连,废话不多说了,下面是详细的安装步骤:(本实验采用的linux服务器是centos5 ...

  6. linux下简单的邮件服务器搭建,linux中搭建简单邮件服务器

    linux中搭建简单邮件服务器 发布时间:2008-09-29 10:06:09来源:红联作者:tvnet 在rh5下默认是安装sendmail的,也就是说可以实现发信了,如果要实现在oe中接收信件, ...

  7. 使用云服务器搭建Linux学习环境

    一.开通云服务器 进入公有云提供商官网(示例:阿里云) 地址:www.aliyun.com或www.aliyun.com/minisite/goods?userCode=3satwfcw 已有阿里云账 ...

  8. linux 下搭建portal服务器搭建,Linux环境下IBM WebSphere Portal v8.5独立服务器安装记录...

    本文用于说明在Linux环境下IBM WebSphere Portal v8.5独立服务器的安装记录: 环境说明: 硬件环境:Lenovo E440, i7, 12GB, 500GB: 虚拟设备:VM ...

  9. linux ftp web服务器搭建,Linux系统下搭建Web服务器和FTP服务器

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? Apache2和php组件的安装 使用如下命令来安装Apache2和php的组件 Ps:如果只安装Apache2,将会导 ...

最新文章

  1. python数据库教程_python教程:数据库
  2. JavaScript 中 Object ,Prototype 相关的属性和方法
  3. 11.3/11.4/11.5 MySQL安装
  4. corosync和pacemaker实现httpd和mysql双集群
  5. 如何在string.Format方法中输出大括号({})
  6. 04 - java 运算符
  7. Flutter视频播放、Flutter VideoPlayer 视频播放组件精要
  8. 获取系统当前时间(多语言版)
  9. Guacamole 是浏览器查看桌面的VNC
  10. 1.4.3 Arithmetic Progressions
  11. 使用python画二元二次函数(笔记)
  12. JEB工具介绍及使用
  13. 中文维基百科数据处理
  14. 无线网络dns服务器设置,netgear 无线dns设置教程
  15. 面向对象(高级)章节练习题
  16. 基于Android的家庭医生app
  17. IEC60958和IEC61937
  18. 学习数据数据结构的意义
  19. 回顾2018年云计算九大亮点
  20. 关于计算机在教室的文化建设方案,大学教室文化建设方案

热门文章

  1. 编辑php程序推荐的软件,推荐php环境搭建七款软件
  2. 老男孩线上Linux运维课程第一阶段(Linux基础入门总结)学习笔记
  3. android 遥控器映射,MTK 平台Android系统遥控器映射关系
  4. Android Sensor Development
  5. PDF.js预览文件
  6. 战神引擎进入游戏不显黄色列表,直接到游戏分区教程
  7. php-初体验,Apache初次配置PHP基本语法
  8. jQuery实现下雪雪花漂亮案例
  9. 懒人版黑苹果mbr安装_【MAC黑苹果系统】懒人镜像可以直接安装在MBR格式和GPT分区格式的硬盘上...
  10. 麒麟9000和麒麟990哪个好?有什么区别