DhcpBind/StaticMigration
Миграция статической сети
Прилагаю работоспособный file:arp2dnsdhcp.rb, который разбирает /var/lib/arpwatch/arp.dat и создаёт из него фрагменты /etc/dhcp/dhcpd.conf и прямой зоны (не смущайтесь названием, уставший был :) BIND (реверсную осмысленно генерировать mkrdns, хотя несложно доработать и скрипт).
Предполагаемый сценарий использования:
- [исторически] статическая [виндовая] сеть
- включенный в неё маршрутизатор или ноутбук с Linux, arpwatch и данным скриптиком
- в первом случае хосты со своими имеющимися MAC/IP придут сами
- во втором случае — периодическое сканирование нужных подсетей nmap -sP (ping sweep) для получения откликов
- изучение писем arpwatch с целью анализа наличия уже существующих проблем…
- изучение, модификация и запуск скриптика
- рассмотрение и применение созданных им файлов
Сценарий, при котором он был создан:
- исторически статическая виндовая сеть
- достаточно спешный переезд на ddns+dhcp с хранением информации в LDAP […]
- обнаружение дубликатов имён хостов на машинах, а также неотмеченных в привязке MAC/IP интерфейсов
- имеющиеся на данное время объективные проблемы с обеспечением доступности OpenLDAP в ALT Linux
- откат на хранение в обычных файлах
При этом с целью уменьшения вероятности пересечений по IP с так или иначе оставшимися на локально прибитом IP машинами при каждом переезде осуществлялся сдвиг подсети (192.168.0.0 -> 192.168.[234].0 -> 192.168.10.0), чем и объясняется несколько неочевидная логика в конце скрипта. Её назначение таково: в .10 оставить последний октет IP-адреса соответствующим тому, что был в .0 (поскольку в [234] ряд систем успел «слямзить» по несколько адресов, но при этом отметиться в логе arpwatch _с_ занесённым в DDNS именем хоста, которое обычно было более «качественным», чем внесённые в DNS изначально ломом и awk), но при этом hostname взять последний, считая по таймстампам. В общем, довольно специфический случай, но соответствующая обработка выполняется во второй части скрипта и может быть легко выкинута.
TODO
- рефакторинг (оно уже не умещается на экран :)
- добавление проверки уникальности IP/hostname, не только MAC (hostname проверит dhcpd при старте, но лучше-то сразу)
- обобщение обработки снятой информации, изменение логики по умолчанию для более часто встречающихся случаев
- поддержка различных режимов (и управление из командной строки)
- использование nmblookup -A для получения имён по IP при изначальном отсутствии DNS