У меня было почти такая же проблема на сервере Ubuntu, и оказалось, что это две проблемы:
(1) apparmor
Я не знаю, верно ли то же самое для Debian, но в Ubuntu bind9
запускается с включенным apparmor. Это означает, что разрешено писать только в определенные места. Эти места перечислены в /etc/apparmor.d/usr.sbin. named
, и обычно рекомендуется оставаться в этих каталогах.
Вы можете установить пакет apparmor-utils
и (временно) отключить apparmor для привязки, чтобы проверить, не вызывает ли это ваша проблема:
sudo aa-status
должен отображать / usr / sbin / named
в списке армированных профилей. Затем запустите
sudo aa-complain /usr/sbin/named
, чтобы перевести его в режим жалобы.
(2) файл зоны
Это почти не упоминается в руководстве / учебнике, но bind9 ожидает, что (ранее) существующий файл зоны будет работать правильно. Ошибка конца файла
может быть вызвана тем, что файл зоны еще не существует ( /etc/bind/primary/example.com
и / etc / bind /primary/sub.example.com
в вашем примере).
Вы можете просто создать его следующим образом:
echo "; DO NOT EDIT MANUALLY - use the \"nsupdate\" utility to prevent data loss
;
\$ORIGIN example.com.
\$TTL 86400 ; 1 day
@ IN SOA ns1.example.com. hostmaster.example.com. (
2009074711 ; serial
7200 ; refresh (2 hours)
300 ; retry (5 minutes)
604800 ; expire (1 week)
60 ; minimum (1 minute)
)
IN NS ns1.example.com.
ns1 IN A <IP of your bind server>" | sudo -u bind tee /etc/bind/primary/example.com
См. Раздел в nsupdate
With the -k option, nsupdate reads the shared secret from the file
keyfile. Keyfiles may be in two formats: a single file containing a
named.conf-format key statement, which may be generated automatically
by ddns-confgen, or a pair of files whose names are of the format
K{name}.+157.+{random}.key and K{name}.+157.+{random}.private, which
can be generated by dnssec-keygen. The -k may also be used to specify a
SIG(0) key used to authenticate Dynamic DNS update requests. In this
case, the key specified is not an HMAC-MD5 key.
Так что, если вы переформатируете его в форму
key sub.example.com. {
algorithm HMAC-MD5;
secret "xxxx xxxx";
};
и оставите в файле, он будет работать, или, как вариант, -k K { name}. + 157. + {random}. *
Для обновлений dyndns BIND должен иметь возможность записи в папки, используемые зонами. Мне кажется, что / etc - неподходящее место для хранения такой информации, и просмотр ваших разрешений и т. Д. Недоступен для записи с помощью bind.
Я предлагаю попробовать каталог / var / bind, чтобы bind мог писать в это.
У меня были очень похожие проблемы, пока я не изменил место хранения файлов зоны.
У Bind было разрешение на запись в / var / cache / bind
, но ваши файлы зон хранятся в / etc / bind / ...
. Bind в настоящее время не имеет разрешения на запись в файлы в / etc / bind / ...
, поэтому вам нужно будет обновить разрешения Bind или сохранить файлы зоны в каталоге, где Bind имеет соответствующие разрешения. Я расскажу о простых шагах по перемещению файлов зоны в каталог, рекомендованный для динамических зон ( / var / lib / bind /
).
Переместите файлы зоны с помощью mv
( скорее всего, необходимо выполнить как root)
mv /etc/bind/primary/example.com / var / lib / bind / primary /
mv /etc/bind/primary/sub.example.com / var / lib / bind / primary /
Обновите путь к файлу в конфигурациях named.conf
. В вашем случае это означает обновление /etc/bind/ named.conf.local
зоны "example.com" {
тип мастер;
файл "/var/lib/bind/primary/example.com"; // эта строка изменилась
// прочее удалено для ясности
};
зона "sub.example.com" {
тип мастер;
файл "/var/lib/bind/primary/sub.example.com";// эта строка изменилась
// прочее удалено для ясности
};
Перезапустите Bind с помощью service bind9 restart