Вопрос или проблема
ОС: Ubuntu 22.04 LTS
BIND 9.18.30-0ubuntu0.22.04.2-Ubuntu (Extended Support Version) <id:>
DNS настроен и работает.
Обратный DNS настроен и работает.
Geo DNS – загружен GeoLite2-Country mmdb, как рекомендовано, с помощью wget. Установлен в /var/lib/GeoIP/. Он настроен как bind:bind для доступа. После изменения файла /etc/bind/named.conf.options
для чтения, в параметрах geoip-directory "/var/lib/GeoIP"
я пытаюсь перезапустить службы bind9 или named и получаю следующую ошибку:
/etc/bind/named.conf.options:7: no GeoIP2 database installed which can answer queries of type 'country'
Я протестировал базу данных с помощью mmdbtools и следующей команды:
mmdblookup --file /var/lib/GeoIP/GeoLite2-Country.mmdb --ip 8.8.8.8
— Это возвращает США в качестве страны и показывает, что BIND может читать из базы данных.
Полный файл named.conf.options приведен ниже:
acl "trusted" {
192.168.56.60; # DNS сервер
192.168.56.61; # DNS клиент
192.168.56.20; # DNS клиент
};
acl "US_Clients" { geoip country US; };
acl "EU_Clients" { geoip country EU; };
acl "ASIA_Clients" { geoip country ASIA; };
options {
directory "/var/cache/bind";
recursion yes; # включает рекурсивные запросы
allow-recursion { trusted; }; # Разрешить рекурсивные запросы из нашего ACL
listen-on { any; }; # Частный IP-адрес сервера
allow-transfer { none; }; # Отключить передачу зоны по умолчанию
geoip-directory "/var/lib/GeoIP/";
allow-query-cache { 192.168.56.0/24; };
forwarders {
8.8.8.8;
8.8.4.4;
};
Все, что я исследовал и пробовал, говорит, что это должно работать, но продолжает возвращать эту ошибку о стране, и я не могу понять, почему. Кто-нибудь еще сталкивался с этой проблемой или знает, что может ее вызывать?
Ответ или решение
Конфигурация системы DNS с использованием Geolocation (Geo DNS) на базе BIND и Maxmind GeoLite2 может быть достаточно сложной задачей, особенно при использовании Ubuntu 22.04 LTS с BIND 9.18.30. В вашей ситуации описанная проблема связана с тем, что BIND не распознает установленную базу данных GeoLite2-Country и возвращает ошибку. Давайте детально разберем возможные причины этой ошибки и пути их устранения.
Теория
BIND, один из самых популярных и мощных DNS-серверов, предлагает возможность использования геолокации для управления тем, каким образом DNS-запросы обрабатываются из различных географических регионов. В вашей конфигурации используется база данных GeoLite2-Country от MaxMind, которая хранится в специальном формате MMDB. Важно, чтобы база данных была правильно установлена и настроена, а также чтобы BIND имел корректный доступ к ней.
Ошибки, подобные no GeoIP2 database installed which can answer queries of type 'country'
, обычно возникают из-за одной или нескольких из следующих причин:
- Некорректное расположение базы данных: BIND не может найти базу данных в указанной директории.
- Неправильные права доступа: файлы базы данных должны быть доступны для чтения пользователем и группой, под которыми запускается BIND (обычно
bind:bind
). - Несовпадение версии или формата базы данных: вы используете неправильную версию или формат базы данных, который не поддерживается текущей версией BIND.
- Неверные настройки в конфигурационном файле: конфигурационный файл может содержать ошибки или отсутствующие параметры, необходимые для правильного использования GeoIP.
Пример
В вашем конфигурационном файле named.conf.options
вы указываете:
geoip-directory "/var/lib/GeoIP/";
Также упоминаете использование MMDB для проверки базы данных с помощью команды mmdblookup
, которая успешно возвращает страну для IP 8.8.8.8. Это говорит о том, что база данных функционирует правильно в принципе. Однако, BIND не может взаимодействовать с ней.
Применение
Теперь рассмотрим, какие шаги вы можете предпринять для устранения проблемы:
-
Проверка расположения и прав доступа:
- Убедитесь, что специально указанная директория
/var/lib/GeoIP/
действительно содержит файлGeoLite2-Country.mmdb
. - Права доступа: убедитесь, что пользователю и группе
bind
разрешено чтение базы данных. Выполните следующие команды для проверки и установки прав:sudo chown bind:bind /var/lib/GeoIP/GeoLite2-Country.mmdb sudo chmod 644 /var/lib/GeoIP/GeoLite2-Country.mmdb
- Убедитесь, что специально указанная директория
-
Проверка конфигурационных файлов:
- Убедитесь, что все настройки в
named.conf.options
соответствуют требованиям BIND версии 9.18.30. Версия BIND может иметь требования по совместимости для определённых конфигурационных параметров. - Убедитесь в корректности вашего синтаксиса ACL для геолокаций. В некоторых версиях необходимо использовать полные названия стран ISO, такие как "United States" вместо "US".
- Убедитесь, что все настройки в
-
Обновление BIND и баз данных:
- Проверьте, что ваш установочный пакет BIND и базы данных geolocation обновлены до последних версий, поскольку между версиями могут быть исправлены ошибки, влияющие на совместимость.
-
Логи и отладка:
- Проверьте журналы системы и BIND, чтобы выявить дополнительные ошибки, которые могут содержать полезную информацию о проблеме с загрузкой базы данных.
- Используйте более обширные опции отладки BIND для получения большего количества диагностической информации.
-
Документация и известные проблемы:
- Просмотрите официальную документацию Ubuntu и BIND на предмет известных проблем и решений для вашей конкретной версии.
- Форумы и ресурсы, такие как AskUbuntu или StackOverflow, могут содержать дополнительные советы от пользователей, испытывающих аналогичные проблемы.
После выполнения вышеописанных действий, если проблема не будет решена, рассмотрите возможность создания отчета об ошибке в соответствующем баг-трекере Ubuntu или BIND, где разработчики и сообщество могут помочь с дальнейшими расследованиями и поиском решений.