динамический днс / ddns / dyndns - Printable Version +- ispCP - Board - Support (http://www.isp-control.net/forum) +-- Forum: ispCP Omega International Area (/forum-22.html) +--- Forum: Russian Corner (/forum-53.html) +--- Thread: динамический днс / ddns / dyndns (/thread-11790.html) Pages: 1 2 |
динамический днс / ddns / dyndns - flames - 10-01-2010 12:31 PM Свой динамический ДНС сервис / Dynamic DNS Service чтоб все работало нужно выполнить следующие требования: - Один Debian-Server с ISPCP, FQHN myhost.server.tld, bind9 и dnsutils (если вы устанавливали сервер по документации испцп, то все отлично). - Два IP адреса из разных сеток 123.123.111.10 и 123.123.222.10, которые уже настроены в /etc/network/interfaces. - Оба IP адреса должны быть зарегистрированы как Nameserver. Регистрация ДНС серверов происходит по разному, это зависит от вашего регистратора доменов. Для этого требуются следующие данные: 123.123.111.10 ns1.ddns.tld 123.123.222.10 ns2.ddns.tld - Ну и конечно нам нужен домен, который мы будем обновлять динамически ddns.tld. 1. в панели регистратора поставим IN NS записи на ns1.ddns.tld и ns2.ddns.tld (это будет работать только после регистрации этих имен с нашими IP aдресами) 1.1 на нашем сервере создадим пару файлов, nsupdate.key будет содержать TSIG ключ, который позволяет зашифровано и безопасно обновлять домен. Во втором файле, nsupdate.conf, будет днс зона для динамического домена ddns.tld. и так... touch /etc/bind/nsupdate.key touch /etc/bind/nsupdate.conf chown bind:bind /etc/bind/nsupdate.* chmod 644 /etc/bind/nsupdate.* 1.2 надо инклудировать эти новые файлы в главную конфигурацию Bind9. Открываем нашим любимым эдитором (я люблю vi, пользуйте что вам по душе) vi /etc/bind/named.conf и в самом начале добавляем две строки: include "/etc/bind/nsupdate.key"; include "/etc/bind/nsupdate.conf"; Внимание, что-бы панель не попортила наши изменения, надо прописать их и сюда vi /etc/ispcp/bind/working/named.conf и добавить опять-же те две строки, в самом верху: include "/etc/bind/nsupdate.key"; include "/etc/bind/nsupdate.conf"; 1.3 Открываем конфигурационный файл vi /etc/bind/nsupdate.conf и добавляем новую днс зону PHP Code: // dmn [ddns.tld] cfg entry BEGIN.[/i] 1.4 создаем Cache-файл для Bind в котором он будет сохранять обновления зоны touch /var/cache/bind/ddns.tld.db chown bind:bind /var/cache/bind/ddns.tld.db chmod 644 /var/cache/bind/ddns.tld.db 1.5 в Cache-файл vi /var/cache/bind/ddns.tld.db добавим изначальную конфигурацию PHP Code: $ORIGIN . 2. Вот тут нам потребуется выше названый ключ для шифрования обновлений, чтоб его создать воспользуемся генератором из пакета dnsutils cd /etc/bind dnssec-keygen -a HMAC-MD5 -b 512 -n HOST ddns.tld генератор создаст нам два файла, K<keyname>+157+<keyid>.key и K<keyname>+157+<keyid>.private. <keyname> является названием ключа, которое, если я не ошибаюсь, мы прописали в /etc/bind/nsupdate.conf. Это не совпадение, параметр генератора -n HOST <keyname> наколдовал. <keyid> просто число сгенерированое случайным методом, чтоб избежать повторность. В нашем примере мы получим два файла примерно с таким названием Kddns.tld.+157+41090.key и Kddns.tld.+157+41090.private, откроем эдитором Kddns.tld.+157+41090.private и скопируем длинный ключ, который примерно так выглядит: Y1xlce0Ub0ePfxslRVbfYUh/berC9R32XmFaen3VScpHw9fX79ZNo9ESGUhH5qtVXoTyyvdouP7t1TIgm62Whg== 2.1 Засунем его в /etc/bind/nsupdate.key под секцией secret, добавим все это вот так: PHP Code: key ddns.tld { 2.2 Перезагрузим Bind /etc/init.d/bind9 restart почти все, динамические обновления зоны уже работают! С помощью nsupdate мы можем добавлять и удалять записи в зоне ddns.tld! 3. Так как у нас есть рабочая динамическая зона, мы хотим и удобный для управления Web-UI и возможность обновлять через HTTP. 3.1 Скачиваем DDNS Update Utility и распаковываем cd /var/www/ispcp/gui/tools/ wget http://citex.net/ddns.tar.gz tar xfvz ddns.tar.gz mv ddns-0.3 ddns 3.2 В /etc/apache2/sites-enabled/00_master.conf и /etc/ispcp/apache/00_master.conf добаим алиас, в главный VirtualHost Alias /ddns /var/www/ispcp/gui/tools/ddns/ Результат примерно такой: PHP Code: Alias /pma /var/www/ispcp/gui/tools/pma/ 3.3 Скрипту требуется один из файлов, что мы генерировали раньше, тот что с суффиксом .key, скопируем его cp /etc/bind/Kddns.tld.+157+41090.key /var/www/ispcp/gui/tools/ddns/keys/Kddns.tld.+157+41090.key 3.4 Укажем его в конфигурации скрипта vi /var/www/ispcp/gui/tools/ddns/inc/config.php подскажем изменяемой $conf['nskey'] название файла $conf['nskey'] = "keys/Kddns.tld.+157+41090.key"; кроме того укажем имя и пароль администратора $conf['adminuser'] = "admin"; $conf['adminpass'] = "pass123"; и домен который мы хотим обновлять по умолчанию (в случае если мы создали в шагах 1, 1.3, 1.4 и 1.5 больше чем одну динамическую зону) $conf['domain'] = 'ddns.tld'; 3.5 для аутентификации пользователей требуется база данных MySQL, создадим ее и назовем ddns, в нее добавим следующие таблички: PHP Code: CREATE TABLE `accounts` ( PHP Code: CREATE TABLE IF NOT EXISTS `domains` ( PHP Code: INSERT INTO `accounts` (`A_id`, `user`, `password`, `dmnid`, `approved`, `email`, `registered`, `lastupdate`, `ip`) VALUES PHP Code: INSERT INTO `domains` (`D_id`, `domain`) VALUES 3.7 в /var/www/ispcp/gui/tools/ddns/inc/db.php нужно теперь указать доступ к базе данных MySQL # Database connection. $db_host = "localhost"; $db_user = "dbuser"; $db_pass = "dbpass"; $db_database = "ddns"; лично я создал нового MySQL юзера для скрипта и дал ему права только на базу данных ddns, чтоб не рисковать root-юзером. 3.8 Что-бы скрипт мог выполнять команду nsupdate, требуется разрешить PhP пользовать функцыю system(). Это мы позволим только главному VirtualHost-у, на котором работает панель, что-бы нашы клиенты не могли воспользоваться этой дыркой в безопасности сервера. vi /var/www/fcgi/master/php5/php.ini удалим system из строки disable_functions: disable_functions = show_source, system, shell_exec, passthru, exec, phpinfo, shell, symlink результат такой: disable_functions = show_source, shell_exec, passthru, exec, phpinfo, shell, symlink теперь перезагрузим апач /etc/init.d/apache2 restart т.к. больше изменений в его конфигурации, и в конфигурации к нему подключеных модуелей больше не будет. 3.9 Наконец, хосты myhomepc.ddns.tld и myworkpc.ddns.tld мы можем цеплять на наш домашний или любой другой IP адрес. Обновления вступают в силу в течении нескольких минут, восновном даже секунд! Что-бы добавить больше хостов, повторите шаг 3.6, тоесть добавьте запись в базу данных. Или в DDNS Update Utility кликните на Register, там все само объяснится. Для обновления вручную идем по адресу http://myhost.server.tld/ddns и кликнем на Update Для обновленя в рутерах, скриптах и других автоматизациях, используем HTTP URL: http://myhost.server.tld/ddns/ddns.php?user=<username>&pass=<password> Если вы создали несколько динамических зон, то пользователь должен указать домен, на котором он заегистрировал свой хост, для чего требуется подвесить параметр domain к URL: http://myhost.server.tld/ddns/ddns.php?user=<username>&pass=<password>&domain=<domain> IP адрес хоста восновном распознается автоматически, если это по какой-то причине не срабатывает или не требуется, то можно указать его вручную и подцепить к URL: http://myhost.server.tld/ddns/ddns.php?user=<username>&pass=<password>&ip=<ipaddress> вот так можно указать оба параметра: http://myhost.server.tld/ddns/ddns.php?user=<username>&pass=<password>&domain=<domain>&ip=<ipaddress> Дополнительная информация Несколько нужных команд для Bind Что-бы делат ручные изменения в динаической зоне ее надо "заморозить". Внимание, замороженя зона не принимает обновления от nsupdate. freeze сохранит все динамические изменения в кэше зоны и поставит ее в статус static zone: rndc freeze ddns.tld после ручных изменений требуется перезагрузить зону, что-бы Bind их принял. reload работает только со static zone и замороеными динамическими: rndc reload ddns.tld после чего надо зону опять "оттаить". thaw поменяет статус oбратно в dynamic zone. В этом статусе зона не принемает ручных изменений, но принимает опять nsupdate: rndc thaw ddns.tld Функциональность зоны Скипт обновляет не только IN A запись хоста, еще он создает IN MX запись и wildcard на все под-домены хоста: PHP Code: host.ddns.tld. 60 IN A dyn-ip-address Дополнительные домены Что-бы добавить дополнительные домены/динамические зоны, повторите шаги 1, 1.3, 1.4 и 1.5, всем зонам укажите тот-же самый TSIG ключ. Добавьте записи в базу данных, как описано в параграфе 3.6. Новая версия скрипта (v. 0.3) Внимание пользователи старой версии: структура базы данных изменилась, сравните с файлом MYSQL.sql в архиве. To do Скрипт еще очень молодой и находится в стадии alpha, требуются переводчики, некоторые стринги прошите железно в скрипт и не берутся из языковых файлов, могут быть ошибки и недоделки. Кто хочет помочь, пишите. За ущерб связаный с моей документацией и скриптом я не несу ни какой ответственности. Удачи. RE: динамический днс / ddns / dyndns - Diza - 10-01-2010 02:02 PM ооочень интересно. RE: динамический днс / ddns / dyndns - DragonZX - 10-01-2010 04:58 PM Переводи, оживление русского уголка нам не помешает... Может и админы спихнут русских на отдельный форум, чего бы очень хотелось.... RE: динамический днс / ddns / dyndns - flames - 11-12-2010 04:49 PM готово RE: динамический днс / ddns / dyndns - server801 - 11-12-2010 05:13 PM домен есть, выделить место? RE: динамический днс / ddns / dyndns - flames - 11-12-2010 05:29 PM не понял, куда место? а к теме я хочу подчеркнуть что у меня работает все отлично уже несколько месяцв. и уже больше 100 динамических хостов. для тестирования я ставил два домена. но продуктивно пользую только один. люди довольны, проблем нету. скрипт я по маленьку усовершенствую. если кому-то понравится, поделитесь опытом, посоветуйте что можно лучше сделать. грамматические ошибки в документации игнорируйте, русский язык не родной. RE: динамический днс / ddns / dyndns - SolarW - 11-29-2010 08:40 AM flames, спасибо за замечательное руководство (+1 к Reputation) Хотелось бы обратить внимание на пару ошибок (не грамматических) 1) Начиная с пункта 3.3 в нескольких местах указывается путь /etc/www/ispcp/gui/tools/ddns/ вместо необходимого /var/www/ispcp/gui/tools/ddns/ 2) После пункта 3.8 неплохо было бы сделать /etc/init.d/apache2 restart 3) В английской версии веб-интерфейса по пути http://mydomain.tld/ddns/index.php?site=register не подписано последнее поле, где должно быть "Retype password" Ну и от меня вопрос - в пункте 3.6 этот код Code: INSERT INTO `domains` (`D_id`, `domain`) VALUES И, похоже есть еще вопрос. Все сделал согласно руководству. Для тестирования функциональности открываю адрес Code: http://mydomain.tld/ddns/update.php?user=myhomepc&pass=pass123 Code: Fatal error: Call to a member function query() on a non-object in /var/www/ispcp/gui/tools/ddns/update.php on line 35 RE: динамический днс / ddns / dyndns - SolarW - 11-29-2010 09:48 AM Так, похоже еще ошибочка. 4) В пункте 3.8 для обновления сказано использовать адрес Code: http://myhost.server.tld/ddns/update.php?user=<username>&pass=<password> Code: http://myhost.server.tld/ddns/ddns.php?user=<username>&pass=<password> Выполнение запроса Code: http://myhost.server.tld/ddns/ddns.php?user=myhomepc&pass=pass123 Code: update failed: SERVFAIL Fatal Error: nsupdate command failed, try again later. Code: http://myhost.server.tld/ddns/index.php?site=update В пункте 3.8 удалил system из строки disable_functions в файле /var/www/fcgi/master/php5/php.ini и перезапустил апач. RE: динамический днс / ddns / dyndns - SolarW - 11-29-2010 05:24 PM Разобрался. Проблема была в файле где хранится зона. Отсюда просьба поправить еще одну ошибку в руководстве: 5) В пункте 1.5 строку vi /var/cache/bind/ddns.tld заменить на vi /var/cache/bind/ddns.tld.db RE: динамический днс / ddns / dyndns - pankaj86775 - 11-29-2010 06:32 PM what is this language? i cant understand this |