Генерация ipv6 по названию домена

Зачем нужна генерация ipv6 адреса ?

Так как я администрирую сервера и популярность ipv6 возрастает, у меня встала задача по генерации уникального ipv6 для каждого домена.
Провайдер выдал мне подсеть /64 и каждому домену нужно будет присвоить уникальный ipv6.
Формировать их тупо цифрами из ipv4 я не хотел.
Так как доменов на хостинге у меня не мало, генерировать ручками был не вариант, решено было сделать это скриптом (подобных скриптов в рунете не нашел).

Идея

Задача сводилась к тому, чтобы скрипт генерировал уникальный hex для каждого домена, максимум 64 бита и склеивался с нашей частью подсети.

Например у нас есть подсеть aaaa:bbbb:cccc:dddd::/64

Первая часть ipv6 адреса будет
aaaa:bbbb:cccc:dddd

Вторая часть должна генерироваться скриптом по названию домена, например для домена anton-slim.com это будет
00f6:3cb8:0975:6b24

Склеиваем части, и получаем ipv6:
aaaa:bbbb:cccc:dddd:00f6:3cb8:0975:6b24

Так же помимо простой генерации, мне понадобился файлик для настройки сети в debian, и ptr записи обратных днс для провайдера. Кроме того, помимо ipv6, мне понадобилось сформировать такую же базу по ipv4, поэтому я решил сделать это все в одном скрипте.

Я решил сделать это скриптом на PHP и использовать в bash (через консоль).
Скрипт назвал domain_to_ipv6.php.

Пример использования

Скрипт на вход принимает stdIn поток со списком доменов (или с одним доменом), где каждый домен отдельной строкой.

или

или

(domain_list.txt — список доменов на каждой строке, если указать пары ipv4 и домен то дополнительно будет выведен блок с ipv4 для домена ).

Где:
stdIn: домен или ipv4 и домен (можно несколько на каждой строке)
ipv6_network/ipv6_subnet — ipv6 подсеть используемая для доменов
ipv4_network/ipv4_subnet — ipv4 подсеть используемая для доменов
—type=csv (генерация CSV файла со всеми данными)
—type=ptr (генерация PTR для отправки провайдеру)
—type=debian-net (конфиг для сети в debian /etc/network/interfaces)
stdOut: текстовый блок в соответствии с выбранным форматом —type

Пример генерации CSV:

будет сформирован csv файл domain_list_ipv4_ipv6.csv:

Генерация куска /etc/network/interfaces для Debian:

получим
### subnet ipv4: 78.46.95.226 / 255.255.255.254

# anton-slim.com
iface eth0 inet static
address 78.46.95.227
netmask 255.255.255.254

### subnet ipv6: 2a01:4f8:120:8183::::/64

# anton-slim.com
iface eth0 inet6 static
address 2a01:4f8:120:8183:f6:3cb8:975:6b24
netmask 128

Генерация PTR для провайдера:

получим
### ipv4 ptr

anton-slim.com (78.46.95.227)
227.95.46.78.in-addr.arpa IN PTR anton-slim.com.

### ipv6 ptr

anton-slim.com (2a01:4f8:120:8183:f6:3cb8:975:6b24)
4.2.b.6.5.7.9.0.8.b.c.3.6.f.0.0.3.8.1.8.0.2.1.0.8.f.4.0.1.0.a.2.ip6.arpa IN PTR anton-slim.com.

Исходный код скрипта domain_to_ipv6.php

Внимание ! Данный скрипт работает только на 64 битных системах.

Скрипт из строки с названием домена формирует число (24565343044463). Вероятности совпадения нет, так как каждый символ домена суммируется с общим числом и возводится в степень 10. Далее из этого числа формируется 64 битное бинарное число 11110110001111001011100000001001011101010110101100100100, затем оно преобразуется в HEX длинною 16 символов (006fc38b9057b642), затем оно переворачивается (00f63cb809756b24). Далее этот HEX преобразуется в строку с разбивкой по 4 октета (00f6:3cb8:0975:6b24), это и есть наша 2-я часть ipv6 адреса.

Диапазона 64 битного числа должно хватить с запасном. Длина домена по RFC не может превышать 255 символов, например для домена zzzzz…z (255 символов), hex сумма его символов = 74e2 f1a8 714a 7119, то есть даже еще остается диапазон.

Пользуйтесь на здоровье :=)

Опубликовано в Unix администрирование

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*