Для чего данная заметка:

Сервис tftpd будет осуществлять подгрузку установочных файлов для последующего развертывания систем через PXE. Я выбрал данный сервис потому, как я уже опубликовывал на своем блоге, но повторюсь мне нужен сервис задачей которого будет просто принимать/загружать файлы без возможностей аутентификации. Некоторые нюансы правильных настроек я возьму отсюда.

Заметка является продолжением той где я рассмотрел, как поднять шлюз в локальной сети.

На заметку: под tftpd каталог советую выделить отдельный логический диск (lvm), чтобы в последствии можно было его увеличить если возникнет такая потребность.

Что ж пожалуй начнем: –

приводим к своего собственному представлению как это должно быть в итоге на шлюзе, настраиваем сервис tftpd:

ekzorchik@srv-serv:~$ sudo apt-get install tftpd-hpa

ekzorchik@srv-serv:~$ sudo mkdir -p /media/pxeboot

ekzorchik@srv-serv:~$ sudo chmod -R 777 /media/pxeboot/

ekzorchik@srv-serv:~$ sudo chown -R nobody:nogroup /media/tfpdconf/

ekzorchik@srv-serv:~$ sudo cp /etc/default/tftpd-hpa /etc/default/tftpd-hpa.backup

ekzorchik@srv-serv:~$ sudo nano /etc/default/tftpd-hpa

TFTP_USERNAME="tftp"

TFTP_DIRECTORY="/media/pxeboot

TFTP_ADDRESS="0.0.0.0:69"

TFTP_OPTIONS="--secure"

ekzorchik@srv-serv:~$ sudo service tftpd-hpa restart

ekzorchik@srv-serv:~$ sudo netstat -tulpn | grep :69

udp 0 0 0.0.0.0:69 0.0.0.0:* 1592/in.tftpd

Также не забываем настроить правила брандмауэра для интерфейса смотрящего в локальную сеть, а именно eth1:

ekzorchik@srv-serv:~$ sudo iptables -A INPUT -s 10.9.9.0/24 -m tcp -p tcp —dport 69 -j ACCEPT

ekzorchik@srv-serv:~$ sudo iptables -A INPUT -s 10.9.9.0/24 -m tcp -p udp —dport 69 -j ACCEPT

Сохраняем дополненные настройки правил брандмауэра в файл:

ekzorchik@srv-serv:~$ sudo bash -c "iptables-save > /etc/ip"

Перезапускаем службу сети:

ekzorchik@srv-serv:~$ sudo /etc/init.d/networking restart

Т.к. файл сетевого загрузчика у меня будет лежать в каталоге /media/pxeboot, то нужно создать директорию Ubuntu (права nobody), чтобы в нее сложить установочные файлы инсталляции:

ekzorchik@srv-serv:~$ sudo -u nobody sh -c "mkdir -p /media/pxeboot/ubuntu/x86"

ekzorchik@srv-serv:~$ sudo -u nobody sh -c "mkdir -p /media/pxeboot/ubuntu/amd64"

Теперь потребуется скачать любым способом установочный диск, к примеру с архитектурой x86 системы Ubuntu 12.04.4 server:

ekzorchik@srv-serv:~$ wget -c http://mirror.yandex.ru/ubuntu-releases/12.04.4/ubuntu-12.04.4-server-i386.iso

после завершения скачивания, нужно смонтировать образ и извлечь нужные файлы, а именно 2 файла: linux и initrd.gz месторасположение которых в образе: /install/netboot/ubuntu-installer/i386 и перенести в директорию созданную выше: /media/pxeboot/ubuntu/x86

ekzorchik@srv-serv:~$ sudo mkdir /media/iso

ekzorchik@srv-serv:~$ sudo mount -o loop ~/*.iso /media/iso

mount: warning: /media/iso seems to be mounted read-only.

ekzorchik@srv-serv:~$ sudo -u nobody sh -c "cp /media/iso/install/netboot/ubuntu-installer/i386/initrd.gz /media/pxeboot/ubuntu/x86"

ekzorchik@srv-serv:~$ sudo -u nobody sh -c "cp /media/iso/install/netboot/ubuntu-installer/i386/linux /media/pxeboot/ubuntu/x86"

После чего установочный образ больше не нужен и его можно отмонтировать, а в последствии удалить:

ekzorchik@srv-serv:~$ sudo umount /media/iso

Аналогичные действия проводим и для архитектуры amd64, сейчас я не буду заострять на них внимание, но после я конечно же вернусь, нет уже лучше ничего не откладывать на потом, так что ж:

ekzorchik@srv-serv:~$ wget -c http://mirror.yandex.ru/ubuntu-releases/12.04.4/ubuntu-12.04.4-server-amd64.iso

ekzorchik@srv-serv:~$ sudo mount -o loop ~/ubuntu-12.04.4-server-amd64.iso /media/iso

mount: warning: /media/iso seems to be mounted read-only

ekzorchik@srv-serv:~$ sudo -u nobody sh -c "cp /media/iso/install/netboot/ubuntu-installer/amd64/initrd.gz /media/pxeboot/ubuntu/amd64"

ekzorchik@srv-serv:~$ sudo -u nobody sh -c "cp /media/iso/install/netboot/ubuntu-installer/amd64/linux /media/pxeboot/ubuntu/amd64"

ekzorchik@srv-serv:~$ sudo umount /media/iso

Сейчас активируем связку TFTP сервера загружающего PXE загрузчик, для этого снова смонтируем скачанный образ (это может быть установочный дистрибутив Ubuntuразрядность значения не имеет, а вот версию лучше брать наипоследнюю)

ekzorchik@srv-serv:~$ sudo mount -o loop ~/*.iso /media/iso

mount: warning: /media/iso seems to be mounted read-only.

Находим файл pxelinux.0 (это и есть загрузчик) и копируем его в директорию нашего tftpd сервера:

ekzorchik@srv-serv:~$ sudo -u nobody sh -c "cp /media/iso/install/netboot/ubuntu-installer/i386/pxelinux.0 /media/pxeboot/"

Также, нам понадобится, само bootменю, которое можно взять на том же диске, в директории boot-screens файл с именем vesamenu.c32 и копируем его в туже директорию что и загрузчик:

ekzorchik@srv-serv:~$ sudo -u nobody sh -c "cp /media/iso/install/netboot/ubuntu-installer/i386/boot-screens/vesamenu.c32 /media/pxeboot/"

ekzorchik@srv-serv:~$ ls /media/pxeboot/

pxelinux.0 ubuntu vesamenu.c32

Далее настраиваем содержимое PXE меню: – состоящее из 2х пунктов.

Первый: загрузка с локального диска. Этот пункт будет пунктом по умолчанию, если пользователь загрузил ПК по PXE и в течении 15 сек. не выполнил никаких действий, то система автоматически загрузится с локального диска

Второй:назовем его Testing Внутри данного меню будет находиться, пункт с возможностью загрузки Memtest x86+. Данная программа всегда будет полезна в диагностике проблем рабочих станций и серверов (я тестировал работоспособность сервера SUPERMICRO перед тем как ввести его в эксплуатацию), в общем, вещь нужная, в хозяйстве системного администратора пригодится…

Создадим директорию для конфигурационных файлов с именем pxelinux.cfgимя критично для работы!!!

ekzorchik@srv-serv:~$ sudo -u nobody sh -c "mkdir /media/pxeboot/pxelinux.cfg"

Теперь создадим конфигурационный файл с параметрами пунктов меню, с именем default:

ekzorchik@srv-serv:~$ sudo -u nobody sh -c "nano /media/pxeboot/pxelinux.cfg/default"

default vesamenu.c32

prompt 0

menu title PXE Boot Menu

MENU AUTOBOOT Starting Local System in # seconds

label Boot from local drive

menu label ^Boot from local drive

menu default

localboot 0

timeout 150

TOTALTIMEOUT 9000

 

LABEL Testing

MENU LABEL ^Testing

KERNEL vesamenu.c32

APPEND pxelinux.cfg/testing.menu

Наиболее наблюдательные, заметили что в предыдущем файле у нас появилась запись которая касается другого файла testing.menu, в нем у нас будут находиться параметры настройки пункта Testing.

Создадим данный файл:

ekzorchik@srv-serv:~$ sudo -u nobody sh -c "nano /media/pxeboot/pxelinux.cfg/testing.menu"

MENU TITLE Testing

LABEL Test software

MENU LABEL ^Return to Main Menu

KERNEL vesamenu.c32

APPEND pxelinux.cfg/default

label Memory Test

menu label ^Memory Test: Memtest86+ v4.20

kernel memtest/mt86plus

Первый пункт меню, будет отвечать за возврат в предыдущее меню, а второй за загрузку Memtest86+ v4.20

Все ничего, но мы не создали директорию где хранится файл Memtest, это мы сейчас исправим, давайте создадим соответствующую директорию.

Сделаем это:

ekzorchik@srv-serv:~$ sudo -u nobody sh -c "mkdir /media/pxeboot/memtest"

Нам осталось добавить исполняемый файл самого Memtest86+, его можно найти на установочном диске, в директории /install/ нас интересует файл mt86plus нам его необходимо скопировать в директорию memtest, чтобы путь к нему выглядел:

ekzorchik@srv-serv:~$ sudo -u nobody sh -c "cp /media/iso/install/mt86plus /media/pxeboot/memtest/"

На этом мы закончили с tftp сервером, нам осталось немного допилить DHCP сервер.

Нужно настроить взаимодействие tftpd и dnsmasq, делается это так:

ekzorchik@srv-serv:~$ sudo nano /etc/dnsmasq.conf

dhcp-boot=pxelinux.0

enable-tftp

tftp-root=/media/pxeboot

ekzorchik@srv-serv:~$ sudo service dnsmasq restart

* Restarting DNS forwarder and DHCP server dnsmasq

dnsmasq: failed to create listening socket for port 69: Address already in use

…fail!

/usr/sbin/dnsmasq –test

dnsmasq: syntax check OK.

Нужно сперва перезагрузить сервис tftpd, а потом dnsmasq и ошибки не будет:

ekzorchik@srv-serv:~$ sudo service tftpd-hpa restart

tftpd-hpa stop/waiting

tftpd-hpa start/running

ekzorchik@srv-serv:~$ sudo service dnsmasq restart

* Restarting DNS forwarder and DHCP server dnsmasq

…done.

Разобрался с ошибкой, идем дальше.

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

Если вы все сделали правильно, то меню будет иметь следующий вид:

Экран загрузки через PXE

 

 

 

 

 

 

а если перейти в меню Testing то у видим:

Меню Testing

 

 

 

 

 

 

 

Если выбрать пункт с Memtest то запустится тест памяти.

Другие пункты меню добавляются соответствующим образом.

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

ekzorchik@srv-serv:~$ sudo -u nobody sh -c "nano /media/pxeboot/pxelinux.cfg/testing.menu"

Нам необходимо добавить запись: (где passwordэто пароль, который нужно заменить на свой персональный)

MENU PASSWD password

Тогда файл принимает вид:

MENU TITLE Testing

LABEL Test software

MENU LABEL ^Return to Main Menu

KERNEL vesamenu.c32

APPEND pxelinux.cfg/default

label Memory Test

MENU PASSWD password

menu label ^Memory Test: Memtest86+ v4.20

kernel memtest/mt86plus

Сохраняем внесенные изменения.

ekzorchik@srv-serv:~$ sudo service tftpd-hpa restart

tftpd-hpa stop/waiting

tftpd-hpa start/running

ekzorchik@srv-serv:~$ sudo service dnsmasq restart

* Restarting DNS forwarder and DHCP server dnsmasq

…done.

Защита конечно, так себе, но от обычных пользователей может помочь.

Тогда при попытке запуска выйдет окно:

Окно ввода пароля перед тем как грузиться

если ввести правильный пароль, то запустится Memtest.

Таким способом можно скрывать целые меню или блокировать доступ к отдельным его пунктам.

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

По поводу скорости работы tftp, скорость работы не высока, и если вы решите перекачивать большие объемы информации, старайтесь использовать для этого WEB или FTP сервер, готовьтесь затратить на это некоторое количество времени. Если есть необходимость загрузить какой-то дистрибутив, то лучше загрузить ОС небольшого размера, примером может служить Windows PE, ну или миниатюрный дистрибутив Linux. Вот собственно и все, с уважением автор блога ekzorchik.

От ekzorchik

Всем хорошего дня, меня зовут Александр. Я под ником - ekzorchik, являюсь автором всех написанных, разобранных заметок. Большинство вещей с которыми мне приходиться разбираться, как на работе, так и дома выложены на моем блоге в виде пошаговых инструкции. По сути блог - это шпаргалка онлайн. Каждая новая работа где мне случалось работать вносила новые знания и нюансы работы и соответственно я расписываю как сделать/решить ту или иную задачу. Это очень помогает. Когда сам разбираешь задачу, стараешься ее приподнести в виде структурированной заметки чтобы было все наглядно и просто, то процесс усвоения идет в гору. Также прошу на https://win.ekzorchik.ru https://lin.ekzorchik.ru https://net.ekzorchik.ru https://voip.ekzorchik.ru https;//home.ekzorchik.ru