admin管理员组文章数量:1530308
Linux下内网DNS服务器搭建及使用
DNS 概念
FQDN:完全限定域名,即每个域在全球唯一,域不是域名,google 是域,www.google 是域名。
域可以分为根域(.)和顶级域(TLD)
顶级域又可以分为三类:
1. 通用顶级域( 商业机构, 非营利性组织, 网络服务机构等)
2. 国家顶级域( 中国,.uk 英国,.us 美国,.jp 日本)
3. 反向域(基础建设顶级域,.arpa)
DNS 查询方式包含递归和迭代:
1. 递归是客户端发起一次请求给 DNS 服务器,通过多次查找返回正确解析。
2. 迭代是发出多次请求查询不同的 DNS 服务器。
解析方式包含正向解析和反向解析:正向解析指代将 FQDN 转换成 IP,反向则相反。
一般 DNS 的服务器类型包含:主从 DNS 服务器,缓存服务器,转发服务器。
主从好理解,就是从自动更新同步主的配置,作为 backup 存在。
缓存的服务器作用在于使用递归查询,将查询到的结果返回客户端,并缓存查询的结果。
转发服务器作用在于当发现查询不是本机的时候则将请求转发出去。
DNS 监听 TCP 和 UDP 都是 53 端口。
以下是一次完整的请求大致过程:
从客户机到服务器之前采用得是递归查询,而服务器之间则是采用迭代查询。
DNS 记录类型:DNS 域名数据库由资源记录和区文件指令组成。
SOA 记录:起始授权机构记录,SOA 备注说明了众多 NS(name server)记录中谁是主名称服务器,不参与功能,但是不能缺少。
NS 记录:域授权记录,当请求到达根域的时候,通过 NS 记录找到对应的域。
A 记录:当通过 NS 记录到达域以后,比如访问 www.baidu,通过 NS 我们找到了 baidu,此时就需要通过 A 记录找到 www。
MX:将该域下的所有邮件服务器地址指向邮件服务器。
AAAA 记录:A 记录处理 IPV4,AAAA 处理 IPV6。
PTR 记录:反向解析,将 IP 解析成域名。
CNAME:别名记录,允许多个名字映射到另外一个域名。比如我们 ping 百度的时候可以发现返回其实是 www.a.shifen 这个域名返回。所有 www.baidu 其实是个别名。
搭建单台 DNS
我们这里准备了三台虚拟机:
IP | 系统 | 说明 |
192.168.20.219 | CentOS Linux release 8.2 | DNS主服务器,主机名:MG-SERVER01 |
192.168.20.218 | CentOS Linux release 8.2 | DNS从服务器,主机名:MG-SERVER02 |
192.168.20.225 | CentOS Linux release 8.2 | 客户机,主机名:JP-HOST01 |
1. DNS 服务器安装 bind 服务:
yum -y install bind-utils bind bind-devel bind-libs
2. 配置主配置文件:/etc/named.conf
options {
listen-on port 53 { any; };
// listen-on port 53 { 127.0.0.1; 192.168.20.219; };
listen-on-v6 port 53 { ::1; };
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; };
allow-transfer {
192.168.20.218;};
#允许192.168.20.218即slave抓取dns信息
recursion yes;
dnssec-enable yes;
dnssec-validation yes;
bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
forwarders { 114.114.114.114;8.8.8.8; };
};
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";
最终内容如下,红色部分为我们修改的。
3. 追加域名解析入口配置:/etc/named.rfc1912.zones
zone "test" IN { # 测试用的域是 test
type master;
file "test.zone"; # 配置文件为 test.zone,该文件目录为 /var/named/ 下
};
4. 配置单独的解析文件:
/var/named/
cp named.localhost test.zone
chown named.named test.zone
修改配置:test.zone
$TTL 1D ;TTL 修改配置生效时间,默认为一天
@ IN SOA @ rname.invalid. (
0 ; serial,配置编号,每次改完配置 +1,这样从服务器就知道更新配置
1D ; refresh,从服务器刷新时间,默认一天刷新一次
1H ; retry,如果刷新失败,默认1小时重试一次
1W ; expire,缓存过期时间,一周
3H ) ; minimum
NS @
A 127.0.0.1
AAAA ::1
gitlab IN A 192.168.20.221
我们新加了个 gitlab.test 的 A 记录。
4. 启动服务测试:
systemctl start named
systemctl enable named
查看端口:
netstat -tlunp | grep 53
我们看到除了服务本身的 53 端口外,还监听了 953,这是 dns 服务的一个插件,现在我们先不管。
本机测试解析:
dig @127.0.0.1 gitlab.test
另外介绍两种检查配置的方法:
# 检查主配置
named-checkconf /etc/named.conf
# 检查 zone 配置
named-checkzone test /var/named/test.zone
结果如下:
[root@MG-SERVER01 ~]# named-checkzone test /var/named/test.zone
zone test/IN: loaded serial 0
OK
我们在客户端修改 DNS 配置测试,修改网卡 DNS 配置重启网卡:
方法:nmcli c reload +网卡名
例:nmcli c reload ens192
如果不行,可尝试以下命令
# 重载所有ifcfg或route到connection(不会立即生效)
nmcli c reload ifcfg-xxx
# 重载指定ifcfg或route到connection(不会立即生效)
nmcli c load /etc/sysconfig/network-scripts/ifcfg-ethX
nmcli c load /etc/sysconfig/network-scripts/route-ethX
# 立即生效connection,有3种方法
nmcli c up ethX
nmcli d reapply ethX
nmcli d connect ethX
主从 DNS 服务搭建
1. 主从 DNS 的搭建开始的时候其实是和单机搭建一样的,我们修改主服务器的配置文件:/etc/named.rfc1912.zones
将我们之前的配置进行修改:
zone "test" IN { # 测试用的域是 test
type master;
file "test.zone"; # 配置文件为 test.zone,该文件目录为 /var/named/ 下
allow-update { 192.168.20.218; };
allow-transfer { 192.168.20.218; }; # 允许同步DNS的辅助服务器IP
also-notify { 192.168.20.218; };
notify yes; # 启用变更通告,当主文件变更,通知从进行比较同步
};
红色部分是我们新加的,并指定了从的地址,重启服务
systemctl restart named
2. 从服务器也安装 bind 并将 /etc/named.conf 配置拷贝过来。
接着也是配置:/etc/named.rfc1912.zones,此时就能体现主从的不同:
zone "test" IN {
type slave;
file "slaves/test.zone";
masters { 192.168.20.219; }; # 指定主服务器的 IP
masterfile-format text; # 指定区域文件的格式为text,不指定有可能会为乱码
};
我们不需要再去配置 test.zone 文件,因为我们需要去主同步。所有直接启动从的 dns 服务。
systemctl start named
systemctl enable named
重启成功后我们会发现,在从服务器的 /var/named/slaves 目录下,test.zone 已经同步成功。
3. 修改主配置测试同步情况:
我们修改主服务器的 test.zone,新加解析的同时,修改配置编号,让从能够探测到变化。
此时我们重启主服务器,会发现从服务器就能够同步成功。
顺便值得一提的是,我这里使用 reload named 服务并没有使配置生效。
小结
值得一提的是,我们在域名解析过程中,还会遇到某些特殊情况:
1. @ 可以引用当区域名字,比如直接访问 baidu 就是这样的解析
2. 同一名字通过不同的名字定义多条记录,此时 DNS 会轮询响应。
3. 同一值可以多个名字。
4. * 泛域名解析,比如配置 *.baidu 指向某个 IP,那么如果你访问 a.baidu 这种没有配置的会默认走这个配置。
版权声明:本文标题:Linux下内网DNS服务器搭建及使用 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1726531952a1074244.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论