尽管已禁用绑定中的 IPv6,为什么仍会看到 IPv6 解析错误?

尽管已禁用绑定中的 IPv6,为什么仍会看到 IPv6 解析错误?

我看到如下的行

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"

相关内容