И всё прочее, что касается HTML
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
-
thefree
- лейтенант
- Сообщения: 980
- Зарегистрирован: 2008-12-29 9:23:19
- Откуда: Весёлая Страна
Непрочитанное сообщение
thefree » 2010-06-09 15:09:10
1. В панели ISP создаем администратора с правами только на функцию domain
2. Подготавливаем slave и в настройках делаем include где у нас будут записи о зонах
На slave ставим скрипт в крон, я поставил раз в 30 минут.
Код: Выделить всё
#!/usr/bin/perl
use strict;
use warnings;
use LWP::UserAgent;
my $isp_url = "https://[b]IP-АДРЕС[/b]/manager/ispmgr?authinfo=[b]ЛОГИН[/b]:[b]ПАРОЛЬ[/b]&func=domain&out=text"; # адрес к панели ISPmanager
my $slave_dir = "/etc/namedb/slave"; # папка где хранить зоны
my $slave_file = "/etc/namedb/slave.zone"; # фаил с описанием зон
my $master_ip = "[b]127.0.0.1[/b]"; # ip мастера
my $rndc_command = "/usr/sbin/rndc reload > /dev/null 2>&1"; # команда на релоуд binda
# шаблой записи зоны %ZONE% - имя зоны (пример: ya.ru), %SLAVE_DIR% - папка где хранить зоны, %MASTER_IP% - ip мастера
my $zone = <<EOF;
zone "%ZONE%" {
type slave;
file "%SLAVE_DIR%/%ZONE%";
masters { %MASTER_IP%; };
notify no;
};
EOF
if (my @dns_tmp = get_master($isp_url)) {
my @dns;
foreach my $zone_tmp (@dns_tmp) {
my $zone_save = $zone;
$zone_save =~ s/%ZONE%/$zone_tmp/gi;
$zone_save =~ s/%SLAVE_DIR%/$slave_dir/gi;
$zone_save =~ s/%MASTER_IP%/$master_ip/gi;
push(@dns, $zone_save);
}
if (@dns) {
if (save_slave($slave_file, @dns)) {
system($rndc_command);
}
}
}
sub get_master {
my ($isp_url) = @_;
my @a;
my $ua = LWP::UserAgent->new();
my $response = $ua->get($isp_url);
if ($response->is_success) {
my $line = $response->decoded_content;
$line =~ s/name=//gi;
$line =~ s/owner=(.*)//gi;
@a = split('\s\n', $line);
} else {
die $response->status_line;
}
return @a ? @a : '';
}
sub save_slave {
my ($fname, @dns) = @_;
open(F,'>', $fname) or die "Cannot write to file \"$fname\"!\n";
print F @dns;
close F;
return 1;
}
sub get_slave {
my ($slave_dir) = @_;
my @a;
opendir SLAVE, $slave_dir || die "can't opendir $slave_dir: $!";
while (my $file = readdir SLAVE) {
if ($file !~ m/^\./ and -f "$slave_dir/$file") {
push(@a, $file);
}
}
closedir SLAVE;
return @a ? @a : '';
}
Для работы скрипта необходимо
http://www.freshports.org/www/p5-libwww/
Последний раз редактировалось
Alex Keda 2010-06-09 19:59:36, всего редактировалось 1 раз.
Причина: Товарищщи, цените чужое время, юзайте кнопочку [code]...
Не судите меня строго, Я не волшебник, а только учусь!
http://planetbsd.ru - RSS-агрегатор *BSD по Рунету
thefree
-
Хостинг HostFood.ru
-
Хостинг HostFood.ru
Тарифы на хостинг в России, от 12 рублей:
https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.:
https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах:
https://www.host-food.ru/domains/
-
Alex Keda
- стреляли...
- Сообщения: 35420
- Зарегистрирован: 2004-10-18 14:25:19
- Откуда: Made in USSR
-
Контактная информация:
Непрочитанное сообщение
Alex Keda » 2010-06-09 20:00:17
1. [quote] !=
Код: Выделить всё
2. ссылки на нормальные сайты оставлять не только можно, но и нужно - на этом интерент построен, вообще-то
Убей их всех! Бог потом рассортирует...
Alex Keda
-
thefree
- лейтенант
- Сообщения: 980
- Зарегистрирован: 2008-12-29 9:23:19
- Откуда: Весёлая Страна
Непрочитанное сообщение
thefree » 2010-06-10 9:29:47
в [quote] просто отображаются bbcode
Не судите меня строго, Я не волшебник, а только учусь!
http://planetbsd.ru - RSS-агрегатор *BSD по Рунету
thefree
-
thefree
- лейтенант
- Сообщения: 980
- Зарегистрирован: 2008-12-29 9:23:19
- Откуда: Весёлая Страна
Непрочитанное сообщение
thefree » 2010-06-10 11:34:30
Добавлена возможность поставить зоны в исключение, данные зоны не будут качаться.
Код: Выделить всё
my $isp_url = "https://IP-АДРЕС/manager/ispmgr?authinfo=ЛОГИН:ПАРОЛЬ&func=domain&out=text"; # адрес к панели ISPmanager
my $slave_dir = "/etc/namedb/slave"; # папка где хранить зоны
my $slave_file = "/etc/namedb/slave.zone"; # фаил с описанием зон
my $master_ip = "127.0.0.1"; # ip мастера
my $rndc_command = "/usr/sbin/rndc reconfig > /dev/null 2>&1"; # команда на релоуд binda
our %zone_exception = ('exemple.com' => 0, 'exemple.net' => '0'); # домены которые исключаем, если не надо оставляем пустым (пример: our %zone_exception = ();)
# шаблой записи зоны %ZONE% - имя зоны (пример: exemple.com), %SLAVE_DIR% - папка где хранить зоны, %MASTER_IP% - ip мастера
my $zone = <<EOF;
zone "%ZONE%" {
type slave;
file "%SLAVE_DIR%/%ZONE%";
masters { %MASTER_IP%; };
notify no;
};
EOF
-
Вложения
-
- ispmgr-bind.pl.txt
- (2.32 КБ) 79 скачиваний
Не судите меня строго, Я не волшебник, а только учусь!
http://planetbsd.ru - RSS-агрегатор *BSD по Рунету
thefree
-
vitich
- проходил мимо
Непрочитанное сообщение
vitich » 2014-02-27 17:37:50
Debian7
Скрипт генерирует вот так
zone "mydomain.kiev.ua dispmydomain.kiev.ua" {
type slave;
file "/etc/bind/slave/mydomain.kiev.ua dispmydomain.kiev.ua";
masters { 8.8.8.8; };
notify no;
};
Я бы поставил фрю, но там вдс

vitich
-
rayder
- лейтенант
- Сообщения: 661
- Зарегистрирован: 2008-12-18 16:29:43
- Откуда: Ukraine/Kiev
-
Контактная информация:
Непрочитанное сообщение
rayder » 2014-02-27 22:00:37
хм, для этого еще перл надо иметь... но фломастеры разные, так что такое
а я генерю обычным шеловским скриптиком

вот таким:
(да, есть недочеты но оно работает а дописывать времени нет.)
Код: Выделить всё
#!/bin/sh
master="<masterhost>";
syncuser="<isplogin>";
syncpwd="<isppassword>";
syncdir="/opt/bind/sync";
bindchw="bind:bind";
binddir="/opt/bind/conf.d";
bindfile="${binddir}/${master}.include";
tmpfile="${syncdir}/${master}.tlist";
_wget="$(which wget)"
if [ -z "${_wget}" ]; then
echo "Error: wget not found"
exit 1
fi
_awk="$(which awk)"
if [ -z "${_awk}" ]; then
echo "Error: awk not found"
exit 1
fi
_cat="$(which cat)"
if [ -z "${_cat}" ]; then
echo "Error: cat not found"
exit 1
fi
_cp="$(which cp)"
if [ -z "${_cp}" ]; then
echo "Error: cp not found"
exit 1
fi
_rm="$(which rm)"
if [ -z "${_rm}" ]; then
echo "Error: rm not found"
exit 1
fi
_dig="$(which dig)"
if [ -z "${_dig}" ]; then
echo "Error: dig not found"
exit 1
fi
_sort="$(which sort)"
if [ -z "${_sort}" ]; then
echo "Error: sort not found"
exit 1
fi
_chown="$(which chown)"
if [ -z "${_chown}" ]; then
echo "Error: chown not found"
exit 1
fi
if [ -z "${_rndc}" ]; then
echo "Error: rndc not found"
exit 1
fi
_checkconf="$(which named-checkconf)"
if [ -z "${_checkconf}" ]; then
echo "Error: named-checkconf not found"
exit 1
fi
if [ -f ${bindfile}.gen ]; then
${_rm} ${bindfile}.gen
fi
masterip=`${_dig} +short ${master} A`
if [ "x${masterip}" == "x" ]; then
echo "IP address for ${master} not found";
exit 1;
fi
${_wget} --quiet --no-check-certificate "https://${master}/manager/ispmgr?authinfo=${syncuser}:${syncpwd}&func=domain&out=text" -O ${tmpfile} >> /dev/null
zonelist=`${_cat} ${tmpfile} | ${_awk} '{print $1}' | ${_awk} -F '=' '{print $2}' | ${_sort}`
for zone in ${zonelist}
do
echo "
zone \"$zone\" {
type slave;
file \"slave/${zone}\";
masters { ${masterip}; };
};
" >> ${bindfile}.gen
done
${_checkconf} ${bindfile}.gen > /dev/null
if [ $? -ne 0 ]; then
echo "Config error, abort";
answer=`${_checkconf} ${bindfile}.gen`
${_rm} ${bindfile}.gen
exit 1;
else
if [ -f ${bindfile} ];then
${_cp} ${bindfile} ${bindfile}.last
fi
${_cp} ${bindfile}.gen ${bindfile}
${_rm} ${bindfile}.gen
fi
${_chown} -R ${bindchw} ${binddir}
${_rndc} reload
if [ $? -ne 0 ];then
echo "Reload fail, restore old file";
${_cp} ${bindfile}.last ${bindfile}
${_rm} ${bindfile}.last
${_rndc} reload
else
if [ -f ${bindfile}.last ];then
${_rm} ${bindfile}.last
fi
fi
вопрос к ТС: ты пробовал редактировать зоны через API? у меня что-то не вышло для subdomain редактировать записи (A,MX etc.).
Человеку свойственно ошибаться, но для нечеловеческих ляпов нужен компьютер.
rayder
-
thefree
- лейтенант
- Сообщения: 980
- Зарегистрирован: 2008-12-29 9:23:19
- Откуда: Весёлая Страна
Непрочитанное сообщение
thefree » 2014-03-16 8:47:53
vitich писал(а):Debian7
Скрипт генерирует вот так
zone "mydomain.kiev.ua dispmydomain.kiev.ua" {
type slave;
file "/etc/bind/slave/mydomain.kiev.ua dispmydomain.kiev.ua";
masters { 8.8.8.8; };
notify no;
};
Я бы поставил фрю, но там вдс

а там апи не изменились? у вы нет где потестировать. Если еще актуально, то в ЛС или тут отпишитесь.
Не судите меня строго, Я не волшебник, а только учусь!
http://planetbsd.ru - RSS-агрегатор *BSD по Рунету
thefree