我有一台具有公共 IP 地址的服务器(假设)198.20.30.40
我正在尝试在此主机上设置 DNS 服务器,以便我可以解析对“stackoverflow.com”的所有请求,并将其解析为“198.20.30.40”,而不是实际的 stackoverflow。当然,我已将请求 stackoverflow 的客户端中的主 DNS 服务器设置为 198.20.30.40。还有其他开放 DNS 服务器 (8.8.8.8) 设置为辅助 DNS。
遵循教程,我无法让它工作。
这是我进行“挖掘”时得到的结果。看起来它正在发挥作用
$ dig stackoverflow.com
; <<>> DiG 9.8.3-P1 <<>> stackoverflow.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 43984
;; flags: qr aa rd; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; WARNING: recursion requested but not available
;; QUESTION SECTION:
;stackoverflow.com. IN A
;; AUTHORITY SECTION:
stackoverflow.com. 86400 IN SOA ns.stackoverflow.com. hostmaster.linux.bogus. 990 28800 7200 2419200 86400
;; Query time: 152 msec
;; SERVER: 198.20.30.40#53(198.20.30.40)
;; WHEN: Thu Mar 3 15:14:45 2016
;; MSG SIZE rcvd: 90
但是,当我执行 nslookup 时,我得到了以下信息。它没有给出我的服务器的 IP 地址,即 198.20.30.40
$ nslookup stackoverflow.com
;; Got recursion not available from 198.20.30.40, trying next server
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
Name: stackoverflow.com
Address: x.y.z.d
以下是我的 /etc/bind/named.conf.local 配置文件
zone "stackoverflow.com" {
type master;
notify no;
file "/etc/bind/stackoverflow.com";
};
zone "30.20.198.in-addr.arpa" {
type master;
file "/etc/bind/198.20.30";
};
我的 /etc/bind/stackoverflow.com
$TTL 3D
@ IN SOA ns.stackoverflow.com. hostmaster.linux.bogus. (
990 ; serial, todays date + todays serial #
8H ; refresh, seconds
2H ; retry, seconds
4W ; expire, seconds
1D ) ; minimum, seconds
;
NS ns ; Inet Address of name server
MX 10 mail.linux.bogus. ; Primary Mail Exchanger
MX 20 mail.friend.bogus. ; Secondary Mail Exchanger
;
localhost A 198.20.30.40
ns A 198.20.30.40
www CNAME ns
media CNAME ns
jobs CNAME ns
ir CNAME ns
help CNAME ns
mail A 198.20.30.40
我的 /etc/bind/198.20.30
$TTL 3D
@ IN SOA ns.stackoverflow.com. hostmaster.linux.bogus. (
989 ; Serial
8H ; Refresh
2H ; Retry
4W ; Expire
1D) ; Minimum TTL
NS ns.stackoverflow.com.
40 PTR ns.stackoverflow.com.
40 PTR jobs.stackoverflow.com.
40 PTR help.stackoverflow.com.
答案1
你已经回答了你自己的问题,只是你没有意识到这一点。
dig
当不执行时+norecurse
,你会看到:
;; flags: qr aa rd; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; WARNING: recursion requested but not available
当您尝试使用时nslookup
,您会看到:
;; Got recursion not available from 198.20.30.40, trying next server
您已配置权威性DNS 服务器,它不会响应任何 DNS 查询。它只响应已配置的域的请求。仅权威服务器不应该配置为 DNS 服务器以便使用所有递归查询由工作站或服务器创建,这就是您上面所做的。换句话说,绝对不能在与递归服务器(例如 8.8.8.8)相同的上下文中使用仅权威服务器。
dig
您在这里遇到的是在这种特定的错误配置下的行为方式和行为方式的差异nslookup
。dig
将显示有关递归不可用的警告,但如果可用,则提供权威答案。nslookup
还会警告您递归不可用,但会不是显示权威答案并完全跳至下一个服务器。
此时,强烈建议从递归服务器列表中删除仅权威服务器,并对这些类型的服务器之间的差异进行一些独立研究。虽然是可以将权威服务器配置为递归服务器,如果这是面向互联网的权威服务器,这几乎总是一个坏主意,因为这会导致不安全的配置,称为“开放解析器”。 (谷歌上有很多关于这些的信息)