В статье описывается настройка маршрутизатора «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.
Все последующие действия касаются маршрутизаторов с железом версии B*.
Он же «Sense R41», он же «Network Connect R41»
Понадобятся утилиты curl и ssh. На ОС Windows удобно установить MSYS2 и поставить пакеты curl и ssh.
Скачиваем сбоку OpenWRT для DIR-320/NRU. На данный момент это самая свежая стабильная сборка. Либо можно искать в других релизах/рабочих сборках по префиксу ramips/rt305x/openwrt-ramips-rt305x-dir-320-b1-. Копируем прошивку в папку Dir320.
Замечание:
Создаем в папке Dir320 скрипт:
Настраиваем сетевой интерфейс на компьютере:
Выключаем питание маршрутизатора. Подсоединяем сетевой порт 1 (или 2,3,4, но не INTERNET) маршрутизатора Ethernet-кабелем к настроенной сетевой карте (192.168.0.10).
Запускаем скрипт Dir320/update_flash.cmd и выполняем выводимые им инструкции. А именно:
1. Смотрим логи — Kernel Log
Через Web-интерфейс: меню Status → Kernel Log
Через консоль (ssh):
Должны быть записи вроде этого:
Ключевые слова — usbserial, ttyUSB*.
Если их нет, то убедитесь, что все пакеты поставлены: меню System → Software или команда в консоли
Убедитесь, что в /etc/hotplug.d/usb/22-3g_dongle параметры idvendor, idproduct, bcddevice соответствуют USB устройству. Это можно посмотреть в консоли командой
Должно быть выведено что-то вроде
Первые три строчки соответствуют модему.
2. Далее — System Log
Через Web-интерфейс: меню Status → System Log.
Через консоль (ssh):
Должны быть записи вроде этого:
При ошибке соединения, нужно смотреть код этой ошибки. Без этого более конкретно тут ничего не скажешь.
Страница продукта DIR-320/NRU на D-Link
Страница устройства DIR-320/NRU на OpenWRT
Базовая настройка OpenWRT
Настройка 3G модема в OpenWRT
Ставим OpenWRT на DIR320/NRU
Использование модема Sense R41 в Linux
На странице поддержки маршрутизатора приведён перечень совместимых моделей модемов, и «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 |
Модем 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 скрипт:
update_flash.cmd
Замечание:
@echo off
set firmware=openwrt-ramips-rt305x-dir-320-b1-squashfs-sysupgrade.bin
set router=192.168.0.1
echo ===========================================================================
echo This batch file will upload %firmware% in the current directory to
echo %router% during the router's bootup.
echo.
echo * Set your ethernet card's settings to:
echo IP: 192.168.0.10
echo Mask: 255.255.255.0
echo Gateway: 192.168.0.1.
echo * Unplug the router's power cable.
echo * Press and hold reset button.
echo * Re-plug the router's power cable.
echo * Wait 10-15 seconds, then release reset button.
echo.
echo ===============================================================================
echo Waiting for the router... Press Ctrl+C to abort.
echo.
:ping
ping -n 1 -w 50 %router% | find "TTL="
if errorlevel 1 goto ping
echo curl -v -0 --retry 100 --form firmware=@%firmware% -o %temp%\curl_out.tmp --progress-bar http://%router%
curl -v -0 --retry 100 --form firmware=@%firmware% -o %temp%\curl_out.tmp --progress-bar http://%router%
if errorlevel 1 goto ping
echo.
echo ===============================================================================
echo * WAIT for about 2 minutes while the firmware is being flashed.
echo * The default router address will be at 192.168.1.1.
echo.
pause
exit /b
Замечание:
Измените строчку set firmware=... — задайте имя файла прошивки, если назвали по-другому.
Настраиваем сетевой интерфейс на компьютере:
IP: 192.168.0.10 Mask: 255.255.255.0 Gateway: 192.168.0.1
Выключаем питание маршрутизатора. Подсоединяем сетевой порт 1 (или 2,3,4, но не INTERNET) маршрутизатора Ethernet-кабелем к настроенной сетевой карте (192.168.0.10).
3. Прошивка
Запускаем скрипт Dir320/update_flash.cmd и выполняем выводимые им инструкции. А именно:
- Зажимаем спичкой/скрепкой/карандашом кнопку Reset на маршрутизаторе.
- Подключаем питание к маршрутизатору.
- Ждем 10-15 сек.
- Отпускаем кнопку Reset.
- Ждем 2-3 мин.
4. Настройка маршрутизатора
- Открываем в браузере адрес 192.168.1.1
Вводим логин — root, пароль — пустой, жмем кнопку Login. - Настраиваем доступ к маршрутизатору:
- Меню System → Administration
- Задаём новый пароль
- Настраиваем SSH (поля: Interface = lan, Password authentication = enable, Allow root logins with password = enable)
- Кнопка Save & Apply
- Настраиваем WAN (доступ в интернет):
- Меню Network → Interfaces
- Иконка WAN → кнопка Edit
- Настриваем соединение до провайдера (поля: Protocol, и т.д.)
- Кнопка Save & Apply
- Настраиваем 3G
- Открываем консоль MSYS2
- Подключаемся к роутеру по SSH:
ssh root@192.168.1.1
- Вводим пароль
- Устанавливаем пакеты:
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. - Создаём скрипт с настройками USB устройства (правильные VendorID и ProductID):
/etc/hotplug.d/usb/22-3g_dongleecho '#!/bin/sh idvendor="2020" idproduct="4000" bcddevice="300" if [ "${PRODUCT}" = "${idvendor}/${idproduct}/${bcddevice}" ]; then if [ "${ACTION}" = "add" ]; then echo '${idvendor} ${idproduct} 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), если вдруг эти значения не сработают. - Создаём скрипт с настройками модема:
/etc/chatscripts/3g.chatecho '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-интерфейс или консоль) - Перезагружаем роутер: команда reboot в консоли или через Web-интерфейс
- Заходим на 192.168.1.1
- Добавляем новый сетевой интерфейс для 3G модема:
- Меню 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
- Отключите питание роутера, отключите WAN кабель интернет-провайдера.
- Включите питание, после загрузки роутера должен заработать модем и появиться интернет.
Если не заработало
1. Смотрим логи — Kernel Log
Через Web-интерфейс: меню Status → Kernel Log
Через консоль (ssh):
dmesg | grep usb
Должны быть записи вроде этого:
Kernel Log
[ 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 или команда в консоли
opkg list-installed
Убедитесь, что в /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
Первые три строчки соответствуют модему.
2. Далее — System Log
Через Web-интерфейс: меню Status → System Log.
Через консоль (ssh):
logread
Должны быть записи вроде этого:
System Log
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)
При ошибке соединения, нужно смотреть код этой ошибки. Без этого более конкретно тут ничего не скажешь.
Ссылки
Страница продукта DIR-320/NRU на D-Link
Страница устройства DIR-320/NRU на OpenWRT
Базовая настройка OpenWRT
Настройка 3G модема в OpenWRT
Ставим OpenWRT на DIR320/NRU
Использование модема Sense R41 в Linux