[喵咪开源软件推荐(5)]开源DNS服务-bind

[喵咪开源软件推荐(5)]开源DNS服务-bind

哈喽大家好呀!~~ 今天又为大家带来了一个有趣的东西就是DNS服务器,稍微了解网络的童鞋都知道我们在使用域名访问一个网站的时候是通过公共DNS服务器解析到IP地址的,比如谷歌的8.8.8.8 比如 114.114.114.114 都是大家耳熟能详的DNS IP 地址, 那么我们在开发中DNS有什么用呢?怎么大家一个DNS服务呢?就是我们今天博文的主要内容了,话不多说让我们来对DNS一探究竟吧!

附上:

喵了个咪的博客:w-blog.cn

1.DNS是什么

DNS协议运行在UDP协议之上,使用端口号53.有自己域名或使用过域名解析的童鞋应该常常接触到如下解析方式:

A记录:将域名指向一个IPv4地址(例如:10.10.10.10),需要增加A记录
CNAME记录:如果将域名指向一个域名,实现与被指向域名相同的访问效果,需要增加CNAME记录
MX记录:建立电子邮箱服务,将指向邮件服务器地址,需要设置MX记录
NS记录:域名解析服务器记录,如果要将子域名指定某个域名服务器来解析,需要设置NS记录
SRV记录:记录了哪台计算机提供了哪个服务。格式为:服务的名字.协议的类型(例如:_example-server._tcp)

这种域名的解析方式就是对DNS进行的配置,所有的域名先回经过DNS服务器获取到这个域名需要做什么(比如指向到IP 192.168.0.1 我们称之为寻址) 或者是其他的寻址方式

一般DNS是在我们网络配置中可以配置一个主DNS一个备DNS,一般都有默认的DNS配置,我们也可以使用自己的DNS服务,拥有自己的DNS服务就相当于拥有了所有的域名你可以吧任何域名指导不同的地方,比如对baidu.com指向到你自己的服务器上面,访问baidu.com就是访问你自己的服务器(前提是必须要配置使用你的DNS服务才会有效)

2.DNS可以运用到那些场景?

2.1 环境迁移

为什么要写这篇文章主要也是在工作中有使用到自建DNS服务得到的启发向分享给大家,场景是这样的

运营服务器需要迁移,方案是先准备一个一比一的环境验证没问题了迁移数据改变域名指向,这里面就遇到一个问题了,服务器准备好了域名怎么配置呢?当然不能使用运营的域名第一版思路是在所有的域名前面加一级 RES.xxxx.com 这样,这样虽然能够解决问题但是会在面临两个问题,

  1. 如果使用RES域名那么在迁移的时候又要进行大量的配置文件修改 没法保证验证完成后迁移时最小改动
  2. 如果使用RES域名 那么端(APP端和WEB端) 都要改配置文件代码 —我们公司光APP就块10多个还要打包ROM

就上面这个问题看来成本很高,并且这个成本付出了价值之存在于对新的环境进行验证而已后续这些配置文件也好打包好的端也好都没有价值,并且还有重复的配置工作量

在这个前提上在想什么样子是最好的呢?首先端不用改,服务器的配置最好一步到位,但是我们又只有一套xxxx.com 域名,那么如果有两套不就好了吗? 如果正常使用是指向到运营的服务,但是在特定网络下比如一个WIFI下就可以指向到新的服务器那不就是两全其美了吗?

这个时候就需要自建DNS来对xxxx.com域名解析到新的服务器环境,然后让访问的时候DNS解析找自建的DNS解析就可以达到端不变还是请求xxxx.com服务器也不变还是监听xxxx.com,然后使用自建DNS解析的网络环境就可以访问到新的环境了

2.2 测试临时解析

很多时候域名都会被统一的管理起来,一般开发人员很难直接使用域名解析服务,一般是交给运维同事,这个时候就出现了一个问题,新的一个程序是新的域名需要做解析,给了运维一个解析的IP发现解析后用不了,然后来回调了很多次花了很多时间(正常的域名解析都要2-10分钟才能生效,频繁的解析可能会到2个小时),如果有自己的DNS就可以每个人都能去进行DNS解析又不影响到外面正在使用的客户,当解析完成后测试好了在交给运维同事会更好

2.3 批量hosts

有的时候我们需要更改一下本机的hosts来对一些域名更换指向,比如科学上谷歌等之类的,如果每个人都需要去搞hosts就太麻烦了,可以使用自建DNS服务来统一更改

3.使用bind搭建自己的DNS服务器

有了上面的结论笔者就开始找开源的DNS服务软件,最终是找到了bind这个相对比较简单的LIUNX DNS服务,我们来看看怎么使用这套服务

DNS服务器IP地址:192.168.1.20 服务器版本:centos6.8 64位

3.1 安装bind搭建解析

  1. 安装bind:
yum -y install bind*
  1. 修改配置文件
cp /etc/named.conf /etc/named.conf.bak
vi /etc/named.conf  

修改为如下:

options {
        listen-on port 53 { any; }; // 监听在主机的53端口上。any代表监听所有的主机
        directory       "/var/named"; // 如果此档案底下有规范到正反解的zone file 档名时,该档名预设应该放置在哪个目录底下
         // 下面三项是服务的相关统计信息
        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; }; // 谁可以对我的DNS服务器提出查询请求。any代表任何人
        recursion yes;
        dnssec-enable yes;
        dnssec-validation yes;
        dnssec-lookaside auto;
        forwarders { // 指定上层DNS服务器
           8.8.8.8;
        };
        bindkeys-file "/etc/named.iscdlv.key";
        managed-keys-directory "/var/named/dynamic";
};
logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};
zone "." IN {
        type hint;
        file "named.ca";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
  1. 自定义域名解析
vi /etc/named.rfc1912.zones
zone "baidu.com" IN {    // 定义要解析主域名
        type master;
        file "baidu.com.zone";  // 具体相关解析的配置文件保存在 /var/named/baidu.com.zone 文件中
};
  1. 自定义baidu.com.zone文件对百度进行解析
vi /var/named/baidu.com.zone
# 内容如下
$TTL 86400
@       IN SOA          ns.baidu.com. root (
                                        1       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        0 )     ; minimum  

@       IN      NS      ns.baidu.com.
ns      IN      A       192.168.1.20
www     IN      A       192.168.1.20
bbs     IN      A       192.168.1.20

其中 ns.baidu.com 代表当前dns服务器名称。所以 ns.baidu.com 一定要解析到自己本身

  1. 修改权限
chown root:named  /var/named/baidu.com.zone
  1. 重启服务
service named restart

追加解析后注意也要重启服务,遇到如下异常执行命令yum install mysql安装mysql即可

Starting named: /usr/sbin/named-sdb: error while loading shared libraries: libmysqlclient.so.16: cannot open shared object file: No such file or directory
  1. 防火墙开发端口
vi /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 53 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 53 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 953 -j ACCEPT

修改DNS服务指向测试解析情况

当我们准备好服务之后,这个时候我们服务器还是在使用默认的DNS服务器进行解析这个时候我们需要配置有限使用本地的DNS解析服务来进行解析

# 注意:云主机需要注释掉**options timeout:1 attempts:1 rotate single-request-reopen
vim /etc/resolv.conf
nameserver 192.168.1.20

然后使用ping baidu.com 就指向到了192.168.1.20了

[root@ ~]# ping www.baidu.com
PING www.baidu.com (192.168.1.20) 56(84) bytes of data.
64 bytes from (192.168.1.20): icmp_seq=1 ttl=64 time=0.017 ms
64 bytes from (192.168.1.20): icmp_seq=2 ttl=64 time=0.034 ms
64 bytes from (192.168.1.20): icmp_seq=3 ttl=64 time=0.033 ms

4 总结

使用自建DNS可以对任何的域名进行指向可以解决一些特定场景的特定问题,在这里分享给大家,如果大家喜欢可以继续关注喵咪的博客,后续会带来更多有趣的技术文章…

注:笔者能力有限有说的不对的地方希望大家能够指出,也希望多多交流!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏马涛涛的专栏

使用leancloud给简历加数据库,实现留言功能

数据必须存在服务器上,这样任何设备访问服务器都可以得到数据,如果存在客户端的本地,那么其他客户端设备无法读取到.所以数据必须存储在服务器的数据库上

25350
来自专栏编程之旅

HTTP API 设计指南HTTP API 设计指南

这篇指南介绍描述了 HTTP+JSON API 的一种设计模式,最初摘录整理自 Heroku 平台的 API 设计指引 Heroku 平台 API 指引。

12920
来自专栏后端技术探索

[干货实战]为最佳性能调优nginx

通常来说,一个优化良好的 Nginx Linux 服务器可以达到 500,000 – 600,000 次/秒 的请求处理性能,然而我的 Nginx 服务器可以稳...

12820
来自专栏FreeBuf

如何通过Emond在macOS上实现持久化访问

在这篇文章中,我们会介绍如何通过emond在macOS上实现持久化访问。根据苹果公司的说法,事件监视进程(emond)会“接受来自各种服务的事件,通过一个简单的...

21190
来自专栏晨星先生的自留地

django(1)初次见面-我叫姜哥

15850
来自专栏FreeBuf

挖洞经验 | 一个价值$3133.7美金的Google漏洞

在对Google的安全研究中,由于其云服务平台“cloud.google.com” 具备多种功能,感觉有点意思,所以某天我决定来深入测试一下它。

16750
来自专栏沃趣科技

ASM 翻译系列第二弹:ASM 12C 版本新特性

原作者:Bane Radulovic 译者: 邱大龙 审核: 魏兴华 随着Oracle 12c的发布,也就意味着全新版本的ASM面世了。已知的重大新...

38140
来自专栏LanceToBigData

Maven(六)之依赖管理

前面讲了maven一些关于Maven的简单知识,今天我给大家分享一些Maven的依赖管理。我相信用过maven的人都知道,它很重要的功能就是通过依赖来添加jar...

21180
来自专栏java一日一条

Maven 扫盲(上)

写这个maven的入门篇是因为之前在一个开发者会的动手实验中发现挺多人对于maven不是那么了解,所以就有了这个想法。这个入门篇分上下两篇。本文着重动手,用ma...

8410
来自专栏生信技能树

linux系统环境变量一文就够

Linux是一个多用户的操作系统。每个用户登录系统后,都会有一个专用的运行环境。 通常每个用户默认的环境都是相同的,这个默认环境实际上就是一组环境变量的定义。 ...

44150

扫码关注云+社区

领取腾讯云代金券