Как стать автором
Обновить

Настройка D-Link DIR-320/NRU + 3G Ростелеком R41 (Sense R41)

Время на прочтение 9 мин
Количество просмотров 20K
В статье описывается настройка маршрутизатора «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 скрипт:

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 и выполняем выводимые им инструкции. А именно:

  1. Зажимаем спичкой/скрепкой/карандашом кнопку Reset на маршрутизаторе.
  2. Подключаем питание к маршрутизатору.
  3. Ждем 10-15 сек.
  4. Отпускаем кнопку Reset.
  5. Ждем 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_dongle
      echo '#!/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.chat
      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-интерфейс или консоль)
    • Перезагружаем роутер: команда 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
Теги:
Хабы:
+6
Комментарии 0
Комментарии Комментировать

Публикации

Истории

Работа

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн