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

Выбор пал на роутер Tp-Link TL-WR741ND v.4.25 (цена 1150 рублей), который я выбрал по следующим характеристикам:

1) Низкая цена
2) Достаточное количество памяти для заявленных требований
3) Возможность запиливания USB (для истинных ценителей поковырять железку)
4) Поддержка OpenWrt Barrier breaker
5) Поддержка vlan-ов
6) Поразительная живучесть (роутер невозможно убить неверной прошивкой, функция восстановления прошивки по tftpd работает как часы, и не раз выручала во время неудачных экспериментов). О методах восстановления напишу в конце статьи.

Стандартная прошивка для данного роутера от OpenWrt не устраивала. Причиной тому были лишние пакеты, которые занимали место в драгоценной памяти данного малыша.

Было решено выпилить: ppp, поддержку ipv6, opkg (ставить же не будем больше ничего).
Добавить: openvpn-polarssl (меньше занимает места), luci-mwan3 (очень понравилась визуальная настройки и индикация работы каналов)

Итак, начнем:

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


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

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


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

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


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:

image

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

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

make defconfig

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

Удалил:
opkg из (base system)
убрал опцию сборки с поддержкой ipv6 (Global build settings)
ppp (Network).

Добавил:
Luci
luci-app-mwan3 (Luci-Applications)
openvpn-polarssl (Network-vpn).

Не забудьте сохранить конфигурацию!

Начинаем сборку:

make -j5 V=s

Параметр -j5 указывает на количество ядер +1 поток для быстрой сборки, а V=s — на вывод подробностей (если будут ошибки).

Процесс займет долгое время, 10-15 минут на i7 процессоре, после чего в директории /home/user/wrt/bin/ar71xx появятся наши прошивки для различных версий роутера. Если не появились — смотрим в логи сборки — наверняка, вы превысили размер прошивки и увидите строку: «firmware is too big». Придется делать make clean, make distclean и начинать все заново. (с шага ./scripts/feeds update -a )

Нас интересует:

openwrt-ar71xx-generic-tl-wr741nd-v4-squashfs-factory.bin — «заводская» прошивка.

Перекидываем её на компьютер с подключенным по ethernet-у роутером (например, через ftp или winscp).

Заходим по адресу: 192.168.0.1 и прошиваем новоиспеченной прошивкой, ждем перезагрузки, затем заходим по адресу: 192.168.1.1

root без пароля (его назначим при первом входе — вверху будет висеть желтый баннер с предупреждением и ссылкой на смену пароля).

Ну наконец-то, самое сложное позади, теперь у нас современная прошивка и НАШ набор программ.

3) Настройка vlan:


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

image

Тут не обошлось без непоняток — нумерация портов в роутере и в конфигурации 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:

image

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

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

image

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

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

image

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

image

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

4) mwan3 или крутая выручалочка админа


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

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

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

Приступим:

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

image

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

image

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

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

configuration — rules

image

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

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

5) Офисная дружба или 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. Приводим конфиг к виду:

port 1194 #порт сервера

proto udp
dev tun-office2 #обзовем интерфейс
multihome #слушаем подключения на wan и wan2

ifconfig 10.0.0.2 10.0.0.3 #IP-шники окончания туннелей

secret /etc/openvpn/keys/office2.key #ключик

keepalive 5 30 #переподключение через 30 сек. 

user nobody
group nogroup

persist-tun
persist-key

status /tmp/office2.status 
log /tmp/office2.log #логи

verb 3


Сохраняем, затем:

/etc/init.d/openvpn restart


Теперь клиент:

Примерный конфиг выглядит так:

remote wan.office2.ru #стучимся сначала сюда
remote wan2.office2.ru #потом сюда (по очереди)

port 1194

proto udp
dev tun-office1

ifconfig 10.0.0.3 10.0.0.2 # наоборот как на сервере
route 192.168.30.0 255.255.255.0 #пропишем роут для включения офисной подсети роутера в главный офис

secret /etc/openvpn/keys/office2.key #клон ключа с сервера
keepalive 5 30 #передергиваем туннель при плохом поведении одного из каналов

user nobody
group nogroup

persist-tun
persist-key

status /var/log/openvpn/office.status
log /var/log/openvpn/office.log

verb 3


Сохраняем конфиг, применяем:

/etc/init.d/openvpn restart


Смотрим ifconfig, логи и радуемся надежному каналу.

Заключение:


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

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

1) Назначьте сетевому адаптеру на компьютере IP адрес 192.168.1.2
2) Маска 255.255.255.0
3) Кабель ethernet — в порт LAN1
4) Выключите роутер
5) Включите и дождитесь пока загорится значок шестеренки
6) Зажмите на 1-2 секунды кнопку роутера QSS — шестеренка заморгает очень быстро
7) Запустите телнет-клиент и подсоединитесь по адресу 192.168.1.1
8) Залейте в tmp роутера дефолтную прошифку для вашей модели, например, через мини-веб-сервер tinyweb
9) Выполните:

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


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

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

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

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

1) Назначьте сетевому адаптеру на компьютере IP адрес 192.168.0.66
2) Маска 255.255.255.0
3) Кабель ethernet — в порт LAN1
4) Запустите tftp сервер с дефолтной прошивкой в папке под названием «wr741ndv4_tp_recovery.bin» (нужно переименовать файл прошивки)
4) Выключите роутер
5) Возьмите острый и тонкий предмет (ручка)
6) Возьмите роутер в руки, поверните его к лицу портами, ручку держите в свободной руке
7) Включите роутер и тут же зажмите QSS пальцем одной руки+reset ручкой в другой руке. Потренируйтесь и это получится.
8) Удерживайте зажатыми эти 2 кнопки 4-8 секунд, пока в tftp клиенте не пойдет загрузка прошивки в роутер. А она пойдет, не беспокойтесь.

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

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

wiki.openwrt.org/ru/doc/howto/build
openvpn.net/index.php/open-source/documentation/miscellaneous/78-static-key-mini-howto.html
denisyuriev.ru/linux/openwrt-linux/openwrt-sborka-iz-isxodnikov
habrahabr.ru/post/186760
wiki.gentoo.org/wiki/OpenVPN
wiki.openwrt.org/doc/howto/mwan3
wiki.openwrt.org/ru/doc/howto/generic.uninstall

Комментарии (32)


  1. blind_oracle
    06.08.2015 17:51
    +3

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

    В своё время давал вторую жизнь родоначальнику OpenWRT — Linksys WRT-54G.
    Удалось впихнуть в 4Мб флеша openvpn, демона маршрутизации bird и ещё всякие плюшки. Но было впритык. До сих пор служит.


    1. megaplanadmin
      06.08.2015 19:10
      +1

      Отчасти, согласен. Luci очень много весит, но мне нравится интерфейс и возможности мониторинга, поэтому решил оставлять.


      1. Klukonin
        07.08.2015 07:33

        Тогда уже можно выпилить uhttpd и поставить нормальный lighttpd.
        Кстати, у меня на -j5 иногда при сборке вылетает с ошибкой.
        Вы такого не замечали?


        1. megaplanadmin
          07.08.2015 09:42

          Можно попробовать…
          Ошибки на -j5 не замечал, даже пробовал от жадности -j7 — проблем не возникало.


          1. Wedmer
            07.08.2015 11:37

            Там зависит от пакетов, которые вы собираете.


            1. Klukonin
              07.08.2015 13:15

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


              1. Wedmer
                07.08.2015 13:30
                +1

                Некоторые пакеты не поддерживают параллельную сборку.


                1. megaplanadmin
                  07.08.2015 13:38

                  Кто там из пакетов такой привередливый?


                  1. Klukonin
                    07.08.2015 14:00

                    kmod-pwm-gpio-custom


    1. ZigFisher
      14.08.2015 01:03

      Коллега!

      Вы навеяли своим постом ностальгические воспоминания ;)

      Мы то-же в своё время этим занимались, впихивая openvpn/ospf и прочие модные плюшки в роутер с 2 (!) мегабайтами FLASH и 16 мегабайтами RAM (ADM5120, Edimax/Sweex, Midge, FlyRouter и т.д.).


  1. Demosfen
    06.08.2015 18:31
    +3

    Зачем прошивку два раза шьете? Первая это прошивка при установке на заводскую, а вторая нужна в случае обновления уже установленной openwrt. А вы одну и ту же версию дважды заливаете.
    Tagged и Untagged это не интерфейсы. Интерфейсы выше в табличке указаны. Читайте доки по 802.1q.
    Из прошивки можно еще много чего лишнего выпилить, например все что связано с debug.


    1. Demosfen
      06.08.2015 18:39
      +1

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


    1. megaplanadmin
      06.08.2015 19:11
      +1

      Спасибо, поправлю!


  1. SantaClaus16
    06.08.2015 18:50
    +1

    Была хорошая статья на Хабре, как скриптами сделать openvpn в /tmp. Все необходимое после включения роутера скачивается в /tmp и далее работает от туда. Супер способ, абсолютно теперь забил на сборку прошивок, качаю stable, остальное если не хватает места делаю по аналогии в /tmp.
    После всех махинаций хотелось бы увидеть df -h автора, просто ради интереса.


    1. megaplanadmin
      06.08.2015 19:12
      +1

      Вот это очень интересно! Мне как раз нужно впихнуть asterisk еще.


      1. SantaClaus16
        06.08.2015 19:34
        +2

        habrahabr.ru/post/211174


        1. megaplanadmin
          06.08.2015 19:39
          +1

          Благодарю! К сожалению, пока нет кармы для плюсов.


    1. megaplanadmin
      07.08.2015 10:01
      +1

      root@OpenWrt:~# df -h
      Filesystem                Size      Used Available Use% Mounted on
      rootfs                  512.0K    236.0K    276.0K  46% /
      /dev/root                 2.5M      2.5M         0 100% /rom
      tmpfs                    14.2M    588.0K     13.6M   4% /tmp
      /dev/mtdblock3          512.0K    236.0K    276.0K  46% /overlay
      overlayfs:/overlay      512.0K    236.0K    276.0K  46% /
      tmpfs                   512.0K         0    512.0K   0% /dev
      
      


  1. Wedmer
    07.08.2015 00:15
    +1

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


  1. chelaxe
    07.08.2015 06:45
    +1

    Отвечаем yes и ждем…

    Можно так:

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

    Обновимся и установим все без лишних вопросов.


  1. kulinich
    07.08.2015 19:08

    Кстати, если у роутера есть USB разъем, то можно подключить флешку и расширить память за счет этой флешки.
    И тогда будет очень много места для всего.


    1. kulinich
      07.08.2015 19:15

      Вот ссылка на статью, где есть пример подключения и настройки флешки.


    1. Wedmer
      07.08.2015 19:24

      Современные версии uBoot позволяют запускать систему с флешки. Т.е можно еще и оперативку разгрузить, оставив там только ядро.


      1. megaplanadmin
        07.08.2015 19:51

        Вот только интересно какая стабильность у данного исполнения? Для дома — вполне сойдет, но для офиса — навряд ли.


        1. Wedmer
          07.08.2015 21:48

          Обоснуйте.
          Если роутер один и тот же, то разницы никакой. Проц один и тот же, память та же самая. Ну может доступ к ram диску чуть быстрее.


          1. megaplanadmin
            10.08.2015 09:34

            Обосновываю:
            Появляется еще один контроллер, медленный источник памяти (в роутере память побыстрее все же, я думаю, и понадежнее) — все это потенциально может привести к проблеме.

            Для дома — хранить файлы (фильмы) — вполне приемлимо. Для офиса — лучше все сделать в своей среде (поэтому я собирал сборку свою и нужные пакеты).


            1. Wedmer
              10.08.2015 12:26
              -1

              А кто говорил про флешку для фильмов?
              Когда нужно больше оперативки, вы тут уже никак не выкрутитесь. Да и разница не очень заметна. У нас так роутер проработал пять лет с OpenWrt на флешке. Рулил маршрутизацию между тремя vlan + два провайдера + vpn. Схема накрылась отнюдь не из за флешки, которая до сих пор служит для тестовых сборок OpenWrt. Просто роутер повздувал свои электролиты и благополучно помер.

              Ваши обоснования не подтверждены фактами.


    1. megaplanadmin
      07.08.2015 19:50

      У роутера Tp-Link TL-WR741ND v.4.25 нет USB разъема из коробки… Но, как я и писал в начале статьи — нет ничего невозможного. В планах сделать вот это (припаять USB разъем). Жалко, конечно, но что делать? Это ведь так увлекательно!


      1. POS_troi
        08.08.2015 12:27

        Напаяете usb, впихнёте флешку гиг на 8, примонтируете overlay на флэшку и ставьте всё что душе угодно. Собственно так и сделал :)


  1. ValdikSS
    16.08.2015 00:36

    Кто-нибудь мне подскажет хоть что-нибудь (программу, скрипт, демон) для настройки policy (source) routing под обычный Linux? Можно конкретно для Multi WAN, можно в целом для source routing, пусть даже статически, а не динамически. Ищу уже больше 4 лет, mwan3 для OpenWRT очень нравится. Единственное, что знаю, что через bird можно еще настраивать, но не всегда удобно.


  1. rsa2048
    08.09.2015 11:33

    А чем отличается сборка прошивки для ревизии 1.9?


    1. megaplanadmin
      08.09.2015 12:24

      Добрый день!

      Сборка по модели чипсета происходит, заливку готовой прошивки рекомендуют на родную (обновленную для своей ревизии).
      www.tp-linkru.com/support/download/?model=TL-WR741ND