使用Bind配置DNS服務器的轉發功能-forward
上一篇筆記 CentOS7.6域名服務器配置(一)使用Bind配置主從DNS服務器 記錄下Bind配置主從DNS服務。並且配置了2個測試使用的域名 demo.com 和 example.com
在客戶端10.116.72.4上配置域名解析服務器,並驗證
# 配置
vi /etc/resolv.conf
nameserver 10.116.72.6
nameserver 10.116.72.7
# 驗證 1
ping www.example.com
PING www.example.com (10.116.72.4) 56(84) bytes of data.
64 bytes from demo.com (10.116.72.4): icmp_seq=1 ttl=64 time=0.021 ms
# 驗證 2
ping www.baidu.com 你會發現並無法解析
出現上面除了*.example.com *.demo.com之外的其他域名都無法解析,這是因爲正常配置的Bind域名服務器只能解析配置的域名,那麼如何配置可以解析之外的域名呢,這裏就用到了forward功能了。
一、配置BIND轉發器轉發其他域名
- 配置主機:主/從 BIND服務器都需要配置
主:10.116.72.6
從:10.116.72.7
vi /etc/named.conf
options {
//省略其他... ....
recursion yes;
forward first;
/* 這裏配置轉發器有阿里聯通,google域名服務
forwarders {
223.5.5.5;
223.6.6.6;
114.114.114.114;
8.8.8.8;
8.8.4.4;
};
}
* 重啓named服務,配置生效
```bash
systemctl restart named.service
- 驗證
dig www.baidu.com @10.116.72.6
; <<>> DiG 9.9.4-RedHat-9.9.4-73.el7_6 <<>> www.baidu.com @10.116.72.6
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10323
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 13, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.baidu.com. IN A
;; ANSWER SECTION:
www.baidu.com. 0 IN CNAME www.a.shifen.com.
www.a.shifen.com. 299 IN A 39.156.66.18
www.a.shifen.com. 299 IN A 39.156.66.14
;; AUTHORITY SECTION:
. 108329 IN NS l.root-servers.net.
. 108329 IN NS c.root-servers.net.
. 108329 IN NS f.root-servers.net.
. 108329 IN NS j.root-servers.net.
. 108329 IN NS m.root-servers.net.
. 108329 IN NS g.root-servers.net.
. 108329 IN NS b.root-servers.net.
. 108329 IN NS a.root-servers.net.
. 108329 IN NS h.root-servers.net.
. 108329 IN NS d.root-servers.net.
. 108329 IN NS e.root-servers.net.
. 108329 IN NS k.root-servers.net.
. 108329 IN NS i.root-servers.net.
;; Query time: 159 msec
;; SERVER: 10.116.72.6#53(10.116.72.6)
;; WHEN: Thu Jul 18 15:52:53 CST 2019
;; MSG SIZE rcvd: 312
二、配置轉發區(forward zone)
我這裏的bind服務器10.116.72.6/7都是我用來測試的。我們企業還有產線使用的內部域名解析服務器,例如10.116.71.10/11 內部域名區域(zone)是eju.local。這個域名一看就不是標準域名,只用於內部主機解析。
上面的轉發器轉發的都是公網真實域名(當然也可以在那裏配置添加上10.116.71.10/11,但是這裏的IP地址是輪詢方式解析的,效率會低些)。
Bind提供的轉發區域的概念,允許把 DNS 配置爲查找特定域名的時候才使用轉發器。例如,可以使業務主機服務器將所有對剛剛提到的eju.local
結尾的域名查詢都轉發給eju.local
的名字服務器(NS)。
- 配置轉發區域(forward zone)
在主從服務器上都配置
# 因爲eju.local不是標準的域名格式,需要關閉dnssec驗證
cat /etc/named.conf
options {
//省略其他配置 ... ...
dnssec-enable no;
dnssec-validation no;
}
# 配置轉發區域
cat /etc/named.rfc1912.zones
//省略其他配置 ... ...
zone "eju.local" IN {
type forward;
forwarders { 10.116.71.10; 10.116.71.11; };
};
- 重啓named服務,配置生效
systemctl restart named.service
- 驗證
dig fang-source.fang.eju.local @10.116.72.6
; <<>> DiG 9.9.4-RedHat-9.9.4-73.el7_6 <<>> fang-source.fang.eju.local @10.116.72.6
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9586
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 6, ADDITIONAL: 7
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;fang-source.fang.eju.local. IN A
;; ANSWER SECTION:
fang-source.fang.eju.local. 601947 IN A 10.116.186.4
fang-source.fang.eju.local. 601947 IN A 10.116.186.5
;; AUTHORITY SECTION:
eju.local. 601947 IN NS dns4.eju.local.
eju.local. 601947 IN NS dns2.eju.local.
eju.local. 601947 IN NS dns6.eju.local.
eju.local. 601947 IN NS dns7.eju.local.
eju.local. 601947 IN NS dns5.eju.local.
eju.local. 601947 IN NS dns3.eju.local.
;; ADDITIONAL SECTION:
dns3.eju.local. 604778 IN A 10.99.73.6
dns7.eju.local. 604778 IN A 10.116.71.11
dns5.eju.local. 604778 IN A 10.106.71.11
dns2.eju.local. 604778 IN A 10.99.73.5
dns6.eju.local. 604778 IN A 10.116.71.10
dns4.eju.local. 604778 IN A 10.106.71.10
;; Query time: 1 msec
;; SERVER: 10.116.72.6#53(10.116.72.6)
;; WHEN: Thu Jul 18 16:09:07 CST 2019
;; MSG SIZE rcvd: 297
備註:如果沒有關閉dnssec驗證,無法解析非標準格式的域名,日誌會報如下錯誤
validating ./NS: got insecure response; parent indicates it should be secure
validating eju.local/SOA: got insecure response; parent indicates it should be secure
no valid RRSIG resolving 'dns.eju.local/DS/IN': 10.116.71.10#53
validating eju.local/SOA: got insecure response; parent indicates it should be secure
no valid RRSIG resolving 'dns.eju.local/DS/IN': 10.116.71.11#53
insecurity proof failed resolving 'dns.eju.local/A/IN': 10.116.71.11#53
validating dns.eju.local/A: got insecure response; parent indicates it should be secure
insecurity proof failed resolving 'dns.eju.local/A/IN': 10.116.71.10#53
這種情況需要設置如下 : 文件 /etc/named.conf
dnssec-enable no;
dnssec-validation no;