Модернизация сетевого окружения Windows
В очередной раз делал контроллер домена из samba и не получилось сделать так, чтобы на компьютерах домена было нормальное сетевое окружение.
Немного погуглив, решений не то, чтобы не нашёл, но наткнулся на одну статью, которая меня очень вдохновила. К сожалению, реализовать содержимое статьи у себя в офисе я не смог, т.к. не веду офисные компьютеры в DNS (нет необходимости), зато есть isc-dhcpd, в котором есть всё, что необходимо. В итоге родился скрипт (ссылка раз и ссылка два), который делает следующее:
- сканирует сеть, указанную в переменной $network по порту 139 с таймаутом подключения 0.01 секунды, который позволяет за несколько секунд пробежаться по /24 сети из 255 адресов;
- если обнаруживает адрес, где порт открыт, то спрашивает информацию по этому адресу через omshell у isc-dhcpd;
- если информация есть, то добавляет её в самбовский browse.dat.
- отсутствие мусора в сетевом окружении: все компьютеры офисной сети в одной рабочей группе;
- отсутствие тормозов при открытии сетевого окружения;
- любая частота обновления списка компьютеров сетевого окружения.
Для того, чтобы всё это взлетело, в isc-dhcp нужно включить OMAPI. Для этого в конфиг нужно добавить вот такие строчки:
key keyname { algorithm hmac-md5; secret "keyself"; } omapi-port 7911; omapi-key keyname;
Сгенерировать сам ключ можно, например, с помощью генератора от named:
dnssec-keygen -a HMAC-MD5 -b 256 -n HOST keyname
После перезапуска dhcpd, этот демон должен слушать, кроме всего прочего, ещё и порт 7911 по протоколу tcp. Теперь на всякий случай проверим, как работает OMAPI:
omshell > server 192.168.10.2 > port 7911 > key keyname keyself > connect obj: <null> > new lease obj: lease > set ip-address=192.168.10.99 obj: lease ip-address = c0:a8:0a:63 > open obj: lease ip-address = c0:a8:0a:63 state = 00:00:00:02 dhcp-client-identifier = 01:00:21:63:d1:b2:54 client-hostname = "rooot" subnet = 00:00:00:03 pool = 00:00:00:04 hardware-address = 00:21:63:d1:b2:54 hardware-type = 00:00:00:01 ends = 4b:0f:c2:98 starts = 4b:0f:c1:6c tstp = 00:00:00:00 tsfp = 00:00:00:00 atsfp = 00:00:00:00 cltt = 00:00:00:00то, что помечено знаком ">" — мои команды, остальное — ответы omshell. Как видите, я получил запись информацию о своём компьютере.
Кроме того, вышеуказанный скрипт пишет в browse.dat данные в utf-8, а это значит что в smb.conf должно быть вот это:
display charset = utf-8 unix charset = utf-8 dos charset = cp866Если в Вашем smb.conf первые две переменные имеют значение отлично от utf-8, то необходимо найти в тексе скрипта подстроку «utf-8» и поменять её на то, что используется у Вас.
И на последок краткое описание параметров из скрипта:
$network = '192.168.10.0/24' | сеть, которую скрипт будет сканировать |
$dhcp_server = '192.168.10.2' | адрес dhcp сервера, к которому скрипт будет обращаться через omshell |
$dhcp_server_timeout = '1' | таймаут, который выставляется для ответов от dhcpd через omshell |
$dhcp_key = 'maverick dhcp_key' | ключ, который мы сгенерировали с помощью dnssec-keygen |
$browser_file = '/var/db/samba/browse.dat' | в этот самбовский файл скрипт будет складывать результирующий список компьютеров для сетевого окружения — то, ради чего всё затевалось |
$browser_domain | имя Вашего домена |
$browser_head | заголовок файла browse.dat. обычно должен включать в себя описание домена и его контроллера |