基于 BIND 的本地服务器 DNS 服务器

基于 BIND 的本地服务器 DNS 服务器

我目前正在尝试为家庭服务器系统设置一个 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

相关内容