如何使用 systemd 以 IPv4 模式启动命名?

如何使用 systemd 以 IPv4 模式启动命名?

如何配置我的 Ubuntu 15.04 bind9 以停止使用 IPv6 解析查询?

总结

我在 Ubuntu 15.04 机器上使用 bind9。看来我的命名服务器正在尝试使用 IPv6 解析大量查询。

29-Jul-2015 01:03:28.926 lame-servers: error (network unreachable) resolving 'vassg.omniroot.com.edgesuite.net/A/IN': 2600:1401:2::2#53
29-Jul-2015 01:03:30.073 lame-servers: error (network unreachable) resolving 'askubuntu.com/A/IN': 2001:503:231d::2:30#53
29-Jul-2015 01:03:30.516 lame-servers: error (network unreachable) resolving 'stackapps.com/A/IN': 2001:503:a83e::2:30#53
29-Jul-2015 01:03:30.533 lame-servers: error (network unreachable) resolving 'stackapps.com/AAAA/IN': 2400:cb00:2049:1::adf5:3b69#53

在谷歌搜索后,我最终找到了解决方案,只需添加 -4 开关即可在 IPv4 模式下启动命名服务。我尝试将 /etc/default/bind9 修改为:

/etc/default/bind9

# run resolvconf?
RESOLVCONF=yes

# startup options for the server
OPTIONS="-4 -u bind"

但最终我使用 IPv6 时仍然遇到很多解析失败的情况。

因此我检查了使用 systemd 启动命名的开关

mippy@heimdal:~/src/servermon$ sudo service bind9 status
● bind9.service - BIND Domain Name Server
   Loaded: loaded (/lib/systemd/system/bind9.service; enabled; vendor preset: enabled)
  Drop-In: /run/systemd/generator/bind9.service.d
           └─50-insserv.conf-$named.conf
   Active: active (running) since ons 2015-07-29 01:11:44 CEST; 25min ago
     Docs: man:named(8)
  Process: 6879 ExecStop=/usr/sbin/rndc stop (code=exited, status=0/SUCCESS)
 Main PID: 6884 (named)
   CGroup: /system.slice/bind9.service
           └─6884 /usr/sbin/named -f -u bind

因此,named 似乎是以 /usr/sbin/named -f -u bind 启动的。这与我的 /etc/default/bind9 的预期不符。

如何使用 -4 开关配置命名?

答案1

这是 Ubuntu 切换到 systemd 后更新命名选项的过程:

cp /lib/systemd/system/bind9.service /etc/systemd/system/bind9.service

编辑

/etc/systemd/system/bind9.service

改变

ExecStart=/usr/sbin/named -f -u bind

进入

ExecStart=/usr/sbin/named -4 -f -u bind

然后

systemctl daemon-reload
service bind9 restart

再次检查更改是否生效:

mippy@heimdal:~/src/servermon$ sudo service bind9 status
● bind9.service - BIND Domain Name Server
   Loaded: loaded (/etc/systemd/system/bind9.service; enabled; vendor preset: enabled)
  Drop-In: /run/systemd/generator/bind9.service.d
           └─50-insserv.conf-$named.conf
   Active: active (running) since ons 2015-07-29 11:09:26 CEST; 5min ago
     Docs: man:named(8)
  Process: 20737 ExecStop=/usr/sbin/rndc stop (code=exited, status=0/SUCCESS)
 Main PID: 20742 (named)
   CGroup: /system.slice/bind9.service
           └─20742 /usr/sbin/named -4 -f -u bind

有关更多信息,请查看此 suse 文档页面。它也应该适用于我们 Ubuntu 用户。 https://www.suse.com/documentation/sled-12/book_sle_admin/data/sec_boot_systemd_custom.html

答案2

ipv6 查找失败并不表示服务器配置错误,而是客户端配置错误。仅使用 ipv4 地址运行的服务器仍会收到 ipv6 解析的 DNS 请求 (AAAA)。几年前,各种操作系统开始默认启用 ipv6 时,这种情况就开始发生了。

答案3

虽然@Civing 的答案可能会有效,但它可能不是覆盖bind9配置的最干净的方法,因为整个 systemd 服务定义(而不仅仅是ExecStart需要覆盖的指令)都被复制了。

出现了一种更紧凑的方法来实现同样的目的(适用于 Xenial 及更高版本)这里

相关内容