Настройка 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
Последнее, без чего наше чудо не заработает это конфигурация 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
Архив со всеми нужными файлами и настроенной конфигурацией:
Ссылки на схожие статьи, найденные в интернете:
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