54

DNS 简介及其在 Ubuntu 上的搭建

 5 years ago
source link: https://jingwei.link/2019/04/26/dns-server-setup-on-ubuntu.html?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

当我们以域名请求某服务的时候

当我们从浏览器里敲入百度网址 www.baidu.com 并按下回车键(Enter/Return 键),浏览器在与百度的服务器建立连接之前,首先需要把 www.baidu.com 转换成为 IP ,然后根据这个 IP 与百度的服务器建立连接,继而完成接下来的数据传输。

具体步骤

把整个过程简化后,如下图所示:

jUb6Zr6.jpg!web

  1. 手机(或电脑)首先请求 DNS 服务器获取百度的 IP;
  2. DNS 服务器从 www.baidu.com 对应的表里按照一定的算法返回某个 IP(假设为 220.181.57.142 );
  3. 手机或电脑拿到 220.181.57.142 后就发起与 baidu-server-2 的连接,形成一个 61.147.108.199 <=> 220.181.57.142 的连接;
  4. 连接建立起来后,此时才进行请求数据和响应数据的传输。

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)的大体步骤。

参考


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK