**************************************************************************************************** ## 1. Подключаемся к нужному серверу ```sh ssh root@bigfoottrade.kz -p 2222 ``` **************************************************************************************************** Собственный DynDNS на Linux для observer.kz для начала устанавливаем BIND 9.13 and later по этому мануалу https://www.dmosk.ru/miniinstruktions.php?mini=bind-ubuntu и по этому для новой версии https://www.netss.by/?p=26 ```sh sudo apt-get update && sudo apt-get install bind9 dnsutils && sudo apt-get install bind9utils ``` Adding the service to autostart ```sh systemctl enable bind9 ``` Checking if the service is working ```sh nslookup dmosk.ru 127.0.0.1 ``` Opening the configuration file ```sh mcedit /etc/bind/named.conf.options ``` Для глобальных запросов добавляем строку: allow-query { any; }; Также добавляем в этот файл DNS сервера пересылки, на них будут перенаправляться запросы если локальный не содержит данных //forwarders { // 8.8.8.8; // 8.8.4.4; //}; Проверяем настройки командой (ответ должен быть пустым): sudo named-checkconf Перезагружаем: sudo systemctl restart bind9 Проверяю версию BIND: named -v Выдало: BIND 9.16.1-Ubuntu (Stable Release) Можно проверить какой IP выдаст на DNS запрос dig locust.kz A На этом базовая настройка закончена. Наш сервер готов принимать и отдавать запросы и работать, как кэширующий dns. Смотрим какие зоны поддерживает bind: ```sh mcedit /etc/bind/named.conf.local ``` смотрим подробнее что записано в зоне: ```sh sudo cat /var/cache/bind/dirt.kz ``` Далее создаём клиента согласно: https://help.ubuntu.ru/wiki/динамический_днс_своими_руками Перейдем в него. cd /etc/bind/ Генерируем пару ключь для обмена информацией между клиентом и сервером: sudo tsig-keygen -a hmac-sha512 dirt.kz > dirt.kz.key sudo tsig-keygen -a hmac-sha512 locust.kz > locust.kz.key Для загрузки ключа добавляем его файл mcedit /etc/bind/named.conf строчку с указанием файла, где определен ключ. include "/etc/bind/dirt.kz.key"; include "/etc/bind/locust.kz.key"; Следующим шагом необходимо в файл mcedit /etc/bind/named.conf.local прописать доменную зону, которой мы оперируем. zone "dirt.kz" { type master; allow-update {key dirt.kz;}; file "/var/cache/bind/dirt.kz"; }; zone "locust.kz" { type master; allow-update {key locust.kz;}; file "/var/cache/bind/locust.kz"; }; В файле "mcedit /var/cache/bind/dirt.kz" должны быть прописанны записи домена где: В файле "mcedit /var/cache/bind/locust.kz" должны быть прописанны записи домена где: Поле $ORIGIN для подставки имени в знак @, поэтому знак @ не используется просто так в тексте Если используется символ @ то он заменяется на то что было прописанно в $ORIGIN смотреть в: https://help.dyn.com/how-to-format-a-zone-file/ SOA — Начало полномочий подробней смотри в https://k.psu.ru/wiki/BIND9_(методическое_пособие)#SOA NS — Сервер имён A — рекорд MX — Почта для обмена CN — Каноническое имя PTR — указатель И таким содержимым: $ORIGIN dirt.kz $TTL 604800 @ IN SOA bigfoottrade.kz. root.bigfoottrade.kz. ( 8 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS bigfoottrade.kz. Второй файл для locust.kz: $ORIGIN . $TTL 604800 ; 1 week locust.kz IN SOA bigfoottrade.kz. irigm.mail.ru. ( 134 ; serial 604800 ; refresh (1 week) 86400 ; retry (1 day) 1419200 ; expire (2 weeks 2 days 10 hours 13 minutes 20 seconds) 604800 ; minimum (1 week) ) NS bigfoottrade.kz. $TTL 3600 ; 1 hour A 5.76.254.182 $ORIGIN locust.kz. * A 127.0.0.1 Правлю права доступа: sudo chown -R bind:bind /etc/bind Если настройки были первоначальными то стоит удалить файл /var/cache/bind/locust.kz.jnl и переинициализировать его командой: sudo rndc reconfig Потом следует вызвать: sudo systemctl restart bind9 Команда выше также переписывет накопившиеся данные из /var/cache/bind/locust.kz.jnl в /var/cache/bind/locust.kz так что после обновления если охото быстрей взглянуть на текстовое значение следует повторно вызвать эту команду После настроек сервера перезагружаем его: sudo named-checkconf sudo rndc reload sudo systemctl restart bind9 sudo rndc status journalctl | grep bind sudo journalctl -u bind9 -n 50 Создаю скрипт /etc/ddns/ddns.sh для обновления доменных зон удалённо с доступом по ключу: Файл из примера: #!/bin/bash TTL=3600 SERVER=ns.dyndns.my HOSTNAME=dhost.dyndns.my ZONE=dyndns.my KEYFILE=Kdyndns.my.+157+48025.private new_ip_address=`curl http://dyndns.my/ip.php` #Этот файлик создадим позднее на сервере! cd /etc/ddns nsupdate -v -k $KEYFILE << EOF server $SERVER zone $ZONE update delete $HOSTNAME A update add $HOSTNAME $TTL A $new_ip_address send EOF Мой модифицированный файл для обновления IP в Bind9 DNS сервису по созданному файлу ip.txt, файл ip.txt создаётся в PHP скрипте который описан ниже: #!/bin/bash TTL=3600 SERVER=127.0.0.1 HOSTNAME=*.dirt.kz ZONE=dirt.kz KEYFILE=/etc/bind/dirt.kz.key new_ip_address= FILE=/etc/ddns/ip.txt if test -f "$FILE"; then new_ip_address=`cat $FILE` rm $FILE fi len=${#new_ip_address} if [ $len -gt 3 ] then echo "New IP address = $new_ip_address" else echo "Not find IP address" exit fi cd /etc/ddns sudo nsupdate -v -k $KEYFILE << EOF server $SERVER zone $ZONE update delete $HOSTNAME A update add $HOSTNAME $TTL A $new_ip_address update delete dirt.kz A update add dirt.kz $TTL A $new_ip_address send EOF echo "OK" Так как PHP работает за HAProxy то немного модифицировал скрипт который сохраняет IP обратившегося клиента в файл, а именно использую "x-forwarded-for" для передачи IP адреса клиента: '; print_r(getallheaders()); echo ''; // PROBLEM IS each browser has different "x-forwarder-for" some "X-Forwarder-for" and some browser gave you 2x ip "x.x.x.x, x.x.x.x" foreach ( getallheaders() as $k => $v) { if ( strtolower($k) == 'x-forwarded-for' ) { $tmp = explode(', ', $v); if ( $tmp[count($tmp)-1] != '' ) $_SERVER['REMOTE_ADDR'] = $tmp[count($tmp)-1]; } } if(isset($_GET["key"]) && $_GET["key"]=='4fygxNq539NFfUm6SOd2vn52GwL7o7NA'){ $myfile = fopen("/etc/ddns/ip.txt", "w"); fwrite($myfile, $_SERVER['REMOTE_ADDR']); fclose($myfile); } echo $_SERVER['REMOTE_ADDR']; ?> Проверяем что находит IP по доменному имени nslookup dirt.kz 127.0.0.1