216 lines
8.3 KiB
Markdown
216 lines
8.3 KiB
Markdown
****************************************************************************************************
|
||
## 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) <id:d497c32>
|
||
Можно проверить какой 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 адреса клиента:
|
||
<?php
|
||
|
||
echo '<pre>'; print_r(getallheaders()); echo '</pre>';
|
||
|
||
// 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
|