Openwrt как настроить 4g модем
Перейти к содержимому

Openwrt как настроить 4g модем

  • автор:

LEDE/OpenWRT — Using 4G LTE USB For Your Internet Connection

This guide will walk you through setting up your OpenWRT device to use a 4G LTE/3G USB dongle as it’s source of internet.

SSH to your LEDE/OpenWRT device

If you are using Windows then start PuTTY and click Session on the left side, select SSH from the options, and then enter in the IP Address of your LEDE/OpenWRT box into the Host Name field.

Once you’ve done this just click on Open to start up the SSH connection.

If you are connecting via terminal, then just SSH to your LEDE/OpenWRT device using the following command, where 192.168.1.1 is your LEDE/OpenWRT device’s IP address.

Prerequisits

You will need a LTE/3G USB dongle that provides/can provide an NDIS interface (QMI Mode), and enable it.

Once enabled, connect it to your OpenWRT device.

Installation

We want to install all of the required packages needed to get this working, so run the following commands:

Once everything is installed, give your OpenWRT device a reboot.

Configuration

First we want to see if everything is running correctly, so run the following commands:

This should return a disconnected status.

Which should output some info on your signal.

Once you have confirmed both of these work we need to run a command to initialise your internet connection. Replacing PROVIDER_APN with the APN from your provider.

Then run the two previous commands again to confirm you are connected.

Network Config

Now we need to create a new interface for this connection.

Simply run the following command:

Then add the following in:

After doing this, the final step is to add a firewall rule in. The easiest way to do this is through the LuCI interface.

  • Head into Network > Firewall
  • Scroll down to WAN and click edit
  • Under the covered networks heading, tick the box next to wwan.
  • Click save and apply to confirm your changes

If you found this post helpful please let us know by clicking the ♥ below.

This blog was brought to you by Cucumber Wi-Fi. Cucumber helps you run a more efficient Wi-Fi network. Check it out here.

Как установить и настроить OpenWRT на модеме для мобильного интернета

Данная статья идеально подойдет для тех пользователей, которые столкнулись с проблемой при подключении роутера на OpenWRT 4g к модему. Речь пойдет не только о настройке модема 3g, lte версии также включены в эту статью.

Роутер на OpenWRT и 3g модем

Если допустить, что есть конкретный маршрутизатор на OpenWRT – эту прошивку можно загрузить с флешки через юсб-хаб, и есть 3G модем. Нужно подключиться к интернету. В роутере с OpenWRT и 3g модемом настройка происходит не так сложно, как может показаться.

 Пример роутера на OpenWRT

В первую очередь потребуется перейти в административную панель роутера, а потом подключить модем. В разделе «Сеть» нажать на кнопку добавления нового интерфейса. В полях указывается новое имя – можно писать латинскими буквами. Протокол – 4G/3G, modem – NCM. В качестве интерфейса указать wwan0. И нажать на кнопку применения настроек.

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

Расширенные настройки нужно также изменить и указать величину пакета MTU, время обработки ответа, модема и остальные параметры, которые станут неотъемлемой частью, если роутер начнет давать сбои в работе.

Обратите внимание! В теории все проделанные действия позволят сделать работу маршрутизатора OpenWRT 3g стабильной, а соответственно, доступ в интернет будет. В случае сбоя нужно искать проблему в устройстве, загружать необходимые настройки.

Как подключить 4G модем к маршрутизатору с OpenWRT

Нужно рассмотреть, как проходит в роутере OpenWRT настройка 4g модема. Для начала необходимо установить LEDE. Однако заранее следует узнать версию роутера на задней части корпуса, чтобы устанавливать нужные прошивки. После того, как прошивка скачана и установлена, в браузере нужно ввести 192.168.0.1 – это стандартная процедура входа в административный интерфейс. По умолчанию вводятся логин и пароль – admin.

В интерфейсе нужно зайти в «Системные инструменты», а затем в «Обновление встроенного ПО». Кликнуть на только что скачанную прошивку и начать обновление нажатием соответствующей кнопки. После того, как устройство будет перепрошито, зайти в интерфейс по стандартному айпи не получится – нужно воспользоваться 192.168.1.1.

 Наглядный пример модема, поддерживающего связь LTE

В интерфейс LEDE производится беспарольный вход, но постоянно будут всплывать системные сообщения, что его нужно создать. Поэтому лучше сразу указать пароль. После сохранения, можно подключать модем через usb – главное, установить необходимые модули.

Настройка интернет соединения

Чтобы настраивать роутер на работу с интернетом, потребуется подключить Lan порт маршрутизатора к сетевой карте ПК. Чтобы подключиться к внешней сети, используются WAN порты. Пошаговая инструкция выполнения подключения:

  1. Вставить кабель сети в WAN порт. В случае, когда внешняя сеть не имеет протоколов L2TP, PPTP, никаких дополнительных настроек не требуется проделывать – выход в интернет свободен.
  2. В ином случае нужно перейти в браузере по вышеуказанному айпи, чтобы зайти в интерфейс администратора.
  3. После авторизации откроется полноценный интерфейс.

В разделе «Сеть» перейти в Интерфейсы. Высветится перечень доступных интерфейсов, среди которых нужно выбрать WAN, принадлежащий IPv4 – его нужно изменить. В открывшемся меню нужно указать протокол, соответствующий выбранным параметрам от провайдера.

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

Подключение к мобильному интернету

Можно использовать любой смартфон с безлимитным интернетом. С него нужно включить точку доступа и начать раздавать wifi. Далее в административном интерфейсе нужно перейти на вкладку Network, а затем Wireless и нажать кнопку Scan. Роутер начнет сканирование доступных беспроводных сетей. После того, как точка доступа смартфона найдена, нужно выбрать ее и применить.

 Интерфейс панели администратора OpenWRT

Теперь нужно зайти в раздел System – Software и кликнуть Update lists. По завершению обновления в перечне нужно найти пакет usb-modeswitch, а затем kmod-usb-net-cdc-ether, установить их и перейти к подключению модема.

Система опознает модем в качестве сетевого интерфейса. Нужно зайти в раздел Network – Interfaces и кликнуть «Add new…». В этом шаге добавляется имеющийся модем и через него раздается сеть. В поле имя интерфейса ввести USB, протоколом указать DHCP, в качестве интерфейса выбрать Ethernet adapter: eth2 и нажать Submit. В открывшемся окне кликнуть Edit, затем Firewall Settings и выбрать Wan. На этом подключение роутера OpenWRT и настройка usb модема завершена.

Установка пароля на WiFi в OpenWRT

Необходимо рассмотреть, как происходит настройка Lan в роутере с OpenWRT. Нужно зайти в главное меню интерфейса и перейти к параметрам сети Lan. Если необходимо сделать беспроводную сеть защищенной, нужно зайти в Wierless Secutiry, выбрать тип шифрования и заполнить пароль следующим образом:

  • Encryption – WPA2-PSK;
  • Cipher – auto;
  • Key – в этом поле указать пароль для дальнейшего ввода при подключении.

Обратите внимание! После сохранения указанных параметров роутер будет раздавать вайфай. Рекомендуется перезапустить маршрутизатор кнопкой на задней панели и проверить наличие выхода в интернет.

Настройка точки доступа WiFi на OpenWRT, через Luci

После перехода в интерфейс администратора OpenWRT и ввода пароля системы, необходимо перейти во вкладку Network – WiFi и добавить новую сеть нажатием кнопки Add. В открывшемся окошке указать следующие параметры:

  • Channel — 11 (2.462 GHz);
  • Transmit Power— 20 dBm (100 mW);
  • ESSID — название точки Wifi, которую будут видеть пользователи;
  • Mode — режим работы сети;
  • Network — нужно установить на Lan, если роутер подключен через кабель к Интернет, и выбрать подключение, которое пойдет на WiFi.

 Системное сообщение о необходимости создания пароля при входе в панель OpenWRT

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

Дополнительные установки

Чтобы было удобно применять настройки русским пользователям OpenWRT, можно произвести локализацию. Нужно выбрать инструмент Software через раздел System и кликнуть на Update lists. В разделе Available Packages необходимо найти пакет с русскоязычной версией, который называется Luci-i18n-russian – его нужно установить. После успешной загрузки пакета перейти в System два раза и во вкладке языка выбрать русский.

Обратите внимание! Случается, такое, что приходится сбрасывать настройки маршрутизатора на OpenWRT путем выполнения командной строки: rm -rf /overlay/*. Данные команды осуществляют форматирование виртуального образа, который представлен в двух частях.

Пример настройки

В заключении необходимо рассмотреть пример настройки роутера с прошивкой OpenWRT с модемом.

Настройка OpenWRT в TL-743ND

  1. Сначала роутер будет работать в режиме роутера и маршрутизатора с вайфай и брандмауэром. Потребуется установить прошивку squashfs и убедиться, что на компьютере есть telnet и putty. Далее нужно узнать логин и пароль от ЛК, чтобы потом воспользоваться ими.
  2. ПК перевести в режим статического айпи адреса и напрямую подключиться к модему. Далее происходит вход в интерфейс администратора и дальнейшее отключение вай фая и dhcp на модеме, который нужно перевести в режим бриджа и устроить его перезапуск.
  3. Изменить айпи адрес модема с 192.168.1.1 на 192.168.0.1 и подключить провод к любому порту LAN. Далее происходит процесс перепрошивки устройства на загруженную прошивку. Потом посредством telnet перейти в роутер по статическому айпи и изменить пароль, воспользовавшись «password».
  4. Теперь нужно зайти в роутер, используя putty по статическому адресу, указать в качестве пользователя root и ввести придуманный пароль. Нужно настроить pope командой uci следующим образом:
  • uci set network.wan.proto=pppoe
  • uci set network.wan.username=’yougotthisfromyour@isp.su’
  • uci set network.wan.password=’yourpassword’
  • uci commit network
  • ifup wan

Далее происходит соединение роутера и модема проводом, в роутере установить WAN, в модеме – 1. В случае индикации лампочки на роутере все проделанные действия были правильными. Затем нужно перейти к обновлению пакетов командой opkg update.

Обратите внимание! При успешном обновлении можно переходить к шагу установки интерфейса luci: opkg install luci-ssl.

  • Запуск веб-сервера происходит следующей командой: /etc/init.d/uhttpd enable; /etc/init.d/uhttpd start.
  • Теперь понадобится зайти в System – Administration и во вкладке интерфейса указать lan и сохранить. В разделе reboot нажать perform reboot. При необходимости upnp, его можно вызвать командой opkg install miniupnpd.
  • Картинка 5 раздел system в интерфейсе OpenWRT
  • Завершающим шагом будет настройка беспроводной сети WIFI – об этом подробно рассказано в разделе настройки точки доступа. После перезагрузки устройства, интернет должен заработать.

В этой статье были разобраны основные вопросы роутера с прошивкой OpenWRT, создание точки доступа. Теперь пользователи с легкостью смогут соединить роутер OpenWRT 4g и модем друг с другом.

Как прикрутить 4g модем к openwrt. Выжимаем максимум интернета из деревенских сот. Прошивка через UART

This guide will walk you through setting up your OpenWRT device to use a 4G LTE/3G USB dongle as it’s source of internet.

SSH to your LEDE/OpenWRT device

If you are using Windows then start PuTTY and click Session on the left side, select SSH from the options, and then enter in the IP Address of your LEDE/OpenWRT box into the Host Name field.

Once you’ve done this just click on Open to start up the SSH connection.

If you are connecting via terminal, then just SSH to your LEDE/OpenWRT device using the following command, where 192.168.1.1 is your LEDE/OpenWRT device’s IP address.

Prerequisits

You will need a LTE/3G USB dongle that provides/can provide an NDIS interface (QMI Mode), and enable it.

Once enabled, connect it to your OpenWRT device.

Installation

We want to install all of the required packages needed to get this working, so run the following commands:

Opkg update opkg install usb-modeswitch kmod-mii kmod-usb-net kmod-usb-wdm kmod-usb-net-qmi-wwan uqmi

Once everything is installed, give your OpenWRT device a reboot.

Configuration

First we want to see if everything is running correctly, so run the following commands:

Uqmi -d /dev/cdc-wdm0 —get-data-status

This should return a disconnected status.

Uqmi -d /dev/cdc-wdm0 —get-signal-info

Which should output some info on your signal.

Once you have confirmed both of these work we need to run a command to initialise your internet connection. Replacing PROVIDER_APN with the APN from your provider.

Uqmi -d /dev/cdc-wdm0 —start-network PROVIDER_APN —autoconnect

Then run the two previous commands again to confirm you are connected.

Network Config

Now we need to create a new interface for this connection.

Simply run the following command:

Then add the following in:

Config interface «wwan»
option ifname «wwan0»
option proto «dhcp»

After doing this, the final step is to add a firewall rule in. The easiest way to do this is through the LuCI interface.

  • Head into Network > Firewall
  • Scroll down to WAN and click edit
  • Under the covered networks heading, tick the box next to wwan.
  • Click save and apply to confirm your changes

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

Сведения о системе

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

Из особенностей можно выделить использование файловой системы JFFS2. Это позволяет применять ОС OpenWRT в самых разнообразных устройствах.

Базовая прошивка имеет ограниченный набор функций, который можно расширить, установив необходимые пакеты. Использование системы в роутерах возможно, благодаря поддержке различных методов передачи данных. Например, таких:

  • Static IP.
  • DHCP Client.
  • PPTP;
  • PPPoE.

Настройка OpenWRT

Многие прошивки не поддерживают графический интерфейс «из коробки». А это значит, что нужно его установить. Но до тех пор придется пользоваться командной строкой.

В этом поможет ssh. Для того чтобы подключиться к роутеру на операционной системе OpenWRT, необходимо набрать в терминале команду: ssh [email protected]

Пока пароля в системе нет, поэтому роутер пустит пользователя и так. Это означает, что после входа нужно сразу же его и создать. Для этого имеется команда: passwd — нужный пароль.

Теперь нужно подключить интернет, которого, к слову пока тоже нет. Все действия будут происходить в командной строке. Для настройки нужно править файл, лежащий по адресу: etc/config/network . Редактировать можно с помощью текстового редактора vi. Для PPPoE достаточно будет указать в нем имя пользователя и пароль, предоставленные провайдером.

После сохранения файла нужно перезапустить сеть. Делается это так:

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

  • opkg update;
  • opkg install luci.

Теперь необходимо запустить веб-сервер:

  • /etc/init.d/uhttpd start;
  • /etc/init.d/uhttpd enable.

После всех манипуляций настройки роутера будут доступны по тому же адресу из браузера.

Внутри административной панели

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

Поменять или настроить сеть можно на вкладке Network. В ней перечислены имеющиеся интерфейсы, среди которых несложно обнаружить LAN и WAN. Второй и обеспечивает связь с провайдером. Редактировать его можно по кнопке Edit.

Настройка в OpenWRT Wi-Fi сети мало чем отличается от других устройств и прошивок. Проводится данная операция также через вкладку Network. В ней есть подвкладка Wifi.

Для создания новой сети используется кнопка Add, а для редактирования уже имеющейся — Edit. В любом случае настройки одни и те же.

В разделе General Setup устанавливается имя сети в поле ESSID. Это название будет отображено в списке сетей, доступных для подключения через любое Wi-Fi устройство.

Раздел Wireless Security содержит настройки безопасности. В частности, можно установить метод аутентификации и пароль для подключения. Остальные параметры опциональны. WiFi настройки в OpenWRT можно считать установленными.

Дополнительные установки

Для более удобного применения русскоязычными пользователями настройки OpenWRT в Luci можно локализовать. Это выполняется с помощью встроенного в прошивку инструмента Software, расположенного во вкладке System. Здесь интересует кнопка Update Lists. На вкладке Available packages будет представлен список доступных к установке пакетов. Среди них можно найти Luci-i18n-russian. Это и есть русификатор для настроек OpenWRT в Luci. Слева будет расположена кнопка Install, с помощью которой происходит установка пакета в систему.

После успешной инсталляции нужно активировать русский язык. Сделать это можно на вкладке System и одноимённой подвкладке. Здесь надо найти раздел Language and Style. В нём представлен список установленных языков, среди которых необходимо выбрать русский и нажать Save and Apply.

Иногда бывает полезно провести сброс настроек OpenWRT. Это может понадобиться после неудачных экспериментов с прошивками или другим ПО. Штатного решения для этого в OpenWRT нет. Поэтому придется производить все операции через командную строку. Необходимо выполнить несколько команд:

rm -rf /overlay/*

Что здесь происходит? На самом деле корень файловой системы представляет собой виртуальный образ, разделённый на две части. Одна из них используется только на чтение. Вторая — в режиме чтения и записи. Именно его и нужно отформатировать, что и выполняется с помощью представленных команд.

Роутер на OpenWRT и 3g модем

Иногда маршрутизаторы обладают возможностью подключения 3G-устройств для выхода в интернет. Настройка 3G модема в OpenWRT происходит не так сложно, как могло бы показаться.

Для этого нужно попасть в административную панель маршрутизатора. Затем подключается модем. Во вкладке «Сеть» в списке интерфейсов есть кнопка «Добавить новый интерфейс».

Далее необходимо будет указать новое имя. В качестве доступных символов можно использовать латинские. Применяемый протокол — 4G/3G, modem — NCM. А интерфейс — wwan0. После указания всех настроек нужно нажать «Применить».

Теперь осталось заняться настройкой самого интерфейса. Для этого указывается устройство. Если модем один, то нужно выбирать со значением USB0. В поле точка доступа APN указываются от оператора.

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

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

На кануне новогодних праздников понадобилось пораньше покинуть столицу, покинуть ее в направлении таких мест, в которых интернет бывает довольно редко. На период отсутствия на работе я обещал напарникам быть на связи. А так как мой род деятельности напрямую связан с web, то я решил поэкспериментировать с доступностью интернетов в планируемом месте пребывания.

Суть задачи сводился к следующему:

  1. Достичь комфортной скорости интернета.
  2. Раздавать интернет не только для себя, но и для супруги.
  1. Использовать имеющийся у меня модем Huawei 5776, прикупив к нему антенну.
  2. Набрать побольше железок и собрать что-то более мощное.

Из небходимого у меня было:

  1. TP-Link TL-WR1043ND с прошивкой OpenWRT 15.05
  2. Антенна Connect 2.0 (с 3-х метровым usb кабелем без ферритовых колец).
  3. USB Hub
Сборка конструктора

В качестве хаба использовал старый добрый D-Link Dub-104 (красивый компактный хаб с невероятно здоровенным блоком питания).

Установка необходимого ПО на точку доступа

Ssh [email protected]
opkg update opkg install comgt kmod-usb-serial kmod-usb-serial-option kmod-usb-serial-wwan usb-modeswitch usb-modeswitch-data
В целом, после этого можно пробовать вставить модем и смотреть, появились ли устройства типа /dev/ttyUSB* . В моем случае usb_modeswitch сделал всю работу и устройства появились. Если это не ваш случай, стоит подробно почитать на тему usb_modeswitch .

Настройка параметров соединения

Vim /etc/config/network
config interface «wan» option device /dev/ttyUSB0 option username «gdata» option password «gdata» option apn «internet» option service «umts» option maxwait «0» option dialnumber «*99#» option proto «3g»
В моем случае симка была от Мегафона, поэтому параметры подбирались специально под него.

Vim /etc/chatscripts/3g.chat
ABORT BUSY ABORT «NO CARRIER» ABORT ERROR REPORT CONNECT TIMEOUT 10 «» «AT+CSQ» «» «AT&F» OK «ATE1» OK «AT+CGDCONT=1,»IP»,»$USE_APN»» SAY «Calling UMTS/GPRS» TIMEOUT 30 OK «ATD$DIALNUMBER» CONNECT » «

Подключение

Wed Dec 30 21:47:01 2015 local2.info chat: CONNECT Wed Dec 30 21:47:01 2015 local2.info chat: — got it Wed Dec 30 21:47:01 2015 local2.info chat: send (^M) Wed Dec 30 21:47:01 2015 daemon.info pppd: Serial connection established. Wed Dec 30 21:47:01 2015 kern.info kernel: 3g-wan: renamed from ppp0 Wed Dec 30 21:47:01 2015 daemon.info pppd: Using interface 3g-wan Wed Dec 30 21:47:01 2015 daemon.notice pppd: Connect: 3g-wan /dev/ttyUSB0 Wed Dec 30 21:47:02 2015 daemon.info pppd: CHAP authentication succeeded: Welcome!!
Если же нет и ваш оператор Мегафон, то идем дальше.

Пляски с бубном

Удивительным был тот факт, что при подключении к ноутбуку с ОС Windows, модем работал исправно. Стоило подключить к Linux — получал ошибку.

Сперва я решил проверить, действительно ли это связано с Мегафоном. Я взял из запасов симку с Tele2, чутка подправил конфигурацию подключения:

Vim /etc/config/network
config interface «wan» option device /dev/ttyUSB0 option apn «internet.tele2.ru» option service «umts» option maxwait «0» option dialnumber «*99#» option proto «3g»
Ииии, все заработало. Сразу. Окей, пойдем сперва наиболее простым путем и поотключаем все лишнее на модеме:

Ssh [email protected]
picocom -b 9600 -f n -p n -d 8 -r /dev/ttyUSB1 at^setport=»ff;10,12,16,a2″
Выходим комбинацией:

Теперь выключаем usb_modeswitch за ненадобностью:

/etc/init.d/usbmode stop /etc/init.d/usbmode disable
Перевтыкаем модем, ждем пока загрузится и поднимаем wan интерфейс:

Ifup wan
В моем случае теперь все заработало. Ура!

Оптимизация

Уровень сигнала без антенны:

Gcom sig -d /dev/ttyUSB1 Signal Quality: 15,99
А теперь с антенной:

Gcom sig -d /dev/ttyUSB1 Signal Quality: 21,99
Выглядело так круто, что я почуял подвох. И подвох действительно был. Для меня стало открытием, что хороший сигнал от базовой станции еще ничего не значит.

Ниже пинги для первого и второго варианта:

# ping 8.8.8.8 PING 8.8.8.8 (8.8.8.8): 56 data bytes 64 bytes from 8.8.8.8: seq=0 ttl=44 time=986.652 ms 64 bytes from 8.8.8.8: seq=1 ttl=44 time=327.628 ms 64 bytes from 8.8.8.8: seq=2 ttl=44 time=246.212 ms 64 bytes from 8.8.8.8: seq=3 ttl=44 time=265.568 ms 64 bytes from 8.8.8.8: seq=4 ttl=44 time=285.271 ms
2. 64 bytes from 8.8.8.8: seq=233 ttl=45 time=1567.306 ms 64 bytes from 8.8.8.8: seq=234 ttl=45 time=1126.106 ms 64 bytes from 8.8.8.8: seq=235 ttl=45 time=569.993 ms 64 bytes from 8.8.8.8: seq=236 ttl=45 time=1403.010 ms 64 bytes from 8.8.8.8: seq=237 ttl=45 time=428.891 ms
И тут для меня открылся новый дивный мир мобильной связи.

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

Делалось это следующей командой:

AT^NETSCAN=20,-110,1
20 — сколько вышек выводить
-110 — минимальный уровень сигнала
0/1 — 0 — 2G вышки, 1 — 3G вышки. С LTE пока никак.

Список отсортирован по уровню сигнала и выглядит следующим образом:

^NETSCAN: 10638,1e7e,250,02,0,-78,8b77,400000 ^NETSCAN: 10687,1e7e,250,02,0,-79,d5c8,400000 ^NETSCAN: 10662,1e7e,250,02,0,-82,8ade,400000 ^NETSCAN: 10587,4cf8,250,20,0,-105,d4fc,400000 ^NETSCAN: 10563,4cf8,250,20,0,-106,d4f9,400000
1e7e — LAC станции
250 — MCC (Россия)
02 — MNC (В данном случае — МТС)
-78 — уровень сигнала данной базовой станции
8b77 — CID станции
400000 — диапазон, в котором принимается сигнал базовой станции (как в команде ^syscfgex)

Теперь, имея эти данные, можно зайти на сайт http://xinit.ru/bs/ и посмотреть, где эти вышки расположены относительно себя.

Как правило, если есть направленная антенна, то ее следует направлять на ближайшую базовую станцию, — я так думал. Тут меня ждало следующее открытие. Даже если мы направим на нее антенну, далеко не факт, что пройдет регистрация на этой базовой станции. А если и пройдет, то не факт, что скорость передачи данных будет выше, чем через вышку, находящуюся вдвое дальше нее. Так я прошелся по ближайшим станциям в радиусе от 1.5 километров до 3-х и все они при хорошем сигнале передавали данные с большой задержкой. Пинг в среднем был

Экспериментируя, я случайно попал на вышку, которая находилась на расстоянии 6-7 километров от меня. Подключившись к ней, время пинга упало до

90ms, при том, что уровень сигнала упал вместе с ним.

Для сравнения, уровень сигнала от:

Близлежащих вышек: 13-20
от удаленной вышки: 5-12

(измерения проводились утилитой gcom sig -d /dev/ttyUSB1 , где в качестве значения может быть цифра от 0 до 99).

Тем не менее я провел скоростные тесты на самой лучшей ближней вышке и на удаленной, результаты:
одна из ближайших станций — 2/0.35 Мбит.

Удаленная станция — 4.28/1.68 Мбит.

Честно говоря, я и от двух мегабит обалдел, т.к. при использовании обычного телефона даже Google Play Market не открывался. А тут, оказывается, можно еще и до 4-х разогнаться!

В интернетах на вопрос типа: “можно ли модему указать, с какой вышкой работать” отвечают, что не вы выбираете вышку, а она вас. Быть может знающие люди подскажут, есть ли решения для таких ситуаций?

На этом все. Спасибо всем тем, кто прочел до конца.

P.S.
Тут под руку попалась симка Билайна, ее вышки ближе всего к нам и после подключения тест скорости показал аж 20/2 Мегабита. Привожу конфигурацию для Билайна:

Vim /etc/config/network
config interface «wan» option device /dev/ttyUSB0 option username «beeline» option password «beeline» option apn «internet.beeline.ru» option service «umts» option maxwait «0» option dialnumber «*99#» option proto «3g»

Который в те времена стоил в Citilink’е смешные 860 рублей. Роутер был куплен и выполнял свои обязанности вполне сносно, стабильно зависая раз в неделю. Кроме того, не работал проброс портов, ну и что, он не больно сильно был нужен. К тому же в Web-интерфейсе был доступ к командной строке, так что в критичных случаях можно было просто написать iptables -A PREROUTING -j DNAT и наслаждаться работающими портами до следующего зависания. Впрочем, большего я от коробочки за такую смешную цену я не ждал. Потом кое-что в моей жизни поменялось и роутер лег на дальнюю полку, а его заменил TP-Link TR-ML3420. Надо сказать, TR-ML3420 отлично работает под OpenWRT и никаких проблем с ним не возникает, а вот роутеры Upvel официально не поддерживаются OpenWRT чуть менее, чем полностью (из всего модельного ряда — только два роутера).
Когда стало ясно, что Upvel UR-313N4G мне уже не жалко, я решил попробовать поставить на него OpenWRT. Основная задача — заставить работать 3G-модем Megafon M21-4, он же Huawei E3531. Надо сказать, что опыт прошивки роутеров на OpenWRT у меня был, как через Web-интерфейс, так и через UART, но он сводился к “выберите файл для прошивки и молитесь” или “наберите эти три команды в консоли и молитесь”. На этот раз мне хотелось разобраться, почему вводятся именно такие команды, ну и вообще получить общее представление об архитектуре MIPS, с которой я до этого не работал.

Тут, конечно, нужно отметить, что читать этот материал отцам , разрабатывающим Gigabit Ethernet карты на FPGA и пишущим видеодрайверы для Mali-400, будет, наверное, смешно — они все это и так давно знают.

Для начала спросим у Гугла о том, что мы будем шить и куда. В архитектуре x86 для загрузки ОС используется специальным образом подготовленный носитель — жесткий диск, SSD или флеш-память, размеченная по стандарту MBR или GPT, с основной загрузочной записью и специально отмеченным загрузочным разделом. Внутренняя структура диска скрыта от ОС его прошивкой, а BIOS предоставляет минимальный фунционал даже тогда, когда ОС не установлена. В роутере с архитектурой MIPS все устроено по-другому. Данные хранятся на MTD-устройстве, которое представляет собой микросхему EEPROM без контроллера, так что когда мы пишем на эту схему, нам нужно стараться не писать в одни и те же сектора слишком часто. Кроме того, у MTD фиксированный и довольно большой размер блоков, которыми допустимо производить стирание (в моем случае — 64Кб). Таблицы разделов на MTD-устройстве нет, но, когда загружено ядро Linux, то оно симулирует наличие таблицы разделов. Настройки этой симуляции задаются либо при сборке ядра, либо с помощью параметра mtdparts при загрузке. В начале MTD расположен загрузчик, который при неудачном стечении обстоятельств можно стереть, и тогда поможет только прошивка EEPROM на программаторе. Загрузчик распаковывает в память прошитый в MTD образ и передает управление ядру Linux.

Теперь настало время экспериментов. Для начала вскроем роутер и посмотрим маркировку основного чипа — Ralink 5350F. Легкое гугление показывает, что этот чип поддерживается OpenWRT, и довольно неплохо, — есть целый каталог ramips с прошивками под серию 5350. Еще на плате видна микросхема RAM на 32Мб и чип EEPROM на 8Мб. Поиск по сайту 4pda показывает, что на чипсете Ralink 5350F построен Upvel UR-322N4G, Hame MPR-A1 и Zyxel Keenetic 4G II. Ну что ж, качаем OpenWRT для Hame MPR-A1 и попробуем прошиться через Web-интерфейс роутера.
Прошивка не шьется, видимо, не проходит проверка каких-то сигнатур. Выяснять с отладчиком наперевес, каких именно, нет желания. Ну и ладно, не больно надо было.

Есть несколько способов прошить роутер без использования Web-интерфейса. Можно, например, воспользоваться режимом восстановления, в который загрузчик переходит при запуске роутера. если нажата кнопка Reset. Забегая вперед, скажу, что в Upvel UR-313N4G этого режима нет, не повезло, что ж поделаешь.
Можно также подключиться к роутеру через telnet, который доступен в оригинальной прошивке, “расчистить” память роутера, убив ненужные процессы, загрузить в память новую прошивку через tftp и прошить ее командой mtd_write. Способ этот плох тем, что у нас, по сути, есть только одна попытка — если прошивка окажется несовместимой с роутером и не сможет загрузиться, то на выходе мы получим “полукирпич”, который можно восстановить, но только через UART. К тому же в этом случае придется поломать голову над тем, в какой раздел MTD следует записывать прошивку. Сразу скажу — в разметке MTD, которая применяется в оригинальной прошивке, раздела Firmware нет.

Прошивка через UART

Ставим Putty (у меня Linux на рабочей станции, с Windows проблем тоже возникнуть не должно) и подбираем скорость порта: выставляем стандартные для COM-порта значения, включаем роутер и смотрим, чтобы на экране были не кракозябы, а осмысленный текст. У меня соединилось на скорости 57600 бод. Теперь у нас есть доступ к загрузчику, а значит, шанс окирпичить роутер уменьшается.

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

Please choose the operation: 1: Load system code to SDRAM via TFTP. 2: Load system code then write to Flash via TFTP. 3: Boot system code via Flash (default). 4: Entr boot command line interface. 7: Load Boot Loader code then write to Flash via Serial. 9: Load Boot Loader code then write to Flash via TFTP.
Меня в этом меню больше всего привлекает пункт 1 — получение прошивки через TFTP и запуск ее из RAM. Получается, проверить совместимость прошивки с устройством можно даже не прошивая ее в EEPROM. Для меня это стало приятным сюрпризом. Устанавливаем tftp-сервер (я взял atftpd), кладем в рабочий каталог прошивку от Hame MPR-A1 и переименовываем ее поудобнее — в mpr-a1.bin.
Запускаем роутер, нажимаем в консоли клавишу 1, выставляем на сетевом интерфейсе компьютера адрес 10.10.10.3, вводим в загрузчике нужные параметры и загружаем прошивку.

Прошивка запустилась, ура! Даже есть доступ к Web-интерфейсу, а значить, большая часть прошивки работоспособна. И это мы еще ничего не шили! Только со светодиодами твориться что-то странное — горит только Wi-Fi (а он отключен и гореть не должен), а вот светодиоды портов Ethernet не горят. Разбираемся дальше. Для настройки коммутаторов в OpenWRT используется утилита swconfig. Выясняем, что может наш коммутатор

>swconfig dev rt2305x help switch0: rt305x(rt305x-esw), ports: 7 (cpu @ 6), vlans: 4096 —switch Attribute 1 (int): enable_vlan (VLAN mode (1:enabled)) Attribute 2 (int): alternate_vlan_disable (Use en_vlan instead of doubletag to disable VLAN mode) Attribute 3 (int): bc_storm_protect (Global broadcast storm protection (0:Disable, 1:64 blocks, 2:96 blocks, 3:128 blocks)) Attribute 4 (int): led_frequency (LED Flash frequency (0:30mS, 1:60mS, 2:240mS, 3:480mS)) Attribute 5 (none): apply (Activate changes in the hardware) Attribute 6 (none): reset (Reset the switch) —vlan Attribute 1 (ports): ports (VLAN port mapping) —port Attribute 1 (int): disable (Port state (1:disabled)) Attribute 2 (int): doubletag (Double tagging for incoming vlan packets (1:enabled)) Attribute 3 (int): untag (Untag (1:strip outgoing vlan tag)) Attribute 4 (int): led (LED mode (0:link, 1:100m, 2:duplex, 3:activity, 4:collision, 5:linkact, 6:duplcoll, 7:10mact, 8:100mact, 10:blink, 11:off, 12:on)) Attribute 5 (int): lan (HW port group (0:wan, 1:lan)) Attribute 6 (int): recv_bad (Receive bad packet counter) Attribute 7 (int): recv_good (Receive good packet counter) Attribute 8 (int): tr_bad (Transmit bad packet counter. rt5350 only) Attribute 9 (int): tr_good (Transmit good packet counter. rt5350 only) Attribute 10 (int): pvid (Primary VLAN ID) Attribute 11 (string): link (Get port link information)
На первый взгляд — обнадеживающе, мы можем управлять не только VLAN’ами, что жизненно необходимо для разграничения трафика LAN и WAN-подсетей, но и программировать светодиоды.
Делаем

>swconfig dev rt305x port 4 set led 12 >swconfig dev rt305x set apply
и… ничего не происходит. Видимо проблема где-то глубже, в драйверах. Хорошо, что у OpenWRT открытый код. Идем в git-репозитоий , находим там исходники драйвера и видим

446 static void esw_hw_init(struct rt305x_esw *esw) 447 < 448 int i; 449 u8 port_disable = 0; 450 u8 port_map = RT305X_ESW_PMAP_LLLLLL; 451 452 /* vodoo from original driver */ 453 esw_w32(esw, 0xC8A07850, RT305X_ESW_REG_FCT0); 454 esw_w32(esw, 0x00000000, RT305X_ESW_REG_SGC2);
тут, кажется, используется магия вуду. И еще — по коду драйвера сразу понятно, что без детальной документации на регистры коммутатора нам в нем не разобраться. Но видно, что параметры драйвера задаются не через аргументы команды modprobe, а, судя по всему, через вкомпилированные в ядро строки:

1431 reg_init = of_get_property(np, «ralink,led_polarity», NULL);
Ладно, отложим исходники и попробуем зайти с другой стороны. Все три роутера — Upvel UR-322N4G, Hame MPR-A1 и Zyxel Keenetic 4G II — двухпортовые. Наверняка среди тучи поддерживаемых моделей на Ralink 5350 есть и пятипортовые модели. Идем на WikiDev и находим, например, D-Link 320 NRU B1. Пятипортовый роутер, один USB порт — то, что надо. Качаем прошивку, загружаем в память роутера, запускаем. Светодиоды работают как положено. Очень интересно. Будем прошиваться на нее, а пока попробуем найти разницу между OpenWRT для Hame MPR-A1 и D-Link 320 NRU B1. Разницу нужно искать в профилях сборки — DTS . Вот, например, параметр led_polarity для Hame не указан, а для D-Link равен 0x17. А я то думал, что полярность бывает только прямая и обратная! Опять лезем в исходники драйвера, находим там константу

#define RT5350_EWS_REG_LED_POLARITY 0x168
находим способ задания полярности
565 /* set the led polarity */ 566 esw_w32(esw, esw->reg_led_polarity & 0x1F, RT5350_EWS_REG_LED_POLARITY);
и опять убеждаемся, что без описания регистров коммутатора нам ловить нечего.

Мы выяснили, что для нашего роутера лучше всего подходит прошивка от D-Link DIR-320 NRU B1. Теперь нужно прошиваться. Быть может вы заметили, что для тестирования работы прошивок я выбирал файлы со словом uImage в имени. Такой файл содержит только образ ядра и файловую систему, загружаемую в RAM и доступную только для чтения. Такой образ можно запускать прямо из памяти, а вот для прошивки он не очень подходит — настройки в таком образе хранить просто негде. Поэтому для прошивки мы выберем образ с расширением sysupgrade — в конце такого образа прицеплен раздел JFFS2, в котором будут храниться изменения, внесенные нами в файловую систему роутера. Поэтому образ sysupgrade стартовать из памяти без прошивки на флешку не может.
Очень хорошо, что у Upvel UR-313N4G флешка на 8Мб, после установки у нас останется еще чуть больше 4Мб для дополнительных пакетов. А вот в TP-Link TR-ML3420 флешка на 4Мб и свободного места там — кот наплакал.
Перезагружаем роутер, нажимаем 2, указываем имя прошивки и шьемся. Итак, вроде все нормально: интерфейсы поднялись, светодиоды моргают, в общем — жизнь бурлит. Вы еще не забыли, что нашей основной целью было заставить работать роутер с модем Megafon M21-4? Втыкаем модем в USB-порт, смотрим в dmesg и… ничего. То есть, совсем ничего. Тут есть два варианта — либо ядро не увидело какую-нибудь адскую шину, на которой внутри чипа висит USB-порт (тут уж мы ничего не поделаем), либо в прошивку забыли добавить драйверы для этого порта. В D-Link 320 NRU B1 USB-порт есть, так что более вероятен второй вариант. Гуглим “OpenWRT usb support”, настраиваем на роутере WAN-порт, чтобы прошивка получила доступ в Интернет и ставим пакеты.

>opkg update >opkg install kmod-usb2 >opkg install kmod-usb-ohci
Именно в таком порядке, потому что модуль kmod-usb2 должен быть загружен раньше, чем kmod-usb-ohci

В консоли тут же появляются строки:

[ 121.570000] ehci_hcd: USB 2.0 «Enhanced» Host Controller (EHCI) Driver [ 121.600000] ehci-platform: EHCI generic platform driver [ 121.810000] phy phy-usbphy.0: remote usb device wakeup disabled [ 121.830000] phy phy-usbphy.0: UTMI 16bit 30MHz [ 121.840000] ehci-platform 101c0000.ehci: EHCI Host Controller [ 121.850000] ehci-platform 101c0000.ehci: new USB bus registered, assigned bus number 1 [ 121.860000] ehci-platform 101c0000.ehci: irq 26, io mem 0x101c0000 [ 121.900000] ehci-platform 101c0000.ehci: USB 2.0 started, EHCI 1.00 [ 121.910000] hub 1-0:1.0: USB hub found [ 121.920000] hub 1-0:1.0: 1 port detected [ 122.300000] usb 1-1: new high-speed USB device number 2 using ehci-platform [ 151.680000] ohci_hcd: USB 1.1 «Open» Host Controller (OHCI) Driver [ 151.710000] ohci-platform: OHCI generic platform driver [ 151.720000] ohci-platform 101c1000.ohci: Generic Platform OHCI controller [ 151.730000] ohci-platform 101c1000.ohci: new USB bus registered, assigned bus number 2 [ 151.750000] ohci-platform 101c1000.ohci: irq 26, io mem 0x101c1000 [ 151.820000] hub 2-0:1.0: USB hub found [ 151.830000] hub 2-0:1.0: 1 port detected
Ого, система увидела устройство на шине USB, значит, продолжаем.

Теперь ставим пакет, который при подключении модема пошлет на него “магическую последовательность”, переключающую модем из режима CD-ROM/TF Card в режим CD-ROM/TF Card+3 COM-порта.

>opkg install usb-modeswitch
В консоли видим следующее:

[ 278.230000] usb 1-1: USB disconnect, device number 2 [ 278.990000] usb 1-1: new high-speed USB device number 3 using ehci-platform
Значит, usb-modeswitch сработал — отправил команду модему, а модем после этого исчез с шины USB и появился там уже как другое устройство.

Поставим два пакета с драйверами, которые увидят COM-порты и сделают их доступными системе
>opkg install kmod-usb-serial kmod-usb-serial-options
[ 326.530000] usbcore: registered new interface driver usbserial [ 326.540000] usbcore: registered new interface driver usbserial_generic [ 326.550000] usbserial: USB Serial support registered for generic [ 326.820000] usbcore: registered new interface driver option [ 326.830000] usbserial: USB Serial support registered for GSM modem (1-port) [ 326.850000] option 1-1:1.0: GSM modem (1-port) converter detected [ 326.860000] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB0 [ 326.870000] option 1-1:1.2: GSM modem (1-port) converter detected [ 326.890000] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB1 [ 326.900000] option 1-1:1.3: GSM modem (1-port) converter detected [ 326.910000] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB2
Видно, что модем определился правильно и в системе появилось 3 COM-порта

Ставим пакет, необходимый для создания отправки команд 3G-модемам и расширение для Web-интерфейса:
>opkg install comgt luci-proto-3g
Заходим в Web-интерфейс, настраиваем 3G, в качестве порта указываем /dev/ttyUSB0, все работает.

Теперь возьмемся за светодиоды. Сначала установим пакет kmod-ledtrig-usbdev — он позволит нам управлять светодиодами в зависимости от наличия устройств на шине USB. Зайдем в Web-интерфейс на вкладку System->LED Configuration и определим там два светодиода:

Name: usb LED Name: d-link:green:usb Trigger: usbdev USB Device: 1-1 (HUAWEI — HUAWEI Mobile) Name: wifi LED Name: rt2800:phy0:radio Trigger: netdev Default state: on Device: wlan0 Trigger Mode: Link On, Transmit, Receive
и нажмем кнопку Save/Apply
На этом настройка роутера закончена.
Стоить добавить, что светодиод “usb” ссылается на конкретный адрес устройства на шине USB (1-1), а поэтому, если адрес изменится, то светодиод работать не будет.

Прошивка через Telnet

: System Boot system code via Flash. ## Booting image at bc050000 . raspi_read: from:50000 len:40 . Image Name: Linux Kernel Image Created: 2014-06-11 7:38:15 UTC Image Type: MIPS Linux Kernel Image (lzma compressed) Data Size: 3435300 Bytes = 3.3 MB Load Address: 80000000 Entry Point: 80420000 raspi_read: from:50040 len:346b24 . Verifying Checksum . OK Uncompressing Kernel Image . OK No initrd ## Transferring control to Linux (at address 80420000) . ## Giving linux memsize in MB, 32
Видно, что u-boot читает 64 байта, начиная с адреса 0x00050000 (отцы , объясните, почему в логе bc050000?). Начиная с 0x00050000 на MTD прошит образ uImage и в первых 64-х его байтах находится заголовок. Из заголовка берется размер образа, его будущий адрес в оперативной памяти и точка входа, после чего образ распаковывается в RAM и на точку входа передается управление.
Подождем, пока оригинальная прошивка загрузится и посмотрим в лог:

Mtd .name = raspi, .size = 0x00800000 (8M) .erasesize = 0x00010000 (64K) .numeraseregions = 0 Creating 6 MTD partitions on «raspi»: 0x00000000-0x00800000: «ALL» 0x00000000-0x00030000: «Bootloader» 0x00030000-0x00040000: «Config» 0x00040000-0x00050000: «Factory» 0x00050000-0x007d0000: «Kernel» 0x007d0000-0x00800000: «RW_FS»
Начиная с адреса 0x00050000 начинается раздел Kernel, и этот адрес подозрительно совпадает с адресом из лога u-boot. Значит, именно здесь храниться прошивка роутера, сюда мы и запишем OpenWRT. Посмотрим, на какие устройства отобразились разделы:

Cat /proc/mtd dev: size erasesize name mtd0: 00800000 00010000 «ALL» mtd1: 00030000 00010000 «Bootloader» mtd2: 00010000 00010000 «Config» mtd3: 00010000 00010000 «Factory» mtd4: 00780000 00010000 «Kernel» mtd5: 00030000 00010000 «RW_FS»
Размер раздела Kernel — 7680 Кб, а образ OpenWRT занимает примерно 3,5 Мб, следовательно, можно прошиваться без опасения, что новая прошивка не поместится в старый раздел.

Посмотрим, сколько у нас свободной памяти:

>free total used free shared buffers Mem: 28300 19952 8348 0 0 Swap: 0 0 0 Total: 28300 19952 8348
Нам нужно примерно 3,5 Мб и они у нас есть.

Запустим на рабочей станции atftpd (адрес 192.168.10.100) и скопируем прошивку в RAM роутера:

>tftp -l dir-320.bin -r dir-320.bin -g 192.168.10.100
Сначала сотрем раздел RW_FS. Может, этого и не надо делать, но на всякий случай перестрахуемся:

> mtd_write erase /dev/mtd5 Unlocking /dev/mtd5 . Erasing /dev/mtd5 . Erase char is 255

Теперь запишем прошивку:

>mtd_write -r write dir-320.bin /dev/mdt4 Unlocking /dev/mtd4 . Writing from dir-320.cc.sys.bin to /dev/mtd4 .
Ключ -r значит, что после выполнения команды роутер перезагрузится. Корректировать таблицу разделов не нужно, потому что она существует только внутри ядра Linux.

После перезагрузки заходим в Web-интерфейс, ставим пакеты kmod-usb2, kmod-usb-ohci, kmod-usb-serial, kmod-usb-serial-option, kmod-ledtrig-usbdev, usb-modeswitch, comgt, luci-proto-3g, настраиваем интерфейсы и светодиоды.

Роутер прошит, можно открывать печеньки и наливать чай.

В организации «завалялось» некоторое количество когда-то бывших весьма популярными в народе модемов Huawei E3272, он же Мегафон M100-4, он же МТС 824F, он же МТС 824FT. Задача: заставить работать этот мопед совместно с OpenWRT-маршрутизатором. В моём случае это такой же «ходовой» TP-Link TL-WR842ND.

Небольшое лирическое отступление. Этот модем может работать в режимах PPP, NCM и HiLink. В последнем варианте модем фактически превращается в отдельный самостоятельный роутер со своим блекджеком и шлюхами DHCP, NATом и эмуляцией сетевого адаптера. Чтобы его активировать, требуется обновить прошивку с версии 21 до версии 22, но лично я этого делать не советую. Ибо вычислительной дури мощности у этого «свистка» совсем мало, и он просто загнётся под мало-мальски серьёзной нагрузкой.

Что касается PPP (он же RAS), то это уже весьма тухлый протокол, который не даст вам реализовать все преимущества и выжать из LTE полную скорость by design. Поэтому использовать его я тоже не очень советую. Остаётся NCM.

Дык вот, сложность заключается в том, что NCM в исполнении Huawei получился весьма чудесатым и ни с чем другим не совместимым. И таки нет, это не QMI, поэтому всякие uqmi и иже с ними отпадают сразу. Только общение AT-командами через псевдотерминал, только хардкор. И эти AT-команды, как всегда, тоже мало с чем совместимы и не особо документированы. На всякий случай, команда установления сеанса связи, которую ещё пришлось поискать: «AT^NDISDUP=1,1».

Но и это ещё не всё. Эта гадская скотина (модем которая) в ответ на команду «ATI» в поле «Manufacturer» ничего не отдаёт. Не знаю, возможно, мне просто попался такой экземпляр. Возможно, его криво перепрошили/разлочили. Но факт остаётся фактом. Из-за этого идущие в пакете «comgt» для OpenWRT скрипты не понимают с чем имеют дело и вываливаются по ошибке.

Так что если кто-то ещё будет иметь дело с похожей железкой, имейте в виду следующее.

  1. Нужно установить пакеты «comgt-ncm», «kmod-usb-net-huawei-cdc-ncm» и их зависимости.
  2. Всякие «usb-modeswitch», «kmod-usb2», «kmod-usb-serial-ipw» и «kmod-usb-serial-option» подразумеваются сами собой. Пока в «ip link show» вы не увидите «wwan0», а в «/dev» — «ttyUSB1», дальше можно даже и не пытаться.
  3. Открываем на редактирование скрипт «/lib/netifd/proto/ncm.sh», находим там строчку «manufacturer=бла-бла-бла» и сразу после неё добавляем заклинание manufacturer=»huawei». Это как раз костыль, призванный скомпенсировать косяк прошивки модема. Надо отметить, что такой «патч» потребуется накладывать после каждого обновления версии OpenWRT. Также про него стоит вспомнить (и убрать), если мы когда-нибудь в будущем захотим подключить к своему роутеру какой-нибудь другой модем.
  4. Через веб-интерфейс aka Luci в стабильной версии OpenWRT (15.05) настроить интерфейс, увы, не получится. Придётся лапками через «/etc/config/network». Примерно вот так:

config interface «huawei» option proto «ncm» option ifname «wwan0» option device «/dev/ttyUSB1» option apn «internet» option delay «5»

После этого рестартуете сетку («/etc/init.d/network reload»), должно взлететь. Не забудьте также потом добавить его в расово правильную зону своего Firewall-а.

Мораль сей басни такова. Huawei — это относительно дешёво и даже работает. Но если не хотите поиметь красные глазки и геморрой, то лучше берите Sierra Wireless.

Juul / lte_mbim_from_scratch.md

The purpose of this document is to get you familiar with the concepts and command line tools involved with connecting to the internet using modern 4G LTE modems on both Debian/Ubuntu and OpenWRT.

This writeup is based on my experiences with the Sierra Wireless AirPrime MC7455 modem and a Calyx (Sprint) SIM card, but it should apply to most modern 4G LTE modems.

High level overview

These are the steps required:

  • Physically connect antennas
  • Physically connect modem to computer using USB adaptor
  • Flash latest firmware to modem
  • Configure modem using AT commands
  • Configure modem using QMI protocol (for some modems)
  • Use command-line tools to connect
  • Assign IP address, gateway and DNS

USB and adaptors

These modems come with a variety of connectors. Some use USB Type A, some use Mini PCI Express, and some use M.2 but they all communicate using USB 2 (with some supporting USB 3). This is possible because both the PCI Express Mini Card edge connector and the M.2 (aka NGFF) edge connector provide not just PCIe pins, but also USB and SIM card pins. This means that the PCIe Mini and M.2 modems can be connected to USB via an adaptor. These adaptors are cheap (e.g. on ebay) and usually include a slot for the SIM card.

For the MC7455 you will need such a Mini PCIe to USB adaptor, and probably a nanoSIM or microSIM to normal SIM adaptor since most PCIe to USB adaptors only accept a full-sized SIM card.

Frequencies and antennas

You will also need two antennas, or a single MIMO antenna. The frequencies used by Sprint in my area are:

  • 25: 1850 to 1995 MHz (FDD-LTE)
  • 26: 814 to 894 MHz (FDD-LTE)
  • 41: 2496 to 2690 MHz (TDD-LTE)

The MC7455 supports all frequencies and both FDD-LTE and TDD-LTE (which are just two different ways of splitting upstream and downstream bandwidth). You can check on cellmapper.net which channels are supported by the cell towers near you and look up the corresponding frequencies here. You can then either get a wideband antenna that covers all of the frequencies supported by your modem and the cell tower, or you can pick one or two frequencies and get an antenna for just those frequencies. Usually wideband antennas that support multiple frequencies don’t have as much gain. You might want to try forcing your modem to use each of the frequencies in turn and check the bandwidth during peak times before you decide on the best antenna.

For the MC7455 you will probably need pigtails (antenna adaptors) from u.fl to either SMA or N-type connectors depending on your antenna. Other modems like the EM7565 use MHF4 connectors instead of u.fl. Remember that the longer the cable from your modem to the antenna, the more signal you will loose.

Upgrading the firmware

If you have a Sierra modem then you will probably want to upgrade the firmware to the latest version from Sierra.

I recommend using the bootable ISO from Daniel E Wood which includes everything you need.

Talking to the modem

USB modems use the USB Communications Device Class or USB CDC. They usually show up as multiple devices in /dev . I see three tty devices: /dev/ttyUSB0 to /dev/ttyUSB2 and one /dev/cdc-wdm0 .

One of the /dev/ttyUSBx devices should be a serial console for AT commands, probably using 9600 baud. If it isn’t, refer to the Switching to NBIM section of this guide.

You can connect using minicom:

For the MC7455 you can download an AT command guide from Sierra Wireless (though you have to create an account) but you hopefully won’t need any commands that aren’t in this guide. There is also a nice writeup on AT commands here.

Another one of these /dev/ttyUSBx devices will probably be for NMEA, meaning that it’s for talking to the built-in GPS. This has no bearing on the 4G LTE connectivity.

Some background on protocols

There are several communications protocols used by modems. Years ago all modems used PPP, but even if your modern modem supports PPP you probably don’t want to use it since it doesn’t support very high bandwidth. For modern modems you will probably want to use either MBIM or QMI.

MBIM, or Mobile Broadband Interface Model, is an official USB standard created by the USB Implementors Forum.

QMI or Qualcomm Mobile Station Modem Interface was developed by Qualcomm and is only supported by Qualcomm chips.

Many Qualcomm chips like the Sierra MC7455 support both MBIM and QMI.

Both MBIM and QMI are actually just using existing Ethernet over USB standards with an added signalling channel.

MBIM is just the NCM protocol + a signalling channel and QMI is just the ECM protocol + a signalling channel.

ECM is the Ethernet Control Model and NCM is the Network Control Model. ECM is an earlier standard and has some issues with latency while NCM resolves those issues and is designed for high speed operation. You can read more here.

You can learn more about MBIM in Linux via the kernel documentation.

When configuring your modem, some settings can be changed with AT commands and others using the QMI signalling channel. I had problems changing the mode from QMI to MBIM using AT commands but was successful using the QMI signalling channel.

Switching to MBIM

Since MBIM is an official USB standard and uses the more modern NCM protocol, that’s what I ended up using.

With the SIM card and modem installed in the USB adaptor, plug the modem into a USB port and wait. It taked a while for the modem to boot up. Maybe give it 30 seconds.

Now use the minicom command from earlier to verify that you can talk to the modem and the SIM card is connected:

It should respond with «READY».

Now let’s enable IPv6 while we’re at it:

If you want, you can ensure that the modem uses only 4G LTE:

You can also attempt to set the USB composition mode. For the MC7455 use this:

Don’t worry if the at!usbcomp command fails or you have a different modem, but if it succeeds you can skip using the swi_setusbcomp script below.

When you’re done, reboot the modem:

Now we need to change the USB composition mode of the modem. «USB composition» refers to the set and types of the devices in /dev associated with the modem.

For this we’ll use this swi_setusbcomp script.

First list the supported USB compositions using:

You will see a list with entries that look something like this:

Pick an entry that includes both AT and NBIM and note down the number, then run:

Replacing <number> with the number of that entry. I used number 1.

Now unplug the modem and plug it back in.

Connecting from Debian / Ubuntu

Connecting using MBIM

You should now be able to connect. For testing this on Debian/Ubuntu you can install libqmi-utils:

which installs the command mbim-network . To connect you will need your APN for your 4G LTE provider. For the Sprint connection you get from Calyx this is r.ispsn . Edit /etc/mbim-network.conf (create it if it doesn’t exist) and make sure a line says «APN=<your_apn>» so for Calyx Sprint it would be «APN=r.ispsn». Also ensure that the file has a line that says «PROXY=yes». If you don’t use a proxy then you can’t query the active connection while it is being used. If you have a username and password see man mbim-network .

You might want to stop network-manager before you run this test:

Check that you can use mbimcli to talk to the device at all:

Start the network connection:

If it works you should see a new network interface probably called wwan0 when you run ip link .

Now to figure out which IP, gateway and DNS to use you can run:

I got the IPv4 IP and subnet 184.250.142.38/30 so to set it I did:

and then to set the gateway (in my case 184.250.142.37):

You should now be able to ping 8.8.8.8 .

If you want to configure a nameserver then you can edit /etc/resolv.conf but remember to put it back the way it was before re-starting network-manager.

Connecting using QMI

If MBIM doesn’t work for you, you can try using swi_setusbcomp.pl to switch to a USB composition that includes QMI.

Then you can repeat the above instructions for MBIM but with the package libqmi-utils , the config file /etc/qmi-network.conf and the commands qmi-network and qmicli . The command to get the IP and gateway is different though and I don’t know what it is for qmicli .

OpenWRT doesn’t seem to have complete official support for MBIM/QMI modems. An updated (as of late 2018) patch-set that uses ModemManager is available here. The problem with this solution (and why it will probably not get merged) is that it requires DBus rather than ubus.

The other option is to use the GoldenOrb ROOter firmware which automates everything via a nice web UI, but then you’re no longer running stock OpenWRT.

For now it just doesn’t seem that MBIM and QMI is well-integrated into OpenWRT, but I could be wrong. It could be that it’s simply not documented. The only mention seems to be here. For QMI, using the uqmi utility manually is documented here but it doesn’t seem to be integrated into uci or ubus .

Manually configuring using umbim

OpenWRT does have a utility for mbim called umbim . You can install it using:

If you want to use it on a non-openwrt system you can compile it like so:

Now you can run umbim .

To install all the required packages for umbim on OpenWRT:

With umbim you can connect like so:

E.g. for Calyx Sprint the last command is just:

When you are connected you should get some output from umbim like:

and an interface, probably named wwan0 will appear.

To get the IP config do:

Now set your IP and gateway based on the config, e.g:

That’s it! (well maybe you want to set DNS as well, but otherwise you should be online).

Integration with OpenWRT

Manually running a bunch of commands to connect after each reboot is obviously not ideal.

I found a nice guide for how to get MBIM working properly in OpenWRT here but unfortunately the links to the files are broken. I did find a working link to the /lib/netifd/proto/mbim.sh file here and that seems to be the core of it. It seems like the rest of the missing files implement some sort of automatic ping and re-connect when the 4G LTE connection stops working.

Locking to specific channel/frequency

TODO There is a way to force the modem to only use specified channels using AT commands. This could be useful if some channels are more crowded than others or if you have an antenna which doesn’t work well for some channels.

It seems that many people experience intermittent disconnections with the MC7455. I’ve seen this happen myself and the GoldenOrb ROOter firmware has a nice feature for detecting these disconnects and re-connecting automatically. You have to enable this feature using the web UI. Remember to specify the IP to ping, otherwise it won’t work.

For OpenWRT you could write a simple scripts that pings some server and then reboots or re-initializes the modem when pings begin failing. Or maybe you could look at how it’s done in GoldebOrb ROOter.

Some have reported that the newer and faster EM7565 modem doesn’t suffer from these disconnection issues but I have not tested this.

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

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