АНДРЕЙ МОЗГОВОЙ
Использование бездисковых маршрутизаторов
Настоящая статья не описывает сборку, инсталляцию и настройку бездисковых станций, идет рассмотрение только в общих чертах. Цель – показать читателям, как это выглядит и применяется на практике.
Структура сети и роль бездисковых станций
Так уж вышло, что физическое месторасположение мостов (bridge) [1] не самое удачное. Вдобавок с электропитанием перебои. Компьютеры не самые мощные PI-200 МГц, DIMM – 32 Мб, но это не мешает им обслуживать 4 сети по 100 Мб/с и одну по 10 Мб/с. Могли бы все быть по 100 Мб/с, просто PCI-слотов не хватает. В дальнейшем разговор будет идти о bridge и сетях, которые выделены в серую рамку.
А вот и фото из технического коридора:
|
|
Как видите, материнская плата и блок питания легко поместились в обычном электрощите. Главное – сообразить, как все правильно разместить. Блок питания лучше размещать сверху, тогда нагретый им воздух не будет повышать температуру процессора. А этот факт может о себе напомнить в жаркие летние деньки. Аккуратно зафиксируйте кнопки Вкл/Выкл, Питания и RESET. Они могут вам понадобиться в первые дни настройки. Опора для сетевых карт взята прямо из старенького корпуса формата AT. Видеокарты нет. Это не принципиальное решение. Просто нет у меня такого маленького мониторчика, который с легкостью можно взять с собой в технический коридор. Вместо видеокарты использую последовательный порт (com port). Это очень удобно, можно просто прийти с ноутбуком и решить любые проблемы. Главное – собрать ядро с опцией «Character devices –> Support for console on serial port (CONFIG_SERIAL_CONSOLE=y)», указать соответствующие опции при загрузке ядра (console=ttyS1) [2] и добавить строчку в /etc/inittab (s1:12345:respawn:/sbin/agetty -L ttyS0 9600 vt100).
Как же загружается и настроена бездисковая станция?
В этом разделе bridge будем называть клиентов, а router, с которого загружается bridge, – сервером. Все, что требуется от клиента, – это послать запрос по сети, получить настройки, скачать образ и передать управления на него. На стареньких компьютерах редко встречаются интегрированные сетевые интерфейсы с возможностью загрузки по сети. Приходится использовать сетевые карты с BOOTROM (энергонезависимая память с прошивкой, осуществляющей загрузку). Давно, еще на стареньких NE2000, появилась возможность установки и использования этих самых BOOTROM. Только в наше время это дело выбора.
Можно найти сетевую карту со слотом для ПЗУ, докупить саму ПЗУ, сделать прошивку, необходимую вам, и наслаждаться проделанной работой. А можно сразу купить сетевую карту, поддерживающую загрузку по сети. Сейчас распространены прошивки Intel PXE, лучше остановиться на версии v2.x. У автора как раз завалялось несколько таких карточек, а именно 3Com905C-TX-M. Устанавливаем, входим в BIOS сетевой карты, настраиваем, чтобы загружалась по сети.
Все, на этом настройка клиента заканчивается. Но что, если у вас нет под рукой такого 3Com, но нашлась какая-нибудь другая карта с уже установленным ПЗУ. Вам помогут либо etherboot, либо netboot [3]. Клиент настроен, включен и рассылает запросы по сети, ожидая ответа от DHCP-сервера в виде сетевых настроек и TFTP-сервера, с которого необходимо забрать образ.
Сервер
На сервере должны быть остановлны DHCPD [4], TFPD и пакет SYSLINUX [5]. Как я уже говорил (см. выше), сначала DHCPD должен отдать сетевые настройки, следовательно, настраиваем его в первую очередь. Вот примерное содержание конфигурационного файла:
#############
# dhcpd.conf
#
# For diskless station.
allow booting;
allow bootp;
# option definitions common to all supported networks...
option domain-name "my-domain.ru";
option domain-name-servers ns.my-domain.ru, ns1.my-domain.ru;
#ddns-update-style none;
default-lease-time 600;
max-lease-time 7200;
subnet 192.168.0.0 netmask 255.255.255.0 {
option routers 192.168.0.1;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.0.255;
option dhcp-client-identifier "PXEClient";
next-server 192.168.0.1;
filename "pxelinux.0";
host bridge {
hardware ethernet 00:00:00:00:00:00;
fixed-address 192.168.0.2;
}
}
/usr/sbin/in.tftpd -l -v -s /tftpboot/
/tftpboot/pxelinux.cfg/C0A80002
default /kernels/test/bzImage initrd=/images/initrd.br load_ramdisk=1 prompt_ramdisk=0 ramdisk_size=16384 rw root=/dev/ram0 console=ttyS0
prompt 1
display /images/default.txt
F1 /images/help.txt
timeout 50
label linux
kernel /kernels/bare.i/bzImage
append initrd=/images/initrd.br load_ramdisk=1 prompt_ramdisk=0 ramdisk_size=8192 rw root=/dev/ram SLACK_KERNEL=bare.i
label bare.i
kernel /kernels/bare.i/bzImage
append -
Кратко прокомментирую самое главное. Клиент получит IP-адрес (fixed-address 192.168.0.2), соответствующий MAC-адресу (hardware ethernet 00:00:00:00:00:00). Адрес TFTP-сервера и имя образа он узнает из параметров next-server 192.168.0.1 и filename «pxelinux.0» соответственно.
Запускаем DHCPD, на первый раз можно с опциями «-d -f», чтобы увидеть запросы клиента и как на них реагирует DHCPD. Включите клиента, он пошлет запросы, получит настройки, выведет их на экран (конечно, не обязательно, но вы поймете, что клиент получил либо не получил их, тем более комментарий к происходящему выведет DHCPD).
Второй шаг. Настройка TFTP
TFTP-сервер поставляется в комплекте практически с любым дистрибутивом. Скорее всего и в вашем Linux он уже установлен. Автор не стал запускать TFTP под наблюдением INETD (именно в моем случае это просто излишне, для себя решайте сами). Вся настройка сервиса (если без INETD) укладывается в указание нужных параметров при запуске [6].
В директорию /tftpboot/ (у меня это линк на /usr/local/tftpboot/) копируем бинарник pxelinux.0 из пакета SYSLINUX. Это все, что понадобится нам из этого пакета. Конфигурационные файлы для PXELINUX хранятся в корне TFTP-сервера в каталоге «pxelinux.cfg». Чтобы клиент легко разобрался, какой конфигурационный файл предназначен именно ему, файлы соответствуют IP-адресам клиентов, но в шестнадцатеричном представлении. Так, для нашего клиента, имеющего IP-адрес 192.168.0.2, конфигурационный файл для pxelinux.0 должен находиться по следующему адресу:
Как вы думаете, как будет выглядеть конфигурационный файл для 192.168.0.0/24? Правильно – «C0A8».
Вот мой конфигурационный файл:
Примечание. Убедительная просьба – прочтите документацию по настройке PXELINUX. PXELINUX обладает широкими возможностями, с его помощью вы можете загрузить любую операционную систему и даже восстанавливать ее после краха. Если внимательно разобрать конфигурационный файл, вы поймете, что ядра Linux и сами образы системы хранятся в разных директориях (автору так удобнее).
Собрать ядро для бездисковой станции проблем не составит. Прочтите HOWTO на тему Diskless и Kernel [7]. Главное, включите поддержку ram-дисков и ext2. От NFS-ROOT автор отказался наотрез, ну не нужен он там. Лучше собрать свой маленький дистрибутив или воспользоваться каким-нибудь однодискетным. Автор собрал таковой в стиле Slackware, основанный на BusyBox [8]. Образ дистрибутива ядро скачивает с TFTP-сервера согласно параметрам (см. конфигурационный файл).
Безопасность
Используйте firewall, дабы прикрыть новые сервисы. Можно ограничить доступ к ним только из одной сети, но iptables позволяет ограничить доступ даже по MAC-адресам. Для DHCPD укажите сетевой интерфейс, который будет обслуживаться этим сервисом.
Заключение
Не бойтесь экспериментировать. Собрать и настроить такой bridge несложно, зато практическая польза – все 100%. К тому же, настроив одну станцию и собрав один маленький дистрибутив, вам наверняка захочется сменить еще парочку маршрутизаторов на бездисковые.
Ссылки:
- Что такое bridge и чем он отличается от router, должен знать каждый системный администратор. К тому же, как настроить bridge, описывалось в статье Заклякова П. Разводной мост на Linux (Bridging Firewalls). – Журнал «Системный администратор» №4(5), апрель 2003 г. – 42-54 с. Хотя лично у меня есть небольшие расхождения в реализации. В основном они сводятся к упрощению. Например, вместо того чтобы патчить ядро, можно просто использовать последнюю версию оного. Сначала прочтите Bridge+Firewall-HOWTO, вы сами все поймете. Вот несколько ссылок, которые помогут вам до конца разобраться:
http://bridge.sourceforge.net
http://www.linux.org/docs/ldp/howto/Bridge/index.html
http://www.linux.org/docs/ldp/howto/Bridge+Firewall.html
http://www.linux.org/docs/ldp/howto/BRIDGE-STP-HOWTO/index.html
http://www.ibiblio.org
- По всем параметрам, которые можно задать ядру через командную строчку, есть хороший man – man 7 bootparam.
- Подробнее о etherboot и о netboot можно узнать, найдя эти проекты на http://www.sf.net
- Homesite dhcpd: http://www.isc.org/products/DHCP
- Homesite syslinux: http://syslinux.zytor.com/index.php
- man in.tftpd
- http://www.ibiblio.org/pub/Linux/docs/HOWTO/Diskless-HOWTO
http://www.ibiblio.org/pub/Linux/docs/HOWTO/Kernel-HOWTO
- BusyBox представляет собой «набор» основных утилит Linux, только они специально несколько упрощены. Все равно очень удобно. Очень удачно описана сборка дистрибутива в статье «Создание загрузочных дискет и CD-дисков Linux» Всеволода Стахова, которая была опубликована в журнале «Системный администратор» №6(7), июнь 2003 г. – 44-51 с.