想在局域网弄一个dns解析服务器,我看了dnsmasq和bind,最终打算用bind搭建。
首先,需要伯克利大学互联网域名工具(Berkeley Internet Name Domain),简称BIND,可以使用yum或rpm安装。
- BIND 简介:全称为Berkeley Internet Name Domain(伯克利因特网名称域系统).BIND 主要有三个版本:BIND4、BIND8、BIND9.
- BIND8 融合了许多提高效率、稳定性和安全性的技术,而BIND9 增加了一些超前的理念:IPv6支持、密钥加密、多处理器支持、线程安全操作、增量区传送等等.
一、安装
yum -y install bind bind-chroot bind-utils
bind
---> 该包为DNS服务的主程序包
bind-utils
---> 该包为客户端工具,默认安装,用于搜索余名指令
bind-chroot
---> 该包提高安全性
bind-chroot
是bind的一个功能包,使bind可以在一个chroot的模式下运行.
也就是说,bind运行时的/(根)目录,并不是系统真正的/(根)目录,
只是系统中的一个子目录.这样做的目的是为了提高安全性.
因为在chroot模式下,bind只可以方位这个子目录的范围.
而不能进入这个子目录外其他的地方.
二、根目录挂载
mount --bind /var/named /var/named/chroot/var/named
- 修改/var/named/chroot/下的文件的优点很突出:如果umount后,原本非/var/named/chroot/下的文件不发生改变(无论你在chroot/下的文件中做什么),安全性非常好。所以,我们在学习配置过程中是可以忽略这部分知识的,等到配置过程都掌握后,在生产系统的配置过程中,一定是配置chroot/下的文件,也就是说,生产系统中下面的操作过程是针对chroot/下的对应文件,这点一定要注意。
三、修改配置
(1)named.conf
vim /etc/named.conf # options修改如下
options {
listen-on port 53 { any; }; #监听地址,和端口 IPV4
listen-on-v6 port 53 { none; }; #监听地址,和端口 IPV6,这里不使用ipv6,若启用可改为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"; #数据存放目录
recursing-file "/var/named/data/named.recursing";
secroots-file "/var/named/data/named.secroots";
allow-query { any; }; #允许解析的IP地址
recursion yes; # 开启递归查询
dnssec-enable yes; #开启加密
dnssec-validation yes; #在递归查询服务器上开启DNSSEC验证
/* Path to ISC DLV key */
bindkeys-file "/etc/named.root.key"; # isc dlv key 的地址
managed-keys-directory "/var/named/dynamic"; #key的保存目录
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
};
(2)named.rfc1912.zones
vim /etc/named.rfc1912.zones # 增加如下内容
zone "luqin.com" IN { # 指定区域名为luqin.com
type master; # 指定工作模式 为主dns服务器
file "luqin.com.zone"; # 指定配置文件为 luqin.com.zone
};
- 我希望的服务器使用luqin.com这个域名的zone文件
- 这个luqin.com.zone就是bind需要的zone文件,下面要配置这个文件。
cp -a /var/named/named.localhost /var/named/luqin.com.zone
# 在拷贝配置文件的时候,尽量使用-a选项 (拷贝所有属性)
vim /var/named/luqin.com.zone
$TTL 1D ;设置有效地址解析记录的默认缓存时间,默认为1天也就是1D。
@ IN SOA @ rname.invalid. ( ;域名 IN SOA 域 以.结尾
0 ; serial 版本号
1D ; refresh 从服务器的更新频率 1 day
1H ; retry 从服务器更新失败的重试间隔 1 hour
1W ; expire 从服务器不能更新时的失效时间 1 week
3H ) ; minimum 查询不到时的失效时间 3 hour
NS @ ; 设置 dns 服务器的域名
A 127.0.0.1 ; 设置 dns 服务器的 ip 地址
AAAA ::1 ; 设置域名服务器的A记录,地址为ipv6的地址。
www IN A 172.17.0.3 ; 把FQDN(完全合格域名标识)映射到IP地址
- zone文件的定义别名cname命令
www2.****.cn. CNAME www.****.cn.
# 定义别名www.****.cn
的别名为www2.****.cn
四、启动与测试
(1)启动
systemctl start named
# 检测是否启动成功
[root@localhost ~]# ps -ef | grep named
named 2461 1 0 14:44 ? 00:00:00 /usr/sbin/named -u named -c /etc/named.conf
root 2567 1578 0 14:59 pts/0 00:00:00 grep --color=auto named
(2)测试
# 配置dns
vim /etc/resolv.conf # 增加下面一行
nameserver 127.0.0.1 # 如果不是本机,将服务器ip替换127.0.0.1
# 使用检测host、dig验证dns配置
host www.luqin.com
dig www.luqin.com
ping www.luqin.com
五、dnsmasq的使用
1.安装dnsmasq
yum install -y dnsmasq
2.配置配置文件vim /etc/dnsmasq.conf
resolv-file=/etc/resolv.dnsmasq.conf
strict-order #dnsmasq会从resolv.dnsmasq.conf这个文件中找上游dns服务器。
listen-address=127.0.0.1 #让DNS只对本机有效,如果是自己所在的局域网,那就再加上自己的内网ip,比如listen-address=192.168.1.6,127.0.0.1
vim /etc/resolv.conf 设置成 nameserver 127.0.0.1
vim /etc/resolv.dnsmasq.conf nameserver 8.8.8.8 nameserver 115.115.115.115
vim /etc/dnsmasq.conf 增加addn-hosts=/etc/dnsmasq.hosts
cp /etc/hosts /etc/dnsmasq.hosts 把/etc/hosts拷贝过来
3.配置需要解析的域名
vim /etc/dnsmasq.hosts 添加 ip 域名
192.168.1.7 nexus.szhmxxkj.com
4.启动服务
service dnsmasq start
5.测试本地能否解析域名
ping nexus.szhmxxkj.com
ping baidu.com
6.关闭防火墙,或者开放53端口,设置其他电脑的dns服务器为dnsmasq的局域网ip
service iptables stop 建议关闭防火墙,开放了防火墙端口有时无法解析域名
7.设置开机自启
chkconfig dnsmasq on
chkconfig iptables off 关闭防火墙的开机自启
8. 重新启动了网卡,会导致本地/etc/resolv.conf文件更改,写入网关ip,导致dns服务无法ping通自定义域名
将本地dns服务器的网关改为该地址