Настройка D-Link DIR-320/NRU + 3G Ростелеком R41 (Sense R41)
В статье описывается настройка маршрутизатора «D-Link DIR-320/NRU» и модема «3G+ Ростелеком R41».
На странице поддержки маршрутизатора приведён перечень совместимых моделей модемов, и «3G+ Ростелеком R41», также известный как «Sense R41», в их число не входит. При подключении к маршрутизатору модем не определяется в интерфейсе настройки, в логах он отображается как SCSI устройство, и никаких /dev/ttyUSB* устройств не создаётся. То есть без вариантов — требуется альтернативная прошивка маршрутизатора.
Поиск в интернете показал, что данный маршрутизатор можно прошить некоторыми версиями прошивок ZyXEL Keenetic и OpenWRT. Выбор пал на OpenWRT. Наряду с пользовательскими сборками OpenWRT, включающими всё необходимое для подключения 3G модема, поддержка маршрутизатора DIR-320/NRU добавлена в основную ветку OpenWRT, начиная с ревизии 38040. Поэтому для прошивки выбрана последняя стабильная версия OpenWRT — Barrier Breaker 14.07.
1. Описание устройств
Маршрутизатор D-Link DIR-320/NRU
Off. site: | www.dlink.ru/ru/products/5/1466_b.html |
OpenWRT site: | wiki.openwrt.org/toh/d-link/dir-320_revb1 |
H/W Ver.: (версия железа) | B1 |
F/W Ver.: (версия прошивки) | 1.2.94 |
SoC: (чипсет) | RaLink RT5350 |
Все последующие действия касаются маршрутизаторов с железом версии B*.
Модем 3G+ Ростелеком R41
Он же «Sense R41», он же «Network Connect R41»
SoC: | MediaTek MT6225 |
2. Подготовка
Понадобятся утилиты curl и ssh. На ОС Windows удобно установить MSYS2 и поставить пакеты curl и ssh.
Скачиваем сбоку OpenWRT для DIR-320/NRU. На данный момент это самая свежая стабильная сборка. Либо можно искать в других релизах/рабочих сборках по префиксу ramips/rt305x/openwrt-ramips-rt305x-dir-320-b1-. Копируем прошивку в папку Dir320.
Для настройки маршрутизатора понадобятся дополнительные пакеты OpenWRT. Самый простой способ — это настроить WAN на маршрутизаторе (интернет через кабель интернет-провайдера) и установить пакеты через интернет. Есть возможность заранее скачать пакеты, а так же встроить пакеты в сборку или собрать прошивку из исходников с добавленными пакетами. Но я не изучал этот вопрос. Подробности на странице OpenWRT howto.
Создаем в папке Dir320 скрипт:
- Зажимаем спичкой/скрепкой/карандашом кнопку Reset на маршрутизаторе.
- Подключаем питание к маршрутизатору.
- Ждем 10-15 сек.
- Отпускаем кнопку Reset.
- Ждем 2-3 мин.
- Открываем в браузере адрес 192.168.1.1
Вводим логин — root, пароль — пустой, жмем кнопку Login. - Настраиваем доступ к маршрутизатору:
- Меню System → Administration
- Задаём новый пароль
- Настраиваем SSH (поля: Interface = lan, Password authentication = enable, Allow root logins with password = enable)
- Кнопка Save & Apply
- Меню Network → Interfaces
- Иконка WAN → кнопка Edit
- Настриваем соединение до провайдера (поля: Protocol, и т.д.)
- Кнопка Save & Apply
opkg update opkg install comgt kmod-usb2 kmod-usb-ohci kmod-usb-serial kmod-usb-serial-option kmod-usb-serial-ipw kmod-usb-serial-wwan kmod-usb-acm luci-proto-3g usb-modeswitch usb-modeswitch-data usbutils
1. Команду opkg update надо выполнять заново в каждой SSH сессии (а возможно и перед каждой opkg install). В любом случае, если команда opkg install не находит пакет, надо выполнить opkg update.
2. Вполне возможно, что из пакетов kmod-usb-serial-wwan, kmod-usb-acm трубуется только один (на это указано на странице wiki.openwrt.org/doc/recipes/3gdongle), но я особо не разбирался, поставил оба.
3. Пакеты usb-modeswitch, usb-modeswitch-data, usbutils вроде и не особо нужны — usb-modeswitch* нужны, если модем определяется как диск (у меня не было такого), usbutils нужен только чтобы узнать VendorID и ProductID.echo '#!/bin/sh idvendor="2020" idproduct="4000" bcddevice="300" if [ "$" = "$/$/$" ]; then if [ "$" = "add" ]; then echo '$ $ ff' > /sys/bus/usb-serial/drivers/option1/new_id fi fi ' > /etc/hotplug.d/usb/22-3g_dongle
1. Можно скопировать команду, начиная с echo
2. Конец строки EOL должен быть UNIX-формата (LF, а не CRLF), то есть скопируйте команду в текстовый редактор (например, Notepad++) и замените концы строк, а потом копируйте это в консоль.
3. idvendor, idproduct, bcddevice можно посмотреть командой lsusb -v (пакет usbutils), если вдруг эти значения не сработают.echo 'ABORT BUSY ABORT VOICE ABORT "NO CARRIER" ABORT "NO DIALTONE" ABORT "NO DIAL TONE" ABORT "NO ANSWER" ABORT "DELAYED" ABORT "ERROR" ABORT "+CGATT: 0" "" AT TIMEOUT 30 OK ATH OK ATE1 OK AT+CFUN=1 OK AT+CGATT? OK AT+CGDCONT=1,"IP","\T" OK ATD*99# TIMEOUT 22 CONNECT "" ' > /etc/chatscripts/3g.chat
1. Конец строки EOL должен быть UNIX-формата.
2. Имя файла /etc/chatscripts/3g.chat может быть другое: выполните команду ls -n /etc/chatscripts/ и посмотрите, какие файлы создаются после настройки 3G соединения (через Web-интерфейс или консоль)- Меню Network → Interfaces
- Кнопка Add new interface
- Открываем вкладку General setup, заполняем поля: Name = WAN3G, Protocol = UMTS/GPRS/EV-DO
- Кнопка Submit
- Заполняем поля: Modem device = /dev/ttyUSB0, Service type = UMTS/GPRS, APN = internet.rt.ru, username = ncc, password = ncc
- Открываем вкладку Firewall settings, ставим переключатель Assign firewall-zone = wan
- Кнопка Save & Apply
Если не заработало
1. Смотрим логи — Kernel Log
Через Web-интерфейс: меню Status → Kernel Log
Через консоль (ssh):[ 0.680000] rt3xxx-usbphy usbphy.3: loaded [ 6.690000] usbcore: registered new interface driver usbfs [ 6.700000] usbcore: registered new interface driver hub [ 6.710000] usbcore: registered new device driver usb [ 18.000000] rt3xxx-usbphy usbphy.3: remote usb device wakeup disabled [ 18.020000] rt3xxx-usbphy usbphy.3: UTMI 16bit 30MHz [ 18.120000] usb usb1: no of_node; not parsing pinctrl DT [ 18.430000] usb usb2: no of_node; not parsing pinctrl DT [ 18.460000] usbcore: registered new interface driver cdc_acm [ 18.480000] usb 1-1: new high-speed USB device number 2 using ehci-platform [ 18.710000] usb 1-1: no of_node; not parsing pinctrl DT [ 18.730000] usbcore: registered new interface driver usbserial [ 18.770000] usbcore: registered new interface driver usbserial_generic [ 18.810000] usbserial: USB Serial support registered for generic [ 19.400000] usbcore: registered new interface driver ipw [ 19.440000] usbserial: USB Serial support registered for IPWireless converter [ 19.510000] usbcore: registered new interface driver option [ 19.570000] usbserial: USB Serial support registered for GSM modem (1-port) [ 20.380000] usb 1-1: USB disconnect, device number 2 [ 21.620000] usb 1-1: new high-speed USB device number 3 using ehci-platform [ 22.010000] usb 1-1: no of_node; not parsing pinctrl DT [ 23.410000] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB0 [ 23.490000] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB1 [ 23.590000] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB2 [ 23.670000] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB3
Ключевые слова — usbserial, ttyUSB*.
Если их нет, то убедитесь, что все пакеты поставлены: меню System → Software или команда в консолиУбедитесь, что в /etc/hotplug.d/usb/22-3g_dongle параметры idvendor, idproduct, bcddevice соответствуют USB устройству. Это можно посмотреть в консоли командой
lsusb -v | grep -e idVendor -e idProduct -e bcdDevice.
idVendor 0x2020 idProduct 0x4000 bcdDevice 3.00 idVendor 0x1d6b Linux Foundation idProduct 0x0002 2.0 root hub bcdDevice 3.10 idVendor 0x1d6b Linux Foundation idProduct 0x0001 1.1 root hub bcdDevice 3.10
Первые три строчки соответствуют модему.
Через Web-интерфейс: меню Status → System Log.
Через консоль (ssh):Tue Aug 18 00:36:25 2015 daemon.notice netifd: Interface 'WAN3G' is setting up now Tue Aug 18 00:36:27 2015 kern.err kernel: [10387.270000] option1 ttyUSB0: option_instat_callback: error -2 Tue Aug 18 00:36:27 2015 daemon.notice pppd[22188]: pppd 2.4.7 started by root, uid 0 Tue Aug 18 00:36:28 2015 local2.info chat[22191]: abort on (BUSY) Tue Aug 18 00:36:28 2015 local2.info chat[22191]: abort on (VOICE) Tue Aug 18 00:36:28 2015 local2.info chat[22191]: abort on (NO CARRIER) Tue Aug 18 00:36:28 2015 local2.info chat[22191]: abort on (NO DIALTONE) Tue Aug 18 00:36:28 2015 local2.info chat[22191]: abort on (NO DIAL TONE) Tue Aug 18 00:36:28 2015 local2.info chat[22191]: abort on (NO ANSWER) Tue Aug 18 00:36:28 2015 local2.info chat[22191]: abort on (DELAYED) Tue Aug 18 00:36:28 2015 local2.info chat[22191]: abort on (ERROR) Tue Aug 18 00:36:28 2015 local2.info chat[22191]: abort on (+CGATT: 0) Tue Aug 18 00:36:28 2015 local2.info chat[22191]: send (AT^M) Tue Aug 18 00:36:28 2015 local2.info chat[22191]: timeout set to 30 seconds Tue Aug 18 00:36:28 2015 local2.info chat[22191]: expect (OK) Tue Aug 18 00:36:28 2015 local2.info chat[22191]: AT^M^M Tue Aug 18 00:36:28 2015 local2.info chat[22191]: OK Tue Aug 18 00:36:28 2015 local2.info chat[22191]: -- got it Tue Aug 18 00:36:28 2015 local2.info chat[22191]: send (ATH^M) Tue Aug 18 00:36:28 2015 local2.info chat[22191]: expect (OK) Tue Aug 18 00:36:28 2015 local2.info chat[22191]: ^M Tue Aug 18 00:36:28 2015 local2.info chat[22191]: ATH^M^M Tue Aug 18 00:36:28 2015 local2.info chat[22191]: OK Tue Aug 18 00:36:28 2015 local2.info chat[22191]: -- got it Tue Aug 18 00:36:28 2015 local2.info chat[22191]: send (ATE1^M) Tue Aug 18 00:36:28 2015 local2.info chat[22191]: expect (OK) Tue Aug 18 00:36:28 2015 local2.info chat[22191]: ^M Tue Aug 18 00:36:28 2015 local2.info chat[22191]: ATE1^M^M Tue Aug 18 00:36:28 2015 local2.info chat[22191]: OK Tue Aug 18 00:36:28 2015 local2.info chat[22191]: -- got it Tue Aug 18 00:36:28 2015 local2.info chat[22191]: send (AT+CFUN=1^M) Tue Aug 18 00:36:28 2015 local2.info chat[22191]: expect (OK) Tue Aug 18 00:36:28 2015 local2.info chat[22191]: ^M Tue Aug 18 00:36:28 2015 local2.info chat[22191]: AT+CFUN=1^M^M Tue Aug 18 00:36:28 2015 local2.info chat[22191]: OK Tue Aug 18 00:36:28 2015 local2.info chat[22191]: -- got it Tue Aug 18 00:36:28 2015 local2.info chat[22191]: send (AT+CGATT?^M) Tue Aug 18 00:36:29 2015 local2.info chat[22191]: expect (OK) Tue Aug 18 00:36:29 2015 local2.info chat[22191]: ^M Tue Aug 18 00:36:29 2015 local2.info chat[22191]: AT+CGATT?^M^M Tue Aug 18 00:36:29 2015 local2.info chat[22191]: +CGATT: 1^M Tue Aug 18 00:36:29 2015 local2.info chat[22191]: ^M Tue Aug 18 00:36:29 2015 local2.info chat[22191]: OK Tue Aug 18 00:36:29 2015 local2.info chat[22191]: -- got it Tue Aug 18 00:36:29 2015 local2.info chat[22191]: send (AT+CGDCONT=1,"IP","\T"^M) Tue Aug 18 00:36:29 2015 local2.info chat[22191]: expect (OK) Tue Aug 18 00:36:29 2015 local2.info chat[22191]: ^M Tue Aug 18 00:36:29 2015 local2.info chat[22191]: AT+CGDCONT=1,"IP","T"^M^M Tue Aug 18 00:36:29 2015 local2.info chat[22191]: OK Tue Aug 18 00:36:29 2015 local2.info chat[22191]: -- got it Tue Aug 18 00:36:29 2015 local2.info chat[22191]: send (ATD*99#^M) Tue Aug 18 00:36:29 2015 local2.info chat[22191]: timeout set to 22 seconds Tue Aug 18 00:36:29 2015 local2.info chat[22191]: expect (CONNECT) Tue Aug 18 00:36:29 2015 local2.info chat[22191]: ^M Tue Aug 18 00:36:29 2015 local2.info chat[22191]: ATD*99#^M^M Tue Aug 18 00:36:29 2015 local2.info chat[22191]: CONNECT Tue Aug 18 00:36:29 2015 local2.info chat[22191]: -- got it Tue Aug 18 00:36:29 2015 local2.info chat[22191]: send (^M) Tue Aug 18 00:36:29 2015 daemon.info pppd[22188]: Serial connection established. Tue Aug 18 00:36:29 2015 daemon.info pppd[22188]: Using interface 3g-WAN3G Tue Aug 18 00:36:29 2015 daemon.notice pppd[22188]: Connect: 3g-WAN3G /dev/ttyUSB0 Tue Aug 18 00:36:30 2015 daemon.notice pppd[22188]: PAP authentication succeeded Tue Aug 18 00:36:32 2015 daemon.warn pppd[22188]: Could not determine remote IP address: defaulting to 10.64.64.64 Tue Aug 18 00:36:32 2015 daemon.notice pppd[22188]: local IP address 10.175.68.213 Tue Aug 18 00:36:32 2015 daemon.notice pppd[22188]: remote IP address 10.64.64.64 Tue Aug 18 00:36:32 2015 daemon.notice pppd[22188]: primary DNS address 176.59.127.150 Tue Aug 18 00:36:32 2015 daemon.notice pppd[22188]: secondary DNS address 176.59.127.146 Tue Aug 18 00:36:32 2015 daemon.notice netifd: Network device '3g-WAN3G' link is up Tue Aug 18 00:36:32 2015 daemon.notice netifd: Interface 'WAN3G' is now up Tue Aug 18 00:36:32 2015 user.notice firewall: Reloading firewall due to ifup of WAN3G (3g-WAN3G)
При ошибке соединения, нужно смотреть код этой ошибки. Без этого более конкретно тут ничего не скажешь.