我有一个在家使用的域名,为了便于讨论,我们将其称为domain.com
。我在家庭网络上使用此域名,但实际上我也拥有该域名。因此,当我加载www.domain.org
一个子域名时,我希望我的 DNS 服务器将此请求重定向到实际互联网,而不是我的家庭域名。
我使用该域名来识别家中的设备。我该如何实现这一点?
我在一台 Ubuntu 机器上运行 BIND,该机器既充当网关,又充当 DNS 服务器
答案1
我建议将您的内部网络移至第三级(即device1.lan.domain.org
)以避免冲突。
话虽如此,你想要的本质上是子域名委派。如果我没记错的话,它应该像添加这些条目一样简单:
www IN NS ns1.example.com.
www IN NS ns2.example.com.
因为如果没有互联网访问,这无论如何都无法实现,所以您可以忽略与委派有关的所有其他最佳实践。
答案2
最简单的方法是使用$INCLUDE
BIND 中的功能。
您需要做的就是为所有内部名称创建一个文件,例如,db.domain.com-internal
其中包含所有内部记录(您已经拥有,只需替换文件名),然后创建第二个文件,将其命名为db.domain.com-external
,其中包含来自外部真实域的所有记录减去 SOA 和 NS 记录。
在文件底部db.domain.com-internal
添加以下行:,
$INCLUDE db.domain.com-外部
这样,您就可以使用两个文件在逻辑上将内部和外部区分开来,但该$INCLUDE
指令会将它们合并为一个完整的域视图。在您询问之前,www.domain.com 的解析是在内部进行的,无论是通过 A 记录还是 CNAME 记录,您的浏览器返回的 IP 地址仍会将其发送到您在互联网上的网站。
重新加载,检查错误,就这样。很简单。
这种方法效果很好,因为正确的拆分 DNS 配置(内部/外部)会向外界公开内部可见的完整记录集的子集。也就是说,一般来说,对于域的外部公开视图,您只会公开具有 IP 地址的可公开访问的名称。