Openwrt yota 4g модем настройка через luci
Так получилось, что около месяца назад я стал счастливым (или не очень) обладателем LTE-модема YOTA. В связи с отсутствием других альтернатив приходится использовать оный в качестве основного домашнего источника доступа к глобальной паутине.
Для раздачи интернета по квартире (в связи с дороговизной Йотовских устройств) было решено использовать связку модем YOTA + TP-LINK MR-3020 с OpenWRT на борту. Выбор пал именно на MR-3020 как на компактный и самый дешевый роутер с наличием USB-порта и поддержкой OpenWRT.
На стоковый MR-3020 curl не станет, не хватит места. Если точнее, то нехватает места для libopenssll, там библиотека libcrypto весит больше 1 МБ. В данной ситуации самый простой выход — подгружать libopenssll в RAM после загрузки роутера, инструкция по установке внизу. Я использую дополнительно usb-хаб + usb-hdd, который примонтирован к rootfs, на hdd так же установлены minidlna, samba и transmission, соответствнно для закачки торрентов и просмотра их на ТВ и с проблемой нехватки места на сталкиваюсь.
Следует отметить, что настройка OpenWRT для работы с модемом YOTA весьма проста — необходимо лишь установить дополнительные пакеты для работы с USB и сетью, а так же добавить дополнительный сетевой интерфейс в настройках.
Автоматизация и OpenWRT
В тех случаях, когда есть возможность «безнаказанно» прыгать с тарифа на тариф вопросы автоматизации-оптимизации возникают сами собой. К тому же после прочтения статьи linx56 «автоматизационный зуд» (спасибо автору за термин) не давал покоя.
Задача заключалась в следующем — вместо установки предложенного linx56 скрипта на каждый домашний ПК необходимо «заставить» маршрутизатор самостоятельно переключать тарифы в зависимости от времени суток и дней недели, благо гарфик потребления интеренета представлялся достаточно опредленным. Вышеупомянтый кросс-платформенный Yota-скрипт не удовлетворял требованиям по причине того, что использует phantom.js, установка которого на стоковый MR-3020 c OpenWRT не представляется возможным.
Такм образом, созрела необходимость в написании скрипта без использования тяжеловестных headless-браузеров. Выход был найден практически сразу (по комментариям к вышеупомянутой статье) — было решено использовать утилиту curl для отправки запросов на сервер YOTA.
Первоначально curl был устанавлен на маршрутизатор:
После этого необходимо было выяснить каким образом происходит общение браузера с сайтом Yota, а именно — какие запросы с какими параметрами.
C помощью FireBug первым был отловлен запрос на авторизацию в личном кабинете. Полученные результаты были отправлены curl'ом на сервер и… неудача — ошибка авторизации. Проверил параметры и значения — опять ошибка, и опять, и опять…
После анализа нескольких запросов заинтересовало значение одного из параметров передаваемых на сервер, а именно — «ProductID», каждый раз это значение было новым после изменения тарифа. Как удалось выяснить — значение ProductID возвращается сервером в коде страницы и изменяется каждый раз при смене тарифа. Сам же тариф — это параметр offerCode, принимающий значения от POS-MA14-0002 до POS-MA14-0022.
В итоге алгоритм выглядит следующим образом:
- Авторизируемся в личном кабинете;
- Переходим на страницу с «регулятором» скорости;
- Выделяем ProductID из полученной страницы;
- Устанавливаем новый тариф.
Результат выполнения — установленный тариф (скорость) и количество оставшихся дней (часов) на тарифе.
- включение скорости по утрам — во время сборов на работу;
- выключение утром — когда уходишь на работу;
- включение вечером — когда возвращаешься с работы;
- выключение ночью — когда идешь спать;
Прошло семь дней
Спустя неделю стало ясно, что предложенная методика смены тарифов по расписанию не совсем эффективна, если время ночного и утреннего выключения скорости почти всегда совпадает с установленным, то время включения — зачастую существенно отличается от заданного, иногда инет нужен раньше, иногда — гораздо позже (а если проспал то и не нужен вовсе :)).
Первая мысль — изменять скорость в зависимости от загрузки сети. Немного поразмыслив над реализацией нашел эту идею не очень удачной — во первых, установленная в тарифе полоса пропускания не всегда совпадает с реально доступной, т.е. можно постоянно повышать тариф, но реальная полоса от этого меняется будет мало и будет постоянно загружена — соответственно убытки, во вторых — торренты на медиасервере будут поддерживать постоянно высокую скорость круглосуточно, ну и тому подобное.
Следущая мысль — изменять параметры включения и выключения скорости в зависимости от наличия «потребителей интернета» в домашней сети, а именно:
- Включать скорость, когда стационарный PC или ноутбук (или любое другое заданное устройство) появляются в сети.
- Выключать — когда оба исчезают.
- Выключать — в заданное время (ночью), т.к. можно забыть выключить комп на ночь :).
Применение скрипта pingsh.sh простое — в файл pings заносим необходимые ip-адреса домашних устройств, в самом скрипте редактируем значения login, psw, speedon и speedoff.
Теперь у меня в crontab всего 2 строки: первая — запуск pingsh.sh каждые 6 минут, и вторая — принудительное выключение скорости в час ночи на случай, если заснул и не выключил комп :)
Вышеупомянутые скрипты можно взять тут.
Немного оффтоп. По просьбам трудящихся параллельно была написана простая программа на Delphi под винду для быстрого изменения тарифов. В отличие от предложенного ratswolf варианта браузер не используется, с сервером Yota работаем напрямую посредствам запросов GET и POST с вышеупомянутыми параметрами.
Вариант выбора скорости и отображение текущей скорости/баланса:
И все настройки:
Самое главное
И самый главный вопрос — реальная экономия составила около 50%, на базовом тарифе 900 руб/месяц (5.5 мбит/с) удалось проработать почти полтора месяца.
Инструкция по установке curl
Если на rootfs мало места делаем следующим образом.
Соединяемся с роутером через ssh и выполняем следующие команды:
Теперь добавляем в rc.local строки (можно через web-интерфейс System — Startup):
Таким образом, даже после перезагрузки роутер сам подгрузит недостающий пакет в RAM.
Приветствую. Данная заметка подойдёт тем, кто решил раздавать интернет со своего 4G-модема в локальную сеть посредством Ethernet или Wi-Fi. Когда-то я писал о том, как раздавать интернет с модема в локальную сеть, но тогда интернет шлюзом у нас выступал рабочий компьютер. Теперь же для этих целей будет применяться Wi-Fi маршрутизатор (роутер) с USB портом, в моём случае это TP-Link WR-842N. Преимущества такого способа очевидны: не нужно всё время держать включённым компьютер, чтобы можно было пользоваться интернетом на других устройствах, значительно меньшее потребление электроэнергии, возможность серьёзного расширения функционала и так далее. USB-модем будет работать как WAN-интерфейс, то есть как если бы к роутеру был подключён кабель от интернет-провайдера. Однако родная прошивка роутеров TP-Link весьма ограничена и убога, и я сразу заменяю её на OpenWRT. Правда в этот раз я возьму не сам OpenWRT, а его форк под названием LEDE. Об отличиях можете почитать здесь. Приступим.
TP-Link 842N немного отличается (в частности у него неотсоединяемые антенны):
А это применяемый в данной статье модем - Megafon M150, или Huawei E3372:
Это 4G-модем от Мегафон, который я разлочил для работы с любой сим-картой (я использую МТС) и перевёл для работы в режиме Hilink. Что это значит? У подобных модемов может быть два режима работы - Stick и Hilink. В первом случае модем работает как коммутируемый интерфейс, в котором как и в обычном модеме происходит дозвон на определённый номер. В режиме Hilink модем работает как сетевая карта, и имеет встроенный роутер. В идеале вы должны перепрошить ваш модем для работы в режиме Hilink, информацию об этом можно найти здесь. Если у вас точно такой же модем как у меня - вам сюда. Данный модем сам по себе работает на Линуксе, имеет встроенный роутер с DHCP-сервером и фаерволлом (всё это можно отключить в его веб-интерфейсе). Потому схема работы будет весьма простая: наш TP-Link будет получать IP-адрес от встроенного в модем роутера, а также настройки DNS-серверов, и при этом расшаривать это подключение на все свои интерфейсы.
Первым делом необходимо поставить LEDE. Но перед этим осмотрите наклейку на задней стенке корпуса маршрутизатора. Важно узнать его версию. В моём случае это v3. Скачивайте только прошивку для этой конкретной версии! Переходим по ссылке, выбираем последнюю версию прошивки, далее в разделе targets выбираем ar71xx, затем в generic и ищем нужную прошивку. Обращаем внимание на окончание: sysupgrade - это обновление уже существующей прошивки LEDE, установленной в роутер, factory - это сама прошивка. Нам нужно factory! Скачиваем нужную версию.
Открываем в браузере веб-интерфейс нашего роутера. Для этого в адресной строке вводим 192.168.0.1 . Логин и пароль для входа по умолчанию: admin. Пока не заморачивайтесь сменой пароля, ведь скоро этой прошивки не будет)) Идём в раздел "Системные инструменты", далее "Обновление встроенного ПО". Выбираем скачанный файл с прошивкой и жмём "Обновить". Ждём.
В самом низу страницы выбираем Save&Apply. Перед подключением модема в USB-порт необходимо скачать нужные для его работы модули. Если у вас есть рабочее проводное интернет-соединение - то просто подключите кабель в синий порт на роутере. Если же нет - не беда. Маршрутизатор с OpenWRT/LEDE может работать в режиме Wi-Fi-клиента, и подключаться к любому другому роутеру. Если у вас есть смартфон или планшет с безлимитным интернетом - включите в его настройках точку доступа Wi-FI. Затем в веб-интерфейсе перейдите в "Network" - "Wireless" и нажмите на Scan.
Маршрутизатор просканирует доступные Wi-Fi-сети. Он должен обнаружить сеть, раздаваемую вашим смартфоном. Выберите её и примените. После этого переходим в "System" - "Software" и нажимаем на "Update lists".
После обновления в поле поиска находим поочерёдно пакеты usb-modeswitch (необходим для переключения модема в режим, собственно, модема, так как на многих 3G/4G модемах ещё встроен картридер) и kmod-usb-net-cdc-ether (как раз таки необходим для работы модема в режиме сетевой карты). Устанавливаем их и теперь уже подключаем модем.
Модем сразу определится в системе как сетевой интерфейс, в моём случае как устройство eth2. Переходим в "Network" - "Interfaces" и нажимаем на Add new interface. Нужно добавить наш модем и расшарить с него сеть. Имя интерфейса указываем USB, протокол DHCP, а интерфейсом Ethernet adapter: eth2. Нажимаем на Submit.
В появившемся подключении выбираем Edit, переходим на вкладку Firewall settings и указываем для него зону Wan:
Вот и всё. Остальная настройка уже индивидуальна (пароль на Wi-Fi, шифрование и так далее). Если вы хотите что-то добавить к статье - пишите в комментариях.
Список актуальных модемов Yota, работающих с данной прошивкой LU150
LU156
Wltuba-107
Yota Wifi 1. Установка прошивки.
Скачиваем актуальную версию прошивки OpenWRT attitude_adjustment
Мы используем версию 12.09 [hide]Ссылка для скачивания для TL-WDR3600[/hide] После этого устанавливаем прошивку на маршрутизатор.
Примечание: для того, чтобы выполнить установку дополнительных модулей, нам потребуется доступ в Интернет.
По-умолчанию на OpenWRT WAN-тип соединения настроен на динамическое получение IP-адреса. Перед выполнением последующих шагов убедитесь, что через роутер у вас есть доступ в Интернет
Один-за-другим устанавливаем следующие модули:
kmod-usb-net-rndis
kmod-usb-net-asix
После установки модулей, требуется перезагрузить роутер ( System - Reboot )
После перезагрузки можно подключать модем Yota в USB-порт роутера
3. Настройка Yota
Заходим в Network - Interfaces
Создаём новый интерфейс для Yota
Add new Interface
Выбираем
Name of the new interface - называем Yota
Protocol of the new interface - Dynamic IP
Cover the following interface: Ethernet Adapter: "eth1" (в зависимости от USB-порта, может быть eth2)
Save & Apply
Открываем Firewall & Setting
Выбираем WAN , Save & Apply
Настройка закончена.
Если вы также планируете также использовать WAN-интерфейс, следует регулировать метрику. В зависимости от того, какой подключение у вас будет второстепенным, на этом подключении выставляем метрику 50 вместо нуля.
Возврат на заводскую прошивку:
1. Скачиваем специальную модифицированную прошивку
2. На OpenWRT заходим в System - Bckup\Flash Firmware
3. Flash new firmware image - выбираем файл из пункта (1) (не забываем предварительно разархивировать).
Итак, имелась не совсем тривиальная задача. Роутер среднего ценового сегмента TP-Link TL-WR1043ND нужно настроить его для работы с модемом Yota. Естественно сведующие люди скажут что, мол надо было брать Zyxel и не париться. Я буду согласен с этим замечанием, но в тот момент цена Зухеля была несколько несоразмерной, а основным условием было уложиться в бюджет. Так что пришлось брать то что было. И кроме того, ввело в заблуждение то, что выбор по фильтру поддержки usb модемов таки вывел эту модель в список. А когда девайс был запущен, то обнаружилась печальная новость - он ВООБЩЕ не держит модемы. То есть как файлопомойка он работать может, но как шлюз с модемом - увы. Тащить назад было влом. И было принято решение поизвращаться. Как говориться, за неимением гербовой пишем на клозетной.
Прежде всего смотрим какая ревизия у нашего девайса и имеется ли поддержка таковой на OpenWRT. В моем случае фортуна была повернута во фронт и я нашел образ прошивки. Кстати сразу оговорюсь. Есть два варианта: либо вы шьетесь уже готовым образом и потом навешиваете все примочки на прошитый роутер, либо генерите свой собственный образ со своим блекджеком и шлюхами всем что надо исключительно вам. Скажу честно, генерить образ мне было влом, хотя бы только потому, что надо иметь под рукой рабочие Никсы, ибо генератор работает под ними. Так что я скачал уже готовый образ прошивки с минимально необходимом комплектом здесь. Файл openwrt-ar71xx-generic-tl-wr1043nd-v2-sq uashfs-factory.bin
На указанной шаре есть два вида прошивки: с нуля и обновление имеющейся openwrt. В нашем случае нужна с "нуля". Сразу скачайте для себя утилиту Putty. По ней вы будете цепляться по ssh на роутер.
Итак, заходим на веб-морду роутера и в разделе "Обновление прошивки" выбираем скачанную под наш роутер прошивку и нажимаем "Обновить". И ждем. В результате прошивка заливается нормально. Пытаемся зайти по веб. А вот фигушки - нету в базовой прошивке веб-морды. Ее надо ставить. Запускаем командную строку набиваем команду:
telnet 192.168.0.1
После чего появляется телнетовское меню нашего роутера в виде BusyBox.
Набираем
passwd
и меняем пароль у пользователя root, заодно запрещая заходить на роутер по телнету. Внимание не забудьте пароль который вы дали root.
После чего запускаем Putty и указываем на какой адрес надо ломиться по ssh. После чего пробуем законнектится. Если вы сделали все правильно то будет выдан запрос на пользователя и пароль (напоминаю что речь идет о root).
Если все получилось удачно, то в окне терминала Putty набиваем следующие команды:
route add default gw IP указываем маршрутизацию по умолчанию на адрес вашего шлюза или сетевой карты через которую есть выход в Инет.
echo nameserver IP > /etc/resolv.conf устанавливаем ДНС
opkg update - данной командой мы запрашиваем обновление пакетов с сайта openwrt.
Далее устанавливаем веб-морду и поддержку usb модемов на наш шлюз:
opkg install luci kmod-usb-net-rndis
Дальше вставляем модем и ребутим устройство. После чего заходим уже в веб-морду и настраиваем подключение.
Откройте настройки интерфейса WAN в разделе "Network/Interfaces" (кнопка Edit)
Откройте раздел "Physical Settings", отметьте пункт "creates a bridge over specified interface(s)" и поставьте галочки рядом с VLAN Interface: "eth0.2" (wan) "Ethernet Adapter: "eth1"". Это создаст мост над WAN-интерфейсом роутера и USB-NET интерфейсом ёты
Задайте настройки WAN-интерфейса - там же открываем вкладке "General Setup". В поле "Protocol" выберите "Static Address". Ниже появится кнопка подтверждения смены "Switch protocol". После подтверждения появится окно с настройками. Вбить последовательно в указанные:
IPv4 address - 10.0.0.254
IPv4 netmask - 255.255.255.0
IPv4 gateway - 10.0.0.1
Use custom DNS servers - 10.0.0.1
Поставьте (если не стоит) отметку на чекбоксе "Disable DHCP for this interface.". Это отключит наш DHCP-сервер в сети ёты.
Нажмите "Save & Apply" для применения настроек
Профит!
Читайте также: