Вопрос или проблема
Я настроил новый сервер Ubuntu 20.04 и установил BIND 9.16.1-Ubuntu. Затем я скопировал конфигурацию BIND с моего старого сервера на Ubuntu 16.04.7, на котором работает BIND 9.10.3-P4-Ubuntu.
Когда я пытаюсь запустить BIND на новом сервере, я получаю следующую ошибку.
/etc/bind/named.conf.options:15: '::1/64': несоответствие адреса/длины префикса '64'
Вот мой файл /etc/bind/named.conf.options.
options {
directory "/var/cache/bind";
dnssec-validation auto;
auth-nxdomain no;
dump-file "/var/cache/bind/named_dump.db";
statistics-file "/var/cache/bind/named.stats";
listen-on port 53 { 0.0.0.0/0; };
listen-on-v6 port 53 { any; };
allow-query { 0.0.0.0/0; ::/0; };
version "DNS";
allow-recursion {
127.0.0.0/8; ::1/64;
10.10.0.0/24; 1000:1000:1000:1000::/56;
};
allow-transfer {
127.0.0.1; ::1;
};
disable-empty-zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa";
notify yes;
masterfile-format text;
};
Что не так с этим префиксом?
Что изменилось в BIND 9.16, если тот же файл прекрасно работает с BIND 9.10?
Во многих местах в опциях вы можете управлять тем, какие устройства или какие сети могут взаимодействовать с DNS-сервером.
При указании единственного IP-адреса вам необходимо использовать либо двоичную маску из всех 1, длиной 32 бита для IPv4 (CIDR /32) и 128 бит для IPv6 (CIDR /128), либо опустить маску.
Если вы указываете сеть, не следует переусердствовать с ее описанием.
::1
— это IP-адрес, в то время как маска /64
предполагает сеть, поэтому маска переусердствована.
Если вы хотите использовать IP-адрес ::1
, маска должна быть /128
или опущена, как в разделе “allow-transfer”.
Подсеть 1000:1000:1000:1000::/56
некорректна, потому что она из диапазона, зарезервированного IETF.
Глобальные униicast-адреса находятся в диапазоне 2000::/3
,
Уникальные локальные униicast-адреса fc00::/7
,
Link-scoped униicast-адреса fe80::/10
,
Мультикаст ff00::/8
.
Другие адреса зарезервированы.
Если вы не используете IPv6 в своей сети, я рекомендую удалить их из вашей конфигурации.
Ответ или решение
Проблема, с которой вы столкнулись, связана с использованием неверной маски подсети для адреса ::1
в вашем конфигурационном файле BIND. Ошибка address/prefix length mismatch '64'
указывает на то, что вы пытаетесь применить маску подсети /64
к адресу, который является адресом самого хоста (localhost), и для IPv6 это должен быть адрес с маской /128
.
Вот основные моменты, которые следует учесть:
-
Корректная маска для адреса
::1
:
Адрес::1
— это специальный адрес IPv6 для ссылки на локальный хост (localhost). При его использовании, маска подсети должна быть/128
, или вы можете полностью опустить маску, как в частях вашего конфигурационного файлаallow-transfer
. Исправьте строку вallow-recursion
следующим образом:allow-recursion { 127.0.0.0/8; ::1; // исправлено 10.10.0.0/24; 1000:1000:1000:1000::/56; // дополнительное исправление предложено ниже };
-
Сетевые адреса:
Адрес1000:1000:1000:1000::/56
находится в диапазоне зарезервированных адресов IETF и не является корректным глобальным уникальным адресом. Если вы используете адреса IPv6, убедитесь, что они попадают в диапазон глобальных уникальных адресов, который начинается с префикса2000::/3
, или в диапазон уникальных локальных адресов (fc00::/7
). Если эти адреса не предназначены для использования в вашей сети, рекомендуется либо удалить эту запись, либо заменить её на корректный адрес. -
Рекомендации по слабой поддержке IPv6:
Если вы не используете IPv6 в вашей сети, вы можете полностью исключить настройки для IPv6 из вашего конфигурационного файла. Это упростит вашу конфигурацию и уменьшит возможности возникновения подобных ошибок.
В результате исправленная часть конфигурационного файла named.conf.options
может выглядеть так:
allow-recursion {
127.0.0.0/8; ::1; // скорректировано
10.10.0.0/24; // удален некорректный адрес
};
// и так далее...
После внесения этих изменений сохраните файл и перезапустите BIND, чтобы применить изменения:
sudo systemctl restart bind9
Эти шаги должны устранить проблемы в конфигурации и позволить вашему серверу DNS успешно запуститься.