“Статический” динамический IP адрес

С открытием в другом городе филиала офиса потребовалось настроить туда сервер. Всё бы хорошо, но там нет статического IP-адреса. Конечно же можно много чего придумывать: например, можно использовать решение третьих компаний (dyndns), использовать канал OpenVPN оттуда и заходить удаленно именно через vpn. Но эти решения также имеют свои недостатки. К слову и их также я применил, но данная статья вовсе не об этом.
Итак. Что нам нужно? Нам нужен DNS-сервер (благо у меня имеются) на постоянном IP-шнике. Там крутится Bind9, потому всё будет применимо именно к такой версии.
Что будет? Сервер будет получать адрес по dhcpcd. Он должен оповестить DNS-сервер об этом: изменить ему зону, удалив старый IP-адрес и добавив запись с новым. Теперь загляним под копот.

Для начала надо определиться с зоной ДНС. Можно выбрать зону совершенно независимо от реальных. Назовём её, скажем, dynamics.lan

Теперь сгенерерируем ключи, необходимые серверу, для обновления зоны на DNS:
dnssec-keygen -a HMAC-MD5 -b 512 -n USER dyn
Мы получили 2 файла – *.key и *.private. По опыту могу сказать, что сразу надо проверить идентичность ключей (иногда вставляется лишний пробел).

Файл *.private положем на DNS-сервер в папку /etc/bind
и добавим в /etc/bind/named.conf описание зоны:


key dyn {
algorithm hmac-md5;
secret "ключ";
};
.........................
zone "dynamics.lan" {
type master;
file "/var/cache/bind/dynamics.lan.zone";
allow-update {
key dyn;
};

};

Дописываем зону :

$ORIGIN .
$TTL 86400 ; 1 day
dynamics.lan IN SOA localhost. vash.dns.server. (
7 ; serial
10800 ; refresh (3 hours)
3600 ; retry (1 hour)
6048 ; expire (1 hour 40 minutes 48 seconds)
600 ; minimum (10 minutes)
)
NS localhost.
NS vash.dns.server.
A 192.168.0.11
$ORIGIN dynamics.lan.
$TTL 600 ; 10 minutes
router1 A 192.168.0.10

Обновив Bind9, можно приступать к настройке на сервере для филиала:

создаём скрипт в /opt/update_ip:

#!/bin/bash
ip=`ifconfig eth0|awk '/inet addr/ {print($2)}'|awk -F\: '/addr/ {print($2)}'` && echo "server vash.dns.server. 53\n zone dynamics.lan.\n update delete router1.dynamics.lan. A\n update add router1.dynamics.lan. 600 A $ip\n show\n send \n"|/usr/bin/nsupdate -k /etc/bind/Kdyn.+157+55093.private -vv

Разберём немного код. В переменную ip в результате разбора текста попадает текущий адрес, полученный сервером на интерфейсе eth0. Далее генерится файлик, похожий на:

server vash.dns.server. 53
zone dynamics.lan.
update delete router1.dynamics.lan. A
update add router1.dynamics.lan. 600 A 192.168.0.10
show
send

Ну и последняя команда берет эти данные и файл с ключём /etc/bind/Kdyn.+157+55093.private и передаёт их на DNS-сервер.
DNS-сервер, получив такой запрос, удаляет запись со старым адресом и добавляет запись с новым.

Добавим в крон задание:

*/5 * * * * root /opt/update_ip >> /var/log/update_ip.log

Теперь мы автоматизировали процесс.
А на рабочей машине можно написать такой скрипт /opt/sshrt1:

ssh -l имя_юзера `host router1.dynamics.lan адрес_вашего_DNS |grep has|awk '/has/ {print($4)}'`

Теперь, лишь набрав /opt/sshrt1, мы попадём на приглашение ssh нашего сервера вне зависимости, от его текущего

Комментариев: 2 на ““Статический” динамический IP адрес”

  1. TAIPHOON:

    Вау!!!!! Колесо это круто!!!!!!!!!!!!!!!!!!!

  2. SoftDow:

    Маленький еще.

Добавить комментарий

Fill in your details below or click an icon to log in:

Логотип WordPress.com

You are commenting using your WordPress.com account. Log Out / Изменить )

Фотография Twitter

You are commenting using your Twitter account. Log Out / Изменить )

Фотография Facebook

You are commenting using your Facebook account. Log Out / Изменить )

Connecting to %s


Follow

Get every new post delivered to your Inbox.