Бесплатный личный Self Hosted Dynamic DNS с BIND и DNSSEC
Окружающая среда:
- Сервер: статический IP, работает BIND
- Home: динамический IP, работающий с Debian / * buntu
Генерация ключей
Первый шаг – создать ключ на сервере.
/etc/bind $ sudo dnssec-keygen -a HMAC-MD5 -b 512 -n HOST home.dynamic.n0where.net
Это действие создает два файла, которые будут называться по-разному на основе отдельных запусков.
Khome.dynamic.n0where.net.+157+#####.key Khome.dynamic.n0where.net.+157+#####.private
Содержание файла:
Khome.dynamic.n0where.net.+157+62567.key:
home.dynamic.n0where.net. IN KEY 512 3 157 <key>
Khome.dynamic.n0where.net.+157+62567.private:
Private-key-format: v1.3 Algorithm: 157 (HMAC_MD5) Key: <key> Bits: AAA= Created: 20160126233343 Publish: 20160126233343 Activate: 20160126233343
Файл ключа
Затем создайте файл ключа в /etc/bind/key.dynamic.n0where.net.
key dynamic.n0where.net. { algorithm HMAC-MD5; secret "<secret>"; };
Затем добавьте следующую строку в /etc/bind/named.conf.local, чтобы включить новый ключ.
include "/etc/bind/key.dynamic.n0where.net";
Динамическая зона
Добавьте зону для BIND.
// Dynamic zone zone "dynamic.n0where.net" IN { type master; allow-transfer {none;}; file "/etc/bind/db.dynamic.n0where.net"; update-policy { key "dynamic.n0where.net."; }; };
Определить файл /etc/bind/db.dynamic.n0where.net
$ORIGIN . $TTL 14400 ; 4 hours dynamic.n0where.net IN SOA ziost.n0where.net. admin.n0where.net. ( 9 ; serial 604800 ; refresh (1 week) 86400 ; retry (1 day) 2419200 ; expire (4 weeks) 604800 ; minimum (1 week) ) NS korriban.n0where.net
Перезапустите BIND.
Клиент
Сначала перенесите файлы .key и .private в клиентскую систему с помощью выбранного транспортного механизма. После размещения, chmod каждый файл до 0400.
-r-------- 1 user user 128 Jan 26 17:58 Khome.dynamic.n0where.net.+157+62567.key -r-------- 1 user user 229 Jan 26 17:58 Khome.dynamic.n0where.net.+157+62567.private
Скрипт обновления
Средство nsupdate в пакете dnsutils будет выполнять обновление.
#!/bin/bash EXT_IP=$(wget -qO- http://ifconfig.me/ip) KEY="/path/to/Khome.dynamic.n0where.net.+157+62567.private" cat <<EOF | nsupdate -k "$KEY" server n0where.net zone dynamic.n0where.net update delete home.dynamic.n0where.net. A update add home.dynamic.n0where.net. 86400 A $EXT_IP show send EOF
Расписание Cron
Быстрый тест с помощью dig покажет, будет ли обновлена запись.
$ dig @8.8.8.8 +short home.dynamic.n0where.net
Скрипт можно планировать автоматически запускать на клиенте с помощью cron.
$ crontab -l */15 * * * * /path/to/<script>