我正在家里设置 DNS 服务器,以便更轻松地为一些本地服务器设置别名,同时也是为了更好地理解 DNS。由于我是新手,请原谅(并纠正)任何术语错误!
我的本地 DNS 服务器的目的是使用我的域名来访问我的一些本地机器。假设我的域名是my-domain.com
。我家里有一个媒体服务器,我想以 的身份访问它media.my-domain.com
,并且我有两个本地 DNS 服务器用于此目的。这些 DNS 服务器将其他查询委托给 Google DNS。
这是我的区域文件my-domain.com
,存储在/etc/bind/zones/db.my-domain.com
我的本地 DNS 服务器上ns1
:
;
; BIND data file for local loopback interface
;
$TTL 604800
@ IN SOA ns1.my-domain.com. admin.my-domain.com. (
3 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
; name servers - NS records
@ IN NS ns1.my-domain.com.
@ IN NS ns2.my-domain.com.
;
; name servers - A records
ns1.my-domain.com. IN A 10.55.55.55
ns2.my-domain.com. IN A 10.55.55.56
;
; 10.55.55.0/24 - A records
media.my-domain.com. IN A 10.55.55.100
/etc/bind/named.conf.options
这是存储在我的本地 DNS 服务器上的选项文件ns1
:
acl "trusted" {
10.55.55.0/24; # home network
};
options {
directory "/var/cache/bind";
recursion yes;
allow-recursion { trusted; };
listen-on { 10.55.55.55; };
allow-transfer {none; }; # disable zone transfers
forwarders {
8.8.8.8; # google1
8.8.4.4; # google2
};
//========================================================================
// If BIND logs error messages about the root key being expired,
// you will need to update your keys. See https://www.isc.org/bind-keys
//========================================================================
dnssec-validation auto;
auth-nxdomain no; # conform to RFC1035
listen-on-v6 { any; };
};
这10.55.55.0/24
是我的本地子网,和ns1
分别ns2
是我的主 DNS 服务器和辅助 DNS 服务器。
我my-domain.com
在互联网上将其用于其他目的,因此例如当我访问时,admin.my-domain.com
它会将我带到一个公开可见的网站的管理控制台。这意味着,如果您从 Google 的 DNS 服务器执行nslookup
on admin.my-domain.com
,您将看到它映射到一个全球可访问的公共 IP 地址。
不幸的是,在我实施本地 DNS 服务器后,我无法admin.my-domain.com
正确解析。我的nslookup
请求到达了本地 DNS 服务器,但这些服务器未针对此子域进行配置,因此本地 DNS 给出“无响应”的提示。
相反,我希望我的 DNS 服务器将 的请求转发my-domain.com
到 Google DNS,并仅提供 、 和 的答案。我看到了一些与我的问题类似的问题,但答案往往是为每个子域创建一个区域文件。这真的是唯一的方法吗?我真的很想说,“如果我为ns1.my-domain.com
指定ns2.my-domain.com
了media.my-domain.com
规则,那么就x.my-domain.com
遵循该规则。否则,将链委托给上级(在我的情况下是委托给 Google DNS)。”
我不确定如何使用 Google 来解决这个问题,因为我对术语不是很了解,而且由于我是个菜鸟,我不知道从哪里开始自己修复它。我所要求的可能吗?任何关于如何实现此行为或搜索此行为的帮助都将不胜感激。谢谢!
答案1
问题在于,您将 Bind 配置为对整个 具有权威性example.com
。
因此,您必须配置本地 Bind 以不仅保存内部 DNS 记录,而且还保存区域文件中所有公共 DNS 记录的副本example.com
。
或者,不要让 Bind 对您具有权威性,而是example.com
保留 example.com 的子域供您内部使用,而是让您的内部 DNS 仅对此具有权威性。即创建一个名为的区域home.example.com
并使用media.home.example.com
。这样,您的内部和公共 DNS 中就不会出现冲突的记录。