Joe Shen
All Dreams, All Will Come True.
【学习笔记】实战生产环境搭建 ( D ) NS 域名解析服务器
首先科普一下 DNS 服务器 和 NS 服务器:其中 DNS 服务器是指域名解析服务器,例如 Google 的 8.8.8.8 公共服务;而 NS 服务器指的是一个域名的权威解析服务器,是一所管理域名的权威解析记录服务器,对该域名的解析呈权威解析,不会在 nslookup 中出现 非权威应答 的提示;以下是向公共 DNS 服务器发出请求的回应和向一个域名的权威 NS 发出请求的回应对比图
实战生产环境搭建一台域名 NS 解析服务器
环境 腾讯云 Linux CentOS 7
需要提前安装的依赖或工具 vim ll cat
命令 yum -y install vim ll cat
我选用开源的 bind 作为服务器软件,首先使用yum包管理器安装
说明 bind 的进程和系统管理为 named
命令 yum -y install bind*
出现 Complete! 为安装完成
进入 bind 的配置文件目录 /etc 后查看配置文件是否正常创建
命令 cd /etc/ && ll | grep named
出现下图反馈即为正常
然后编辑主配置文件
命令 vim named.conf
成功进入查看模式后按下键盘 a 打开编辑模式
因为我是要在实战生产环境使用 NS 域名解析服务器,所以我们需要让所有主机都可以向服务器发起查询请求,所以将下图三个地方改为 any
还有就是,我的服务器是只负责我自己的域名的,没必要让别人查询别的域名,可以关闭递归查询请求,不然别人可以向你的服务器查询不是你的服务器负责解析的域名,服务器会自动向最高层服务器(根服务器)转发请求,造成服务器带宽浪费,所以将此处改为 no
按下键盘 esc 键退出编辑模式,在查看模式下检查配置文件,应为下图所示的样子
确认无误后,在英文半角键盘下打出冒号输入 wq 保存并退出 vim
然后编辑区域配置文件,将你的域名添加入 bind 的解析管理
命令 vim named.rfc1912.zones
将操作光标移动到最下面一行,然后按下 o 新起一行并同时进入编辑模式
我要解析的域名是我用来测试和玩的域名 ceice.top
输入如下内容
其中 type master; 意为本服务器为这个域名的主解析服务器,其中 file “ceice.top.zone”; 意为解析区域文件的文件名为 ceice.top.zone 文件,其中 allow-update { none; }; 意为禁止更新该域名的解析文件(不允许其他主机更新,自己登陆进服务器是可以的)如果你有集群需要互相同步或者指定主机允许可以填写目标的 ip 允许对其更新按下键盘 esc 键退出编辑模式,在查看模式下检查配置文件,确认无误后,在英文半角键盘下打出冒号输入 wq 保存并退出 vim
然后就该创建域名的解析区域文件了,我使用的 bind 默认区域文件位于 /var/named
进入该路径下并查看该路径下文件
命令 cd /var/named/ && ll
默认状态下应为这样子
将模板配置文件 named.empty 复制一份出来并且命名为我要用的解析区域文件 ceice.top.zone 文件,复制完后检查是否正常有这个文件和文件内容
命令 cp named.empty ceice.top.zone && ll | grep ceice.top.zone && cat ceice.top.zone
如果为下图所示的样子,说明没问题
编辑 ceice.top.zone 文件,写入我们的域名解析数据,其中既然是我们自己的服务器,就不用像域名注册商的公共服务器一样限制在公共 dns 服务器十分钟或半个小时才更新一次(存活周期)既然是自己的服务器,可以全部设定为 1 秒(谨慎!如果你的域名访问量较大,设置为 1 秒会导致服务器硬件和带宽负载极高)
命令 vim ceice.top.zone
将其写入成这样
其中所有的 1 均表示存活周期 1 秒,在公共 dns 服务器中只能存活 1 秒,基本上等于说每时每刻都要重新向你的服务器请求最新的解析,这就是为什么谨慎设置成 1 秒这个值,因为如果你的域名访问量较大,设置为 1 秒,世界上那么多公共 dns 服务器疯狂的更新,会导致服务器硬件和带宽负载极高
其中第二行 @ IN SOA ceice.top. stscutest.yeah.net. ( 中的 stscutest.yeah.net. 表示域名管理员邮箱,建议与域名注册商处申报的邮箱一致
下面的就不用说了吧,就是域名的解析记录,在域名注册商添加解析和这一样
按下键盘 esc 键退出编辑模式,在查看模式下检查配置文件,确认无误后,在英文半角键盘下打出冒号输入 wq 保存并退出 vim
bind 的进程和系统名称为 named
而其系统管理名称为 named.service
我们启动 bind 试试看
命令 systemctl start named.service
如果出现下图一样没有反馈任何信息,有80%说明是成功了,接下来查看 status 看啊可能是不是真的成功了
命令 systemctl status named.service
如出现下图反馈,有绿色的 Active: active (running) 并且没有红色的警告或者报错,说明配置文件没问题,并且 bind 也在正常运行了
接下来,区域名注册商那里把整个域名的 NS 解析服务器改为自己的服务器(注意:需要先把自己的这台 NS 服务器自己解析自己)
可以看到,默认的 NS 解析服务器是阿里云默认免费的,去添加自己的 NS 解析服务器
在 自定义 DNS Host 处添加自己的 NS 解析服务器,注意必须要大于等于两个解析记录,因为国际域名要求每个域名至少两个 NS 解析服务器,当然,可以给自己的 NS 解析服务器创建两个不同解析记录,都解析到同一个服务器上,也是可以的,我就是这么做的,如图
添加完成后在 DNS 修改 处正式修改域名的 NS 解析服务器,修改完成后域名就正式自己的这台 NS 解析服务器负责解析了
在域名的 whois 数据查询页面也可以看见,已经由自己的 NS 解析服务器负责解析了,如图
刚刚我在写解析区域文件添加了如 ftp 和 ShangHai 的解析记录,我现在来试一下能否正常解析
会发现无法解析,如图
究其原因,在我研究了大半个小时之后发现,犯了一个最基础的错误我们常用的操作系统是 Windows 而我使用的服务器是 Linux 系的系统,两者对文件的权限管理完全不相同,也正是因为 Linux 系系统极其严格的权限和用户管理造成的安全性极高,在企业服务和极客中 Linux 的使用率远高于安全性低下且不便于快速管理的 Windows
来看一下刚刚写的解析区域文件的权限,如图
没错,就是因为一般使用 Windows 系统时的操作习惯,在刚刚写完的解析区域文件的时候没有正确的设置权限,现在的用户组是 root 用户是 root 并且权限还是 -rw-r—– 意为除了所属用户和所用户组外其他一切用户组和用户无任何权限
bind 没有读取这个文件的权限,自然就无法获取解析数据对外服务了,将解析区域文件的文件所属者改为 bind 安装时自动创建的运行用户 named
命令 chown -Rf root:named ceice.top.zone
操作结果如图
现在重启以下 bind 看看情况
命令 systemctl restart named.service
再去看看能否解析
正常解析了,至此,属于自己的 NS 解析服务器就完成了
那么现在再来试一试存活时间是否真的为 1 秒
添加一条 test 的 a 记录
在没有让 bind 重新读取配置文件的情况下,没有这个解析,如图
让 bind 重新读取配置文件
命令 systemctl reload named.service
立即生效了,如图
那我们删除掉这条解析并且让 bind 重新读取配置文件看看存活时间是否真的为 1 秒
成功!
至此,我属于自己的 NS 域名解析服务器就搭建完成了,并且还是实时快速更新解析记录的
完成!
若你觉得本文写得不错,或者是内容对你有帮助,欢迎点此跳转或点击下方的大拇指,赞助本站!谢谢啦 ~ pay service by www.alipay.com
参考链接
https://www.shentianshu.com/Services/Blog/info/1380.html
https://www.imooc.com/video/12646
https://www.bilibili.com/video/BV1GW411j7Ts?p=3&t=1051