Настройка TFTPBoot на роутере Asus RT-AC56U

2016-5-16 20:24

Имея в наличии мощный wi-fi роутер, поддерживающий множество крутых и полезных плюшек, я решил настроить на нём ещё одну не менее полезную фичу - TFTPBoot. С помощью этой опции мне больше не нужны будут диски или флешки для установки винды (да и вообще любой ОС с любого съемного накопителя) или, например, запуска Hiren's BootCD. Всё это дело теперь будет лежать на флешке роутера и когда понадобиться, любой ноут подключаем к сети, выставляем загрузку с сетевой карты и получаем все дистрибутивы и загрузочные диски в меню PXE boot menu 

Стоит сразу сказать, что на роутер установлена прошивка Tomato by Shibby, скачать которую можно на официальной странице автора по следующей ссылке tomato.groov.pl.

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

Меньше слов, больше дела  

Для начала нам потребуется скачать нужные файлы (скачать готовый архивчик можно в конце статьи, если конечно кто захочет):

chain.c32 
ldlinux.c32 
libcom32.c32 
libutil.c32 
menu.c32 
memdisk 
pxelinux.0 
poweroff.c32 
vesamenu.c32 
reboot.c32 

Теперь, когда у нас всё, что нужно, следует положить это в нужные папочки. В корневой файловой системе роутера с последней (на момент написания статьи) версией прошивки v136, уже имеется папка /tftpboot. Копировать в неё ничего не стоит, туда нужно монтировать папку с USB накопителя вставленного в роутер. Эту операцию можно автоматизировать скриптом в разделе настройки роутера USB and NAS -> Run after mounting, добавив следующий скрипт:

if [ -d /mnt/DATA/tftpboot ]; then
  mount /mnt/DATA/tftpboot /tftpboot
fi

,где /mnt/DATA - путь куда монтируется USB накопитель, у вас он, возможно будет другой; при это на USB носителе у меня создана папка tftpboot, и весь этот скрипт проверяет наличие папки tftpboot на USB накопителе и если она существует, то монтирует её в корень файловой системы роутера в папку /tftpboot. Всё просто.

Теперь, когда всё нужное находится на своём месте, настало время настроить конфигу PXELinux. Файл конфигурации должен находится в папке /tftpboot/pxelinux.cfg/ и называется он просто default. Самая простая конфигурация выглядит следующим образом:

ui vesamenu.c32
PROMPT 0
MENU TITLE Загрузочное меню vfiuchcikicshuusrch.ddns.net
MENU AUTOBOOT Загрузка локальной системы через # секунд
TIMEOUT 300
FONT pxelinux.cfg/Cyr_a8x16.psf

DEFAULT bootlocal

LABEL bootlocal
   menu label ^Загрузка с локального диска
   kernel chain.c32
   append hd0 0
   timeout 150
  TEXT HELP
Загрузка с первого локального жесткого диска.
  ENDTEXT

LABEL memtest
  MENU LABEL Memtest86+-5.01
  kernel images/memtest
  TEXT HELP
Запустить тестирование оперативной памяти.
  ENDTEXT

LABEL reboot
  menu label Reboot
  kernel reboot.c32
  TEXT HELP
Перезагрузить компьютер
  ENDTEXT
     В меню будут доступны 4 пункта: загрузка с локального носителя на компьютере, загрузка утилиты тестирования памяти, перезагрузка и завершение работы компьютера.

Последнее, без чего наше чудо не заработает это конфигурация dnsmasq демона. Всё, что нужно сделать, это добавить следующие строчки в разделе конфигурации роутера Advanced -> DHCP/DNS -> Dnsmasq Custom configuration:

enable-tftp
tftp-root=/tftpboot
dhcp-boot=pxelinux.0,AC56U,192.168.1.1

,где AC56U - это локальное имя вашего роутера в сети (можно оставить пустым), и следующий параметр это IP-адрес роутера (обычно он 192.168.1.1)

    Данный вариант настройки dnsmasq позволит загружаться только в режиме Legacy BIOS, т.е. из стандартного BIOSа, из UEFI загрузка по сети будет не доступна. Для добавления поддержки загрузки в режиме UEFI нужно переписать настройки dnsmasq следующим образом:

dhcp-match=set:BIOS, option:client-arch, 0
dhcp-match=set:EFIx64, option:client-arch, 7
dhcp-match=set:EFIx64, option:client-arch, 9
dhcp-match=set:EFIia32, option:client-arch, 6
dhcp-boot=tag:BIOS,BIOS/lpxelinux.0
dhcp-boot=tag:EFIx64,EFIx64/bootx64.efi
dhcp-boot=tag:EFIia32,EFIia32/bootia32.efi
enable-tftp
tftp-root=/tftpboot

,где dhcp-match - задают тэг (например, EFIx64) для определения номера архитектуры загружаемого клиента (компьютера); dhcp-boot - задает файл агента загрузчика для соответствующего тэга.

    Иерархию папок можно сделать по своему. Я создал в папке /tftpboot 5 подпапок: images, pxelinux.cfg, BIOS, EFIx64, EFIia32. В папка BIOS, EFIx64 и EFIia32 лежат файлы для конкретной архитектуры pxelinux и символические ссылки на папки images и pxelinux.cfg в корне /tftpboot.

    PXELinux позволяет загружать не только бинарники или ядра, но и образы дисков, с помощью аддона memdisk. В приведенном ниже примере, я добавил в меню пункт для загрузки образа Hiren's BootCD 15.1 в формате iso, которой, в моём случае, лежит в папке /tftpboot/images:

LABEL Hiren's BootCD 15.1 Ru FULL
   LINUX memdisk
   INITRD images/HBCD15.1ruFull.iso
   APPEND iso raw

Архив со всеми нужными файлами и настроенной конфигурацией:

tftpboot.tar.gz

tftpbootefi.tar.gz

Ссылки на схожие статьи, найденные в интернете:

http://thinstation.pro/thin/81-select.html

http://www.syslinux.org/wiki/index.php?title=PXELINUX

http://tomatousb.org/forum/t-436161/pxelinux-boot-server-on-rt-n16-with-optware-and-tomato-usb-u

Внимание! Копирование, в том числе частичное, запрещено!

Теги: PXE AC56U RT-AC56U Asus Boot TFTP TFTPBoot Tomato TomatoUSB Shibby BIOS EFI UEFI

vfiuchcikicshuusrch.ddns.net
Карта Сайта