PXE - Сетевая загрузка с микротика

PXE - (Preboot eXecution Environment) - среда для загрузки компьютера с помощью сетевой карты без использования локальных носителей данных (жёсткого диска, USB-накопителя и т.п.)

Приветствую, решил поделится некоторым опытом, который поможет в первую очередь приходящим системным администраторам.

В моем понимании - хороший приходящий системный администратор, это тот человек, который приезжает в организацию раз в месяц за зарплатой :)

Так уж получилось, что я тоже слежу за несколькими организациями и администрирую все то, что включено в коммутатор, естественно во всех этих организациях у меня стоят микротики.

Организации разбросаны по разным концам города, при отсутствии пробок и важных дел доехать до любой из них занимает 20-30 минут, в час пик это время резко увеличивается и с учетом пробок на дорогах до 1,5-2х часов.

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

Моим решением данной проблемы стало удаленное управление через RADMIN и крайне редко через TeamViewer.

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

Так-то оно так :) Появляюсь в организациях действительно редко, за деньгами, для общения с директором и в случаях катастроф на машинах пользователей. Вся остальная работа спокойно делается из дома.

И все вроде бы хорошо, только вот хочется ездить еще меньше :) В идеале раз в месяц.

Основными причинами таких поездок являются катастрофы в виде повреждения таблицы разделов на жестком диске, ошибки файловой системы, убитой винды или подхваченного WinLocker. Это те случаи, когда починить, в общем, то несложно, просто ехать значительно дольше.

 

 

Как это работает?

 

Для организации загрузки системы в PXE используются протоколы IP, UDP, BOOTP и TFTP.

PXE-код, обычно находящийся в ПЗУ сетевой карты, получает из сети по протоколу TFTP (получив адрес TFTP-сервера по BOOTP) исполняемый файл, после чего передаёт ему управление.

Простыми словами: Живем мы в современном мире где большинство сетевых карт интегрированы в материнскую плату, активируем в настройках BIOS опцию LAN BOOT ROM (может называться иначе), и ставим в очередности загрузки сетевую карту как первое опрашиваемое загрузочное устройство.

При загрузке будет выполнен опрос устройств, при опросе сетевой карты будет загружен PXE-rom, далее в сети будет найден DHCP сервер который выдаст ip адрес, адрес TFTP сервера и имя файла загрузчика. Далее файл загрузчика будет получен по TFTP и ему будет передано управление, загрузчик так же по протоколу TFTP вытянет необходимые ему файлы.

 

 

Что будем грузить?

Для своего проекта я взял за основу два LiveCD. Первый AlkidLiveDVD, второй VINCOME. Мне нужно чтобы эти LiveCD при их загрузке автоматически загружали поддержку сети, устанавливали и запускали RADMIN 2.2 с необходимыми мне настройками.

Сразу же возникла проблема - не всякий LIVECD можно запустить по сети без особых танцев с бубном, т.к. LiveCD не знает, что его загружают по TFTP. Зато можно с помощью загрузчика залить образ ISO в память, и смонтировать его в виртуальный CDROM, но тут стоит подумать о размере ISO т.к. оперативка машины не резиновая, да и TFTP не очень шустрый, на разных сетевых картах скорость будет разной.

В итоге мы понимаем, что при маппинге в память нужно, чтобы влез сам ISO и осталось место в оперативке, для запуска LiveCD и программ с него.

Так что лишние программы будем вырезать и добавлять все, что нам необходимо. Для распаковки ISO подойдет обычный WinRar или любая другая программа которая умеет работать с этими образами.

Я для своих задач оставил минимум: файловый менеджер, акронисы (TrueImage и DiskDirector), утилиты для работы с реестром и жестким диском. Для Vincome было все просто, почистил Nu2Menu.xml и удалил лишние файлы, добавил RADMIN и сеть в автозагрузку. С Alkid было сложнее, помимо удаления файлов нужно отредактировать реестр сборки. Делается это так: извлекаем из под винды с образа A386/SYSTEM32/CONFIG/SOFTWARE в удобное для нас место, можно записать на флешку. Грузимся на любой машине с образа или диска Alkid, делаем это так, чтобы флешка была доступна, открываем regedit и загружаем куст SOFTWARE под любым именем, ищем раздел Sherpya\XPEinit, прочесываем подразделы, добавляем в автозагрузку то, что нужно и удаляем ненужные ярлыки из меню, после редактирования выгружаем куст. Подменяем файл SOFTWARE в сборке, файлом с флешки. Так как у Alkid загрузчик BCDW, а все лишнее мы удалили, стоит грохнуть и меню, для этого редактируем файл BCDW/BCDW.ini, где все удаляем и указываем:

[MENUITEMS]
\A386\setupldr.bin

После того как вы закончили глумится над файлами сборок их нужно собрать обратно в ISO. Для этого я использовал UltraISO, открыл изначальный образ LiveCD, удалил в образе все файлы, залил свои, сохранил образ.

Теперь мы имеем:

vincomepxe.iso - 313мб (Исходный 668мб)

alkidpxe.iso - 476мб (Исходный 1,23гб)

Наш загрузчик понимает архивы .gz это не экономит наш RAM но может ускорить скорость загрузки и сэкономит место на сервере (при использовании флеш очень актуально), только вот еще одна беда, при использовании TFTP архив придется грузить дважды, первый раз для чтения заголовков и к.с., второй раз для распаковки.

Соответственно архив должен быть меньше оригинала более чем в два раза, я скачал gzip и пожал ISO, так же попробовал пожать с помощью PeaZip со степенью Ultra, файл получился меньше чем после использования gzip.

Теперь имеем:

vincomepxe.gz - 126мб (126*2=252мб, что меньше чем исходные 313мб)

alkidpxe.gz - 224мб (224*2=448мб, что меньше чем исходные 476мб)

При маппинге ISO в память, образ монтируется в качестве CDROM для которого у LiveCD в большинстве случаев нет драйверов и при загрузке и соответственно вся загрузка вывалится в BSOD 7B, чтобы такого не произошло нужно замаппить образ дискеты Winvblock или Firadisk в дисковод 3.5 А это еще один файл: winvblock.gz - 113кб.

 

 

Загрузчик

В качестве загрузчика мы будем использовать универсальный загрузчик GRUB, в нем довольно таки много всяких фич, он очень прост и удобен в использовании.

Файл: grldr - сам загрузчик

Файл menu.lst -менюшка к нему, в нашем случае каталог /menu.lst/default

Файл /boot/pxetheme.gz - gfx тема меню для загрузчика.

Так же в каталоге /boot будут лежать файлы alkidpxe.gz, vincomepxe.gz и winvblock.gz.

Итого шесть файлов:

Содержимое файла /menu.lst/default

timeout 5
default 0
gfxmenu /boot/pxetheme.gz

title Загрузка с HDD
chainloader (hd0,0)/grldr
boot


title Загрузка ALKID LiveCD PXE
password --md5 $1$hat1$rcEUm0uEEYM902fU/QP24/ map --mem /boot/winvblock.gz (fd0)
map --mem (pd)/boot/alkidpxe.gz (0xff)
map --hook chainloader (0xff)


title Загрузка VINCOME LiveCD PXE
password --md5 $1$hat1$rcEUm0uEEYM902fU/QP24/
map --mem /boot/winvblock.gz (fd0)
map --mem (pd)/boot/vincomepxe.gz (0xff)
map --hook chainloader (0xff)


title Перезагрузить ПК
reboot


title Выключить ПК
halt

 

Виндовым Vista, 7, 8 блокнотом файлик не править, т.к. кодировка сохранения все испортит, или в XP или скачайте программу Tea.

Пароли MD5 для GRUB можно сформировать командой md5crypt через командную строку grub.

 

Теперь, когда все файлы протестированы и на руках, мы можем начинать настройку микротика.

 

 

 

Mikrotik, DHCP+TFTP

 

Имеем сеть 192.168.3.0/24

Микротик в ней 192.168.3.1, он же шлюз в интернет.

 

 

Настраиваем DHCP server

 

Назначаем ip адрес:

/ip address add address=192.168.3.1/24 disabled=no interface=LAN network=192.168.3.0

 

Заведем пул адресов для выдачи:

/ip pool add name=pool1 ranges=192.168.3.2-192.168.3.254

 

Поднимаем сервер:

/ip dhcp-server add address-pool=pool1 authoritative=after-2sec-delay disabled=no interface=LAN lease-time=3d name=server1
/ip dhcp-server config set store-leases-disk=5m

 

Настраиваем выдачу, boot-file-name=grldr указывает имя загрузчика на TFTP сервере, next-server=192.168.3.1 указывает ip адрес TFTP сервера:

/ip dhcp-server network add address=192.168.3.0/24 boot-file-name=grldr dns-server=192.168.3.1 gateway=192.168.3.1 netmask=24 next-server=192.168.3.1

 

Так же полезно заполнить /ip dhcp-server lease для того чтобы ip адреса пользователей были фиксированы и не менялись.

После данной настройки наш DHCP будет выдавать всю необходимую информацию для загрузки.

 

 

TFTP

Для наглядности я подключил к микротику флешку usb1 т.к. не у всех x86 с кучей места на системном диске. Зашел в System -> Stores через Winbox, на вкладке Disks отформатировал ее, после подключился по FTP перешел в каталог /usb1, создал там каталох pxe, получилось /usb1/pxe, и залил туда все наши файлы.

Далее добавил информацию о сопоставлении имен запрашиваемых файлов к реальной файловой структуре, права записи:

/ip tftp add allow=yes allow-rollover=yes disabled=no read-only=yes real-filename=usb1/pxe/grldr req-filename=grldr
/ip tftp add allow=yes allow-rollover=yes disabled=no read-only=yes real-filename=usb1/pxe/menu.lst/default req-filename=menu.lst/default
/ip tftp add allow=yes allow-rollover=yes disabled=no read-only=yes real-filename=usb1/pxe/boot/alkidpxe.gz req-filename=boot/alkidpxe.gz
/ip tftp add allow=yes allow-rollover=yes disabled=no read-only=yes real-filename=usb1/pxe/boot/vincomepxe.gz req-filename=boot/vincomepxe.gz
/ip tftp add allow=yes allow-rollover=yes disabled=no read-only=yes real-filename=usb1/pxe/boot/pxetheme.gz req-filename=boot/pxetheme.gz
/ip tftp add allow=yes allow-rollover=yes disabled=no read-only=yes real-filename=usb1/pxe/boot/winvblock.gz req-filename=boot/winvblock.gz

Кстати сказать, обратите внимание на опцию allow-rollover=yes, через винбокс включить ее нельзя, только, через терминал, если опция отключена для файла - файлы больших размеров не пройдут через TFTP.

По остальному, загрузка не с флешки значительно быстрее, у меня флешка определилась как USB 1.1 и тупила очень страшно, хотя с жесткого пролетает как на ракете.

 

 

 

Заключение

 

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

Веселый пункт меню:

title Загрузка с HDD
chainloader (hd0,0)/grldr
boot

Дает возможность подгрузить второй GRUB с жесткого диска, а уже из под него грузить любой LiveCD с веселой скоростью, удаленным доступом и полным набором программ.

Вот теперь можно ездить только за деньгами, при поломке (загрязнении железа), апгрейде и т.д.

Но остался еще один не решенный вопрос, как быть если комп старый и (или) не умеет грузится сетевой карты, а на жестком улетел раздел?

Выход был найден в качестве дежурной флешки, дискеты или диска с проекта etherboot.org


Уже готовый комплект файлов можно скачать отсюда (351мб)

 

 

Menu (Кликните для увеличения)

 

Vincome LiveCD (Кликните для увеличения)

 

Alkid LiveCD (Кликните для увеличения)

 

 

При использовании материалов ссылка на автора и источник ОБЯЗАТЕЛЬНЫ!

Автор: Григорьев Дмитрий (Inlarion) (C) 19.06.2013

Теги: Mikrotik, Микротик, TFTP, PXE, LANBOOT, LiveCD, Загрузка по сети, Сетевая загрузка, GRUB




Рейтинг@Mail.ru
Яндекс цитирования

Григорьев Дмитрий Владимирович (Inlarion) 2010-2016 (C) Все права защищены. При копировании материалов с сайта, ссылка на автора и источник обязательны!!!