我看到如下的行
Feb 13 21:45:48 srv named[2355]: address not available resolving 'secure.gravatar.com/A/IN': 2a04:fa87:ffff::c6b5:7405#53
Feb 13 21:42:29 srv named[2355]: address not available resolving 'la1.akamaiedge.net/AAAA/IN': 2001:500:a8::e#53
尽管仅在 IPv4 模式下/var/log/syslog
运行bind
srv # cat /etc/default/bind9
# run resolvconf?
RESOLVCONF=no
# startup options for the server
OPTIONS="-u bind -4"
为什么会这样?
答案1
如果系统使用 systemd,那么编辑/etc/default/bind9
将无效。
编辑/lib/systemd/system/bind9.service
文件并向变量添加-4
选项ExecStart
。我正在使用 Ubuntu 16,必须这样做。
ExecStart=/usr/sbin/named -f -4 -u bind
重新启动后还要仔细检查是否named
正在运行-4
选项。
实际上有一个关于此配置混乱的错误https://bugs.launchpad.net/ubuntu/+source/bind9/+bug/1565060
答案2
该-4
选项仅更改指示 bind 监听和响应 IPv4 数据包。它不会禁用AAAA
记录的使用。
那么有没有办法在绑定中丢弃 IPv6 地址?
如果这确实是您想要的,那么您可以调整绑定配置以包含以下内容。您必须禁用 dnssec 验证,因为您正在删除有效记录。
options {
...
dnssec-enable no;
filter-aaaa-on-v4 yes;
...
};
答案3
-4
作为添加到命令行的替代方法named
(这确实有效,但根据named
启动方式的不同可能会不方便),还可以将以下内容添加到配置中,具有类似的效果,即不尝试通过 IPv6 进行连接:
server ::/0 {
bogus yes;
};
这会将具有 IPv6 地址的服务器标记为虚假,阻止对这些地址的查询。
可能不言而喻,但这两个选项都应仅在没有全球 IPv6 连接的环境中使用,在这些环境中,named
所有内容都会一直记录此类错误。
如果您只是偶尔遇到与特定服务器的连接问题,那么就没有理由在您自己的终端上禁用整个协议。
答案4
对于 Redhat Linux 及其衍生产品,应将选项添加到/etc/sysconfig/named
。
要禁用对 IPv6 的监听并仅使用 IPv4,请使用以下行:
OPTIONS="-4"