自建DNS服务器
简介
它将域名和IP地址相互映射到一个分布式数据库,能够使人更方便地访问互联网。人们不需要去记住繁琐的ip地址,仅通过语义化的域名即可访问网络资源。
域名系统|DNS - 引自维基百科
DNS服务器|域名服务器 - 引自百度百科
安装
BIND是什么
BIND是一个应用程序,它允许你构建一个本地的DNS映射服务。它应用广泛,全球90%以上的DNS服务器都是由它驱动的。
伯克利互联网名称服务 (Berkeley Internet Name Daemon,简称 BIND) 是 DNS 协议的一个参考实现
引自ArchWiki
基于yum安装BIND
1 | # yum -y install bind* |
配置
假定你要在局域网中映射你的项目地址(192.168.1.100)到域名www.baichao.com
,并且你的DNS服务器所分配到的内网ip为(192.168.1.200)。
编辑named.conf文件
** named.conf
文件是BIND的主配置文件,位于/etc
目录下,备份后打开:**
1 | # cp /etc/named.conf /etc/named.conf.bak |
** 编辑为以下格式: **
1 | options { |
部分配置说明
- 区域文件类型 zone type
- hint 根域
- master 主域
- slave 从域
- forward 转发域
- {}内部必须包含空格,{string} 错误, { string } 正确
- logging
- 通道
- 消息级别
- critical
- error
- warning
- notice
- info
- debug [ level ]
- dynamic
- 消息级别
- 通道
编辑named.rfc1912.zones文件
** named.rfc1912.zones
文件用于域配置,位于/etc
目录下,备份后打开:**
1 | # cp /etc/named.rfc1912.zones /etc/named.rfc1912.zones.bak |
** 在文件结尾添加以下内容 **
1 | //定义要解析主域名(类似于根域配置) |
建立区域文件baichao.com.zone
** 此区域文件的文件名对应named.rfc1912.zones
文件中你要解析的域名,将此文件建立在/var/named
目录下,建立文件baichao.com.zone
: **
1 | # vim /var/named/baichao.com.zone |
** 将以下内容写入: **
1 | $TTL 86400 |
添加防火墙规则
但是这里需要跟大家报告的是,通常 DNS 查询的时候,是以 udp 这个较快速的数据传输协议来查询的, 但是万一没有办法查询到完整的信息时,就会再次的以 tcp 这个协定来重新查询的!所以启动 DNS 的 daemon (就是 named 啦) 时,会同时启动 tcp 及 udp 的 port 53 喔!所以,记得防火墙也要同时放行 tcp, udp port 53 呢!
** 开放53
、953
端口: **
1 | # iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 53 -j ACCEPT |
** 被映射到的服务地址也需要开放服务端口: **
1 | iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT |
启动与扩展
启动
** 启动服务: **
1 | # service named restart |
** 有时候会遇到启动失败的情况: **
1 | # service named restart |
** 此时并不会报出任何错误,你需要查看/var/log/message
文件,查找出详细的错误信息并纠正: **
1 | cat /var/log/message | grep named |
扩展
这里是题外话,想要科学上网的朋友,可以自建一个DNS服务器,映射到目标地址。