The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги ]

Samba: Модернизация "сетевого окружения" Windows (windows net perl wins samba dns freebsd)


<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>
Ключевые слова: windows, net, perl, wins, samba, dns, freebsd,  (найти похожие документы)
From: Дмитрий Грицевич aka MethroGnome <methrognome@tut.by.> Newsgroups: email Date: Mon, 15 Jan 2007 14:31:37 +0000 (UTC) Subject: Samba: Модернизация "сетевого окружения" Windows Хочу поделиться способом модернизации "сетевого окружения" Windows, который успешно внедрен и работает в нашей сети. Что это дает: 1) Полностью администрируемое сетевое окружение. 2) Избавляет от лишних рабочих групп и имен компов (некоторые забывают сменить или специально меняют каждый день) - пользовательские имена вообще не будут учитываться 3) Ускоряет его работу - не нужно тратить время на поиск имени компа, служба WINS вообще больше не понадобится. 4) Любая частота обновления списка компов (хоть каждую минуту). Метод я придумал сам, но вот по части программирования не очень силен, возможно некоторые моменты можно сделать лучше и проще, так что не пинайте :). Предполагается, что админ уже имеет некоторые познания и я не буду останавливаться на базовых понятиях что такое DNS, зачем нужен Master-browser, как настроить Samba и т.д. - этой инфы предостаточно. Итак, что необходимо: 1) Выделенный сервер под Unix-подобной ОС 2) Установленная на нем Samba и настроенная в качестве Master-browser 3) Perl и модуль IO::Socket для него 4) Желательно также, чтобы в сети работала служба DNS и ИП-адреса компов резолвились в имена. В моем случае используются 2 рабочие группы, отдельные мастер-броузеры на каждую. ОС - FreeBSD 4.9 и 6.1, Perl 5.6, Samba 2.2.8 Принцип работы Samba держит сетевое окружение в текстовом файле. Все компы переодически опрашиваются бродкастами и этот файл обновляется. Далее мы сделаем скрипт, который будет сканировать компы на предмет файлового доступа (139 TCP-порт), составлять список рабочей группы в нужном формате и заменять оригинальный файл Самбы. Юзеры в сетевом окружении увидят содержимое нового файла. Именем компа делается его IP-адрес, а в описании - название (из DNS). Т.к. WindowsXP отображает все наоборот, то в списке компы будут в виде: " название (IP-адрес) ". Обращение к компам происходит мгновенно - время на разрешение имени в IP-адрес не затрачивается. Файл сетевого окружения называется browse.dat и обычно находится в каталоге /var/lock. Структура довольно простая: "WORKGROUP1" c0001000 "SAMBA_SERVER" "WORKGROUP1" "WORKGROUP2" c0001000 "S_SERVER" "WORKGROUP2" "SAMBA_SERVER" 400d9a03 "это сервер" "WORKGROUP1" "COMP1" 40011203 "комп номер1" "WORKGROUP1" "COMP2" 40011003 "комп номер2" "WORKGROUP1" Строки с кодом c0001000 описывают рабочие группы и указывают на мастер-броузера этой группы. Остальные строки - компы, сначала имя, потом код, описание и рабочая группа. Теперь собственно сам скрипт с подробными комментариями. scan139.pl #!/usr/bin/perl use IO::Socket; $NetADDR = "172.20.99."; # Задаем подсеть $port = 139; # Порт - 139 $proto = "tcp"; # протокол TCP $Timeout = 0.01; # таймаут сессии (в сетях с потерями можно увеличить до 0.02-0.1с) ### подпрограмма вывода строки в формате файла browse.dat ### sub add_to_list { $HostNAME = substr(`nslookup $HostADDR | grep Name `,9); # резолвим имя компа из IP-адреса $HostNAME =~ s/.vesnianka.net\n//; # отбрасываем доменную часть print '"'; print $HostADDR; # вставляем ИП-адрес print '"'; print " 40011007 "; # вставляем код print ' "'; print $HostNAME; # вставляем описание - имя из DNS print '"'; print ' "MASHEROVA-99" '; # вставляем рабочую группу print "\n"; } ### формируем первые 2 статические строки, которые описывают рабочие группы и их броузеры ### print '"MASHEROVA-99" c0001000 "172.20.99.100" "MASHEROVA-99" '; print "\n"; print '"SKYNET" c0001000 "172.20.97.250" "SKYNET" '; print "\n"; $i = 1; while ( $i < 255 ) { # сканировать все ИП-адреса до 254 $HostADDR = $NetADDR.$i; # текущий ИП-адрес ### создаем сокет (TCP-коннект на 139 порт) ### my $sock = IO::Socket::INET->new(PeerAddr=> $HostADDR, PeerPort => $port, Proto => $proto, Timeout => $Timeout ) && add_to_list; # в случае успеха выполнить подпрограмму close($sock); # закрыть сокет $i++; # и т.д. коннект на все ИП от 1 до 254 } В результате выполнения скрипт выводит строки, в которых описываются найденные компы. При таймауте 0,01 с на выполнение скрипта затрачивается всего несколько секунд. В зависимости от ОС вывод команды nslookup может отличаться, нужно править под свои нужды. Если в сети нет DNS-сервера - можно сделать просто текстовый файл с описанием пары "ИПшник имя" для всех компов и брать имя оттуда. и еще обратите внимание, что в скрипте используются и двойные кавычки, и одинарные кавычки и апостроф - все это имеет большое значение. Теперь остается только заменить исходный browse.dat. Но тут есть загвоздка - если просто заменить файл, то Самба через минуту его опять перезапишет. Чтобы этого не было, нужно запретить Самбе изменять файл browse.dat. Я придумал только один способ - установить на browse.dat флаг системного неизменяемого файла (schg), пока этот флаг стоит даже root не может его изменить. Перед обновлением флаг снимается и опять устанавливается. Все это делает еще один скриптик: browser_update.pl #!/usr/bin/perl `/usr/local/browsing/scan139.pl > /var/lock/new_list`; # сканируем и кидаем список в new_list sleep(10); # ждать 10 сек `chflags noschg /var/lock/browse.dat`; # снимаем флаг schg `cp /var/lock/new_list /var/lock/browse.dat`; # заменяем browse.dat содержимым new_list `chflags schg /var/lock/browse.dat`; # устанавливаем флаг schg опять Оба скрипта нужно сделать исполняемыми (мод +х). Чтобы сетевое окружение обновлялось, нужно добавить задание для крона. Например, такое задание обновляет список рабочей группы каждые 5 минут: */5 * * * * root /usr/local/browsing/browser_update.pl Естественно, все пути могут отличатся в зависимости от ОС и версии Самбы. Тут уж я думаю опытные админы сами догадаются как найти и что изменить. Если рабочих групп две (как в моем случае) - на каждую должен быть отдельный мастер-броузер и запускать такой скрипт тоже на каждом.

<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>

Обсуждение [ Линейный режим | Показать все | RSS ]
 
  • 1.1, sadmitry, 20:14, 15/01/2007 [ответить] [смотреть все]
  • +/
    У Вас юзеры сами могут менять имя компа ?
    И как это стыкуется с администрированием сети ?
    И еще: брандмауэры на компах как правило блокируют доступ на порт 137.
    И вообще шары на клиентских тачках - не комильфо.
    Для этого есть сервер, на котором организован обменный каталог. Для печати есть принт-серверы.
     
  • 1.2, Moroz, 03:15, 16/01/2007 [ответить] [смотреть все]
  • +/
    Речь идет о домашней сети. Там администрирования как такового нету. И нет возможности запретить юзеру менять имя компа. Что касается брандмауэров, то если порт закрыт, шар нету - то нечего компу вообще с сетевом окружении делать :) Опять же, для организации - это не актуально, но для домашних сетей - раельно полезная фишка.
     
  • 1.3, Андрей, 04:22, 17/01/2007 [ответить] [смотреть все]
  • +/
    Автору респект! проблема с кривым сетевым окружением действительно очень актуальна в домашних сетях.
     
  • 1.4, Dorlas, 19:17, 17/01/2007 [ответить] [смотреть все]
  • +/
    Прикольно :) интересные идеи - спасибо!
     
  • 1.5, phasma, 04:23, 18/01/2007 [ответить] [смотреть все]
  • +/
    хм, написал скрипт, который обходит сетку и спрашивает у всех netbios имена, потом удаляет из имен символы - и пишет их в конфиг днс сервера ... другой скрипт берет эти имена и просматривает с помощью самбы расшаренные ресурсы, генерирует хтмл файл, копирует его в директорию апача ... ну и все ... все пользователи сетки могут видеть расшаренные ресурсы )
     
  • 1.6, anonymouse, 10:19, 20/01/2007 [ответить] [смотреть все]  
  • +/
    для какой версии самбы прокатывает подмена брауз.дат?
    А это точно не теория?
    самба вообще-то в памяти список держит - а в брауздат может его скидывать или не скидывать...
     
  • 1.7, JIP, 02:22, 22/01/2007 [ответить] [смотреть все]  
  • +/
    статья хороша как "пища для ума" - интересна идея
    с реализацией проблемы - таймаут сокета (который указывается в конструкторе) интерпретатором игнорируется. на сканирование одного хоста затрачивается несколько секунд (вместо 0.01) и в результате для сканирования моей 255.255.0.0 затрачивается огромное количесво времени
     
  • 1.8, Jet, 10:23, 12/02/2007 [ответить] [смотреть все]  
  • +/
    Блистательное решение для неправильно поставленной задачи. Виндовс шары в домовой сети (в домашней сети как правило вообще проблемм с шарами не возникает) - потенциальная дыра для вирусов, кражи паролей у юзера ушастого и последующих следствий этого... Правильное решение - запретить виндовс шары вообще и приучить пользователей к DC.
     
  • 1.9, xend, 05:05, 16/03/2007 [ответить] [смотреть все]  
  • +/
    что бы не менять системные флаги на browse.dat можно открыть в hex редакторе /usr/sbin/nmbd найти в нём строчку /var/cashe/samba и поменять её на такую /var/cashe/sambo , естественно создать такой каталог, после таких операций можно с browse.dat делать что угодно ничего не опасаясь.
     
  • 1.10, MethroGnome, 23:01, 28/03/2007 [ответить] [смотреть все]  
  • +/
    Спасибо за ценные комментарии. Я признаюсь и забыл, что запостил сюда.
    Статья не теория, работает у нас уже несколько месяцев
    Вот для примера скриншот
    http://skylines.at.tut.by/wrkg1.gif
     
  • 1.11, VVEBER, 16:14, 31/03/2007 [ответить] [смотреть все]  
  • +/
    Другая проблема: в сегментах сети, коих у меня 20, всё работает до тех пор, пока кто-нибудь не станет Master-browser'ом сегмента. Как с этим бороться, не знаю, не обходить же 700 юзеров и не править им реестр. И самбу сажать в каждый сегмент тоже не совсем приятное занятие. Роутит всё Cisco Catalyst 3550. Самба за ним.
     

    Ваш комментарий
    Имя:         
    E-Mail:      
    Заголовок:
    Текст:





      Закладки на сайте
      Проследить за страницей
    Created 1996-2017 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    Hosting by Ihor