6 August 2015

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

Wireless technologies
Sandbox
В данной статье я хотел бы поделиться опытом сборки собственной прошивки 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
Tags:openwrtopenvpnmwantp-link
Hubs: Wireless technologies
+22
100.4k 393
Comments 34
Popular right now
Wireless Systems Engineer
from 100,000 to 200,000 ₽ON SemiconductorСанкт-Петербург
Link Builder (SEO)
from 30,000 ₽JoinSoftRemote job
Разработчик С/C++
from 80,000 ₽EltexНовосибирск
Инженер-программист ПЛК / SCADA
from 40,000 to 95,000 ₽GAFSYNRemote job
Java API Developer
from 3,300 to 5,000 $AWWCOR Inc.Remote job
Top of the last 24 hours