Задание правильного имени компьютера при сетевой установке

Обсуждение статьи "Установка Windows XP по сети. RIS, но не Microsoft"

Модераторы: editor, Devils

Задание правильного имени компьютера при сетевой установке

Сообщение _alexander_ » 10 июл 2008, 10:32

Раз ОС устанавливается по сети и без вопросов, то логично было бы, чтобы машина после установки имела правильное имя, а не fjffh344fhd
(в файле winnt.sif в секции [userdata] параметр "computername=*").

Где взять правильное имя? Из базы данных DNS сервера.
Есть такая программка wsname.exe которая позволяет переименовывать машины, а также автоматизировать этот процесс.

В частности, нас интересует параметр DNS.

Вот как выглядит задание имени машины из базы данных DNS:

wsname.exe /N:$DNS /NOREBOOT

Параметр /NOREBOOT понятно для чего.

Можно указать конкретный DNS сервер, тогда команда будет выглядеть:

wsname.exe /N:$DNS:IP /NOREBOOT
где IP - IP адрес DNS сервера.

На работе используется домен на базе win 2000 server.

По непонятной причине после второй перезагрузки, имя типа fdhj43fdh уже регистрируется в DNS, и после запуска wsname эта программка берет уже "обновленную" информацию с DNS сервера.

Параллельно запускаю с другой машины команду после первой перезагрузки развертываемой машины (графическая часть установки)

nslookup IP-развертываемой_машины

Некоторое время после начала графической установки получаю правильное имя машины, т.е. то имя, которая машина имела до переустановки ОС.

До того как начнет отрабатываться cmdlines.txt неправильное имя в 90% случаев уже регистрируется на DNS-сервере. И следовательно, брать имя с DNS уже нет смысла.

Столкнулся еще с одной непонятностью. Я не знаю каким образом wsname получает запись с DNS, однако часто сталкивался с таким:
запускается wsname и следом (своя программка) гляжу какое имя задалось машине. Имя очень часто задается "неправильное", хотя я параллельно запускую с другой машины nslookup IP.

Nslookup выдает "правильное" имя, несмотря на то, что wsname присваивает неверное.

Думаю логично было бы использовать не wsname для задания имени машины, а нечто свое, которое будет базироваться на данных, полученных от nslookup.
Написал утилиту, которая использует вывод nslookup, выдирает оттуда имя машины, и затем дает внешнюю команду "wsname.exe /N:имя_полученное_из_nslookup"

Опять таки до тех пор пока начнет использоваться cmdlines.txt, в DNS может появиться неправильное имя, которое задается автоматом в начале графической части установки.

Иду опять на хитрость. Логично было бы предположить, что если на момент исполнения cmdlines.txt будет отсутствовать сеть, следовательно в DNS не успеет появиться запись о неверном имени машины. А при исполнении cmdlines.txt первой командой считать правильное имя с DNS и задать его машине.

Ничего не придумал лучше чем в winnt.sif задать жестко неправильный адрес вида 10.10.10.10, такой же адрес задал для wins и dns.
Первой командой в cmdlines.txt идет запуск батника, который содержит в себе:

netsh interface ip set address "LAN" dhcp
netsh interface ip set dns "LAN" dhcp
netsh interface ip set wins "LAN" dhcp
exit

где "LAN" - имя подключения по локальной сети, задается в winnt.sif

Т.е. происходит следующее - перестает использоваться статическая IP-адресация, и все параметры подключения берутся с сервера dhcp.

Следом запускается моя утилита (т.к. wsname по непонятной причине иногда все же использует неверное имя даже после применения обмана с неправильным IP-адресом), меняет имя.

Все хорошо работало до тех пор, пока я не столкнулся с сообщением установщика, что "в сети встречаются одинаковые адреса. Нажмите Ок" при одновременном развертывании нескольких ПК. Т.е., если они стартанут одновременно, то в графической части у них будет один и тот же IP: 10.10.10.10.

Машин очень много, вероятность того, что запустятся две в одно время - очень велика. Следовательно этот способ не очень "верный", т.к. не хотелось бы чтобы пользователь лицезрел это окно и названивал support'у с вопросом "что мне теперь делать?".

В общем, хотелось бы реализовать один из трех ваиантов:
1. Чтобы служба, отвечающая за сеть в начале графической части установки была остановлена, включить ее можно будет когда начнет исполняться cmdlines.txt
2. Задать неправильный IP-адрес в winnt.sif но таким образом, чтобы неправильные адреса генерировались, например 10.10.10.х , где х - число от 1 до 10. Т.е., чтобы не было дублированных адресов.
3. Найти способ как выполнить приложение в самом начале установки графической части, установки драйверов сетевой платы и задания имени ПК.

Может быть кто-нибудь подскажет, как это реализовать?
"Правильное" имя мне нужно сразу после установки ОС, т.к. у меня после окончания установки идет отправка сообщений-уведомлений по эл.почте нескольким людям, с разных служб, которые занимаются сопровождением разного рода задач. И на этом этапе важно отправить по эл.почте не только IP-адрес, но и верное имя ПК.

После установки ОС (первый вход безпарольный) у пользователя появляется диалоговое окно сопровождаемое звуковой сигнализацией другой моей утилиты и прячется панель задач, часы, рабочий стол и т.п.. Он заполняет необходимые поля "Ф.И.О, телефон, здание, кабинет, отдел, доп. информацию", затем нажимает на кнопку "отправить в саппорт". После чего происходит завершение сеанса, и следующий вход будет уже парольным. Соответственно пользователь ничего не сможет сделать, войти в машину, и каким-либо образом что-то испортить в свежей системе под админскими правами. Такие параметры как IP и имя машины считываются автоматически и отправляются вместе с данными пользователя. Отсюда имеем оперативность со стороны саппорта - все люди, которые после установки ОС должны что-либо донастроить, уже проинформированы.

Плюс, если бы задавалось "правильное имя машины" в ходе установки, такую машину с "правильным" именем можно было бы сразу подключать к домену. Если же подключать к домену в ходе установки ОС сегодня, то в AD будет появляться мусор.
_alexander_
 
Сообщения: 23
Зарегистрирован: 29 апр 2008, 16:34
Откуда: Новый Уренгой

Сообщение qw-0 » 12 июл 2008, 21:08

Попробуй использовать параметр DisableDynamicUpdate в winnt.sif
Сам не пробывал, но по описанию должен отключить динамическую регистрацию в DNS.
А откуда у тебя компьютер узнает IP DNS?
Ведь можно сообщить неправильный и тогда регистрация, наверное, не пройдет.
qw-0
 
Сообщения: 164
Зарегистрирован: 13 апр 2007, 01:20

Сообщение _alexander_ » 13 июл 2008, 11:20

qw-0 писал(а):Попробуй использовать параметр DisableDynamicUpdate в winnt.sif


Пробовал. Результат тот же.

qw-0 писал(а):А откуда у тебя компьютер узнает IP DNS?


С DHCP.

qw-0 писал(а):Ведь можно сообщить неправильный и тогда регистрация, наверное, не пройдет.


Да, уже пробовал (описывал выше). Но я полностью отказывался от данных с dhcp, и настраивал неправильный IP (один) и неправильный DNS руками.
И проблема появлялась: если машины развертываются одновременно, шла ошибка о одинаковых встречающизся IP адресах в сети.
Может стоит попробовать брать IP адреса с DHCP, а DNS (неправильный) указывать руками, а затем при запуске wsname указать явно верный DNS-сервер.

Вот отсюда http://www.citforum.ru/operating_systems/winntadm/winntadm_09.shtmlя узнал, что:

9.5.5. Интеграция WINS и DNS

Domain Name System (DNS) служит для разрешения IP-адреса по имени хоста и в традиционной реализации требует указывать статическое соответствие между именем хоста и его адресом. Структура зоны DNS обновляется всякий раз при добавлении нового хоста или перемещении его в другую подсеть. Так как DNS не динамичен, кто-то должен вручную делать изменения в базе DNS для отражения в ней происшедших перемен. Это сильно осложняет жизнь администраторов, особенно управляющих зонами с часто выполняемыми модификациями.

Стандарта на динамический вариант DNS, который мог бы принимать изменения в соответствии между именами и IP-адресами, пока нет - в настоящее время IETF его разрабатывает.

В Windows NT Server 4.0 реализовано временное решение об интеграции трех служб - DHCP, WINS и DNS. Так как WINS динамически отслеживает изменения, которые выполняет DHCP, то решено было несколько модифицировать службу DNS. Сервер DNS в Windows NT Server 4.0 может использовать для поиска имен, которые он не нашел в своей собственной базе данных, серверы WINS. Для этого у сервера DNS имеется опция "Use WINS Resolution", с помощью которой указываются IP-адреса серверов WINS, имеющихся в сети.

Для того, чтобы тройка DHCP-WINS-DNS работала корректно, необходимо использовать имена NetBIOS, которыми именуются компьютеры Windows NT и Windows 95, в качестве младшей компоненты составного имени DNS. Сервер DNS должен быть сконфигурирован так, чтобы он самостоятельно выполнял разрешение только старшей части имени, а за разрешением младшей обращался к серверу WINS.
[url]

Т.е. все равно, получается, что если с DHCP был получен IP-адрес, и так как WINS динамически отслеживает изменения, которые выполняет DHCP, имеем опять же неправильную запись в WINS, а затем и в DNS.

Но всяко опробую вариант брать IP с DHCP, указывая неверный DNS вручную, а затем в wsname - указать верный.

В пятницу думал над вариантами решения.
В интерактивной работе с nslookup можно вывести имена всех машин, которые есть в DNS, также можно перенаправить вывод в файл.
В интерактивном режиме: ls -d полное_имя_домена

В файле записи вида:

имя_машины A IP-адрес.

Но дело в том, что нужно сначала запустить nslookup в интерактивном режиме, а потом вводить еще команды. Т.е. если указать дополнительные команды в качестве параметров запуска nslookup, информации выводится очень мало.
На линуксе есть dig. С ее помощью я получил такой же список машин как и используя nslookup под windows.
Отсюда идея. Раз в сутки через cron запускать dig с нужными мне параметрами, создавая (перезаписывая) файл dns.txt.
Этот файл расшаривается через самбу.
Далее с клиентской развертываемой машины запускается программка, которая считывает этот файл с сервера. Производится выборка: ищем IP "10.40.30.34". Если нашли, то копируем эту строчку до первого встречающегося пробела. Т.е.

u-473054 A 10.40.30.34

результатом будет u-473054.

Присваивать буду переменной типа string, например name.

Далее из моей программы будет запускаться wsname.exe c параметром
/N:имя_переменной_типа_string.

Все равно у меня с линуксовой машины проиходит сетевая установка Windows XP.
Тут уже точно думаю не будет проблем с dhcp => wins => DNS.
Т.к. считанные записи в dns.txt - статические, обновляемые раз (пусть два раза) в сутки.

Можно было бы все это реализовать и в одной программе - считывание полной базы данных DNS и производить выборку.

Однако, во-первых, я не знаю как в Делфи запущенному досовому окну передать команду (т.е. сначала запускаем nslookup, а затем в этом досовском окне вводим ls -d имя_домена).
Во-вторых, как бы опять dhcp не успел сообщить wins, а тот DNS.

Еще бы времени побольше на эксперименты такие :) А то ведь на работу ничего не останется :)
_alexander_
 
Сообщения: 23
Зарегистрирован: 29 апр 2008, 16:34
Откуда: Новый Уренгой

Сообщение qw-0 » 13 июл 2008, 20:15

А есть еще такой параметр, как EnableAdapterDomainNameRegistration. Можно его попробывать. Возможно нужно вместе с DisableDynamicUpdate.
qw-0
 
Сообщения: 164
Зарегистрирован: 13 апр 2007, 01:20

Сообщение _alexander_ » 21 июл 2008, 10:11

qw-0 писал(а):А есть еще такой параметр, как EnableAdapterDomainNameRegistration. Можно его попробывать. Возможно нужно вместе с DisableDynamicUpdate.


Не получилось :/

Вариант, о котором писал, уже работает. Но не так как хотелось бы.
С nslookup (win) так и не получилось с одной команды считать имена и IP-адреса. Получилось в linux.
Команда:

dig domain.ru axfr >> /tftpboot/wxp-pro.rus/dns_ip.txt

Создал исполняемый файл в /etc/cron.daily со следующим содержанием:

#!/bin/sh

rm /tftpboot/wxp-pro.rus/dns_ip.txt
dig domain.ru axfr >> /tftpboot/wxp-pro.rus/dns_ip.txt

Раз в сутки в 04.24 происходит удаление прежнего и создание нового файла dns_ip.txt.

Таким образом, данные берутся не из DNS сервера в реальном времени, а за прошедшие сутки.

Все замечательно работает за одним исключением:
- при инсталляции новых машин, им присваиваются "чужие" IP-адреса. Видимо период аренды IP-адреса какой-либо из старых машин прошел, и dhcp выдает его новому mac'у. Отсюда имею имя в правильном формате, но "чужое".
Просматривая файл dns_ip.txt обратил внимание, что некоторых машин просто нет, которые уже давно включены в домен и работают сейчас.
Поэтому идея с IP-адресами отпадает, по крайней мере у меня на работе.
Администрированием домена занимается другой отдел, и если нужно будет что-то донастроить в wins или dns, никто этого делать не будет.

Есть другой вариант, более верный - присваивать имена по mac-адресу. Принцип тот же, но mac как IP, уже не поменяется, и все будет железно на 99%.
Опять же встает вопрос где взять исходные данные: mac - computer_name.

Шефу каждая машина, входящая в домен, при включении (входе в домен), присылает данные об оборудовании (задумка была отслеживать аппаратные изменения, например изменение количества ОЗУ), в т.ч. и mac-адрес.
Теперь жду когда у него появится свободное время, чтобы он сделал выборку с SQL (я с БД не дружу), и тогда развертываемая машина будет считывать у себя мак-адрес, загружать файл mac_name.txt делать оттуда выборку имени для своего мак-адреса.
mac_name.txt также будет создаваться раз в сутки.
Ничего более разумного, имхо, не придумать.

//Отписываюсь спустя время. В общем по макам - самое то, все работает как часы. На этом и остановлюсь.
_alexander_
 
Сообщения: 23
Зарегистрирован: 29 апр 2008, 16:34
Откуда: Новый Уренгой


Вернуться в Установка Windows XP по сети. RIS, но не Microsoft

Кто сейчас на конференции

Сейчас этот форум просматривают: Yahoo [Bot] и гости: 1

cron
@Mail.ru