Страница 1 из 1

Авто синхронизация зон в BIND под FreeBSD

Добавлено: 2011-12-09 13:51:04
schmel
Приветствую, нарыл в инете скрипт для синхронизации зон.
http://www.tourservice.kz/docs/ru/blog/ ... ?2010/2/19
http://hosting-notes.ru/sozdanie-hostin ... -dns-bind/

Никак не могу заставить его работать под FreeBSD.
Все настроено как по статье. Только оба DNS сервера находятся за NAT. (Проброс портов)
Скрипт парсит файл лога /var/named/var/log/notify.log, очищает его, ниже создает свой файл с логом, но в named.conf пусто.

Код: Выделить всё

09-Dec-2011 13:14:20.952 notify: notice: client 192.168.2.254#51480: received notify for zone 'biznes.ipnz.ru': TSIG 'key-sync': not authoritative
09-Dec-2011 13:14:21.453 notify: notice: client 192.168.2.254#39658: received notify for zone 'temp.ru': TSIG 'key-sync': not authoritative
09-Dec-2011 13:14:21.453 notify: notice: client 192.168.2.254#39658: received notify for zone 'it.ipnz.ru': TSIG 'key-sync': not authoritative
09-Dec-2011 13:14:21.453 notify: info: client 192.168.2.254#39658: received notify for zone 'ipnz.ru': TSIG 'key-sync'
09-Dec-2011 13:14:21.454 notify: notice: client 192.168.2.254#39658: received notify for zone 'xn--80aakebg0acwmrg3guc7b.xn--p1ai': TSIG 'key-sync': not autho
09-Dec-2011 13:14:21.454 notify: info: client 192.168.2.254#39658: received notify for zone 'host.ipnz.ru': TSIG 'key-sync'
Пробовал и права 666 ставить, и путь к файлу менял на /var/named/var/log/named.conf - ни в том, ни в другом случае не изменяется файл =(
как можно проверить работу perl скрипта? На чем он именно запарывается?

заранее спасибо за ответ.

Re: Авто синхронизация зон в BIND под FreeBSD

Добавлено: 2011-12-09 14:06:59
schmel
забыл.
FreeBSD 8.2
Perl 5.12

Код: Выделить всё

$PROGRAM_NAME='zoneadd';
my %cfg=(notifylog=>'/var/named/var/log/bind/notify.log',
        'named.conf'=>'/var/named/var/log/bind/named.conf',
        restart_cmd=>'/etc/rc.d/named restart',
        mail_cmd=>'echo "%zone created by %server at %time" |mail -s "%zone created
        failed_mail_cmd=>'echo "ALARM: DNS server NOT RESTARTED" |mail -s "ALARM: D
        interval=>10,
        daemon=>0,
        allowed=>['85.231.37.82'], #ip первичного
        keynames=>{
                '85.231.37.82'=>'key-sync',
        },pattern=>"//added: %time\n"
                ."zone \"\%zone\" {\n"
                ."\ttype slave;\n"
                ."\tfile \"/etc/namedb/slave/\%zone\";\n"
                ."\tmasters { \%server; };\n"
                ."\tallow-query { localhost; 0.0.0.0/0; };\n"
                ."\tallow-notify { \%server; };\n"
                ."\tallow-transfer { \%server; };\n};\n");

Re: Авто синхронизация зон в BIND под FreeBSD

Добавлено: 2011-12-09 14:19:35
schmel
Если запустить скрипт в дебаг режиме, то он уходит в бесконечный цикл.

Код: Выделить всё

main::(./zoneadd.pl:18):                keynames=>{
main::(./zoneadd.pl:19):                        '85.231.37.82'=>'key-sync',
  DB<1> s
main::(./zoneadd.pl:31):        if ( $cfg{'daemon'} ) {
  DB<1> s
main::(./zoneadd.pl:43):        open ZONES, $cfg{'named.conf'} or die $cfg{'named.conf'}." ".$!;
  DB<1> s
main::(./zoneadd.pl:44):        while (<ZONES>) {
  DB<1> s
main::(./zoneadd.pl:45):                if ( /^zone\s+"([\w\.]+)"\s+{/ ) {
  DB<1> s
main::(./zoneadd.pl:45):                if ( /^zone\s+"([\w\.]+)"\s+{/ ) {
  DB<1> s
main::(./zoneadd.pl:45):                if ( /^zone\s+"([\w\.]+)"\s+{/ ) {
  DB<1> s
main::(./zoneadd.pl:45):                if ( /^zone\s+"([\w\.]+)"\s+{/ ) {
  DB<1> s
main::(./zoneadd.pl:45):                if ( /^zone\s+"([\w\.]+)"\s+{/ ) {
Означает ли это что скрипт не может прочитать файл named.conf?

Re: Авто синхронизация зон в BIND под FreeBSD

Добавлено: 2011-12-13 7:59:42
5chme1
Может у меня со скриптом не так, что-то?
Из всех решений найденных в гугле по автоматической синхронизации зон, это самое простое и удобное.


#!/usr/bin/perl -w
#Created by stimpack <alexey.kerdivare@gmail.com>
#at 2010/02/19

use strict;
use POSIX 'setsid';
use English;

$PROGRAM_NAME='zoneadd';
my %cfg=(notifylog=>'/var/named/var/log/bind/notify.log',
'named.conf'=>'/var/named/var/log/bind/named.conf',
restart_cmd=>'/etc/rc.d/named restart',
mail_cmd=>'echo "%zone created by %server at %time" |mail -s "%zone created by %server at %time" root@bzpz.ru',
failed_mail_cmd=>'echo "ALARM: DNS server NOT RESTARTED" |mail -s "ALARM: DNS server NOT RESTARTED" root@bzpz.ru',
interval=>10,
daemon=>1,
allowed=>['192.168.2.254'],
keynames=>{
'192.168.2.254'=>'key-sync',
},pattern=>"//added: %time\n"
."zone \"\%zone\" {\n"
."\ttype slave;\n"
."\tfile \"/etc/namedb/slave/\%zone\";\n"
."\tmasters { \%server; };\n"
."\tallow-query { localhost; 0.0.0.0/0; };\n"
."\tallow-notify { \%server; };\n"
."\tallow-transfer { \%server; };\n};\n");

#use Data::Dumper;print Dumper(\%cfg);exit;
#Daemon part
if ( $cfg{'daemon'} ) {
open(STDIN,'</dev/null');
open(STDOUT,'>/dev/null');
open(STDERR, '>&STDOUT');
defined( my $pid = fork) or die('Error: Can\'t fork '.$!);
exit if $pid;
setsid or die('Error: Can\'t start new session!');
umask 0;
chdir('/');
$PROGRAM_NAME='zoneadd';
}

open ZONES, $cfg{'named.conf'} or die $cfg{'named.conf'}." ".$!;
while (<ZONES>) {
if ( /^zone\s+"([\w\.]+)"\s+{/ ) {
push @{$cfg{'zones'}}, $1;
}
}
close ZONES;

#Main cycle
my $exit;
$cfg{'notifylog_size'}= -s $cfg{'notifylog'} or die "Empty or nonexistent notify log!\n";
while ( ! defined($exit) ) {
sleep int($cfg{'interval'});
if ( -s $cfg{'notifylog'} > $cfg{'notifylog_size'}) {
processing_log() or $exit=1;
}
}



##########################
#Functions
##########################
sub processing_log{
my ($log,$server,$domain,$keyname);
my @notifies;
#Parse log
open LOG, $cfg{'notifylog'} or die $cfg{'notifylog'}." ".$!;
while (<LOG>) {
$log.=$_;
if ( /notify: notice: client ([\d\:\.]+)#\d+: received notify for zone '([-\w\.]+)': TSIG '([\w\.]+)': not authoritative/ ) {
($server,$domain,$keyname)=($1,$2,$3);
foreach ( @{$cfg{'allowed'}}) {
if ( $_ eq $server and $cfg{'keynames'}->{$server} eq $keyname ) {
push @notifies, {server=>$server,domain=>$domain};
}
}
}
}
#Clean log and move processed data to other log
close LOG;
open LOG, '>',$cfg{'notifylog'} or die $cfg{'notifylog'}." ".$!;
print LOG "cleaned by ".$PROGRAM_NAME."\n";
close LOG;
open LOG, '>>',$cfg{'notifylog'}.'.'.$PROGRAM_NAME or die $cfg{'notifylog'}.'.'.$PROGRAM_NAME." ".$!;
print LOG $log;
close LOG;
$cfg{'notifylog_size'}= -s $cfg{'notifylog'} or die "Empty or nonexistent notify log!\n";

#Create backup
if ( scalar(@notifies) ) {my $config;
open ZONES, $cfg{'named.conf'} or die $cfg{'named.conf'}." ".$!;
while (<ZONES>) { $config.=$_;}
close ZONES;
open ZONES, '>',$cfg{'named.conf'}.'.'.time or die $cfg{'named.conf'}.'.'.time." ".$!;
print ZONES $config;
close ZONES;
}
#Parse notifies
my $restart=0;
foreach my $notify ( @notifies ) {
#Check for already registered
my $found=0;
foreach ( @{$cfg{'zones'}}) {
if ( lc($_) eq lc($notify->{'domain'}) ) { $found++;last;}
}
next if $found;
#Create addons/mail
my $time=scalar(localtime(time));
my ($zone,$mail)=($cfg{'pattern'},$cfg{'mail_cmd'});
$zone=~s/\%server/$notify->{'server'}/g;
$zone=~s/\%zone/$notify->{'domain'}/g;
$zone=~s/\%time/$time/g;
$mail=~s/\%server/$notify->{'server'}/g;
$mail=~s/\%zone/$notify->{'domain'}/g;
$mail=~s/\%time/$time/g;
#Append to main conf
open CONF, '>>'.$cfg{'named.conf'} or die $cfg{'named.conf'}." ".$!;
print CONF $zone;
close CONF;
#add to self array
push @{$cfg{'zones'}}, $notify->{'domain'};
#Admin notify
system($mail);
$restart++;
}
if ( $restart ) {
system($cfg{'restart_cmd'}) and system($cfg{'failed_mail_cmd'});
sleep 5;
$cfg{'notifylog_size'}= -s $cfg{'notifylog'} or die "Empty or nonexistent notify log!\n";
}
return 1;
}

Re: Авто синхронизация зон в BIND под FreeBSD

Добавлено: 2014-02-12 15:31:45
Niferman
Такая же беда как у автора темы.
все настроил - в логах слейва есть такие записи

Код: Выделить всё

#tail -f /var/log/bind/bind-notify.log
12-Feb-2014 13:26:57.813 notify: notice: client 94.100.86.112#8327: received notify for zone 'gamenn.ru': TSIG 'rndc-key': not authoritative
tail: /var/log/bind/bind-notify.log: файл усечен
cleaned by zoneadd
но в файле named.conf записи не появляется, как и самого файла с описанием зоны.
местоположение файлов и записей в zoneadd.conf соответствуют . Может еще права какие надо выставить?

Re: Авто синхронизация зон в BIND под FreeBSD

Добавлено: 2014-04-10 8:59:39
Niferman
У меня завелось и все работает. Возникла задача реализации удаления зон на вторичном сервере при удалении на основном. Никто не реализовывал такое?

Re: Авто синхронизация зон в BIND под FreeBSD

Добавлено: 2014-10-15 8:53:24
GooD's
Помогите решить та же самая фигня =( :(

Re: Авто синхронизация зон в BIND под FreeBSD

Добавлено: 2014-10-16 9:25:42
Niferman
GooD's писал(а):Помогите решить та же самая фигня =( :(
Чуть позже могу кинуть скрипт с которым у меня завелось. Почту давай.

Re: Авто синхронизация зон в BIND под FreeBSD

Добавлено: 2014-10-16 9:49:22
GooD's
Niferman писал(а):
GooD's писал(а):Помогите решить та же самая фигня =( :(
Чуть позже могу кинуть скрипт с которым у меня завелось. Почту давай.
Заранее спасибо..

Код: Выделить всё

finalls@mail.ru

Re: Авто синхронизация зон в BIND под FreeBSD

Добавлено: 2014-10-20 9:00:00
GooD's
GooD's писал(а):
Niferman писал(а):
GooD's писал(а):Помогите решить та же самая фигня =( :(
Чуть позже могу кинуть скрипт с которым у меня завелось. Почту давай.
Заранее спасибо..

Код: Выделить всё

finalls@mail.ru
Добрый день,
А вы не забыли скинуть ?) а то жду жду а почта всё пустая и пустая =)

Re: Авто синхронизация зон в BIND под FreeBSD

Добавлено: 2014-10-20 14:34:08
GooD's
Всё всем спасибо завелось... :Yahoo!:

Re: Авто синхронизация зон в BIND под FreeBSD

Добавлено: 2014-10-26 10:55:08
Niferman
Так я вроде как отправлял письмо. в ответ ничего не пришло. О том что не доставлено....

Re: Авто синхронизация зон в BIND под FreeBSD

Добавлено: 2014-10-31 21:11:34
Raven2000
зачем скрипт то бинт и сам может синхронизировать

Re: Авто синхронизация зон в BIND под FreeBSD

Добавлено: 2014-11-26 12:50:12
Niferman
Затем, что не всегда есть полные права на оба сервера ....
Как например в моем случае

Re: Авто синхронизация зон в BIND под FreeBSD

Добавлено: 2014-11-26 16:30:29
Raven2000
При чём тут права. Есть мастер есть слейв. И они между собой и проволяи работу.
При необходимости могу скинуть карту и конфиги днс с динамикой с АД и ДСП и много зонностью и под новые версии.

Re: Авто синхронизация зон в BIND под FreeBSD

Добавлено: 2014-11-30 1:10:17
Niferman
Если не затруднит выложи. Думаю не только мне интересно будет.

Авто синхронизация зон в BIND под FreeBSD

Добавлено: 2015-04-15 17:36:34
adminka
тоже самое

как бы на вторичке получаю запись о новой зоне
15-Apr-2015 16:27:48.959 notify: notice: client 192.168.х.у#47284/key home-reaton: received notify for zone 'endend.lv': TSIG 'home': not authoritative

а реально зона не добавляется

adminka@KR-DNS:~$ sudo ls -l /var/log/bind/
total 44
-rwxr-xr-x 1 bind bind 19 Apr 15 16:27 bind-notify.log
-rw-rw-rw- 1 root root 32899 Apr 15 16:27 bind-notify.log.zoneadd
adminka@KR-DNS:~$ sudo ls -l /etc/bind/named.conf.zones
-rwxr-xr-x 1 bind bind 2107 Mar 27 14:07 /etc/bind/named.conf.zones


в файле /etc/init.d/zoneadd

'named.conf'=>'/etc/bind/named.conf.zones',

Авто синхронизация зон в BIND под FreeBSD

Добавлено: 2015-04-16 8:09:47
Alex Keda
Уведомление было, да, но не авторитативное.
Поэтому и нет зоны.

Авто синхронизация зон в BIND под FreeBSD

Добавлено: 2015-05-09 21:35:23
Raven2000
упс забыл выложить, хорошо 12 выложу и мастера и 1 слейва и внутренние и внешнюю зону