Страницы

Показаны сообщения с ярлыком модем. Показать все сообщения
Показаны сообщения с ярлыком модем. Показать все сообщения

четверг, 16 ноября 2023 г.

Настройка и использование 4G LTE модема Quectel EC25 на микросервере в режиме MBIM mode

Для подключения микросервера к сети Интернет по протоколу IPv6 можно воспользоваться особенностями подключения сотового провайдера MTS, выдающего клиентскому устройству (модему) динамические глобально доступные IPv6-адреса.

Клиентское устройство - модем Quectel EC25, в форме Mini-PCIe, подключенное через USB-mini-PCIe адаптер Kroks-Cse PCI. При подключении к микросерверу, создаёт символьное устройство /dev/cdc-wdm0 и 4 устройства /dev/ttyUSB0, /dev/ttyUSB1, /dev/ttyUSB2, /dev/ttyUSB3.

Выкопировка из вывода команды dmesg: 

[   25.713111] usbcore: registered new interface driver usbserial_generic
[   25.713136] usbserial: USB Serial support registered for generic
[   26.165617] usbcore: registered new interface driver cdc_wdm
[   26.175326] usbcore: registered new interface driver cdc_ether
[   26.184329] usbcore: registered new interface driver qmi_wwan
[   26.189100] usbcore: registered new interface driver cdc_ncm
[   26.225016] cdc_mbim 1-2:1.4: cdc-wdm0: USB WDM device
[   26.225389] cdc_mbim 1-2:1.4 wwan0: register 'cdc_mbim' at usb-0000:00:12.2-2, CDC MBIM, f1:f2:f3:f4:f5:f6
[   26.225540] usbcore: registered new interface driver cdc_mbim
[   26.282997] usbcore: registered new interface driver option
[   26.283023] usbserial: USB Serial support registered for GSM modem (1-port)
[   26.283123] option 1-2:1.0: GSM modem (1-port) converter detected
[   26.284695] usb 1-2: GSM modem (1-port) converter now attached to ttyUSB0
[   26.284793] option 1-2:1.1: GSM modem (1-port) converter detected
[   26.284924] usb 1-2: GSM modem (1-port) converter now attached to ttyUSB1
[   26.284987] option 1-2:1.2: GSM modem (1-port) converter detected
[   26.285092] usb 1-2: GSM modem (1-port) converter now attached to ttyUSB2
[   26.285151] option 1-2:1.3: GSM modem (1-port) converter detected
[   26.285236] usb 1-2: GSM modem (1-port) converter now attached to ttyUSB3

 

Драйвер (модуль ядра) cdc_mbim поддерживает USB устройства соответствующие спецификации “Universal Serial Bus Communications Class Subclass Specification for Mobile Broadband Interface Model”. Модем видимо был ранее сконфигурирован в режиме MBIM.

 

Выкопировка из вывода команды lsusb:

Bus 001 Device 002: ID 2c7c:0125 Quectel Wireless Solutions Co., Ltd. EC25 LTE modem


Также создаётся сетевой интерфейс с именем wwan0, не сконфигурированный.

Выкопировка из вывода команды ip addr:

3: wwan0: <BROADCAST,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 1000

Как пишется в ряде руководств - дальнейшее конфигурирование выполняется с помощью программ пользовательского окружения mbimcli, mbim-network.

Для их установки в систему микросервера, а это в моменте - Ubuntu 22.04 LTS на ядре linux 5.15.0-88-generic, выполняется установка следующего пакета - libmbim-utils.

apt-get install libmbim-utils


Конфигурирование настроек провайдера

Для команды mbim-network нужно создать и заполнить файл /etc/mbim-network.conf. В данном случае, для сотового провайдера MTS.

root@microserver:/# cat /etc/mbim-network.conf
APN=internet.mts.ru
APN_USER=mts
APN_PASS=mts
APN_AUTH=mschapv2
PROXY=yes


PROXY - чем-то важен, без него модем странно реагирует на команды.


Проверка первого подключения

Для начала, выполнив команду mbimcli --help-all, показывающую все доступные опции, можно растеряться, т.к. непонятно, в какой последовательности их надо выполнять. Эту головную боль снимает скрипт-команда mbim-network.

Для начала посмотрим что выдаёт команда --query-device-caps

--query-device-caps. Опция -p важна! (--device-open-proxy).

root@microserver:/home/macibuki# mbimcli --device /dev/cdc-wdm0 --device-open-proxy --query-device-caps

или

root@microserver:/# mbimcli -d /dev/cdc-wdm0 -p --query-device-caps
[/dev/cdc-wdm0] Device capabilities retrieved:
          Device type: 'remote'
       Cellular class: 'gsm'
          Voice class: 'no-voice'
            SIM class: 'removable'
           Data class: 'gprs, edge, umts, hsdpa, hsupa, lte'
             SMS caps: 'pdu-receive, pdu-send'
            Ctrl caps: 'reg-manual'
         Max sessions: '8'
    Custom data class: 'unknown'
            Device ID: '0000'
        Firmware info: 'EC25ECGAR06A09M1G'
        Hardware info: 'QUECTEL Mobile Broadband Modul'

 

Device ID - содержит чувствительную информацию и не приводится.

Что выдаёт команда --query-subscriber-ready-status.

root@microserver:/# mbimcli -d /dev/cdc-wdm0 -p --query-subscriber-ready-status
[/dev/cdc-wdm0] Subscriber ready status retrieved:
          Ready state: 'initialized'
        Subscriber ID: '000000000000000'
            SIM ICCID: '00000000000000000000'
           Ready info: 'none'
    Telephone numbers: (1) '+79100000000'


Вывод команды содержит чувствительную информацию по SIM-карте, абоненту, номеру телефона.


Важная проверка состояния радио, перед запуском mbim-network - команда --query-radio-state

root@microserver:/# mbimcli -d /dev/cdc-wdm0 -p --query-radio-state
[/dev/cdc-wdm0] Radio state retrieved:
         Hardware radio state: 'on'
         Software radio state: 'off'


Так и есть, обычно "Software radio state: Off" и тогда надо включить радио командой --set-radio-state=on

root@microserver:/# mbimcli -d /dev/cdc-wdm0 -p --set-radio-state=on
[/dev/cdc-wdm0] Radio state retrieved:
         Hardware radio state: 'on'
         Software radio state: 'on'


Проверка состояния PIN-кода:

root@microserver:/# mbimcli -d /dev/cdc-wdm0 -p   --query-pin-state
[/dev/cdc-wdm0] PIN info:
             PIN state: 'unlocked'

Если PIN-код в состоянии 'locked', то его можно ввести командой --enter-pin, отключить ввод PIN-кода командой --disable-pin (придётся ввести один раз).


Также можно посмотреть выводы команды --query-registration-state (состояние регистрации), --query-signal-state (состояние сигнала).

root@microserver:/# mbimcli -d /dev/cdc-wdm0 -p --query-registration-state
[/dev/cdc-wdm0] Registration status:
             Network error: 'none'
            Register state: 'home'
             Register mode: 'automatic'
    Available data classes: 'lte'
    Current cellular class: 'gsm'
               Provider ID: '25001'
             Provider name: 'MTS RUS'
              Roaming text: 'unknown'
        Registration flags: 'packet-service-automatic-attach'
root@microserver:/# mbimcli -d /dev/cdc-wdm0 -p --query-visible-providers
error: operation failed: Busy
root@microserver:/# mbimcli -d /dev/cdc-wdm0 -p --query-signal-state
[/dev/cdc-wdm0] Signal state:
              RSSI [0-31,99]: '11'
         Error rate [0-7,99]: '99'
    Signal strength interval: '5'
              RSSI threshold: '2'
        Error rate threshold: 'unspecified'
root@microserver:/#


Можно посмотреть состояние соединения (приведёно рабочее состояние):

root@microserver:/# mbimcli -d /dev/cdc-wdm0 -p  --query-connection-state
[/dev/cdc-wdm0] Connection status:
          Session ID: '0'
    Activation state: 'activated'
    Voice call state: 'none'
             IP type: 'ipv4v6'
        Context type: 'internet'
       Network error: 'none'

(не рабочее состояние):

[/dev/cdc-wdm0] Connection status:
          Session ID: '0'
    Activation state: 'deactivated'
    Voice call state: 'none'
             IP type: 'default'
        Context type: 'none'
       Network error: 'none'


Итак, пришло время запустить соединение командой mbim-network, если выводы команд ориентировочно похожи  на примеры в этой статье.

mbim-network /dev/cdc-wdm0 start

...

Если устройство определилось в системе, если включено радио, то по идее должно работать.

Посмотрим, для начала рабочее состояние, каким оно должно быть:

root@microserver:/# mbim-network /dev/cdc-wdm0 status
Loading profile at /etc/mbim-network.conf...
    APN: internet.mts.ru
    APN auth protocol: mschapv2
    APN user: mts
    APN password: mts
    mbim-proxy: yes
Getting status with 'mbimcli -d /dev/cdc-wdm0 --query-connection-state --device-open-proxy'...
Status: activated

 

Однако, если посмотреть ip addr, то можно продолжить смотреть на не настроенный интерфейс wwan0.

Присвоение IP-адресов сетевому интерфейсу wwan0

Важная особенность состоит в том, что даже получив работающее (activated) состояние на предыдущем этапе, надо получить у провайдера ip-адреса и настроить интерфейс wwan0 вручную или с помощью какого-либо скрипта.

Для соединений такого типа (mbim) не работает стандартный клиент dhcp - dhclient и ip-адреса получаются специфической командой --query-ip-configuration, которая выводит их просто в консоль, в текстовом виде, после чего их можно использовать для ручного конфигурирования командой ip.

root@microserver:/# mbimcli -d /dev/cdc-wdm0 -p --query-ip-configuration

[/dev/cdc-wdm0] IPv4 configuration available: 'address, gateway, dns, mtu'
     IP [0]: '10.191.000.00/30'
    Gateway: '10.191.000.01'
    DNS [0]: '213.87.142.84'
    DNS [1]: '213.87.142.85'
        MTU: '1500'

[/dev/cdc-wdm0] IPv6 configuration available: 'address, gateway, dns, mtu'
     IP [0]: '2a00:1fa0:000:0000:0000:0000:0000:0002/64'
    Gateway: '2a00:1fa0:000:000:0000:000:0000:0001'
    DNS [0]: '2a00:1fa0:3e00::1'
    DNS [1]: '2a00:1fa0:7e00::1'
        MTU: '1500'

Странно то, что при каждом запросе --query-ip-configuration возвращает новые адреса, особенно ipv6. Это не позволяет проверить текущую ip конфигурацию модема, что может привести и приводит к неработоспособности сети. Т.е. нельзя после установки соединения выполнять команду  --query-ip-configuration, т.к. модем будет иметь одну настройку ip, а интерфейс wwan0 другую, отличающуюся, старую.

Присвоение IPv4-адреса

Обычно, скрипт делает очистку адресов на конфигурируемом интерфейсе, перед новым присвоением.

root@microserver:/# ip addr flush dev wwan0

Взяв в строке IP [0]: адрес  с маской, выполним команду ip addr add ... и присвоим полученный ipv4-адрес интерфейсу wwan0.

root@microserver:/# ip addr add 10.191.000.02/30 dev wwan0 broadcast +


Присвоение IPv6-адреса

root@microserver:/# ip addr add 2a00:1fa0:000:0000:0000:0000:0000:0002/64 dev wwan0



Настройка маршрута по-умолчанию через шлюз (gateway), для сетевого интерфейса wwan0

Так как микросервер уже имеет маршрут по-умолчанию настроенный через сетевой интерфейс enp2s0, то надо удалить старый маршрут по-умолчанию (default) и добавить новый, но уже через сетевой интерфейс wwan0.

Вывод команды ip route до настройки нового маршрута:

root@microserver:/# ip route
default via 192.168.88.1 dev enp2s0
default via 192.168.88.1 dev enp2s0 proto dhcp src 192.168.88.3 metric 1024
192.168.88.0/24 dev enp2s0 proto kernel scope link src 192.168.88.3 metric 1024
192.168.88.1 dev enp2s0 proto dhcp scope link src 192.168.88.3 metric 1024

Удаление старого маршрута (можно удалить 2 раза):

root@microserver:/# ip route del default via 192.168.88.1 dev enp2s0


Добавление нового маршрута по-умолчанию:

root@microserver:/# ip route add default via 10.191.000.01 dev wwan0

 

root@microserver:/# ip route
default via 10.191.000.01 dev wwan0
10.191.000.02/30 dev wwan0 proto kernel scope link src 10.191.000.02
192.168.88.0/24 dev enp2s0 proto kernel scope link src 192.168.88.3 metric 1024
192.168.88.1 dev enp2s0 proto dhcp scope link src 192.168.88.3 metric 1024 

 

Настройка разрешения доменных имён с помощью команды resolvectl

Кое-что забыли, а именно добавить к интерфейсу wwan0 адреса DNS-серверов провайдера или иных публично открытых DNS-серверов.

Делается это с помощью команды resolvectl, которая входит в systemd-resolved.

Первоначальный запуск resolvectl показывает, что определение имён привязано к интерфейсу  enp2s0, а для wwan0 не настроено.

root@microserver:/# resolvectl status
Global
       Protocols: -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
resolv.conf mode: foreign
      DNS Domain: home

Link 2 (enp2s0)
    Current Scopes: DNS
         Protocols: +DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
Current DNS Server: 192.168.88.1
       DNS Servers: 192.168.88.1
        DNS Domain: home

Link 3 (wwan0)
Current Scopes: none
     Protocols: -DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported

Добавим адрес DNS-сервера провайдера к интерфейс wwan0:

root@microserver:/# resolvectl dns wwan0 213.87.142.84

Что изменилось?

root@microserver:/# resolvectl status wwan0
Link 3 (wwan0)
Current Scopes: DNS
     Protocols: +DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
   DNS Servers: 213.87.142.84

 

Запросы на разрешение имён продолжают идти через интерфейс  enp2s0, т.к. он тоже помечен как +DefaultRoute.

root@microserver:/# resolvectl query google.com
google.com: 2a00:1450:4010:c02::8a             -- link: enp2s0
            2a00:1450:4010:c02::8b             -- link: enp2s0
            2a00:1450:4010:c02::64             -- link: enp2s0
            2a00:1450:4010:c02::66             -- link: enp2s0
            74.125.205.139                     -- link: enp2s0
            74.125.205.113                     -- link: enp2s0
            74.125.205.101                     -- link: enp2s0
            74.125.205.100                     -- link: enp2s0
            74.125.205.138                     -- link: enp2s0
            74.125.205.102                     -- link: enp2s0

-- Information acquired via protocol DNS in 26.2ms.
-- Data is authenticated: no; Data was acquired via local or encrypted transport: no
-- Data from: network

Отключаем у интерфейса enp2s0 опцию default-route (относящуюся именно к запросам DNS по-умолчанию).


root@microserver:/# resolvectl default-route enp2s0 no

Что изменилось?


root@microserver:/# resolvectl query google.com
google.com: 2a00:1450:4010:c02::8b             -- link: wwan0
            2a00:1450:4010:c02::66             -- link: wwan0
            2a00:1450:4010:c02::64             -- link: wwan0
            2a00:1450:4010:c02::8a             -- link: wwan0
            108.177.14.139                     -- link: wwan0
            108.177.14.101                     -- link: wwan0
            108.177.14.102                     -- link: wwan0
            108.177.14.138                     -- link: wwan0
            108.177.14.113                     -- link: wwan0
            108.177.14.100                     -- link: wwan0

-- Information acquired via protocol DNS in 173.8ms.
-- Data is authenticated: no; Data was acquired via local or encrypted transport: no
-- Data from: network

Запросы на разрешение имён стали просачиватся через интерфейс  wwan0.

Если повторно запросить разрешение имени google.com, то запрос возвратит ответ из dns-cache, об этом скажет строка "Data from: cache".  Кэш отключается опцией --cache=no.

Кэш всех dns-записей очищается командой - resolvectl flush-caches.

Есть полезная команда revert, чтобы восстановить настройки интерфейса enp2s0 (встроенная сетевая карта ethernet), после всех внесённых изменений скрипта или пользователя.

root@microserver:/# resolvectl revert enp2s0


Автоматизация настройки с помощью модифицированного скрипта mbim-set-ip

Скрипт mbim-set-ip содержит настройку dns с помощью команды systemd-resolve, которая не присутствует в поставке Ubuntu 22.04 LTS, поэтому настройка заменена на resolvectl, который присуствует как в Ubuntu 22.04 LTS так и Fedora 39.

Скрипт скачан с репозитория: https://github.com/elementzonline/GSMModem/tree/master/SIM7600/mbim-set-ip

Закоментировать (#) строки с systemd-resolve в скрипте mbim-set-ip:

# printf "systemd-resolve -4 --interface=$DEV --set-dns=%s\n" "${ipv4_dns[@]}" >>$execfile

и заменить их на resolvectl:

printf "resolvectl dns $DEV %s\n" "${ipv4_dns[@]}" >>$execfile

И для ipv6:

# printf "systemd-resolve -6 --interface=$DEV --set-dns=%s\n" "${ipv6_dns[@]}" >>$execfile

printf "resolvectl dns $DEV %s\n" "${ipv6_dns[@]}" >>$execfile

Скрипт mbim-set-ip не делает за администратора работу по настройки сетевого окружения при наличии нескольких интерфейсов. Идея заложенная в скрипт mbim-set-ip предполагает, что LTE-модем является единственным выходом в Интернет.

В приципе, для своих целей и своего микросервера, скрипт mbim-set-ip можно упростить.

Автоматизация подключения с помощью собственного скрипта systemd

Цель - получить управление модемным подключением посредством systemd, т.к. на микросервере только консольный текстовый режим.

Интерфейс пользователя (администратора) будет содержать несколько стандартных команд (enable, start, status, stop, restart, disable).

systemctl enable modem4.service

systemctl start modem4.service

systemctl status modem4.service

systemctl stop modem4.service

systemctl restart modem4.service

systemctl disable modem4.service

enable, disable - включает подключение таким образом, что при нормальной загрузке устанавливается подключение к IPv6-сети.

start,stop - позволяет управлять состоянием подключения, при наличии ещё одного подключения к микросерверу.

status -  отображает состояние подключения, в том числе ip-адреса и прочее.

Согласно Filesystem Hierarchy Standard (FHS), администратор может расположить свои собственные скрипты (modem4.sh) и команды как в домашней директории, так и в общей системе, например /opt, настройки в /etc/opt и т.п.

Файл описания сервиса modem4.service разумно расположить в /etc/systemd/system

При выполнении команды enable - скрипт modem4 должен проверить наличие установленных утилит mbimcli и библиотек, проверить наличие в системе модема, по его PID-VID, возможно по серийному номеру, наличие символьного устройства (/dev/cdc-wdm0) и т.п.

Проверка наличия установленной поддержки MBIM:

root@microserver:/# apt list libmbim*
Вывод списка… Готово
libmbim-glib-dev/jammy-updates 1.28.0-1~ubuntu20.04.1 amd64
libmbim-glib-dev/jammy-updates 1.28.0-1~ubuntu20.04.1 i386
libmbim-glib-doc/jammy-updates,jammy-updates 1.28.0-1~ubuntu20.04.1 all
libmbim-glib4/jammy-updates,now 1.28.0-1~ubuntu20.04.1 amd64 [установлен, автоматически]
libmbim-glib4/jammy-updates 1.28.0-1~ubuntu20.04.1 i386
libmbim-proxy/jammy-updates,now 1.28.0-1~ubuntu20.04.1 amd64 [установлен, автоматически]
libmbim-proxy/jammy-updates 1.28.0-1~ubuntu20.04.1 i386
libmbim-utils/jammy-updates,now 1.28.0-1~ubuntu20.04.1 amd64 [установлен]
libmbim-utils/jammy-updates 1.28.0-1~ubuntu20.04.1 i386

 

Проверка наличия установленной поддержки QMI (Qualcomm MSM Interface):

root@microserver:/# apt-cache search libqmi
libqmi-glib5 - библиотека работы с протоколом Qualcomm MSM Interface (QMI)
libqmi-proxy - прокси для работы с QMI-портами
gir1.2-qmi-1.0 - GObject introspection data for libqmi-glib
libqmi-glib-dev - Header files for adding QMI support to applications that use glib
libqmi-glib-doc - API documentation for libqmi-glib
libqmi-utils - Utilities to use the QMI protocol from the command line

 

root@microserver:/# apt list libqmi*
Вывод списка… Готово
libqmi-glib-dev/jammy-updates 1.32.0-1ubuntu0.22.04.1 amd64
libqmi-glib-dev/jammy-updates 1.32.0-1ubuntu0.22.04.1 i386
libqmi-glib-doc/jammy-updates,jammy-updates 1.32.0-1ubuntu0.22.04.1 all
libqmi-glib5/jammy-updates 1.32.0-1ubuntu0.22.04.1 amd64
libqmi-glib5/jammy-updates 1.32.0-1ubuntu0.22.04.1 i386
libqmi-proxy/jammy-updates 1.32.0-1ubuntu0.22.04.1 amd64
libqmi-proxy/jammy-updates 1.32.0-1ubuntu0.22.04.1 i386
libqmi-utils/jammy-updates 1.32.0-1ubuntu0.22.04.1 amd64
libqmi-utils/jammy-updates 1.32.0-1ubuntu0.22.04.1 i386


Проверка наличия подключения модема конкретного типа, такого как Quectel EC25:

root@microserver:/# lsusb | grep "ID 2c7c:0125"
Bus 001 Device 002: ID 2c7c:0125 Quectel Wireless Solutions Co., Ltd. EC25 LTE modem

root@microserver:/# lsusb -d 2c7c:0125
Bus 001 Device 002: ID 2c7c:0125 Quectel Wireless Solutions Co., Ltd. EC25 LTE modem

root@microserver:/# echo $?

lsusb -d 2c7c:0125 возвращает 0 при наличии устройства с VID=2c7c и PID = 0125 и 1 при отсутствии указанного устройства.

 

Проверка наличия символьного устройства (/dev/cdc-wdm0) из командной строки:

root@microserver:/# if [ -c "/dev/cdc-wdm0" ]; then echo "True"; else echo "False"; fi

True

Проверка драйвера привязанного к символьному устройству /dev/cdc-wdm0:

cdc_mbim - драйвер (модуль ядра) поддерживающий протокол MBIM (Mobile Broadband Interface Model) для сотового модема.

qmi_wwan - драйвер (модуль ядра) поддерживающий протокол QMI (Qualcomm MSM interface) для сотового модема.

root@microserver:/# basename $(realpath /sys/class/usbmisc/cdc-wdm0/device/driver)
cdc_mbim

В данном случае, MBIM режим сотового модема.

Также можно подключиться в специальный порт /dev/ttyUSB2 предназначенный для AT-команд и запросить текущую конфигурацию протокола. Подразумевается, что в системе нет других устройств, захвативших /dev/ttyUSB2 и этот порт привязан к модему. Потребуется команда minicom (apt-get install minicom).

root@microserver:/# minicom -D /dev/ttyUSB2

AT
OK
AT+QCFG="usbnet"
+QCFG: "usbnet",2

OK

+QCFG: "usbnet",2 - подразумевает, что используется MBIM протокол.

+QCFG: "usbnet",1 - подразумевает, что используется ECM протокол.

+QCFG: "usbnet",0 - подразумевает, что используется QMI протокол.


Сам сервисный файл modem4.service (его надо создать в папке /etc/systemd/system) достаточно прост - всю работу делают скрипты startmodem4.sh и stopmodem4.sh

 

root@microserver:/etc/systemd/system# cat modem4.service
[Unit]
Description=LTE Module preparation and configuration
Documentation=man:microserver
After=network.target
Before=network-online.target

[Service]
Type=oneshot
ExecStart=/home/gimmor/startmodem4.sh
ExecStop=/home/gimmor/stopmodem4.sh
RemainAfterExit=yes
 

[Install]
WantedBy=network.target

Из особенностей, для того чтобы наблюдать красивый зелёный сигнал при выводе systemctl status modem4, используется опция RemainAfterExit=yes
 
startmodem4.sh - что-то такое, как например:
 
root@microserver:/home/gimmor# cat startmodem4.sh
#!/bin/bash
# сервер: microserver.local
# 16 ноября 2023 года
# startmodem4.sh - скрипт для настройки LTE модема с помощью systemd

modemdevice="/dev/cdc-wdm0"

if [ -c $modemdevice ]; then echo "Found character device..."; else echo "Not found character device..."; exit 19; fi


driver=$(realpath /sys/class/usbmisc/cdc-wdm0/device/driver)
drivertype=$(basename $driver)
if [ $drivertype == "cdc_mbim" ]; then echo "Found MBIM driver..."; else echo "Unknown driver: $drivertype"; exit 38; fi
if [ $drivertype == "qmi_wwan" ]; then echo "Found QMI driver..."; echo "QMI protocol not supported"; exit 93; fi

# check SIM card PIN state
mbimcli -d /dev/cdc-wdm0 --device-open-proxy --query-pin-state | grep "unlocked"
if [ $? == 0 ]; then echo "PIN code unlocked and no need to enter one" else echo "PIN locked and need to be provided. Aborting..."; exit 1; fi

# check PID&VID - можно пропустить такую проверку
lsusb -d 2c7c:0125
if [ $? == 0 ]; then echo "Found EC25 LTE modem..."; else echo "No modem..."; exit 19; fi

mbimcli -d /dev/cdc-wdm0 -p --set-radio-state=on
echo "LTE modem radio is on"
mbim-network /dev/cdc-wdm0 start
echo "Setting ip configuration ..."
/home/gimmor/mbim-set-ip /dev/cdc-wdm0 wwan0

# Configure DNS resover
resolvectl default-route enp2s0 no
resolvectl default-route wwan0 yes
echo "DNS resolver configured."
echo "LTE modem configured."

stopmodem4.sh - скрипт для остановки подключения через LTE модем.

root@microserver:/home/gimmor# cat stopmodem4.sh
#!/bin/bash

echo "Stopping LTE modem..."
mbim-network /dev/cdc-wdm0 stop
echo "Disabling radio modem off..."
mbimcli -d /dev/cdc-wdm0 -p --set-radio-state=off

ip addr flush dev wwan0
resolvectl revert wwan0
echo "LTE modem stopped"

 

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



понедельник, 15 декабря 2014 г.

Remote access over landline. Удаленный доступ через телефонную линию

Доступ к микросерверу HP Proliant Microserver, через телефонную линию, с использованием аналогового модема TRENDnet TFM-561U.

TRENDnet TFM-561U - старая добрая аналоговая технология. И она может принести пользу в век etherneta и сотовых сетей.




Зачем?
Затем, чтобы при "падении" основной линии интернета, можно было бы получить доступ к компьютеру, в том числе и из другого города, для диагностики и попыток решения проблемы программными средствами.
Если я правильно понял, то 3G сети не предоставляют такой удобной функции, либо предоставляют с большими затратами.


Почему выбран этот модем?
Компактен, питание от USB, стандартная поддержка в Linux.

Ресурсы

1. http://shrewdraven.org/content/setting-mgetty-dialout-and-send-audio-message-under-linux

※※※

среда, 15 августа 2012 г.

Netcomm Bigpond 3G9WB

Описание 3G маршрутизатора BigPond 3G9WB

Маршрутизатор основан на процессоре Broadcom BCM6359. Встроенный 3g mini-PCIe модем Sierra Wireless MC8781.

Характеристики маршрутизатора BigPond 3G9WB:

WAN Interface
• HSPA x 1
LAN Interface
• Ethernet x 4
WLAN
• MAC Address Filtering, WEP, WPA, IEEE 802.1X
• 10, 25, 50, 100mW @ 22MHz
• IEEE 802.11g, backward compatible with 802.11b Encryption
• 64, 128-bit Wired Equivalent Privacy (WEP, WPA2) Data Encryption
Channels (В зависимости от страны, которую можно выбрать в самом устройстве)
• 11 Channels (US, Canada)
• 13 Channels (Europe, Australia)
• 14 Channels (Japan)
Скорость WLAN
• До 54Mbps
WAN PPP
• Yes
Стандарт
• Совместим со спецификацией "3GPP release 5 UMTS specification"
Диапазоны
• Support Quad-band GSM/GRPS (850 / 900 / 1800 / 1900 MHz)
• Support tri-band UMTS/HSDPA/HSUPA (850 / 1900 /2100 MHz)
Скорость
• HSUPA (up to 1.9 Mbps uplink)
• HSDPA and UMTS (up to 7.2 Mbps downlink and 384 Kbps uplink)
• EDGE / GPRS / GSM (up to 247 Kbps)
Antenna Type
• Removable antenna
• SNMP, SNTP, Telnet, Web-based management, Configuration backup and restoration
• Firmware upgrade via HTTP, TFTP client and server, or FTP server
Маршрутизация
• Static route, NAT/PAT, DMZ, DHCP Client/Server/Relay, DNS Proxy, DDNS
Безопасность
• Stateful Packet Inspection, Packet filtering, Denial Of Service protection, Management
Authentication protocols
• PAP, CHAP
VPN
• PPTP/L2TP/IpSec pass-through
Индикаторы
• Питания, LAN 4, LAN 3, LAN2, LAN 1, Wi-Fi, Internet, 3G, 2G, Сила сигнала Low, Med and High LEDs
Питание
• Внешний адаптер питания
• 100-240Vac to 12Vdc /1.5A
Габариты
• 205 mm (W) x 47 mm (H) x 145 mm (D)

Преимущества

  • Съемные антенны, дают возможность подключить внешние направленные антенны
  • Работает с всеми местными провайдерами (unlocked)
  • Компактность, возможность монтажа на стене
  • Бесшумность, нет вентиляторов
  • Питание от 12 В
  • Разбор на компоненты, можно снять 3g модем и wi-fi адаптер и использовать в иных местах
  • Поддержка WPA2-PSK


Недостатки

  • Закрытая прошивка (firmware)
  • 100МБит концентратор и невозможность замены
  • 54МБит Wi-Fi и невозможность замены
  • Не поддерживает произвольные модемы, неудачно 
  • Невозможность назначить один из портов LAN как WAN

Характеристики встроенного 3g модема Sierra Wireless MC8781 с поддержкой GPS:

Форм-фактор: PCI Express Mini Card
Чипсет: Qualcomm MSM7200TM
UMTS HSDPA Category 8/6/4 (7.2/3.6/1.8 Mbps downlink), HSUPA Category 4 (2.0 Mbps uplink)
EDGE/GPRS MS Class 12
Receive equalizer with dual antenna
diversity
поддержка USIM (UMTS SIM-карты)
PC/SC interface
Технология GPS: Qualcomm GpsOne®

Размеры
Длина: 51 mm
Ширина: 30 mm
Толщина: 4.5 mm
Вес: under 12 g

Питание
Входное напряжение, диапазон:: 3.0 ~ 3.6V
Low talk current
Low stand-by current
Антенный вход
50 Ohm compatible
U. FL RF connector

Диапазоны
850/1900/2100MHz WCDMA
Power class 3 (+24dBm)
850/900MHz GSM/GPRS/EDGE
GSM Power class 4/EDGE E2
1800/1900 MHz GSM/GPRS/EDGE
GSM Power Class 1/EDGE E2
GPS/1575.42 MHz

Интерфейс
52-Pin Edge Connector
Pinout supports PCI-Express Mini Card Specification Rev 1.1
USB 2.0
Software configurable LED control
U-SIM - стандарт SIM-карты в сетях UMTS

Поддерживаемые AT-команды (список уточняется)

 GSM AT Command Reference

 TS 27.007 AT command set for User Equipment (UE)

 TS 27.005 Use of Data Terminal Equipment ‐‐ Data Circuit terminating Equipment (DTE‐DCE) interface for Short Message Service (SMS) and Cell Broadcast Service (BSE)



Выводы
Вещь в себе. Решила проблему и ладно. Существенный недостаток, относящийся скорее к сети провайдера - серые IP-адреса WAN интерфейса.

Ресурсы
1. TS 27.007 AT command set for User Equipment (UE). Разные ревизии. http://www.3gpp.org/ftp/Specs/archive/27_series/27.007/

2. Firmware upgrade. http://support.netcommwireless.com/sm/firmware/3g9wb
3. Страница устройства. http://support.netcommwireless.com/product/3g/3g9wb

пятница, 10 августа 2012 г.

WWAN 3g модем и Intel DN2800MT

Подключение 3g модема Toshiba Ericsson f3607gw к материнской плате Intel DN2800MT

Подключение производилось для тестирования связки и выявления тонких особенностей. Задумка описана в другой заметке : 3g Интернет в деревне.
Здесь практическая работа, журнал подключения.

Итак, первое подключение.
Для тестирования использовался дистрибутив Ubuntu 11.10 (рабочая система) и Ubuntu 12.04 LiveCD.

К модему обязательно должна быть подключена SIM-карта, без  нее он не работает.

#lsusb

...
Bus 001 Device 002: ID 0930:130c Toshiba Corp. F3607gw Mobile Broadband Module
...

Модуль по сути является usb-устройством, только в исполнении mini PCI-e.

Устройство видится какToshiba Corp. F3607gw Mobile Broadband Module.
Его PID VID 0930:130c.

в каталоге /dev нашлись файлы, относящиеся к устройству. /dev/ttyACM0 (модем), /dev/ttyACM1, /dev/ttyACM2 (gps)


Устройства, созданные модулем, в каталоге /dev:
# for n in `ls /sys/class/*/*{ACM,wdm,usb0}*/device/interface`;do echo $(echo $n|awk -F '/' '{print $5}') : $(cat $n);done

ttyACM0 : TOSHIBA F3607gw Mobile Broadband Data Modem
ttyACM1 : TOSHIBA F3607gw Mobile Broadband Modem
ttyACM2 : TOSHIBA F3607gw Mobile Broadband GPS Port
cdc-wdm0 : TOSHIBA F3607gw Mobile Broadband Device Management
cdc-wdm1 : TOSHIBA F3607gw Mobile Broadband USIM Port


Также устройством (его драйвером) формируется интерфейс wwan0
#ifconfig -a

wwan0     Link encap:Ethernet  HWaddr 02:80:37:ec:02:00  
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:6863 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6665 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:5651645 (5.6 MB)  TX bytes:1563007 (1.5 MB)



#dmesg | grep wwan
[   22.565216] cdc_ether 1-1:1.6: wwan0: register 'cdc_ether' at usb-0000:00:1d.7-1, Mobile Broadband Network Device, 02:80:37:ec:02:00



Первое подключение неудачное. NetworkManager определил устройство, но соединения не устанавливалось. "И так и сяк, ни в какую". Это при том, что была подключена рабочая внешняя антенна и рабочая сим-карта, использовавшиеся в роутере Bigpond.
Следующим шагом было повторная проверка соединений и установлена обычная круговая антенна от роутера и другая сим-карта. Запуск и попытка подключения. Удалось соединится в режиме EDGE. По крайней мере, хоть как-то работает. Провайдер Мегафон.
Как я предполагаю, дело было в контактах между модулем usim, он особенно точно должен ставиться в разъеме. Также важно, чтобы антенные пигтейлы были плотно посажены на разъемы.
Далее, подключил более мощную направленную антенну, правда диапазона Wi-Fi. Загрузка, попытка подключения. Не подключается.
Вернул предыдущую антенну. Подключается в режиме EDGE. Скорость около 21 кб/c.
Дело в том, что в деревне, вышка сотовой связи находится в 5 километрах от места приема и на обычные антенны прием 3g сигнала оказывается невозможным.

Антенны я подключаю после полного обесточивания оборудования.

И наконец, подключение 3g антенны. Загрузка, попытка подключения. Не работает. Что навело на мысль пересмотреть контакты.
Проблема оказалась, что был использован обычный SMA-U.FL пигтейл от старой антенны, а нужен был реверсивный SMA-U.FL. После замены, все решилось. 3g заработал. Скорость составила 6 МБит на загрузку, 0.85 МБит на выгрузку. Да, такие скорости никогда не достигались в этом месте. Бинго.



Включение модуля
Для проверки будет использоваться программа minicom. Установить ее пакет:
#sudo apt-get install minicom

Порт модема /dev/ttyACM1 - контрольный порт, используется для подачи разных команд, снятия состояния сети и пр.

Запуск из под суперпользователя.
#minicom -D /dev/ttyACM1
Параметры порта 115200 8 N 1. Выход из программы - последовательное нажатие CTRL-A X.
В процессе работы через этот порт периодически сыпятся разнобразные сообщения, понять которые, без тщательного изучения AT команд, невозможно.

Проверка того, защищена ли sim-карта pin-кодом.

Запрос: AT+CPIN?
Ответ: +CPIN: READY
Что свидетельствует что sim-карта разблокирована.
Если ответ:
+CPIN: SIM PIN
Для разблокировки sim-карты
Запрос: AT+CPIN="Ваш PIN"
Ответ: OK

Проверка уровня сигнала.
Запрос: AT+CSQ
Ответ:
 11,99
OK
Ответ состоит из двух цфир: +CSQ: 11,99. С помощью первой определяем уровень сигнала в дБ по форумуле: [-113 + Х * 2]. Второе число - количнство ошибок в процентах. 99 - не определено.
Итак уровень получается -91 dB. Например, уровень на направленной 3g антенне -86 dB. В лучшие моменты -79 dB.
Мое предположение, непроверенное пока, что уровень сигнала сообщается для 2G, а не 3G, потому что при разных антеннах, выдается одно и тоже значение. Позже уточню.

Список сетей. Долго думает, но всё же выводит.

AT+COPS=?
+COPS: (2,"MegaFon RUS","MegaFon RUS","25002",0),(2,"MegaFon RUS","MegaFon RUS",
OK
Внутренние часы модуля
Запрос: AT+CCLK?
Ответ: +CCLK: "2000/01/01,03:48:02+00"

OK
Время не установлено, надо установить:
AT+CCLK=«yy/mm/dd,hh:mm:ss+zz» — установить время. Обязательно в таком формате и с ведущими нулями.
Пример:
Запрос: AT+CCLK="2012/08/10,18:28:00+03"
Ответ: OK

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

Карта включается командой:
Запрос: AT+CFUN=1
Ответ: +PACSP0

Установить только 2g подключение
AT+CFUN=5

Установить только 3g подключение
AT+CFUN=6

Можно это не делать, это всё делает NetworkManager входящий в поставку Ubuntu.

Просмотреть индикатор-состояние:
Запрос: AT+CIND?
Ответ: +CIND: 0,3,1,0,1,0,1,0,0,0,0,0
Вторая цифра показывает уровень сигнала в диапазоне 0-5.


Просмотреть CellID возможно в следующем ответе:
AT+CREG?
+CREG: 2,1,"0E11","01693912"

"01693912" - 2 байта cell id в шестнадцатиричном формате
"0E11" - код местоположения

Просмотр температурной информации

Запрос: AT*E2OTR?
Ответ: *E2OTR: 0,75,80,85,1,57

OK

Проверка баланса 3g модема

Для проверки баланса использовать специальные USSD AT-команды.
Если выполнить на терминале /dev/ttyACM1 ( это управляющий порт) команду:
AT+CUSD=1,"*100#",15

то симка мегафона вернёт текущий баланс счёта.

+CUSD - это префикс для выполнения команд USSD.
*100# - код для запроса баланса у провайдера Мегафон.


Выключение модуля

Для перевода модуля в энергосберегающий режим:
Запрос: AT+CFUN=4
Ответ: OK

Для обесточивания карты (опасная команда, потом потребуется перезагрузка), Карта не будет способна принимать команды.
Запрос: AT+CFUN=0
Ответ: ОК

Использование модуля Ericsson f3607gw как GPS приемника

В модуль Ericsson f3607gw встроена функция GPS - глобального определения координат. Грех ее будет не использовать.
GPS данные поставляются по протоколу NMEA через порт /dev/ttyACM2. По умолчанию, порт выключен и его надо включить отправив AT-команды.

Первый шаг. Отправка строки вида  AT*E2GPSCTL=X,Y,Z в контрольный порт /dev/ttyACM1.
где

X -  0 (выключены NMEA сообщения) или 1 (включены NMEA сообщения)
Y - частота в секундах появления NMEA сообщений (от 1 до 60 сек)
Z -  0 (DGPS выключена) или 1 (DGPS включена)

Запрос: AT*E2GPSCTL=1,5,1
Второй шаг. Отправка в порт /dev/ttyACM2 команды AT*E2GPSNPD. После получения и отработки команды, порт /dev/ttyACM2 перестанет получать команды, до отключения питания. Управление потоком NMEA сообщений сохраниться через контрольный порт /dev/ttyACM1.


Просмотреть, все ли получилось можно обычной командой cat /dev/ttyACM2.

#cat /dev/ttyACM2

$GPGGA,,,,,,0,00,0.5,,M,0.315099,M,0.0000199,0000*7B
$GPRMC,002408.38,V,,,,,,,060180,,,N*77

GPS требует собственной антенны, расчитанной на диапазон около 1.5 ГГц.

Существует стандартный демон gpsd, который позволяет разделять 1 последовательный порт с сообщениями NMEA между нескольким программами.

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


Ресурсы
AT-команды аналогичного устройства. http://www.natisbad.org/E4300/Dell_Wireless_5530_AT_cmd_ref.html
Подробное описание модуля SIM900D. http://we.easyelectronics.ru/part/gsm-gprs-modul-sim900-chast-vtoraya.html