介绍 DNS 在网络请求中扮演的角色及其搭建
当我们以域名请求某服务的时候
当我们从浏览器里敲入百度网址 www.baidu.com
并按下回车键(Enter/Return 键),浏览器在与百度的服务器建立连接之前,首先需要把 www.baidu.com
转换成为 IP
,然后根据这个 IP
与百度的服务器建立连接,继而完成接下来的数据传输。
具体步骤
把整个过程简化后,如下图所示:
- 手机(或电脑)首先请求 DNS 服务器获取百度的 IP;
- DNS 服务器从 www.baidu.com 对应的表里按照一定的算法返回某个 IP(假设为
220.181.57.142
); - 手机或电脑拿到
220.181.57.142
后就发起与baidu-server-2
的连接,形成一个61.147.108.199 <=> 220.181.57.142
的连接; - 连接建立起来后,此时才进行请求数据和响应数据的传输。
DNS 服务器
在上图中可以看到 DNS server
做的主要事情就是简单地把 www.baidu.com
转换成为对应的 IP
。那么这个 IP 是如何来的呢?
当我们在某个云平台(比如 jingwei.link
这个域名是在阿里云买的)购买了一个域名后,我们就可以给这个域名添加相应的解析。把我们服务器的 IP
绑定到这个域名下面后,信息同步到相应的 DNS 服务器上,我们就可以通过域名找到我们的服务器 IP
继而访问我们的服务了。
在 Ubuntu 上搭建 DNS 服务器
大多数情况下,我们的手机(或电脑)都会自动连接公共的 DNS 服务器,并使用这些公共的 DNS 服务器完成所有域名到 IP
的映射查询。不过,如果我们希望在某个区域(比如在公司或者大家庭里)搭建由特定人群访问的服务,这个时候就可以搭建自己的 DNS 服务器,从而自由地配置 DNS 服务器添加个性化解析的记录。
本文主要描述在 Ubuntu 的服务器上搭建一个 DNS 服务器的步骤(因为我给团队里拥有的几台服务器安装的都是这个系统),有的团队喜欢使用其他发行版本,比如 centOS 等,对于这些系统的配置可以根据本文的内容进一步探索。
安装 DNS server(bind9)
BIND 9 是一个开源的 DNS 服务器,在 Ubuntu-Server 版本里其实是包含这个服务的,可以在安装系统时选择性地安装它,也可以通过下面的命令后期安装:
# 更新软件源的数据
sudo apt-get update
# 安装 bind9
sudo apt-get install bind9
配置 /etc/bind/named.conf.options 文件
named.conf.options
文件中包含一些基本的配置,比如定义 解析 文件的位置(directory
)、DNS 上游服务器(forwarders
)、以及一些安全性格的参数配置等。
// cat /etc/bind/named.conf.options
options {
// 这个目录决定了我们域名解析数据配置的目录,记住这个目录,后面会用到
directory "/var/cache/bind";
// 配置 bind9 上游的 DNS 服务器
// 如果 bind9 中找不到某个域名的解析,会把域名解析请求发送到上游 DNS 服务器
// 192.168.8.1 这个是我家里的路由器的 IP,这个路由器提供了 DNS 服务能力
forwarders {
192.168.8.1;
};
allow-query {
0.0.0.0/0;
};
// 因为 192.168.8.1 是本地路由器,安全性不是很高
// 需要关闭下面这几个安全相关参数才可以使用
dnssec-enable no;
dnssec-validation no;
dnssec-lookaside auto;
auth-nxdomain no; # conform to RFC1035
listen-on-v6 { any; };
};
配置 /etc/bind/named.conf.local 文件
可以在 named.conf.local
文件中添加自定义的域名信息(zone
)以及相应的解析文件(file
)。
// cat /etc/bind/named.conf.local
// 这里定义在 bind9 中添加 www.jingwei.link 解析
zone "www.jingwei.link"{
type master;
// 这里定义了在哪个文件中配置了 IP 信息
file "jingwei.link";
};
配置 /var/cache/bind/jingwei.link 文件
① /etc/bind/named.conf.options
中的 directory
和 ② /etc/bind/named.conf.local
中的 file
共同指定了 www.jingwei.link
的域名解析记录包含在 /var/cache/bind/jingwei.link
文件。
$TTL 604800
@ IN SOA localhost. root.localhost. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
; 假设在 192.168.8.12 中搭建了某个服务,并希望以 www.jingwei.link 暴露出去
@ IN NS localhost.
@ IN A 192.168.8.12
重启 bind9
# 重新载入配置
sudo systemctl daemon-reload
# 重启 bind9
sudo systemctl restart bind9.service
小结
本文首先简单介绍了 DNS 服务器在网络请求中扮演的角色,接着介绍了在 Ubuntu 中安装并配置 DNS 服务器(bind9)的大体步骤。
参考
- ubuntu16.04 搭建 dns 服务器 - 小浩子的博客 - CSDN博客 具有高参考价值
- Ubuntu搭建DNS服务器 - 依然那霖哥 - CSDN博客
- centos6下BIND配置DNS缓存服务 - 运维之路 配置 时
- BIND 9 Open Source DNS Server DNS 服务器 bind9 的官方页面,可以了解一下 bind9 这个项目