Встановлення OpenWrt через TFTP

Повернутись до ←керівництва по встановленню

TFTP — це дуже простий протокол, настільки простий, що його можна реалізувати навіть у невеликих завантажувачах (bootloader). Основна ідея така:

  1. Роутер вмикається
  2. Завантажувач починає підготовку до запуску прошивки
  3. На кілька секунд ініціалізуються провідні LAN порти
    • Це відбувається не миттєво, а протягом короткого часу під час старту
    • Мережеві налаштування можуть відрізнятись від типових для OpenWrt
  4. Потім:
    • Проводиться спроба підключення до TFTP-сервера на визначеній IP-адресі для завантаження прошивки, АБО
    • Ведеться прослуховування запитів від TFTP-клієнтів для отримання нового образу прошивки
  5. Подальша поведінка залежить від завантажувача

Warning!
This section describes actions that might damage your device or firmware. Proceed with care!

Потрібно з’ясувати, чи має завантажувач вашого пристрою TFTP-клієнт чи TFTP-сервер, щоб обрати відповідний розділ нижче.

Зверніться до сторінки вашої конкретної моделі на Wiki OpenWrt, щоб дізнатися про необхідні налаштування, IP-адреси та підтримку TFTP.


Important Information!
TFTP server & client tools (based on the TFTP protocol) employ no access controls while allowing light-weight file transfer between networked devices.
Do not leave TFTP services running longer than needed and use a firewall to restrict access to the local subnet.

Якщо ваш пристрій має завантажувач з TFTP-клієнтом, який у режимі відновлення намагається завантажити образ, ви повинні запустити TFTP-сервер, щоб надати прошивку.

Детальна інструкція: Налаштування TFTP-сервера для відновлення/встановлення

FIXME Цей розділ слід перенести до tftpserver

RouterBoard мають TFTP- і DHCP-клієнти у завантажувачі RouterBoot. Детальніше: Загальні процедури для Mikrotik RouterBoard

Bash-скрипт для встановлення статичної IP-адреси, запуску DHCP- та TFTP-серверів (приклад для Mikrotik):

Не забудьте змінити USER, NETDEV, IP/діапазон DHCP та шлях до файлів під ваші потреби.

#/bin/bash
USER=user
NETDEV=enp1s0
ip address flush dev $NETDEV
ip address add 10.1.1.10/24 dev $NETDEV
dnsmasq -i $NETDEV --dhcp-range=10.1.1.50,10.1.1.100 \
--dhcp-boot=openwrt-ar71xx-mikrotik-vmlinux-initramfs.elf \
--enable-tftp --tftp-root=/home/$USER/openwrt -d -u $USER -p0 -K --log-dhcp --bootp-dynamic

FIXME Цей розділ слід перенести до tftpserver

У завантажувачі bootloader пристрою DIR-300 реалізовано TFTP-клієнт. Два кроки:

  1. Спочатку встановіть та запустіть TFTP-сервер на вашому ПК, і розмістіть образи прошивки в кореневій папці сервера (можливо, знадобляться root-права).

Можливі директорії:

  • /var/lib/tftpboot
  • /srv/tftp
  • Пошук директорії:
    sudo find / -type d -name '*tftp*'
  Приклад:
  <code>
  sudo apt-get install tftpd-hpa tftp  
  sudo cp ~/uboot/arch/arm/boot/uboot.img /var/lib/tftpboot</code>
  1. Перевірка сервера:
    tftp localhost  
    tftp> get uboot.img  
    tftp> quit  
    cmp /var/lib/tftpboot/uboot.img uboot.img  
    # якщо немає виводу — все працює
  1. Підключіться до завантажувача та дайте йому команду завантажити образ (наприклад, DIR-300 підключається через telnet на порт 9000):
    telnet 192.168.20.81 9000  
    Redboot> load uboot.img  
    Redboot> go
  1. Після успішного встановлення OpenWrt не забудьте вимкнути TFTP-сервер!

FIXME Цей розділ слід перенести до tftpserver

У деяких випадках (як в “xxx”) крок 3 з прикладу 1 непридатний. Відсутня консоль для входу, і завантажувач автоматично пробує отримати прошивку через TFTP з попередньо визначеної IP-адреси під час кожного запуску.

FIXME Цей розділ слід перенести до tftpserver

Примітка: TftpServer.app забезпечує зручний графічний інтерфейс поверх вбудованого tftpd у macOS. Опис використання TftpServer.app доступний за посиланням tftpserver. Якщо ж ви віддаєте перевагу командному рядку — читайте далі…

OS X Lion вже містить tftpd, але він вимкнений за замовчуванням. Як і більшість служб у macOS, tftpd керується за допомогою `launchctl`. Файл конфігурації служби знаходиться за адресою: /System/Library/LaunchDaemons/tftp.plist Ідентифікатор служби: com.apple.tftpd

Перед змінами у конфігурації виконайте:

sudo launchctl unload -F /System/Library/LaunchDaemons/tftp.plist

Потім для завантаження служби:

sudo launchctl load -F /System/Library/LaunchDaemons/tftp.plist

Щоб зупинити службу tftpd:

sudo launchctl stop com.apple.tftpd

Щоб запустити службу tftpd:

sudo launchctl start com.apple.tftpd

Нижче наведено приклад робочого конфігураційного файлу:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>com.apple.tftpd</string>
  <key>ProgramArguments</key>
  <array>
    <string>/usr/libexec/tftpd</string>
    <string>-l</string>
    <string>-s</string>
    <string>/private/tftpboot</string>
  </array>
  <key>inetdCompatibility</key>
  <dict>
    <key>Wait</key>
    <true/>
  </dict>
  <key>InitGroups</key>
  <true/>
  <key>Sockets</key>
  <dict>
    <key>Listeners</key>
    <dict>
      <key>SockServiceName</key>
      <string>tftp</string>
      <key>SockType</key>
      <string>dgram</string>
    </dict>
  </dict>
</dict>
</plist>

Різниця від типового файлу конфігурації полягає в наступному: щоб увімкнути службу, потрібно видалити цей блок:

<key>Disabled</key>
<true/>

Додайте наступний рядок до масиву `ProgramArguments`, щоб увімкнути логування у файл /var/log/syslog.log:

<string>-l</string>

Файл образу OpenWrt, який ви хочете передавати, потрібно розмістити в директорії:

**/private/tftpboot**

Зверніть увагу, що навіть після виконання команди:

launchctl start com.apple.tftpd

ви не побачите запущений процес `tftpd` при виконанні:

ps aux | grep tftpd

Це через особливості роботи `launchctl`: служба `tftpd` фактично не запущена, але вона буде автоматично активована, щойно до неї звернеться клієнт.

У деяких випадках, коли консоль виводить “сміття” (некоректні символи), можна діяти на віру і виконати наступні команди (вони працюють у більшості випадків):

setenv ipaddr 192.168.1.1  
setenv serverip 192.168.1.100  
tftpboot 0x80000000 openwrt-xxx-generic-xxx-squashfs-factory.bin  
erase 0x9f020000 +0x332004  
cp.b 0x80000000 0x9f020000 0x332004  
boot.m 0x9f020000

TFTP-сервер у MacOS 10.4 "Tiger"

FIXME Цей розділ слід перенести до tftpserver

`tftpd` також працює “з коробки” в старій версії MacOS 10.4. Можливо, директорія `/private/tftpboot` ще не створена — але це просто потрібно зробити вручну. Отримайте root-доступ і виконайте наступні команди:

bash-4.2$ sudo bash  
Password:  
bash-4.2# mkdir -p /private/tftpboot/  
bash-4.2# cp /шлях/до/openwrt-образу /private/tftpboot/  
bash-4.2# launchctl load -F /System/Library/LaunchDaemons/tftp.plist  
bash-4.2# ps axu | grep ftp  
root   23494  0.0  0.0  27696   152  ??  Ss  4:34PM  0:00.00 launchctl load -F /System/Library/LaunchDaemons/tftp.plist  
root   23496  0.0  0.0  38604     4  p3  R+  4:34PM  0:00.00 grep ftp  

bash-4.2# launchctl start com.apple.tftpd  

bash-4.2# ps axu | grep ftp  
root   23494  0.0  0.0  27696   152  ??  Ss  4:34PM  0:00.00 launchctl load -F /System/Library/LaunchDaemons/tftp.plist  
root   23498  0.0  0.0  27244   464  ??  Ss  4:34PM  0:00.01 /usr/libexec/launchproxy /usr/libexec/tftpd -i /private/tftpboot  
root   23500  0.0  0.0  38604     4  p3  R+  4:34PM  0:00.00 grep ftp  

bash-4.2# tftp 192.168.100.72   ### тестування  
tftp> get openwrt-ar71xx-generic-hornet-ub-squashfs-sysupgrade.bin  
Received 7270950 bytes in 2.7 seconds  
tftp>

Базова процедура використання TFTP-клієнта для завантаження нової прошивки на ваш маршрутизатор:

  1. Вимкніть живлення вашого маршрутизатора
  2. Підключіть Ethernet-кабель від комп’ютера (який виступає як TFTP-клієнт) до LAN-порту маршрутизатора

Дивіться сторінку вашої моделі на Wiki OpenWrt, щоб дізнатися, який порт використовувати

  1. Запустіть TFTP-клієнт на вашому комп’ютері:
    1. Вкажіть IP-адресу маршрутизатора (залежить від моделі й завантажувача, див. Wiki вашого пристрою)
    2. Встановіть режим передачі: octet або binary
    3. Налаштуйте клієнт на повторну відправку файлу до успішного завершення
    4. Використайте команду `put` для передачі файлу
  2. Увімкніть маршрутизатор, залишивши TFTP-клієнт активним — він має постійно намагатися встановити з'єднання
  3. Після отримання підтвердження (ack) від завантажувача, клієнт почне передавати прошивку
  • :!: Будьте терплячими — перепрошивка починається після завершення передачі прошивки. У більшості випадків маршрутизатор перезавантажується самостійно. У деяких моделей цього не відбувається — зачекайте принаймні 15 хвилин перед вимкненням живлення.
  • :!: Завантажувач зазвичай не використовує IP або MAC-адресу, збережену в NVRAM. Замість цього використовується значення за замовчуванням. Див. документацію до вашої моделі.
  • :!: Поставте мережевий концентратор (hub) або комутатор (switch) між комп’ютером і маршрутизатором — це забезпечить активність мережевого інтерфейсу до того, як завершиться `boot_wait`. Це важливо для комп’ютерів, де інтерфейс активується із запізненням.
  • У маршрутизаторів з індикатором DMZ: під час завантаження OpenWrt цей індикатор світиться, і вимикається після завершення скриптів завантаження.

Команди TFTP залежать від реалізації. Нижче кілька прикладів:

Мережеве з’єднання повинно бути встановлено до моменту ввімкнення пристрою. Один зі способів гарантувати це — підключити комутатор (switch) або концентратор (hub) між комп’ютером і пристроєм.

Альтернатива — вимкнути Network Manager (або скористатися дистрибутивом/LiveCD без нього). Можливі команди (залежить від дистрибутива):

  • `/etc/init.d/networking stop`
  • `/etc/init.d/network stop`
  • `/etc/init.d/NetworkManager stop`
  • `service networking stop`
  • `service network stop`
  • `service NetworkManager stop`
  • `systemctl stop NetworkManager`

Кроки підготовки

  1. Призначте статичну IP-адресу, сумісну з мережею завантажувача:
    ip address add 192.168.x.y/24 dev eth0
  1. Попередньо створіть ARP-запис, щоб збільшити шанси «встигнути» у TFTP-вікно:
    arp -s 192.168.x.1 02:aa:bb:cc:dd:20
  • Перевірте сторінку вашого пристрою на Wiki для точних IP і MAC-адрес
Використання atftp

Click to display ⇲

Click to hide ⇱

Один рядок:

atftp --trace --option "timeout 1" --option "mode octet" --put --local-file openwrt-xxx-x.x-xxx.bin 192.168.x.y

Покроково:

atftp
connect 192.168.x.y
mode octet
trace
timeout 1
put openwrt-xxx-x.x-xxx.bin
Використання tftp від netkit

Click to display ⇲

Click to hide ⇱

Один рядок:

echo -e "binary\nrexmt 1\ntimeout 60\ntrace\nput openwrt-xxx-x.x-xxx.bin\n" | tftp 192.168.x.y

Покроково:

tftp 192.168.x.y
binary
rexmt 1
timeout 60
trace
put openwrt-xxx-x.x-xxx.bin

Встановлення `rexmt 1` дозволяє клієнту безперервно пробувати надіслати файл. Як зазначено вище, увімкніть пристрій після введення команд — коли завантажувач буде готовий, передача почнеться автоматично.

Примітка: для деяких версій завантажувача CFE необхідно використовувати:

put openwrt-xxx-x.x-xxx.bin code.bin

Іноді передача працює лише якщо перейменувати файл прошивки в `code.bin`. Наприклад:

tftp -m binary 192.168.1.1 -c put code.bin
Використання curl

Click to display ⇲

Click to hide ⇱

curl -T openwrt-xxx-x.x-xxx.bin tftp://192.168.x.y

Приклад:

ip address add 192.168.11.2/24 dev enp0s2
arp -s 192.168.11.1 02:aa:bb:cc:dd:20
curl -T openwrt-tftp.bin tftp://192.168.11.1
Використання tftpd-hpa

У macOS можна використовувати вбудований TFTP-клієнт у терміналі, як у прикладі з netkit вище.

У разі проблем можна скористатися MacTFTP Client:

  1. Завантажте, встановіть та відкрийте MacTFTP
  2. Виберіть Send
  3. Вкажіть IP-адресу завантажувача
  4. Виберіть файл прошивки (`openwrt-xxx-x.x-xxx.bin`)
  5. Натисніть Start, одночасно вмикаючи живлення маршрутизатора

На деяких Mac'ах Ethernet-інтерфейс вимикається після відключення живлення на маршрутизаторі, і його повторна активація може зайняти надто багато часу. Це може призвести до помилки `“Invalid Password”` під час передачі TFTP.

Багато користувачів рекомендують вручну налаштувати мережеву карту в macOS:

  • Configure: Manual (Advanced)
  • Speed: 10 BaseT/UTP
  • Duplex: full-duplex

Альтернатива — використання концентратора або комутатора. Детальніше див. у розділі Усунення неполадок.

Існує кілька TFTP-клієнтів, які ви можете використовувати.

Запуск TFTP-клієнта за допомогою командного рядка (коротка інструкція)

  • Відкрийте командний рядок (cmd.exe) від імені адміністратора
  • Увімкніть вбудований клієнт TFTP у Windows:
    Dism /online /Enable-Feature /FeatureName:TFTP /All
  • Завантажте нову прошивку на маршрутизатор:
    tftp -i <IP-адреса TFTP-сервера завантажувача> PUT OpenWrt-gs-code.bin
  • Тепер увімкніть живлення маршрутизатора (якщо був увімкнений — вимкніть, потім знову увімкніть)

Зверніть увагу: деякі завантажувачі не відповідають на ICMP (ping).

  • Під’єднайте ваш мережевий інтерфейс Windows до відповідного порту на пристрої, який ви будете прошивати
  • Призначте статичну IP-адресу у тій самій підмережі, що і завантажувач
    • Приклад: якщо IP завантажувача — 192.0.2.1, маска — 255.255.255.0, то ваша IP-адреса — 192.0.2.2/24
    • Перевірте сторінку моделі вашого пристрою в Wiki OpenWrt для точних налаштувань
  • Відкрийте підвищений командний рядок:
    • Win 2000, XP, 2003: Пуск → Виконати → `cmd`
    • Win Vista, 7, 2008+: Пуск → пошук `cmd` → Ctrl+Shift+Enter

Додайте запис ARP:

  
  <code>
  arp -s <IP завантажувача> <MAC-адреса завантажувача> <ваш Windows IP></code>
  

* У Windows MAC-адреси записуються з дефісами, а не з двокрапками (наприклад: 00-00-00-00-00-00)

* У Windows 7 та подібних системах можливо знадобиться:

  
  <code>
  netsh interface ipv4 add neighbors "Local Area Connection" <IP завантажувача> <MAC-адреса></code>
  • Вимкніть визначення медіа (media sensing):
    netsh interface ipv4 set global dhcpmediasense=disabled
    netsh interface ipv6 set global dhcpmediasense=disabled
    
  • Вимкніть брандмауер Windows та інші фаєрволи (але більшість з них не блокують вихідний трафік)
  • Вимкніть маршрутизатор
  • Запустіть обраний TFTP-клієнт
  • Увімкніть маршрутизатор одразу після початку передачі файлу (TFTP має обмежене вікно)
  • Перепрошивка займає кілька хвилин — дивіться документацію до вашого пристрою
  • Після завершення бажано повернути початкові мережеві налаштування

TFTP-клієнти з графічним інтерфейсом

    1. У полі Server вкажіть IP-адресу TFTP-сервера (IP завантажувача)
    2. Пароль зазвичай не потрібен
    3. Оберіть файл прошивки
    4. Встановіть кількість повторів на 20 або більше
    5. Натисніть Upgrade — клієнт буде постійно намагатися передати файл

Не забувайте про налаштування фаєрволу, якщо він активний. Найкраще спочатку виконати команду `put`, а потім одразу увімкнути живлення на маршрутизаторі — вікно TFTP дуже маленьке й відкривається на початку процесу завантаження.

Помилка TFTP Причина
Невірний формат прошивки Образ прошивки призначений для іншої моделі пристрою
Invalid Password Ви підключилися не до завантажувача, а до вбудованого TFTP-сервера вже запущеної прошивки
Timeout (тайм-аут) Спробуйте ping для перевірки доступності пристрою. Змініть клієнт TFTP, деякі працюють некоректно
Timeout, але ping працює У Linux може бути активний NetworkManager. Спробуйте вручну налаштувати мережу

Деякі комп’ютери вимикають Ethernet-інтерфейс, коли маршрутизатор вимкнений, і повторно активують його лише через кілька секунд після увімкнення живлення. Якщо ви постійно бачите Invalid Password, підключіть комп’ютер і маршрутизатор через hub або switch — це дозволить зберегти з’єднання.

Замість DHCP вручну налаштуйте TCP/IP:

  • IP: 192.168.1.10
  • Маска: 255.255.255.0
  • Шлюз: 192.168.1.1

:!: Якщо після прошивки з’являється повідомлення “Boot program checksum is invalid” або “Invalid boot block on disk” — спробуйте інший клієнт, наприклад atftp. Це трапляється з деякими TFTP-клієнтами netkit та великими образами.

Приклад

FIXME Чи не краще було б перенести цей приклад на сторінки відповідних моделей? Чи створити окрему сторінку зі списком моделей, які підтримують TFTP, та позначити ті, що потребують затискання кнопки Reset?

Для багатьох маршрутизаторів, зокрема Asus WL-500g Premium v1, процес такий:

  1. Вимкніть живлення
  2. Натисніть і утримуйте кнопку Reset
  3. Увімкніть живлення, не відпускаючи кнопку
  4. Через кілька секунд індикатор живлення почне блимати
  5. Відпустіть кнопку Reset — пристрій перейде в режим TFTP на адресі 192.168.1.1

Багато моделей TP-Link також підтримують цей метод, включаючи:

TL-WR740Nv4, TL-WDR4300v1, TL-WDR3600v1, TL-WR842NDv1, TL-WR841NDv8, TL-WR841Nv11, TL-WR841Nv12, TL-MR3020v1, TL-MR3220v2, TL-MR3420v2, TL-WR940Nv2, TL-WR941NDv5, TL-WR1042NDv1.

Огляд і експерименти: http://bkil.blogspot.com/2014/12/hidden-tftp-of-tp-link-routers.html

  • Підключіться кабелем до порту LAN1-LAN4, не до WAN
  • Налаштуйте комп’ютер на IP у підмережі 192.168.1.x, наприклад 192.168.1.42
  • Маршрутизатор буде доступний на 192.168.1.1
$ tftp 192.168.1.1  
tftp> trace  
tftp> binary  
tftp> put openwrt-brcm-2.4-squashfs.trx  
tftp> quit  

Передача виглядатиме приблизно так:

sent WRQ <file=openwrt-brcm-2.4-squashfs.trx, mode=octet>  
received ACK <block=0>  
sent DATA <block=1, 512 bytes>  
received ACK <block=1>  
...  
sent DATA <block=4745, 0 bytes>  
received ACK <block=4745>  
Sent 2428928 bytes in 6.2 seconds

Зачекайте хвилину і перезапустіть маршрутизатор (відключивши й знову підключивши живлення). Деяка документація стверджує, що пристрій перезавантажується автоматично, але це не завжди так.

Перевірте, чи має ваш TFTP-сервер достатні права доступу до файлів або директорій.

У випадку U-Boot TFTP клієнта, ви можете отримати помилку:

## Error: 'Access violation' (2), starting again!
This website uses cookies. By using the website, you agree with storing cookies on your computer. Also you acknowledge that you have read and understand our Privacy Policy. If you do not agree leave the website.More information about cookies
  • Last modified: 2025/05/30 07:16
  • by vazaz