02实现正向主DNS服务器
实现正向主DNS服务器
- 正向则表示将域名解析成IP
- 管理和维护所负责解析的域内解析库的服务器
环境说明
| hostname | IP | service |
|---|---|---|
| dns-server | 10.0.0.103 | bind9 |
创建区域数据库
- 每个域名对应一个区域数据库
- 区域数据库 由众多资源记录(Resource Record, RR)组成
- 数据库名称没有要求,但为了区分 建议见名知意
查看区域数据库存放位置
# /etc/bind/named.conf
options {
directory "/var/cache/bind"; # 区域数据库应该存放的位置,centos默认为/var/named
...创建区域数据库
# CentOS
# 拷贝区域数据库模板文件(也可以直接创建)
[root@DNS ~]# cd /var/named/
[root@DNS named]# cp -a named.localhost xiangzheng.com.zone
# Ubuntu
#创建区域数据库(Ubuntu 以 bind 结尾会有着色功能)
root@dns-server:~# touch /var/cache/bind/xiangzheng.com.zone.bind更改区域数据库权限
- 每个Linux发行版的默认权限不一样,最好参考其他区域数据库的默认权限来进行配置,下面以Ubuntu举例
# 查看默认权限
root@dns-server:~# ll /var/cache/bind/
total 28
drwxrwxr-x 4 root bind 4096 Jul 5 16:13 ./
drwxr-xr-x 16 root root 4096 Jul 4 23:52 ../
drwxrwx--- 2 root bind 4096 Feb 28 2020 dynamic/
drwxrwx--- 2 root bind 4096 Feb 28 2020 dyndb-ldap/
-rw-r--r-- 1 bind bind 821 Jul 5 13:54 managed-keys.bind
-rw-r--r-- 1 bind bind 3041 Jul 5 13:54 managed-keys.bind.jnl
-rw-r--r-- 1 root root 267 Jul 5 16:10 xiangzheng.com.zone.bind
# 修改权限
root@dns-server:~# chown bind.bind /var/cache/bind/xiangzheng.com.zone.bind 配置基础区域数据库
root@dns-server:~# vim /var/cache/bind/xiangzheng.com.zone.bind
$TTL 600
@ IN SOA ns1 mail.xiangzheng.com. (
2015042201 ;
1H ;
10M ;
1D ;
12H ;
)
@ NS ns1
ns1 A 10.0.0.103修改主配置文件
Ubuntu
# 查看子配置文件位置
root@dns-server:~# cat /etc/bind/named.conf
...
include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones"; #写到这里
# 将配置写到子配置文件中
root@dns-server:~# vim /etc/bind/named.conf.default-zones
// prime the server with knowledge of the root servers
zone "." {
type hint;
file "/usr/share/dns/root.hints";
};
zone "xiangzheng.com" { #因为是域名,所以无需加www,www表示主机名
type master;
file "/var/cache/bind/xiangzheng.com.zone.bind";
};
// be authoritative for the localhost forward and reverse zones, and for
// broadcast zones as per RFC 1912
...CentOS
- /etc/named.conf
allow-transfer { none; }; # 安全加固,不允许任何人来抓取数据
zone "." IN {
type hint;
file "named.ca";
};
include "/etc/named.rfc1912.zones"; # 通常都是写到子配置文件中,便于管理↓
include "/etc/named.root.key";- /etc/named.rfc1912.zones
...
zone "xiangzheng.com" IN { # 域名,所以不用加www
type master;
file "xiangzheng.com.zone"; # 配置文件直接写相对路径即可,不用写绝对路径(相对于/var/named/)
};检查配置文件语法后启动DNS
# 检查配置文件语法
named-checkconf
# 检查区域数据库的语法,第一个xiangzheng.com表示在配置文件中定义的名称,第三段表示区域数据库文件路径
named-checkzone xiangzheng.com /var/cache/bind/xiangzheng.com.zone.bind
# 语法无误后 重启name服务
rndc reload测试
[root@client ~]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 10.0.0.103
[root@client ~]# ping ns1.xiangzheng.com
PING ns1.xiangzheng.com (10.0.0.103) 56(84) bytes of data.
64 bytes from 10.0.0.103 (10.0.0.103): icmp_seq=1 ttl=64 time=0.520 ms
[root@client ~]# dig ns1.xiangzheng.com
; <<>> DiG 9.11.36-RedHat-9.11.36-3.el8 <<>> ns1.xiangzheng.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 59413
#flags中的aa表示信息来自权威DNS服务器
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: 6f8ee524a76f31070100000062c40605d1daf16b0f690b20 (good)
;; QUESTION SECTION:
;ns1.xiangzheng.com. IN A #查询的问题,ns1.xiangzheng.com.对应的A记录是多少
;; ANSWER SECTION:
ns1.xiangzheng.com. 600 IN A 10.0.0.103 #查询的结果,ns1.xiangzheng.com.对应的A记录是10.0.0.103,TTL为600秒
;; Query time: 1 msec
;; SERVER: 10.0.0.103#53(10.0.0.103) #向哪个DNS服务器查询的
;; WHEN: Tue Jul 05 17:36:05 CST 2022
;; MSG SIZE rcvd: 91区域数据库添加其它记录
准备测试web
- 此处仅作演示,生产中页面应该都是统一的
[root@18 ~]# yum -y install nginx
[root@28 ~]# yum -y install nginx
[root@18 ~]# echo '10.0.0.18 page' > /usr/share/nginx/html/index.html
[root@28 ~]# echo '10.0.0.28 page' > /usr/share/nginx/html/index.html
[root@18 ~]# systemctl enable --now nginx
[root@28 ~]# systemctl enable --now nginxwww A 记录
目前情况
# 目前记录
root@dns-server:~# cat /var/cache/bind/xiangzheng.com.zone.bind
$TTL 600
@ IN SOA ns1 mail.xiangzheng.com. (
2015042201 ;
1H ;
10M ;
1D ;
12H ;
)
@ NS ns1
ns1 A 10.0.0.103
# 目前记录的解析情况
[root@client ~]# host www.xiangzheng.com
Host www.xiangzheng.com not found: 3(NXDOMAIN) #找不到,因为没有 www 记录
[root@client ~]# ping www.xiangzheng.com
ping: www.xiangzheng.com: Name or service not known #找不到,因为没有 www 记录
[root@client ~]# host ns1.xiangzheng.com #找得到,因为有 ns1 这个主机记录
ns1.xiangzheng.com has address 10.0.0.103
[root@client ~]# ping ns1.xiangzheng.com
PING ns1.xiangzheng.com (10.0.0.103) 56(84) bytes of data.
64 bytes from 10.0.0.103 (10.0.0.103): icmp_seq=1 ttl=64 time=0.484 ms #找得到,因为有 ns1 这个主机记录添加记录
# 添加 www 的 A 记录
root@dns-server:~# cat /var/cache/bind/xiangzheng.com.zone.bind
$TTL 600
@ IN SOA ns1 mail.xiangzheng.com. (
2015042201 ;
1H ;
10M ;
1D ;
12H ;
)
@ NS ns1
ns1 A 10.0.0.103
www A 10.0.0.18 #添加 www 记录
root@dns-server:~# named-checkzone xiangzheng.com /var/cache/bind/xiangzheng.com.zone.bind
zone xiangzheng.com/IN: loaded serial 2015042201
OK
root@dns-server:~# rndc reload
server reload successful测试
[root@client ~]# host www.xiangzheng.com
www.xiangzheng.com has address 10.0.0.18 #找得到,因为有 www 记录
[root@client ~]# ping www.xiangzheng.com
PING www.xiangzheng.com (10.0.0.18) 56(84) bytes of data. #找得到,因为有 www 记录* A 记录
- 泛域名解析
目前情况
# 目前区域数据得记录
root@dns-server:~# cat /var/cache/bind/xiangzheng.com.zone.bind
$TTL 600
@ IN SOA ns1 mail.xiangzheng.com. (
2015042201 ;
1H ;
10M ;
1D ;
12H ;
)
@ NS ns1
ns1 A 10.0.0.103
www A 10.0.0.18
[root@client ~]# host moewqomewqoewq.xiangzheng.com
Host moewqomewqoewq.xiangzheng.com not found: 3(NXDOMAIN) #找不到,因为没有 * 记录
[root@client ~]# ping dsaoewqo.xiangzheng.com
ping: dsaoewqo.xiangzheng.com: Name or service not known #找不到,因为没有 * 记录添加记录
# 添加 www 的 A 记录
root@dns-server:~# cat /var/cache/bind/xiangzheng.com.zone.bind
$TTL 600
@ IN SOA ns1 mail.xiangzheng.com. (
2015042201 ;
1H ;
10M ;
1D ;
12H ;
)
@ NS ns1
ns1 A 10.0.0.103
www A 10.0.0.18
* A 10.0.0.18 #添加 * 记录
root@dns-server:~# named-checkzone xiangzheng.com /var/cache/bind/xiangzheng.com.zone.bind
zone xiangzheng.com/IN: loaded serial 2015042201
OK
root@dns-server:~# rndc reload
server reload successful测试
[root@client ~]# host moewqomewqoewq.xiangzheng.com
moewqomewqoewq.xiangzheng.com has address 10.0.0.18 #找得到,因为有 * 记录
[root@client ~]# ping dsaoewqo.xiangzheng.com
PING dsaoewqo.xiangzheng.com (10.0.0.18) 56(84) bytes of data. #找得到,因为有 * 记录@ A 记录
- 泛域名解析
目前情况
# 目前区域数据得记录
root@dns-server:~# cat /var/cache/bind/xiangzheng.com.zone.bind
$TTL 600
@ IN SOA ns1 mail.xiangzheng.com. (
2015042201 ;
1H ;
10M ;
1D ;
12H ;
)
@ NS ns1
ns1 A 10.0.0.103
www A 10.0.0.18
* A 10.0.0.18
[root@client ~]# host xiangzheng.com
#无内容,因为没有 @ 记录
[root@client ~]# ping xiangzheng.com
ping: xiangzheng.com: Name or service not known #找不到,因为没有 @ 记录添加记录
# 添加 www 的 A 记录
root@dns-server:~# cat /var/cache/bind/xiangzheng.com.zone.bind
$TTL 600
@ IN SOA ns1 mail.xiangzheng.com. (
2015042201 ;
1H ;
10M ;
1D ;
12H ;
)
@ NS ns1
ns1 A 10.0.0.103
www A 10.0.0.18
* A 10.0.0.18
@ A 10.0.0.18 #添加 @ 记录
root@dns-server:~# named-checkzone xiangzheng.com /var/cache/bind/xiangzheng.com.zone.bind
zone xiangzheng.com/IN: loaded serial 2015042201
OK
root@dns-server:~# rndc reload
server reload successful测试
[root@client ~]# host xiangzheng.com
xiangzheng.com has address 10.0.0.18 #找得到,因为有 @ 记录
[root@client ~]# ping xiangzheng.com
PING xiangzheng.com (10.0.0.18) 56(84) bytes of data. #找得到,因为有 @ 记录CNAME
添加记录
# 修改区域数据库文件
root@dns-server:~# vim /var/cache/bind/xiangzheng.com.zone.bind
$TTL 600
@ IN SOA ns1 mail.xiangzheng.com. (
2015042201 ;
1H ;
10M ;
1D ;
12H ;
)
@ NS ns1
ns1 A 10.0.0.103
www CNAME websrv #添加CNAME
#添加下面两行以实现泛域名解析是错误得,只能将上面得 www 改为 * 或 @
#* CNAME websrv
#@ CNAME websrv
websrv A 10.0.0.18 #指向第一个webserver
websrv A 10.0.0.28 #指向第二个webserver
#检查区域数据库的语法
named-checkzone xiangzheng.com /var/cache/bind/xiangzheng.com.zone.bind
#语法无误后 重启name服务
rndc reload测试
#配置DNS
[root@client ~]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 10.0.0.103
#可以实现一定程度的负载均衡
[root@client ~]]# curl www.xiangzheng.com
10.0.0.18 page
[root@client ~]# curl www.xiangzheng.com
10.0.0.28 page
[root@client ~]# curl www.xiangzheng.com
10.0.0.18 page
#使用 ping 测试
[root@client ~]# ping www.xiangzheng.com
PING websrv.xiangzheng.com (10.0.0.28) 56(84) bytes of data.
...
[root@client ~]# ping www.xiangzheng.com
PING websrv.xiangzheng.com (10.0.0.28) 56(84) bytes of data.
...
[root@client ~]# ping www.xiangzheng.com
PING websrv.xiangzheng.com (10.0.0.18) 56(84) bytes of data.
...
#查看对应的DNS解析记录
[root@client ~]# host www.xiangzheng.com
www.xiangzheng.com is an alias for websrv.xiangzheng.com.
websrv.xiangzheng.com has address 10.0.0.18
websrv.xiangzheng.com has address 10.0.0.28
#专业工具查看对应的DNS解析记录
[root@client ~]# dig www.xiangzheng.com
...
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: fed522b6041d059f0100000062c40c2f4c2304eaed63f3a9 (good)
;; QUESTION SECTION: #请求的
;www.xiangzheng.com. IN A #www.xiangzheng.com.对应的A记录是什么?
;; ANSWER SECTION: #解析出来的
www.xiangzheng.com. 600 IN CNAME websrv.xiangzheng.com. #www.xiangzheng.com.是一个CNAME,也就是别名,这个别名是 websrv.xiangzheng.com.
websrv.xiangzheng.com. 600 IN A 10.0.0.18 #websrv.xiangzheng.com.对应的第一个记录
websrv.xiangzheng.com. 600 IN A 10.0.0.28 #websrv.xiangzheng.com.对应的第二个记录
;; Query time: 1 msec
;; SERVER: 10.0.0.103#53(10.0.0.103)
;; WHEN: Tue Jul 05 18:02:23 CST 2022
;; MSG SIZE rcvd: 128MX
添加记录
root@dns-server:~# vim /var/cache/bind/xiangzheng.com.zone.bind
$TTL 600
@ IN SOA ns1 mail.xiangzheng.com. (
2015042201 ;
1H ;
10M ;
1D ;
12H ;
)
@ NS ns1
@ NS ns2
ns1 A 10.0.0.103
ns2 A 10.0.0.104
@ MX 10 mailsrv #MX记录,10表示优先级 数字越小优先级越高
@ MX 20 mailsrv2 #MX记录冗余
mailsrv A 10.0.0.66 #mailsrv对应的A记录
mailsrv2 A 10.0.0.88 #mailsrv2对应的A记录测试
[root@client ~]# host xiangzheng.com
xiangzheng.com mail is handled by 20 mailsrv2.xiangzheng.com.
xiangzheng.com mail is handled by 10 mailsrv.xiangzheng.com.
#查看域名或IP对应的邮件服务器地址
[root@client ~]# dig -t mx xiangzheng.com
; <<>> DiG 9.11.36-RedHat-9.11.36-3.el8 <<>> -t mx xiangzheng.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 7628
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: 8b0749eac4a760580100000062c419dc8a7cd04843820d01 (good)
;; QUESTION SECTION:
;xiangzheng.com. IN MX
;; ANSWER SECTION:
xiangzheng.com. 600 IN MX 10 mailsrv.xiangzheng.com.
xiangzheng.com. 600 IN MX 20 mailsrv2.xiangzheng.com.
;; ADDITIONAL SECTION:
mailsrv.xiangzheng.com. 600 IN A 10.0.0.66
mailsrv2.xiangzheng.com. 600 IN A 10.0.0.88
;; Query time: 0 msec
;; SERVER: 10.0.0.103#53(10.0.0.103)
;; WHEN: Tue Jul 05 19:00:44 CST 2022
;; MSG SIZE rcvd: 152DNS 冗余
- 是这样解决吗?
root@dns-server:~# vim /var/cache/bind/xiangzheng.com.zone.bind
$TTL 600
@ IN SOA ns1 mail.xiangzheng.com. (
2015042201 ;
1H ;
10M ;
1D ;
12H ;
)
@ NS ns1
@ NS ns2
ns1 A 10.0.0.103
ns2 A 10.0.0.104
[root@client ~]# host ns1.xiangzheng.com
ns1.xiangzheng.com has address 10.0.0.103
[root@client ~]# host ns2.xiangzheng.com
ns2.xiangzheng.com has address 10.0.0.104