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

我如何configuration我的Ubuntu 15.04 bind9停止parsing查询与IPv6?

TL; DR

我在我的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 

当谷歌search时,我只能通过添加一个-4开关来解决以IPv4模式启动指定服务的解决scheme。 我尝试修改我的/ etc / default / bind9到这个:

在/ etc /默认/ BIND9

 # run resolvconf? RESOLVCONF=yes # startup options for the server OPTIONS="-4 -u bind" 

但是我仍然有很多使用IPv6的失败resolvs。

所以我检查了用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。

如何configuration名称为-4开关?

这是在Ubuntus切换到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

失败的ipv6查找不表示服务器上的configuration错误,而是在客户端上configuration错误。 您的服务器,只运行一个ipv4地址,仍然会获得ipv6分辨率的DNS请求(AAAA)。 这开始发生时,几年前,各种操作系统默认启用ipv6。

虽然@Civing的答案很可能会起作用,但它可能并不是覆盖bind9configuration的最简单的方法,因为整个systemd服务定义(而不仅仅是需要覆盖的ExecStart指令)被复制。

在这里出现一个更紧凑的方法来实现同样的事情(对于Xenial和更高版本)。