前言
如果你希望在CentOS系统上建立自己的DNS服务器,那么这篇文章绝对是你不容错过的宝藏指南。我们提供了详尽的步骤和实用技巧,让你能够轻松完成搭建过程。从安装必要的软件到配置区域文件,我们都将一一为你呈现。无论你的身份是运维人员,还是程序员,抑或是对网络基础设施感兴趣的读者,我相信这篇文章都将为你提供有力的帮助。开始阅读本文吧,开始打造一个高效、可靠的DNS解析服务!
DNS
DNS代表域名系统(Domain Name System),它是互联网中的一项基本服务。DNS是一个分布式的命名系统,用于将人类可读的域名转换成计算机可理解的IP地址。
在互联网上,每个设备都有其唯一的IP地址,如192.168.1.1。然而,人们更容易记住有意义的域名,如google.com或baidu.com等。当您在浏览器中输入域名时,浏览器会发送请求到DNS服务器,并获取与该域名相对应的IP地址。这样,浏览器就可以使用该IP地址与目标服务器进行通信和交互。
DNS系统是一个分层的结构,由许多不同的DNS服务器组成。这些服务器按照层次结构进行组织,每个层次都由不同的组织或机构管理。在顶层,有根DNS服务器,它存储了所有顶级域名服务器的信息。下一层是顶级域名服务器,它存储了特定顶级域名(如.com、.org、.cn等)的DNS记录。最后,有权威DNS服务器,它存储了与具体域名相对应的IP地址。
DNS的作用是解析域名,并将其转换为相应的IP地址,以便设备能够准确地定位和访问目标服务器。它是互联网基础设施中不可或缺的一部分,使得我们能够轻松地浏览网站、发送电子邮件、进行网络通信等。
应用场景
到底有没有必要自己来动手搭建DNS服务器呢?或者说,在什么场景下需要自己动手来搭建DNS服务器?相信每个人的答案可能都不相同。我认为掌握DNS服务器的搭建还是很必要的,至少在下面几种场景下,是需要自己来动手搭建一个DNS服务器的:
- 局域网内部解析:如果你在局域网中拥有多个设备,希望它们能够通过域名相互访问,而不是仅仅使用 IP 地址,那么你可以搭建一个 DNS 服务器来实现内部解析。这样,你可以使用自定义的域名来访问各个设备,提高网络的可用性和易用性。
- 域名注册和管理:如果你是一个企业或组织,并且拥有自己的域名,你可能需要搭建一个 DNS 服务器来管理你的域名。通过搭建自己的 DNS 服务器,你可以更灵活地配置域名解析、子域名管理,以及其他 DNS 相关的设置,以满足你的特定需求。
- 隐藏内部网络拓扑:在某些情况下,你可能希望隐藏你的内部网络拓扑结构,以增加网络的安全性。通过搭建自己的 DNS 服务器,你可以将内部 IP 地址映射为不公开的域名,从而隐藏实际的网络结构。
DNS服务器搭建过程
在一个CentOS 7 系统中安装dns服务器,详细的步骤是什么呢?其实很简单,在CentOS 7上安装DNS服务器通常使用BIND(Berkeley Internet Name Domain)软件,这个软件在上一篇文章CentOS系统的DNS管理:超实用的几种DNS管理工具的安装和使用方法全解析 - 掘金 (juejin.cn)中已经提到过。以下是在CentOS 7上安装BIND DNS服务器的详细步骤:
更新系统的软件包:
sql
sudo yum update
安装BIND:
perl
sudo yum install bind bind-utils
配置BIND:
打开BIND的主配置文件:
bash
sudo nano /etc/named.conf
先来看一下,配置文件中的 options 部分,如下所示:
ini
options {
listen-on 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";
allow-query { any; };
recursion yes;
};
上面的配置文件是什么意思?包含了哪些信息呢?这是一个典型的 BIND (Berkeley Internet Name Domain) 配置文件的一部分。BIND 是一个常用的 DNS (Domain Name System) 服务器软件。
这个配置段指定了以下内容:
- listen-on port 53 { any; };: 指定 DNS 服务器监听的端口为 53,即 DNS 标准端口。any 表示允许任何 IP 地址连接到该端口。
- directory "/var/named";: 指定存储 BIND 相关文件的目录路径为 "/var/named"。这包括配置文件、区域文件和其他数据文件。
- dump-file "/var/named/data/cache_dump.db";: 指定缓存转储文件的路径。缓存转储文件用于保存 DNS 缓存的内容。
- statistics-file "/var/named/data/named_stats.txt";: 指定统计信息文件的路径。该文件记录了 BIND 服务器的运行统计信息,如查询数量、响应时间等。
- memstatistics-file "/var/named/data/named_mem_stats.txt";: 指定内存统计信息文件的路径。该文件记录了 BIND 服务器使用的内存统计信息。
- allow-query { any; };: 允许任何主机查询该 DNS 服务器。这样就允许任何主机向该服务器发送 DNS 查询请求。
- recursion yes;: 启用 DNS 递归查询功能。当 DNS 服务器无法直接解析请求时,它将通过迭代查询其他 DNS 服务器来获取答案。
这只是配置文件的一部分,一般情况下,这部分不需要动,更完整的配置文件通常还包括区域定义、转发设置和安全性配置等。
如果想创建一个自定义的域名,通过域名来访问主机,还需要创建一个新的区域配置文件,以便配置有关域名的信息。打开 named.conf 文件,并在 zone 部分添加以下行,注意是单独配置:
bash
zone "fanfu.gx" IN {
type master;
file "db.fanfu.gx";
};
上面的配置是BIND 配置文件的一部分,这里我指定了一个名为 "fanfu.gx" 的 DNS 域,并指定了该域的类型为 master,同时指定了该域对应的区域文件为 "db.fanfu.gx"。具体解读一下上面配置的含义:
- zone "fanfu.gx" IN {: 指定了该区域对应的 DNS 域名为 "fanfu.gx"。
- type master;: 指定了该域的类型为 master。这意味着该 DNS 服务器是 "fanfu.gx" 域的主服务器,并负责管理该域的所有资源记录。
- file "db.fanfu.gx";: 指定了该域对应的区域文件为 "db.fanfu.gx"。该文件包含了该域的所有资源记录,如主机名、IP 地址、邮件服务器等。
需要注意的是,区域文件通常包含多个资源记录,不同类型的资源记录有着不同的格式和语法。例如,A 记录用于将主机名映射到 IPv4 地址,MX 记录用于指定邮件服务器等等,后面在区域文件的配置中会再详细说明。
创建区域文件:
在上面的bind配置文件中,只是定义了域名,但是并没有建立起域名与主机的关系,这里创建一个区域配置文件,注意要给这个文件读、写、可执行三种权限。
bash
sudo touch /var/named/db.fanfu.gx sudo
chmod 777 /var/named/db.fanfu.gx
在db.fanfu.gx文件中添加类似以下内容的信息:
ini
$TTL 1h
@ IN SOA ns1.fanfu.gx. admin.fanfu.gx. (
2024012001 ; 序列号
3h ; 刷新时间
1h ; 重试时间
1w ; 过期时间
1h ) ; 默认 TTL
IN NS ns1.fanfu.gx. ; 指定主域名服务器
IN NS ns2.fanfu.gx. ; 指定备用域名服务器
@ IN A 192.168.35.99 ; 指定域名的 IPv4 地址
ns1 IN A 192.168.35.100 ; 主域名服务器的 IP 地址
ns2 IN A 192.168.35.100 ; 备用域名服务器的 IP 地址
上述配置内容的具体含义:
- SOA 记录以 @ 表示当前域名,指定了域名的授权来源和一些其他信息,如上指定了主域名服务器为 ns1.fanfu.gx,管理员邮箱为 admin.fanfu.gx,序列号为 2024012001,刷新时间为 3 小时,重试时间为 1 小时,过期时间为 1 周,TTL(Time To Live)为 1 小时。
- NS 记录指定了域名服务器的名称,如上指定了主域名服务器为 ns1.fanfu.gx,备用域名服务器为 ns2.fanfu.gx。
- A 记录指定了域名的 IPv4 地址,如上:指定了域名 fanfu.gx 的 IPv4 地址为 192.168.35.99。
- 还有两条记录指定了域名服务器的 IP 地址,这些记录分别指定了主域名服务器和备用域名服务器的 IPv4 地址为 192.168.35.100。实际来讲应该是两台DNS服务器,一主一备,这里我简化设置成了主备为同一个。
请根据您的网络配置和域名信息修改IP地址和域名。
防火墙要开启53端口,下面是开启53端口,重新启动防火墙以便新开53端口可以生效以及查询已开放端口的命令:
css
sudo firewall-cmd --zone=public --add-port=53/tcp --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --zone=public --list
接着,启动并启用BIND服务(第二条命令用于把bind服务设置成为开机启动):
bash
sudo systemctl start named sudo systemctl enable named
启动bind服务后,可以使用以下命令检查BIND服务的状态:
lua
sudo systemctl status named
确保服务已经启动并且没有错误。
在客户端配置DNS:
至此DNS服务端已经搭建好了,DNS服务器的地址是192.168.35.100;在上面的配置中,还指定了主机ip是192.168.35.99的域名是fanfu.gx;现在登陆到主机ip是192.168.35.99的服务器上,更新一下fanfu.gx主机的的DNS地址为192.168.35.100,具体来说就是,在/etc/resolv.conf 文件中添加DNS服务器的IP地址:
nameserver 192.168.35.100
配置完resolv.conf文件后,重启网络服务
systemctl restart NetworkManager
重启网络服务后,注意要检查一下resolv.conf文件的nameserver是否被重置了。如果重启后,发现resolv.conf中的配置被重置,那么在/etc/NetworkManager/NetworkManager.conf中增加下面的配置,然后再重启网络服务,就不会再重置了,这个配置的作用是:告诉NetworkManager不要自动配置DNS服务器。这意味着NetworkManager将不会自动从DHCP服务器或其他来源获取DNS服务器的信息,也不会自动更新/etc/resolv.conf文件。这通常用于在特定网络环境下手动配置DNS设置,或者如果用户希望完全由自己管理DNS设置而不希望NetworkManager进行干预。
ini
[main] dns=none
完成上述步骤后,执行下面的命令进行测试验证
ping fanfu.gx
可以看到,配置在CentOS 7系统的DNS服务器正在运行,为你提供域名解析服务。
设置互联网根域和设置DNS转发
CentOS系统搭建DNS服务器后,要不要设置互联网根域和设置DNS转发呢?想要回答这个问题,需要先来看一看什么是设置互联网根域和设置DNS转发以及作用。
设置互联网根域和设置DNS转发是两个不同的概念,它们分别对应着DNS服务器的两种重要功能。
- 设置互联网根域:在DNS服务器中设置互联网根域(通常表示为".")是指在DNS配置中指定根域的权威解析服务器。互联网根域包含了整个互联网的顶层域名信息,如.com、.org、.net等。通过设置互联网根域,DNS服务器可以进行全局的域名解析,确保能够正常解析并访问互联网上的各种网站和资源。
- 设置DNS转发:DNS转发是指当本地DNS服务器无法直接解析某个域名时,将DNS查询请求转发给其他上游DNS服务器进行解析的过程。通过设置DNS转发,本地DNS服务器可以向上游DNS服务器请求帮助来解析外部域名,从而提高解析效率和减轻自身的负担。
设置互联网根域和设置DNS转发的作用:
- 设置互联网根域:确保DNS服务器具有全局的域名解析能力,能够解析并访问互联网上的所有域名和资源。
- 设置DNS转发:提高本地DNS服务器的解析效率,加快对外部域名的解析速度,并减轻本地DNS服务器的负担。
综而言之,通过正确设置互联网根域和DNS转发,可以保证DNS服务器能够有效地解析互联网上的各种域名,并提供快速、可靠的域名解析服务。
由此可见,如果只是纯纯在局域网内玩一玩,那就没有必要设置互联网根域和设置DNS转发。
既然说到这里,还是要深入一点,继续分享一下在 CentOS 上搭建 DNS 服务器后,设置互联网根域和配置 DNS 转发的步骤:
- 设置互联网根域
编辑 named.conf 文件:打开 BIND 的主配置文件 named.conf,通常位于 /etc/named.conf。
bash
sudo vi /etc/named.conf
- 配置互联网根域
在 named.conf 中找到 options 部分,然后添加或确保以下行存在(在上面的配置中实际上已经配过了):
ini
options {
// ...
recursion yes;
allow-recursion { localhost; };
// ...
};
- allow-query { any; };: 允许任何主机查询该 DNS 服务器。这样就允许任何主机向该服务器发送 DNS 查询请求。
- recursion yes;: 启用 DNS 递归查询功能。当 DNS 服务器无法直接解析请求时,它将通过迭代查询其他 DNS 服务器来获取答案。
- 重启 BIND 服务
保存文件后,重启 BIND 服务以应用更改:
sudo systemctl restart named
- 配置 DNS 转发
编辑 named.conf 文件:打开 BIND 的主配置文件 named.conf,通常位于 /etc/named.conf。
bash
sudo vi /etc/named.conf
在 options 部分配置 DNS 转发:在 options 部分添加或确保以下行存在:
ini
options {
// ...
forwarders { 8.8.8.8; 8.8.4.4; }; // 使用 Google Public DNS 作为转发服务器,可以根据需要更改
forward only;
// ...
};
forwarders 行指定 DNS 转发服务器的 IP 地址,这里使用了 Google Public DNS 作为示例。你可以根据需要更改为其他 DNS 服务器的 IP 地址。
- 重启 BIND 服务:
保存文件后,重启 BIND 服务以应用更改:
sudo systemctl restart named
network如何配置DNS服务
在CentOS一个相对低的版本里,是用network来管理网络服务的,那么在 network 服务中配置 DNS 服务需要编辑相应的网络配置文件,通常是 ifcfg 文件,例如 ifcfg-ens33(具体文件名可能因网络接口而异)。
我使用的是CentOS 7 ,安装后的网络接口名为 ens33。请注意,这里使用的是静态 IP 地址和手动配置 DNS 的示例。如果你的网络是动态分配 IP 地址(DHCP),那么 DNS 配置通常会由 DHCP 服务器提供。
打开 ifcfg-ens33 文件进行编辑:
bash
sudo vi /etc/sysconfig/network-scripts/ifcfg-ens33
在文件中找到并编辑 DNS1 和 DNS2 行。添加或修改这些行以设置你的首选和备用 DNS 服务器的 IP 地址。示例:
ini
DNS1=8.8.8.8
DNS2=8.8.4.4
请将上述 IP 地址替换为你希望使用的 DNS 服务器的实际地址。
保存并关闭文件。
重启 network 服务以应用更改:
sudo systemctl restart network
以上步骤应该将指定的 DNS 服务器配置到你的网络接口。请记得根据实际情况修改 IP 地址,这里的示例使用的是 Google 的公共 DNS 服务器地址。如果你使用 DHCP,可能需要通过 DHCP 配置文件或网络管理器工具来配置 DNS。
写在最后
如果你觉得这篇文章对你有所帮助,不妨点击点赞按钮,让更多的人看到这篇优质的技术分享。同时,别忘了将这篇文章收藏起来,以备日后查阅。这样,你就能随时回顾和复习文章中的重要知识点,确保你的技术水平始终保持在最高水平。