Специальные TFTP-сервера

Единственная поддержка сети, встроенная в TCP/IP BootPROM - это TFTP. Поэтому нам интересны специальные версии TFTP-серверов, позволяющих немного больше, чем обычные.

Улучшенный TFTP-сервер фирмы Incom

Фирма InCom GmbH вместе со своим TCP/IP BootPROM распространяет улучшенную версию TFTP-сервера, который может посылать пакеты размером до 1408 байт, вместо стандартных 512. Это очень важное дополнение, которое мы рекомендуем использовать. Этот сервер есть на диске утилит TCP/IP Bootprom в вариантах для Solaris, Windows и Netware NLM.

Улучшенный TFTP-сервер для Linux

Мы собрали модифицированную версию TFTP-сервера для Linux, работающего аналогично улучшенной версии TFTP-сервера фирмы Incom. На самом деле, мы просто увеличили размер пакета с 512 до 1408 байт и поменяли порт с 69 на 59. Его можно получить по адресу http://cuiwww.unige.ch/info/pc/remote-boot/soft/etdtpd.tar.gz.

Шлюз авторизации

Мы также написали специальную версию TFTP-сервера, работающего, как шлюз системы безопасности для авторизации пользователей. Этот сервер работает в Linux или Solaris и может авторизовать пользователей в системе паролей Unix (с поддержкой NIS и shadow), на сервере Windows NT (или Samba) server или на сервере Radius. Его можно взять по адресу http://cuiwww.unige.ch/info/pc/remote-boot/soft/stdtpd.tar.gz, вместе с исходными текстами и заранее собранными программами. Заранее собранные программы не включают систему шифрования паролей NT - мы не можем распространять библиотеку libdes, но сборка программы - дело достаточно простое.

Чтобы использовать шлюз безопасности, вам надо настроить достаточно простой файл конфигурации доменов безопасности, в котором описывается соответствие серверов авторизации и доменов (домен Unix соответствует системе паролей Unix на той машине, на которой работает шлюз). Ниже приведен пример конфигурации
#
# Файл конфигурации STFTPD
#  
# В этом файле описываются сервера, соответствующие "доменам безопасности". Поддерживаются 
# два вида серверов - radius или winnt (winnt включает в себя
# NT Server и Samba)
#
# Формат строки для серверов radius
# radius        <домен>         <адрес_сервера>         <ключевое_слово>
#
# ключевое_слово - это слово, указанное в файле /etc/raddb/clients
#
# Формат строки для SMB-серверов
# winnt         <домен>         <адрес_сервера>         <имя_NetBios>
#
# имя_NetBios - это наименование сервера в NETBIOS
#
# Примеры
radius         sec-dom-rad     radiusserver    testing123
winnt          sec-dom-nt1     192.168.1.1     NTSERVER1
winnt          sec-dom-smb     samba           SAMBA1

Заметьте, что, если вы используете Samba, вы должны установить параметр security = user.

Вы также можете указать шлюзу безопасности файл со списком пользователей, которым нельзя входить в систему при любых обстоятельствах (для них проверка пароля будет всегда давать отрицательный результат).

Широковещательный TFTP-сервер

Мы написали специальную версию TFTP-сервера, включающую в себя самодельную версию широковещательного TFTP. Используя его, мы смогли достичь скорости передачи данных клиентам в 6 Мб/с на сильно загруженной 10-мегабитной сети (этот способ значительно более эффективен - он не посылает подтверждения на каждый пакет). Этот сервер работает в Linux или Solaris. Его можно взять по адресу http://cuiwww.unige.ch/info/pc/remote-boot/soft/btdtpd.tar.gz, вместе с исходными текстами и заранее собранными программами.

TCP/IP-BootPROM не поддерживает этот протокол, поэтому мы загружаем небольшой вариант ядра Linux, использующий электронный диск, при помощи ранее описанных утилит, в котором запускаем Linux-версию программы MrBatch, в которую встроена поддержка широковещательного TFTP. Простой пакетный файл загружает все необходимые файлы в кэш-раздел в течение пары минут одновременно на всех компьютерах. Вам не надо устанавливать Linux для использования этого пакета (за исключением того случая, если ваше очень экзотическое оборудование требует специального ядра).

Процедура состоит из нескольких шагов. Во-первых, загрузите вручную широковещательный сервер, задав ему количество клиентских машин в качестве параметра (запомните, что эта процедура должна производиться не ежедневно, а лишь в тех случаях, когда вы хотите синхронизировать образы дисков на всех машинах). Затем включите все клиентские машины, которые должны выполнить следующий скрипт:
#
# Этот файл запускает мини-вариант linux с электронным
# диском, который затем запустит mrbatch.
#
# Широковещательный TFTP-протокол работает только в Linux-версии
# mrbatch, потому что в BootPROM нет поддержки широковещания.
#
# 1. Создаем небольшой раздел, оставляя большое пространство для кэша
setpartitions "BIGDOS:50"
# 2. Очищаем MBR
clean 0
# 3. Запускаем ядро Linux с поддержкой initrd (Загрузочный Электронный Диск) и 
#    используем в качестве этого диска bcastrd.gz (он будет подключен в 
#    качестве корневой файловой системы и запущен через /linuxrc). См. initrd.txt,
#    в котором приведено подробное описание загрузочных дисков. Вам не надо задавать корневое
#    устройство) - ядро будет использовать электронный диск.
linuxboot "linux.krn" "" "bcastrd.gz"
# 4. Сначала linux запустит dhcpcd для настройки сети.
#    Затем он выполнит команду mrbatch -w bcastlx

В электронный диск входят:

Все программы собраны статически и из них удалена отладочная информация - таким образом мы избегаем включения в электронный диск файла libc.so, имеющего достаточно серьезный размер. Полученный электронный диск сжат GZIP и имеет размер меньше 300 Кб. Ядро занимает около 450 Кб (с поддержкой многих сетевых карт и initrd). После загрузки Linux MrBatch запускает нижеприведенный скрипт (вы можете отредактировать его необходимым образом):
# Этот файл выполняется mrbatch, после его загрузки с электронного диска
# bcastrd.gz
# Его главная задача - "широко скопировать" файлы в кэш
#
# 1. Выводим диагностические сообщения
showlog
# 2. Отключаем фразу "press a key"
set pauselog="OFF"
# 3. Устанавливаем реальные размеры разделов. 
#    Внимание: Так как вы копируете файлы в кэш для дальнейшего использования,
#    задайте именно те размеры разделов, которые вы будете использовать.
setpartitions "BIGDOS:1024"
# 4. Очищаем кэш-раздел
clean -1
# 5. И копируем файлы в кэш, используя широковещательный TFTP-протокол
#    (порт 99)
#
# Вы можете использовать этот скрипт "как есть", но последнюю строку обязательно
# измените! В нашем примере мы загружаем файл mblinux.imz, который является образом
# нашей инсталляции Linux.
copy "$BOOTP-Server-IP@99:mblinux.imz" "{:-1}mblinux.imz"

После завершения пересылки вы можете просто выключить клиентские машины и изменить их загрузочные скрипты на любимое меню.