Собираем свой OpenWRT на роутер Tp-Link TL-WR741ND v.4.25 c vlan, openvpn, ротацией провайдеров и блэкджеком / Хабр

Собираем свой OpenWRT на роутер Tp-Link TL-WR741ND v.4.25 c vlan, openvpn, ротацией провайдеров и блэкджеком / Хабр Хостинг

Подготовка устройства

Для начала,

наше устройство до последней версии стандартной прошивки tp-link. Смысла описывать подробно данное действо я не вижу, все достаточно понятно и просто.

Сбор прошивки


Нам понадобится многоядерный процессор для комфортного создания своей прошивки (я собирал на i7). Но и Core2Duo сойдет, разве что подольше собираться будет. OS подойдет Ubuntu 15 x86_64.

Настройка vlan:

Происходит в меню роутера:

network — switch

Тут не обошлось без непоняток — нумерация портов в роутере и в конфигурации vlan не совпадает. На скриншоте я постарался объяснить как они изменены. Порт WAN в роутере не участвует в vlan-функционале.

Tagged — тэгированный трафик, сюда направляются пакеты от каждого vlan (101, 102, 103), которые затем распределяются по интерфейсам wan (основной провайдер), wan2 (резервный провайдер), eth0.103 (vlan для локальной сети).

Untagged — нетэгированный режим порта (точка входа ethernet-кабеля от нужного провайдера). Тут важно не запутаться в проводах: что куда идет. Я подписал сзади роутера нужные названия, чтобы в будущем не было путаницы (провайдер№1 101, провайдер№2 102, локалка 103).

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

После изменений нажмите Save, но не Apply! Мы ведь не хотим остаться без сети во время настройки?

Теперь, нужно создать нужные интерфейсы в Network — Interfaces:

Удалим wan6 интерфейс (мы не используем ipv6 в данном случае).

Изменим wan интерфейс для первого провайдера, укажем нужные данные для подключения (например, провайдер дает инет по dhcp), и укажем какой vlan использовать для этого интерфейса. Вот тут-то и идет сопоставление vlan: провод: интерфейс.

Для второго провайдера wan2 укажем eth0.102.

Для Lan укажем объединить интерфейсы в bridge eth0 и eth0.103:

В настройках интерфейсов wan и wan2 укажите метрику устройств (обязательно для работы mwan3):

Теперь смело можно жать на Save&Apply и проверить введенные настройки.

Mwan3 или крутая выручалочка админа


Трудно недооценить данный пакет, ведь пользователи смогут получать сумму скорости двух интернет-каналов, интернет в офисе будет всегда, ведь маловероятно, что упадут оба канала.

Для админа пройдет головная боль по временному отключению какого-либо из каналов, и не нужно городить костыльные скрипты по переключению. Я забыл о проблемах в офисе с интернетом и не переживаю когда падает один из них (мне приходят sms по данным событиям).

Я точно знаю, что OpenVPN через 30 секунд переключится на резервный канал (слава параметру multihome), связь с главным офисом в г.Москва восстановится и некоторые пользователи и начальники не заметят данный инцидент.

Приступим:

Зайдем в network — load balancing — configuration:

И включим wan2 в работу:

Далее, настроим правила работы каналов:

1) Balanced — Каналы складываются, скорость увеличивается, есть отказоустойчивость (переключение). Рекомендую.2) wan_only — только провайдер№13) wan2_only — только провайдер№2

configuration — rules

Остальные rules можно удалить или оставить другое правило.

Подробно я останавливаться на mwan3 не буду — скажу только, что есть возможность пускать трафик до определенного ресурса через один из каналов, если есть привязка на данном ресурсе по IP.

Офисная дружба или openvpn

Отлично, интернет настроили, теперь нужно соединить 2 офиса вместе.

Будет заходить по статическому ключу. Генерацию ключа можно произвести на клиентской стороне:

sudo openvpn --genkey --secret office2.key

Ключ нужно поместить в /etc/openvpn/keys/ (сервер, клиент).

OpenVPN на роутере у нас уже установлен и мы начнем править конфиг. Для этого зайдем на TP-Link по ssh.

vi /etc/config/openvpn

В шапке конфига изменяем:

package openvpn

#################################################
# Sample to include a custom config file.       #
#################################################

config openvpn custom_config

        # Set to 1 to enable this instance:
        option enabled 1

        # Include OpenVPN configuration
        option config /etc/openvpn/openvpn.conf

Cохраняем, выходим. Тут мы включили кастомный конфиг в /etc/openvpn/openvpn.conf — лично для меня это как-то привычнее.

Далее, сам конфиг:

mkdir /etc/openvpn
mkdir /etc/openvpn/keys
vi /etc/openvpn/openvpn.conf

На роутере у нас серверная сторона openvpn. Приводим конфиг к виду:

Using openwrt/lede to build a lamp/wordpress dev server on a travel router

There are loads of packages to install, so I’m not listing prerequisites. However, I will state at the outset that, since you’ll need to use CLI/terminal programs, you might want to get up to speed on PuTTY and scp (secure copy). It’s no fun wrestling with unfamiliar software on your own computer while trying to wrangle a remote machine.

TCP/IP is widely documented but still causes confusion. (I got good advice from Hnyman on this very forum.) A brutally quick account: your broadband router has a fixed IP address on the local network (LAN). It dynamically assigns IP addresses to the devices which connect to it. Your new router will need a fixed IP address so that you will be able to find it easily on the LAN, but that address has to align with the stuff the broadband router is doing.

To find exactly what the broadband router is up to, launch a terminal on your own computer and do:

route -n

The response will look like this:

Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.254 0.0.0.0 UG 1024 0 0 wlan0
169.244.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 wlan0
192.158.1.0 0.0.0.0 255.255.255.0 U 0 0 0 wlan0

Special bonus for UK readers: BT broadband routers mostly use the IP address 192.168.1.254. Either way, make a note of that gateway IP address.

Launch PuTTY from the terminal and start a new session with the ip address of the new router. Log in as ‘root’ using whatever password you set via LuCI. If the login is successful, you’ll see an OpenWrt logo in text and a command prompt. Update the gateway address by typing a uci command:

uci set network.lan.gateway 192.168.1.254

Depending on setup you may also need to type:

uci set network.lan.dns 192.168.1.254

…then:

uci commit network
reboot

The new router *should* now be set up for your existing LAN. Check by using OpenWrt’s package manager to install nano, thus:

opkg update
opkg install nano

If you get errors, there is a network configuration problem. Google is your friend!

However, assuming you’ve got nano running, you’ll be able to review all your network config options at one pass by doing:

nano /etc/config/network
BTW, when you’ve finished with nano, it will be faster to reload the network than to reboot the router:

/etc/init.d/network reload

OpenWrt/LEDE is tiny, and so are its numerous packages. This enables the system to operate from the meagre storage provided by the average router. The MT300A offers only 16Mb, but that’s enough for LEDE plus a LAMP stack.

Unfortunately, it isn’t enough for WordPress, which presently runs to about 20Mb.

A full solution to this problem is to dedicate an external USB stick to the router using a technique called overlaying, documented here: extroot

NOTES:
* I found that, after following these instructions, I still needed to access the LuCI GUI tool, select ‘System/Mount Points’, check the ‘Enabled’ option and reboot the new router to gain access to the extended storage.
* I used extroot/overlay because I didn’t want to wrangle multiple storage devices on the router. However, the technique has a downside: the USB stick can’t easily be moved between devices, so you can’t, for instance, replug it into your own machine to copy files. You might prefer to mount the USB stick on the router and access it as /dev/sda1 or whatever without bothering to overlay it. Useful pointers here: https://snippets.khromov.se/installing-wordpress-on-a-tiny-wireless-router/

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

Бинарные пакеты

Бинарные пакеты почти аналогичны пакетам Debian. Разница следующая:

  1. Расширении .ipk вместо .deb.
  2. Упаковывается всё с помощью `tar` и сжимается с помощью gzip, это же справедливо для вложенных архивов. В Debian архив верхнего уровня упаковывается более примитивным ar, а вложенные архивы чаще всего имеют расширение .tar.xz, инструменты используются соответствующие.


Если вы поменяете расширение пакета для OpenWrt на

.tar.gz

и распакуете, то обнаружите внутри два архива и один текстовый файл. Файл называется

debian-version

, в нём содержится версия формата бинарного файла и она нам не очень интересна, в современных системах эта версия всегда равняется

2.0

Архив data.tar.gz содержит исполняемые файлы, файлы конфигурации и всё, ради чего устанавливается пакет. Если распаковать его в корень ФС, вы получите все ожидаемые файлы на нужных местах, в /usr/bin/, /etc/ и так далее.

А в control.tar.gz находятся вспомогательные файлы для пакетного менеджера. Это скрипты, которые должны выполняться до или после установки и удаления (preinst, postinst, prerm, postrm), сведения о файлах, являющихся конфигурационными, и метаинформация о пакете, во многом повторяющая ту, что содержится в Packages.

Веб-интерфейс

Какой же веб-интерфейс без веб-сервера? Проверим его наличие:

Документация

OpenWrt/LEDE — широко расширяемый дистрибутив GNU/Linux для встроенных устройств (обычно это беспроводные маршрутизаторы). LEDE основан на проекте OpenWrt. В отличие от многих других дистрибутивов для маршрутизаторов, LEDE строится с нуля, чтобы быть полнофункциональной, легко изменяемой операционной системой для встроенных устройств. На практике это означает, что у вас могут быть все функции, в которых вы нуждаетесь ни с одной из наворотов, оснащенных современным ядром Linux.

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

Косметика и демонстрация

От HTML — интерфейса за километр несет ботанщиной, байковыми рубашками с катышками и макаронами из стеклянной банки:

Собираем свой OpenWRT на роутер Tp-Link TL-WR741ND v.4.25 c vlan, openvpn, ротацией провайдеров и блэкджеком / Хабр


Попытаемся это хоть как-то скрасить.

Подключение клавиатуры и проверка управления светодиодами

Сайт

информирует нас, что для установки клавиатуры нужен лишь модуль kmod-usb-hid.

Установим его:

opkg update
opkg install kmod-usb-hid


Самое время подключить клавиатуру и посмотреть, опозналась ли она:

root@OpenWrt:~# dmesg | tail
[   66.380000] hub 1-0:1.0: connect-debounce failed, port 1 disabled
[   68.780000] hub 1-0:1.0: connect-debounce failed, port 1 disabled
[   71.180000] hub 1-0:1.0: connect-debounce failed, port 1 disabled
root@OpenWrt:~# 

Облом! это совсем не то, что я ожидал. В чем же дело?

Схожий

быстро находится — разработчики объясняют такое поведение аппаратными ограничениями примененного чипсета. Похоже, находящийся «на борту» USB-хаб не жалует low-speed устройства. Хотя на этом моменте дух Дзен бесследно испарился — не будем опускать руки и попробуем решить проблему подключением клавиатуры через внешний USB-хаб:

root@OpenWrt:~# dmesg | tail
[  143.120000] usb 1-1: new high-speed USB device number 2 using ehci-platform
[  143.270000] hub 1-1:1.0: USB hub found
[  143.270000] hub 1-1:1.0: 4 ports detected
[  143.580000] usb 1-1.2: new low-speed USB device number 3 using ehci-platform
[  143.730000] input: Generic USB Keyboard as /devices/platform/ehci-platform/usb1/1-1/1-1.2/1-1.2:1.0/input/input0
[  143.730000] generic-usb 0003:040B:2000.0001: input: USB HID v1.10 Keyboard [Generic USB Keyboard] on usb-ehci-platform-1.2/input0
[  143.770000] input: Generic USB Keyboard as /devices/platform/ehci-platform/usb1/1-1/1-1.2/1-1.2:1.1/input/input1
[  143.780000] generic-usb 0003:040B:2000.0002: input: USB HID v1.10 Mouse [Generic USB Keyboard] on usb-ehci-platform-1.2/input1
root@OpenWrt

Гораздо лучше. Пускай из-за этого пришлось написать «почти получилось» в начале статьи и «способ сервировки» на фото, но так наша «Generic USB Keyboard» опозналась. На клавиатуру всегда создается два «устройства», но даже и не спрашивайте, почему эта конкретная клавиатура назвалась еще и мышью… Так или иначе — мы готовы к «аппаратному хеллоуворлду» — включить светодиод.

cat /dev/input/event0 > /dev/null &
printf "x00x00x00x00x00x00x00x00x00x11x00x01x00x00x00x01" > /dev/input/event0

Здесь должен торжественно зажечься светодиод «Caps Lock». Те, кого просто радует этот факт — могут переходить к следующему шагу. Те, кто не может двинуться дальше, не узнав, что за бредовое заклинание приведено выше — заглядывают в

сумбурные пояснения:

На все, что происходит с клавиатурой (или другим устройством ввода) генерируется событие ввода, видимое в соответствующем ему файле (в нашем случае /dev/input/event0, но это частный случай, обусловленный тем, что других устройств ввода не подключено). Структура события определяется в заголовочном файле

input.h

:

 struct input_event {
         struct timeval time;
         __u16 type;
         __u16 code;
         __s32 value;
 };

Где type сигнализирует о типе элемента ввода (кнопка клавиатуры или перемещение мыши/джойстика и т.п ), code — код элемента, специфичный для каждого типа (например, для клавиатурного события EV_KEY здесь будет передан номер клавиши), а value — это, соответственно, какое воздействие и какой величины (для устройств, поддерживающих это) было произведено. Например, при нажатии клавиши «Q» на клавиатуре мы получим:

root@OpenWrt:~# cat /dev/input/event0 | hexdump 
0000000 505b 0ed9 0009 6bdd 0004 0004 0007 0014
0000010 505b 0ed9 0009 6be6 0001 0010 0000 0001
0000020 505b 0ed9 0009 6bec 0000 0000 0000 0000
0000030 505b 0ed9 000a 2756 0004 0004 0007 0014
0000040 505b 0ed9 000a 275e 0001 0010 0000 0000
0000050 505b 0ed9 000a 2762 0000 0000 0000 0000

где первые 8 байт (505b 0ed9 000* ****) — время события, следующие два байта (0001) — тип события (EV_KEY), затем два байта номера клавиши (0010), которые для алфавитно-цифровых клавиш соответствуют скан -коду в Set 1. Кстати, нажатия всяких «прокачанных» клавиш вроде регулировки громкости, управления воспроизведением и т.п. отправляются во второй обработчик, созданный для клавиатуры (в нашем случае /dev/input/event1). Для них не генерируется событие автоповтора, что может оказаться весьма кстати — помните, я писал о «бонусной» возможности устройства работать на ввод? Последние 4 байта (0000 0001 или 0000 0000) указывают на то, что произошло нажатие или отпускание соответственно. Пакеты, состоящие из нулей — это специальные разделительные события EV_SYN, а зачем нужны события с типом 4 я не знаю. Определения для типов и кодов заданы в том же

input.h

, и подробнее описаны

в этом документе

. Дальше начинается самое интересное. Хотя большая часть событий передается от устройства в пространство пользователя, некоторые события могут идти в обратном направлении. Это сделано для поддержки, например, джойстиков с отдачей или (та-дам!) светодиодов. То есть, записав в /dev/event/input0 событие с типом EV_LED, кодом LED_CAPSL и значением 1, мы скомандуем клавиатуре зажечь светодиод «Caps Lock». Достаточно подробно о работе с устройствами ввода, особенно USB, рассказывают статьи Брэда Хардса (Brad Hards)

The Linux USB Input Subsystem

и

Using the Input Subsystem

(продолжение первой статьи, даже с

примером кода

для управления светодиодом). Жаль что я их нашел слишком поздно, когда задача уже была решена экспериментальным путем. Между прочим, мне очень повезло — последние снэпшоты, а так же бета 12.09 имеют одну

особенность

, из за чего отсылка событий работает нестабильно, если файл устройства постоянно не читать. Именно для этого предназначена команда

cat /dev/input/event0 > /dev/null &

Я экспериментировал сначала с прошивкой r31214, где таких особенностей не было, поэтому светодиод у меня загорелся сразу — если бы этого не произошло, то я бы еще долго искал верный путь.

Проверяем репозиторий вместе с пакетом

Вы можете проверить всё на настоящем роутере (не забудьте только выбрать правильный таргет), но я воспользовался Докером. В Докерхабе есть образ OpenWrt для x86_84, который можно запустив, пробросив внутрь контейнера директорию с SDK:

sudo docker run -it --name openwrt_test -v $PWD:/opt openwrtorg/rootfs

. Потыкайте кнопку ввода пока не появится приглашение Баша.

Система сборки пакетов


Сборочная система (она же SDK) выполнена в виде Make-фреймворка. Фреймворк не подразумевает, что вы будете собирать пакеты по отдельности, его основная задача заключается в сборке целых репозиториев.

SDK для x86_64 лежит в git. Есть архив (ссылка скоро устареет, но найти свежий несложно), который сэкономит вам время на компиляции тулчейна для сборки. Внутри особый интерес представляет файл feeds.conf.default. Формат несложный, через пробел:

  1. Ключевое слово src-git. Поддерживается не только git, но сейчас репозиториев в иных VCS нет.
  2. Название фида.
  3. URL git-репозитория, в котором можно указать коммит или тег. Если вы знаете, как называется такая спецификация, подскажите, пожалуйста.

Сам репозиторий с пакетами устроен максимально просто: в корне репозитория категория пакета, на втором уровне директория с названием пакета, а внутри него лежит

Makefile

, опционально `Config.in` для дополнительных опций при выполнении

make menuconfig

и субдиректория

patches

с соответствующим содержимым. Для простейшего пакета достаточно только

Makefile

. Для примера можете заглянуть в

Ставим openwrt и настраиваем сетевой интерфейс


Для этого шага понадобится, собственно, роутер. Мой мне обошелся в 850р.

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

. Тем более, что на момент публикации снэпшоты недоступны на сайте openwrt, а A.A.12.09 наконец-то выложили.

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

Например:

Для настройки статического IP в сегменте 192.168.1.x сделаем следующее:

uci set network.lan.proto=static
uci set network.lan.ipaddr=192.168.1.222
uci set network.lan.netmask=255.255.255.0
uci set network.lan.gateway=192.168.1.1
uci set network.lan.dns=8.8.8.8
uci changes
uci commit
/etc/init.d/network restart

Где 192.168.1.1 — адрес шлюза в нашей сети, а 192.168.1.222 — незанятый IP, который и будет присвоен нашей коробочке. Команда «uci changes» предоставляет возможность просмотреть все внесенные изменения. Я стараюсь не пренебрегать этой возможностью, так как устройство с неправильно настроенным интерфейсом, будучи недоступным извне, превращается в «зомби».

На случай, если все таки неприятность произошла, в OpenWRT предусмотрен «режим восстановления»: при загрузке, как только кнопка «WPS» начнет мигать, зажмите ее — MR3020 загрузится с сетевыми параметрами по умолчанию.

Если в сети работает DHCP, можно задать автоматическую конфигурацию:

uci set network.lan.proto=dhcp
uci set network.lan.hostname=etherelay
uci commit
/etc/init.d/network restart

Вторая строчка необязательна, но может быть крайне полезна для поиска устройства. Можно будет обращаться к устройству не по IP, а по hostname, если сеть это поддерживает. Если хотите на 100% избежать поиска устройства в сети — применяйте статическую конфигурацию.

Полезно также запретить работу встроенного в наш TP-LINK dhcp-сервера:

uci set dhcp.lan.ignore=1
uci commit
/etc/init.d/dnsmasq restart

Все, можно отключать нашу коробочку от компьютера (все равно ssh-сессия уже оборвалась после последней команды) и подключать ее к роутеру или свитчу.

Схема


Уже можно разобрать клавиатуру и вытащить из нее плату:

Собираем свой OpenWRT на роутер Tp-Link TL-WR741ND v.4.25 c vlan, openvpn, ротацией провайдеров и блэкджеком / Хабр

Схему включения светодиодов клавиатуры представим следующей (весьма упрощенной) моделью (для включенного состояния):

схема включения светодиодов клавиатурыСхема 1. Включение светодиода клавиатуры

Три проверенных «клавы» из «помоечного» сегмента имели именно такое включение светодиодов, отличаются только их токи — обычно около 18мА, но бывает и 3мА. Надо иметь ввиду, что возможны и другие схемы.

Самое простое — если необходимо коммутировать небольшое напряжение и ток (дистанционный «Reset» какого — либо устройства или эмуляция других кнопок/логических сигналов). Можно обойтись обычной оптопарой:

схема подключения оптопары к клавиатуре для управления логическими уровнямиСхема 2. Формирование логического сигнала


Для управления устройством с питанием от сети берем твердотельное реле:

схема включения твердотельного реле вместо светодиода клавиатурыСхема 3. Управление твердотельным реле

Я использовал отечественнное реле

из-за цены в 170 рублей. Максимальный ток в нагрузке, на которое оно рассчитано — 1А. Ток через управляющий светодиод не должен быть ниже минимального (в документации он обозначается I

F

min) для используемого типа реле. Если плата клавиатуры дает меньший ток (отпаяйте один вывод светодиода и измерьте ток в разрыве) — поможет дополнительный транзисторный ключ:

включение твердотельного реле через транзисторный ключ.Схема 4. Подключение твердотельного реле через ключ


Он же спасет, если используется твердотельное реле, управляемое напряжением или «классическое» электромеханическое реле:

схема подключения реле вместо светодиода клавиатурыСхема 5. Управление электромеханическим реле

Твердотельное реле — штука достаточно дорогая, и чем мощнее — тем дороже. Обычное реле дает больше «ампер на рубль», но имеет свои минусы. Среди них — большой потребляемый ток во включенном состоянии. Если одновременно включить три реле такой же модели, как на схеме — потребляемый от USB ток будет составлять почти 300 мА.

Схемы 4 и 5, само собой, работают только на клавиатурах где СД включены именно по схеме с «общим анодом» (проверьте сопротивление между анодами диодов и «плюсом» платы — должно быть 0 Ом). Если неохота с этим заморачиваться — можно использовать вместо ключа маломощное оптореле.

Включается вместо штатного светодиода и работает при токе на светодиод от 5 до 25 мА, то есть подойдет для всех вариантов клавиатур с вероятностью 99%. Если вам надо коммутировать напряжение до 60 в и ток до 300 мА — можно убрать реле и пользоваться оптореле напрямую.

схема подключения реле вместо светодиода клавиатурыСхема 6. Управление электромеханическим реле при помощи оптореле

Что всегда стоит принимать в расчет — это элементарая электробезопасность. Даже тестовое устройство —

особенно

тестовое устройство, которое наверняка будет болтаться где-нибудь на проводках или будет забыто включенным среди прочего хлама на столе — надо защитить от случайного касания токоведущих частей, если оно предусматривает подключение к сети. Иначе по вам может потечь абсолютно реальный электрический ток.

Я собрал варианты 3 и 6 на макетке, получилось так:

Собираем свой OpenWRT на роутер Tp-Link TL-WR741ND v.4.25 c vlan, openvpn, ротацией провайдеров и блэкджеком / Хабр

Несмотря на то, что это не более чем «proof of concept», мне захотелось хоть немного «навести красоту», пускай и в собственной извращенной трактовке. Такие уж нынче времена: внешний вид ценится не меньше, а порой и беспричинно больше функциональной нагрузки. Что и приводит нас к следующему этапу.

Тестовая сборка

Я попробовал собрать GNU Hello, чтобы проверить, как работает SDK. Это сравнительно монструозный Hello World, написанный в строгом соответствии с гайдлайнами проекта GNU, его единственная задача заключается в иллюстрации этих гайдлайнов. Отдельный репозиторий для него не создавал, а вместо этого «подсунул» в базовые пакеты SDK, откуда и скомпилировал.

Для работы самого SDK в окружениии Debian понадобятся пакеты libncurses-dev (для меню сборки), build-essential (GCC и прочие стандартные зависимости программ на C), gawk, unzip, file, rsync и python3.

Также для создания репозитория из собранных пакетов, потребуется утилита для генерации ключей usign. Её в репозитории нет, поэтому дополнительно потребуется `cmake` для сборки. Этот инструмент можно заменить как на GPG, так и на signify-openbsd, но она рекомендуется и разрабатывается проектом OpenWrt, а также гораздо приятней в использовании.

Компилируем и устанавливаем usign:

Установка необходимых пакетов:

sudo apt-get update && sudo apt-get upgrade -y
sudo apt-get install subversion git g   libncurses5-dev zlib1g-dev gawk -y

Все дальнейшие команды сборки делаются от обычного пользователя, не от рута!

Идем в «магазин» за исходниками. Я выбрал OpenWrt Bariier Breaker за удобство в настройке и отличную стабильность на предыдущем роутере (TP-LINK Archer C7).

svn co svn://svn.openwrt.org/openwrt/branches/barrier_breaker wrt
cd ~/wrt
svn update


В домашней папке у нас появится папка wrt, где мы и будем производить сборку.

Скачаем исходники дополнительных пакетов (типа Luci):

./scripts/feeds update -a
./scripts/feeds install -a

Выполним настройку платформы

make menuconfig


Появится псевдографическое меню, где нас интересуют пункты Target System, Subtarget и Target Profile:

Вся навигация свободится к выбору нужного пункта (стрелками) и нажатием enter, выбор компонента — также enter, выход из меню — стрелки вправо-влево — Exit. Не забудьте сохранить конфиг.

Применяем стандартные параметры для профиля:

make defconfig

Модифицируем набор пакетов:

make menuconfig

Удалил:

opkg из (base system)

убрал опцию сборки с поддержкой ipv6 (Global build settings)

ppp (Network).

Устройство репозитория


В файловой системе OpenWrt есть файл

/etc/opkg/distfeeds.conf

, в нём указывается системный (предоставленный разработчиками OpenWrt и opkg) список репозиториев. Собственные и сторонние репозитории можно указать в

/etc/opkg/customfeeds.conf

. Формат однострочный, состоит из трёх слов:

  1. src или src/gz, от этого зависит, будет качаться файл Packages или Packages.gz. Судя по коду, есть другие опции для первого слова, но я не нашёл репозиториев, для которых это было бы актуально. Несмотря на src в названии, это репозиторий для бинарных пакетов. Специального формата репозиториев для пакетов с исходным кодом, аналогичного тому, что используется в Debian/APT, у opkg не предусмотрено.
  2. Название репозитория или «фида» в терминологии opkg/OpenWrt.
  3. URL, внутри которого лежит файл Packages/Packages.gz.

При выполнении

opkg update

к URL через

/

добавляется

Packages

или

Packages.gz

, список пакетов и подписи сохраняются в

/tmp/opkg-lists

, файл называется соответственно второму слову в списке репозиториев. Отсюда два важных вывода:

  1. При перезагрузке кэш очистится. На встроенных системах вроде роутеров это абсолютно разумно.
  2. В /etc/opkg/customfeeds.conf можно оверрайдить системные фиды своими собственными, дав им такое же название. opkg ругнётся, но проглотит оверрайд, сложив нужный файлик вместо загруженного ранее.


Заодно будет загружен

Packages.sig

, в котором должен лежать хэш распакованного списка пакетов. В самом списке просто перечисляются пакеты, для каждого пакета есть несколько значений, значения для разных пакетов отделяются пустой строкой. Вот самые важные поля для каждого пакета:

  • Package, имя пакета;
  • Version, версия, при наличии нескольких пакетов с одинаковым именем можно выбрать версию, по умолчанию установится самая свежая;
  • Depends, зависимости от других пакетов, пакетный менеджер доустановит перечисленные пакеты в случае их отсутствия в системе;
  • Filename, путь к файлу относительно базового URL репозитория, обычно репозиторий плоский и всё лежит там же, где и `Packages.gz`;
  • SHA256sum, заявленный репозиторием хэш пакета.

Если хотите больше подробностей, можете просто прочитать один из таких списков

Заключение:


Конечно же, вы не один раз убьете свой роутер неудачной прошивкой, позарившись на удаление нужных компонентов base system.

Но ничего страшного!

Самый простой способ реанимировать роутер — это fail safe в openwrt:

1) Назначьте сетевому адаптеру на компьютере IP адрес 192.168.1.22) Маска 255.255.255.03) Кабель ethernet — в порт LAN14) Выключите роутер5) Включите и дождитесь пока загорится значок шестеренки6) Зажмите на 1-2 секунды кнопку роутера QSS — шестеренка заморгает очень быстро7)

mtd -r write /tmp/имяпрошивки.bin firmware

Роутер скушает прошивку и перезагрузится.

Шеф, всё пропало!

Да, именно так я подумал, когда убил роутер еще тяжелее. Шестеренка не горела, а роутер циклически ребутался без остановки.

Воспользуемся замечательной функцией в прошивке tp-link-а — загрузка прошивки через tftp:

1) Назначьте сетевому адаптеру на компьютере IP адрес 192.168.0.662) Маска 255.255.255.03) Кабель ethernet — в порт LAN14) Запустите tftp сервер с дефолтной прошивкой в папке под названием «wr741ndv4_tp_recovery.bin» (нужно переименовать файл прошивки)4)

Выключите роутер5) Возьмите острый и тонкий предмет (ручка)6) Возьмите роутер в руки, поверните его к лицу портами, ручку держите в свободной руке7) Включите роутер и тут же зажмите QSS пальцем одной руки reset ручкой в другой руке. Потренируйтесь и это получится.8)

Как только прошивка загрузилась (2-3 сек), отпустите кнопки. Выдохните, роутер спасен.

Использованы статьи:

Оцените статью
Хостинги