我要么无法理解DNS的工作原理,要么无法正确configurationDNS(任何一个都不好)。 我目前正在使用一个域名,我将其称为webdomain.com ,并且我需要允许我们所有的内部用户到世界各地去获取我们公开的DNS条目。 然后,最重要的是,我希望能够提供一些覆盖DNS项目,用于testing公共不可用的服务器和设备。 举个例子:
outside.webdomain.com – 也应该从怪物那里得到这个
testing.webdomain.com – 应该从我的内部DNS控制器得到这个
我似乎遇到的问题是,如果我有一个内部DNS控制器,其中包含一个区域为webdomain.com然后我可以得到我指定的内部条目,但从来没有从公共DNS服务器获取任何东西。 无论我使用的DNS服务器的types如何,这也适用 – 我已经尝试了Linux Bind9和Windows 2008域控制器。
我想我的一个大问题是:我是不合理的认为一个系统应该能够检查我指定的内部DNS,并在所请求的条目不存在的情况下,它应该故障转移到指定的公共DNS服务器 – 或 – 这是不是DNS的工作方式,我失去了酱?
这似乎应该像告诉我的内部DNS服务器转发它不能满足的任何请求一样简单,但似乎并不奏效。 这可能是一个防火墙问题?
提前致谢
EXTENDED
好的,所以我做了大量的研究,并在这个几个小时里堵塞了。 我在我的named.conf中有这个,我仍然看到相同的结果。 内部呼叫被馈送,但是任何外部的(在区域控制域中)只是被倾倒。 任何援助将是伟大的! 另外,这是一个我正在使用的Ubuntu 9.04操作系统。
Code removed because it was wrong.
正确的方式 – 在问题closures后增加
那么,感谢这里的服务器故障,我现在已经完美地在我的服务器上以更简洁的方式工作了。 这是你如何做到的。 从bind9的基本安装中编辑你的named.conf.local文件,并添加一个你想要redirect的EACH子域的区域:
/etc/bind/named.conf
// WEBDOMAIN.COM ENTRIES zone "test.webdomain.com" { type master; file "/etc/bind/zones/test.webdomain.com"; }; zone "alpha.webdomain.com" { type master; file "/etc/bind/zones/alpha.webdomain.com"; }; zone "beta.webdomain.com" { type master; file "/etc/bind/zones/beta.webdomain.com"; }; // INTERNETSITE.COM ENTRIES zone "internal.internetsite.com" { type master; file "/etc/bind/zones/internal.internetsite.com"; }; zone "dev.internetsite.com" { type master; file "/etc/bind/zones/dev.internetsite.com"; };
编辑你的/etc/bind/named.conf.options文件,并将你想使用的所有转发器添加到正确的位置:
/etc/bind/named.conf.options
options { directory "/var/cache/bind"; forwarders { 208.67.222.222; 208.67.220.220; 8.8.8.8; 8.8.4.4; }; auth-nxdomain no; # conform to RFC1035 listen-on-v6 { any; }; };
在/ etc / bind / zones /下创build一个名为zones的新文件夹,并为上面创build的每个与上面的'file'属性匹配的区域添加一个新文件。 以test.webdomain.com为例:
/etc/bind/zones/test.webdomain.com
$TTL 604800 @ IN SOA test.webdomain.com. ( 1 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS test.webdomain.com. test.webdomain.com. IN A 10.0.1.20
其中10.0.1.20是您希望此(子)域转发到的AloggingIP地址。 通过这样做,test.webdomain.com的logging仅对子域名具有权威性,全球DNS将像往常一样提供任何其他子域或根域。
你想要做的是在你的内部DNS服务器上为testing.webdomain.com创build一个DNS区域。 这样,webdomain.com DNS不是由您的内部服务器托pipe,而是由dotster托pipe。
当有人查询www.webdomain.com时,请求将被转发到查看器(因为您的本地DNS服务器不是该区域的权威),同时请求testing.webdomain.com将由您的内部DNS服务器。
你需要拆分DNS 。 对于您的边框机器,请使用外部parsing器。 对于您的testing环境,请使用单独的内部parsing器。 内部parsing器将在DNS中提供testing条目,并从一个视图中得到答案; 但是外部世界将会看到你的区域的不同“观点”,这就省略了testing环境。
其他可能感兴趣的SF条目:
我今天只有时间浏览你的扩展文章,所以这里是第一眼:
options { directory "/etc/bind"; listen-on { // why are these lines needed? 10.0.1.5; // the way it is set up, only your loopback 127.0.0.1; // and your LAN clients will be able to // get answers; the outside world can't see boo // because there's no interface/port pair // to contact. I would just get rid of this and }; // not worry about what interfaces are being bound to // BTW, that listen-on line is why your outside queries are failing. auth-nxdomain no; allow-query { any; }; recursion no; version "0"; };
此外,外部匹配客户端语句
view "external" { match-clients { !localnets; any; };
可以做成
view "external" { match-clients { any; };
因为当你添加到匹配客户端时,它已经假设没有什么可匹配的开始; 否定一个ACL真的不会增加太多(因为它从来没有“存在”在这个视图开始,所以没有理由取消它)。
我相信我可能错过了一些东西,但这些是最明显的罪魁祸首。
看来你的区域定义是不正确的。 它错过了名为“webdomain.com”的名称服务器的IP地址。
我build议你改变区域定义为
$TTL 604800 @ IN SOA webdomain.com. email.webdomain.com. ( 4 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS webdomain.com. webdomain.com. IN A 10.0.1.5 test IN A 10.0.1.20
然后重新启动服务器(例如/etc/init.d/bind9 restart
)。
由于该区域无法加载,由于错误,域无法parsing。
在您的Windows DNS服务器上为testing.webdomain.com设置新的ZONE 。 当您添加第一台主机时,请将名称字段留空,并放入您希望内部用户要parsing的IP地址。
这个服务器对于这个区域来说是权威的,所以任何请求都会被引导到那个IP上,所以它不会和你的外部parsing冲突。
我在我的所有网站上使用这个mail.corpdns.com(因为用户在尝试访问webmail时根本不记得使用内部服务器名称等)。
我怀疑这可以在Linux / Bind中完成,但我不知道这些步骤。