今天,当我检查我网站的临时域实际指向何处时,我大吃一惊。我以为是由于域或我们公司网络的一些草率配置,我的临时域不知何故指向了生产服务器。
于是我 host http://stage.***.com
输入了 212.##.##.70 => Booom,生产服务器。之后,我尝试host stage.***.com
输入 212.#.##.73 => 呼,暂存服务器
所以,我的问题是:为什么会这样,意外地将“http://”粘贴到命令行中会导致“host”返回另一个 IP 地址?
编辑:由于我问的问题似乎不清楚,所以我试图澄清:正如斯文在他的评论中指出的那样,
host http://stage.***.com
不应该返回任何内容,但就我而言,它确实返回了
http://stage.***.com has address 212.##.##.70
这实际上是***.com(生产)的IP,所以我想知道这是怎么发生的。
- 为什么它会返回 Prod-IP?
- 考虑到 Sven 的评论,为什么它什么都不返回?由于实际答案非常具有误导性,我更希望看到错误消息。无论如何,“http://” 是一个复制/粘贴错误
顺便说一下,我在 Ubuntu 16.10 客户端上
编辑2:
; <<>> DiG 9.10.3-P4-Ubuntu <<>> http://stage.***.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 26978
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 5
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;http://stage.***.com. IN A
;; ANSWER SECTION:
http://stage.***.com. 180 IN A 212.48.122.70
;; AUTHORITY SECTION:
***.com. 65 IN NS auth2.###.de.
***.com. 65 IN NS auth1.###.de.
;; ADDITIONAL SECTION:
auth1.###.de. 180 IN A 212.##.##.53
auth1.###.de. 180 IN AAAA 2a00:####:##:##::2
auth2.###.de. 180 IN A 212.##.##.53
auth2.###.de. 180 IN AAAA 2a00:####:##:##::2
嗯。我猜“http://”部分被视为域的一部分,而我们的 DNS 配置显示 *.***.com 有 ###.70 ???(因此我们对非阶段的任何内容都有通配符....)
答案1
您的域名必须有通配符才能实现此操作(并且您应该将其删除)
假设您有一个区域,则以下结果应该相同
区域文件:
example.com IN A 192.0.2.5
*.example.com IN A 192.0.2.0
www.example.com IN A 192.0.2.10
主机命令输出:
host http://a.example.com
http://a.example.com has address 192.0.2.0
host http://www.example.com
http://www.example.com has address 192.0.2.0
host www.example.com
www.example.com has address 192.0.2.10
可以看到,www
匹配www
A记录,http://www
匹配通配符
顶点记录不匹配*,因为它不是子域。
host http://example.com
http://example.com not found: 3(NXDOMAIN
永远是NXDomain,这与缺少任何角色有关+.
我检查了查询日志,是的,该查询实际上是针对http://a.example.com
并匹配的*.example.com
。
通配符非常糟糕,请尽可能避免使用它们!
- 禁用负 TTL(没有 NXDomain,您总是用记录回答)
- 增加新记录的传播*
- 增加 DNS 缓存中毒的可能性(尤其是在 DNS 分裂的情况下!)
- 并非所有名称服务器都以相同的方式处理通配符,有些是完全递归的,有些则不是(
*.*.*.*.example.com
vs*.example.com
)
*传播不是一个东西,但是它通常用于描述第三方刷新其缓存所需的时间。
答案2
完全删除“http://”,因为它不是 FQDN 的一部分。