我目前正在尝试为家庭服务器系统设置一个 DNS 服务器,以便我可以正常访问外部网站,但是当我访问“http://example.local' 在网络中的任何设备上,它都会重定向到我的家庭服务器 IP。我知道我可以使用 hosts 文件来实现这一点,但该方法存在局限性,这意味着它不是一个理想的解决方案。
到目前为止,我已经成功在用作 DNS 服务器的 Raspberry Pi 上设置了 BIND。然而,几天来我一直在努力弄清楚如何正确设置区域,以便“http://example.local' 将指向我的开发服务器。
任何帮助或建议都将不胜感激。如果您需要更多信息,请告诉我,如果内容不相关,我不想只转储大量文件内容。
谢谢
答案1
几天来我一直在努力研究如何正确设置区域以使其
http://example.local
指向我的开发服务器。
例如/etc/bind/named.conf.local
,您将需要类似以下的条目:
# Local domains
zone "example.local" IN {
type master;
file "/etc/bind/db.example.local";
allow-transfer { none; };
};
最小区域文件示例:
例如 /etc/bind/db.example.local
; Enables use of e.g. http://example.local/
$TTL 3600
@ IN SOA ns.example.local admin.example.local. (
2020042101 ; serial
8H ; Refresh period
4H ; Retry interval
4W ; Expire time
1D ; Negative caching TTL
)
# Required name server records (DNS server IP)
@ NS ns.example.local.
ns IN A 192.168.0.10
# A record for example.local (Development server IP)
example.local. IN A 192.168.0.20
# A records for sub-domains of example.local
# e.g. "raspberry.example.local"
raspberry IN A 192.168.0.10
router IN A 192.168.1.1
localhost IN A 127.0.0.1
区域说明
@
是例如 的替代品example.local.
,您通常会在 所占的位置中指定它@
。1如果您愿意,可以简单地使用example.local.
(即如果它更清楚)。admin.example.local
.
实际上是用普通符号代替的电子邮件地址@
。这不需要是真实/有效的电子邮件地址。每当您进行更改时,都需要更新区域文件的序列值。
序列值编号的实际格式并不重要(只要数字增加即可),但区域文件的常用编号方式是 YEAR-MONTH-DAY-VERSION。因此,例如
2020042101
将表示 2020 年 4 月 21 日给定文件区域文件的第一个版本。对于
ns
A 记录,IP 应该是 Raspberry Pi 的 IP(或运行 DNS 服务器的任何 IP)对于
example.local.
A 记录,IP 应该是您的开发服务器的本地 IP。子域名记录可以指向您想要的任何 IP。
一般注意事项
您的路由器需要知道本地网络上的 DNS 服务器的 IP 地址才能使用它(即其他设备可以找到
example.local
)。由于您的路由器需要配置为使用本地 DNS 服务器(而不是您的 ISP),因此您需要确保您的 DNS 服务器配置为自行解析未知域或将这些请求转发到上游(例如您的 ISP)。否则,您将无法访问本地网络之外的任何内容(例如互联网)。
/
在浏览器 URL 栏中指定本地地址时,请务必使用结尾(例如使用example.local/
而不是仅example.local
使用 )。否则,基于 Chrome 的浏览器(例如 Chrome、Firefox、Opera)可能无法正确解析域名。对于当前版本的 Firefox,您可能需要禁用 HTTPs 上的 DNS (DoH)。
1 @
从技术上来说,根据$ORIGIN
区域文件中的指令进行替换(例如$ORIGIN example.local.
),虽然建议明确定义,但如果不存在该$ORIGIN
指令,BIND 将根据区域名称(例如)合成该指令及其对应的值。zone "example.local"
进一步阅读:火箭科学家的 DNS