Загрузка и восстановление прошивки dd-wrt через tftp

В заметке про установку прошивки dd-wrt на D-Link DIR-620 я упоминал о замене стандартного загрузчика роутера на загрузчик от Zyxel Keenetic, после чего становится возможной загрузка прошивок в DIR-620 при момощи tftp. Нужно это может быть во-первых для того, чтобы не пересобирать сторонние прошивки в формат, понятный загрузчику, доступному через веб-интерфейс; во-вторых — для восстановления прошивки роутера, если что-то пошло не так и веб-интерфейс недоступен.
Поскольку процесс установки прошивки через tftp под Windows детально рассмотрен на сайте deadc0de, а я в основном использую Linux-машины дома, опишу загрузку dd-wrt в DIR-620 через tftp именно для Linux.

Как загрузить прошивку dd-wrt при помощи tftpd

  • Для начала устанавливаем tftp-сервер — либо сам tftpd (работает в интерактивном режиме), либо atftp(клиент, можно использовать для проверки работы сервера)/atftpd(сервер), работающий в неинтерактивном режиме. atftp для загрузки прошивки удобней, чем tftp:
  • Выключаем питание роутера, соединяем кабелем порт LAN1 роутера с выходом сетевой карты компьютера, в моем случае проводной интерфейс имеет имя eth0 (при необходимости изменить имя сетевого интерфейса в Linux можно за пару минут);
  • Меняем IP-адрес и маску подсети на компьютере, с которого будет устанавливаться прошивка:
    ifconfig eth0 10.10.10.3 netmask 255.255.255.0
    Команду нужно выполнять от суперпользователя, например при помощи sudo;
  • Набираем в консоли следующую команду:
    atftpd --tftpd-timeout 60 --verbose --trace /путь/к_прошивке
  • Включаем питание роутера, 5 секунд держим нажатой кнопку Reset, на компьютере запускаем набранную выше команду, после этого отпускаем Reset — должна начаться загрузка прошивки.

Настройка atftpd

После установки ftp-сервера atftpd (sudo apt-get install atftpd) может возникнуть необходимость выполнить некоторые настройки для его корректной работы. Например — создать рабочую директорию, которая будет корневой для сервера:

sudo mkdir /var/aftpd_dir
sudo chmod -R 777 /var/aftpd_dir
sudo chown -R nobody:nogroup /var/aftpd_dir

Затем отключаем запуск демона через «супер-сервер» inet.d, изменив значение переменной USE_INETD в файлах /etc/default/atftpd и /etc/init.d/atftpd с TRUE на FALSE:

#USE_INETD=true
USE_INETD=false

После этого ftp-сервер можно будет запускать с помощью команды /etc/init.d/atftpd start.
Постоянно используемые опции запуска можно перечислить в переменной OPTIONS, находящейся в файле /etc/init.d/atftpd. Например:

OPTIONS="--user nobody --bind-address 0.0.0.0 --no-multicast /var/aftpd_dir"

--user nobody — от имени какого пользователя будет запущен демон;
--bind-address 0.0.0.0 — ftp-сервер будет обрабатывать запросы, поступающие на указанный ip-адрес;
--no-multicast — сервер не будет реагировать на широковещательные запросы, обрабатывая только прямые;
/var/aftpd_dir — созданная ранее рабочая директория для сервера.

Остаётся только запустить сервер и проверить его работоспособность, подключившись к нему tftp 127.0.0.1. Тестовый файл (test_file), расположенный в директории /var/aftpd_dir, можно получить при помощи команды put:

tftp> put ~/test_file /test_file
Sent 10 bytes in 0.0 seconds
tftp>

7 мыслей о “Загрузка и восстановление прошивки dd-wrt через tftp”

  1. Народ, подскажите пожалуйста, как можно прошить D’link DIR-620 прошивкой dd-wrt от Asus RT-N13U. Роутер не цепляет эту прошивку, ни через web-интерфейс, ни при помощи TFTP.
    История начиналась так: есть на руках роутер D’link DIR-620 с завода стояла прошивка 1.0..6. Прошил загрузчик, как сказано на этом сайте, потом по web-интерфейсу залил прошивку dd-wrt от Asus RT-N13U, всё прошилось всё нормально. Тут чёрт меня дёрнул прошить последнюю родную прошивку 1.3.0, прошивал через TFTP, аппарат прошился, но прошивка не понравилась, хочу вернуть прошивку dd-wrt от Asus RT-N13U, а роутер её не цепляет ни каким из выше изложенных способов. ПОМОГИТЕ!!!
    Может у кого есть прошивка 1.0..6, попробовать её перезалить?!

  2. atftpd —tftpd-timeout 60 —verbose —trace /путь/к_прошивке
    в ответ на команду
    [directory] must be a world readable/writable directories.
    By default /tftpboot is assumed.
    ***
    что сделать?)

    1. Подозреваю, что надо права на директорию поменять, чтобы чтение-запись были разрешены всем. chmod a+rw [directory]

  3. Я новичок в линуксе.
    Подскажите пожалуйста как настроить atftpd корректно на ubuntu?. sudo apt-get install atftpd я смог.

    1. В чём именно проблема-то заключается?
      Вкратце работа с atftpd после установки выглядит так:

      Если не нужен автоматический запуск aftpd при загрузке компьютера, меняем в файле /etc/default/atftpd строку USE_INETD=true на USE_INETD=false. После этого ftp-сервер можно будет запускать командой sudo invoke-rc.d atftpd start.
      Создаёте директорию, из которой aftpd будет разадавать файлы:

      sudo mkdir /aftpd_dir
      sudo chmod -R 777 /aftpd_dir
      sudo chown -R nobody /aftpd_dir

      Затем всё в том же настроечном файле /etc/default/atftpd указываете путь к директории, дописав её в конец переменной OPTIONS: OPTIONS=" /aftpd_dir", после чего перезапустить демона (sudo /etc/init.d/atftpd restart или sudo invoke-rc.d atftpd start).

      Остальные опции запуска можно взять из мана 🙂 Дописываются они в ту же переменную OPTIONS, чтобы не указывать их каждый раз в командной строке.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *