Главная > Сети > Раздаём 3G-интернет от «Мегафона» через DIR-320.

Раздаём 3G-интернет от «Мегафона» через DIR-320.

Попался мне на днях 3G-модем «Мегафон» вместе с необходимостью настроить роутер D-Link DIR-320 на работу с этим модемом. Модем на данный момент был одним из последних серий – Huawei E1750.
Megafon 3G-модем Huawei E1750
Основные отличия от предыдущего E1550 – это увеличенная скорость аплоада (с 384 до 5700 kbit/s), даунлоада (с 3600 до 7200 kbit/s) и более низкий пинг.

Теперь опустим технические формальности, еще три страницы истории «как я настраивал модем впервые» (хотя последнее так же достойно отдельной статьи) и перейдем сразу к делу.

Оглавление


Подготовка модема

Начну с подготовки самого модема. Что нам для этого понадобится:

  • Относительно свежий дистрибутив Linux (куда же без него).
  • Непосредственно сам модем.
  • Утилита usb_modeswitch.
  • Утилита minicom.

Так как я использую Ubuntu, то все манипуляции буду проводить соответствующим образом.

Для начала установим все необходимое в нашу систему:

~$ sudo aptitude install usb-modeswitch minicom

После установки нам нужно отредактировать файл /etc/usb-modeswitch.conf

~$ sudo vim /etc/usb-modeswitch.conf

вставив в него следующие строки:

DefaultVendor = 0x12d1
DefaultProduct = 0x1446
MessageEndPoint = "0x01"
MessageContent = "55534243000000000000000000000011060000000000000000000000000000"

Теперь подключаем наш модем к USB порту, ждем несколько секунд пока он определится и выполняем команду:

~$ sudo usb_modeswitch

Должно появиться нечто следующее:

Looking for target devices ...
No devices in target mode or class found
Looking for default devices ...
Found default devices (1)
Accessing device 004 on bus 007 ...
Using endpoints 0x01 (out) and 0x81 (in)
Inquiring device details; driver will be detached ...
Looking for active driver ...
OK, driver found ("usb-storage")
OK, driver "usb-storage" detached

SCSI inquiry data (for identification)
-------------------------
Vendor String: HUAWEI
Model String: Mass Storage
Revision String: 2.31
-------------------------

USB description data (for identification)
-------------------------
Manufacturer: HUAWEI Technology
Product: HUAWEI Mobile
Serial No.: not provided
-------------------------
Setting up communication with interface 0 ...
Trying to send the message to endpoint 0x01 ...
OK, message successfully sent
Device is gone, skipping any further commands
-> Run lsusb to note any changes. Bye.

Если все сделано правильно, то в /dev будут несколько новых USB-девайсов:

~$ ls /dev | grep ttyUSB
ttyUSB0
ttyUSB1
ttyUSB2

Хорошо. Теперь очередь за minicom

~$ minicom -s

После запуска программы, откроется меню конфигурации. В нем выбираем опцию «Настройка последовательного порта» и жмем «Enter«.

minicom - меню конфигурации

В появившемся окне изменения настроек жмем клавишу «A» для изменения последовательного порта. Вместо того, что там написано, вводим /dev/ttyUSB0 и жмем «Enter«.

Теперь дважды нажимаем «Esc» и ждем пока наш модем будет инициализирован:

Добро пожаловать в minicom 2.4

ПАРАМЕТРЫ: I18n
Дата компиляции Jan 25 2010, 06:49:09.
Port /dev/ttyUSB0

Нажмите CTRL-A Z для получения подсказки по клавишам

AT S7=45 S0=0 L1 V1 X4 &c1 E1 Q0
OK

Проверяем реакцию модема на команды, введя «AT» и нажав «Enter«. Если все нормально, то получим ответ от модема «OK«.
Следующим пунктом навсегда отключаем эмуляцию CD-ROM на модеме. Для этого вводим команду «AT^U2DIAG=0» и жмем «Enter«. После этого должен прийти ответ от модема «OK» означающий, что модем переведен в режим «только модем».

внешний вид окна minicom

Теперь жмем «Ctrl+A,Q» на клавиатуре. Появится меню «Выйти без сброса?» на который отвечаем утвердительно и выходим из программы.

диалог выхода из minicom без сброса

На этом с модемом закончим.

Список известных мне команд
AT^U2DIAG=0       (устройство в режиме только модем)
AT^U2DIAG=1       (устройство в режиме модем + CD-ROM)
AT^U2DIAG=255     (устройство в режиме модем + CD-ROM + Card Reader)


Подготовка роутера

Вот и подошла очередь нашего WiFi-роутера. Для него нам понадобится альтернативная прошивка WL-500gpv2 «от Олега». Взять свежую можно тут. На момент написания статьи это версия 1.9.2.7-d-r1445.

Не лишним будет сказать, что прошивка DIR-320 заняла у меня довольно много времени. Дело в том, что на прошивку этого девайса дается около двух секунд после включения питания. Не совру если скажу, что поначалу пытался поймать нужный промежуток более 50 раз, но зато теперь выработал стопроцентный алгоритм. :)
Не сомневаюсь, что есть много других способов прошивки. Можете поделиться своими проверенными в комментариях.

Теперь о самом процессе.
Для прошивки нам понадобится tftp-клиент. Я использовал atftp

~$ sudo aptitude install atftp

Следующим шагом соединяем наш компьютер с роутером через кабель и выставляем на компьютере сетевой адрес 192.168.0.2.

Установка статичного адреса в Ubuntu с установленным KNetworkManager, который был настроен на DHCP вызвала у меня некоторые затруднения. Этот аплет постоянно переподключал сеть при перезагрузке роутера, из-за чего я не мог попасть в двухсекундный промежуток для прошивки. Пришлось «убить» этот процесс и выключить демон network-manager

~$ sudo invoke-rc.d network-manager stop

затем прописать в /etc/network/interfaces

auto eth0
iface eth0 inet static
address 192.168.0.2
netmask 255.255.255.0

и «поднять» интерфейс обычным

~$ sudo ifup eth0

Теперь нам нужно подготовить прошивку.
Делаем cd в директорию с прошивкой, вводим в консоль

~$ atftp -l ./WL500gpv2-1.9.2.7-d-r1445.trx -p 192.168.0.1

но «Enter» не жмем, пока только вводим.

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

Как только индикатор загорится, моментально нажимаем в консоли «Enter«, отправляя введенную ранее команду atftp. Если все сделано правильно, то индикатор начнет мигать с высокой частотой, что означает: процесс прошивки начался (как вариант, можно добавить опцию –trace к atftp, тогда прогресс прошивки будет отображаться в консоли).

Теперь остается только ждать окончания прошивки. У меня ожидание заняло около двух минут, по окончанию которых роутер сам себя перезагрузил (можно наблюдать на индикаторах) и начал работать в штатном режиме с новой прошивкой.


Настройка подключения

Дело осталось за малым – настроить модемное соединение на роутере.
Для этого нам понадобится только telnet, который присутствует в большинстве базовых конфигураций дистрибутива. Если его нет, устанавливаем:

~$ sudo aptitude install telnet

Перед запуском telnet выставляем на компьютере любой сетевой адрес из диапазона 192.168.1.0/24 (кроме .0, .1 и .255, естественно). Можно и через DHCP – теперь роутер сам выдаст нам нужный адрес. Допустим, это будет адрес 192.168.1.2.

Запускаем telnet, вводим логин и пароль (admin:admin по-умолчанию) и попадаем в консоль маршрутизатора (далее все команды вводим в эту консоль):

$ telnet 192.168.1.1
Trying 192.168.1.1...
Connected to 192.168.1.1.
Escape character is '^]'.
(none) login: admin
Password:
[admin@(none) root]$

Проверяем как определился наш модем, запустив

tail -f /usr/tmp/syslog.log

Вставляем модем в USB порт и через пару секунд в логе должны появиться примерно следующие строки:

Jan  1 00:11:14 kernel: hub.c: new USB device 00:03.0-1, assigned address 2
Jan  1 00:11:14 kernel: usb.c: USB device 2 (vend/prod 0x12d1/0x1001) is not claimed by any active driver

Если vend/prod определилось как 0x12d1/0×1001, то все в порядке. Модем работает как нам и нужно в режиме «только модем». Если вместо 0×1001 другие цифры, например 0×1446, что означает работу модема в заводском режиме, то вы сделали что-то не так на шаге подготовки модема.

Подключаем модуль для работы с нашим модемом

insmod usbserial vendor=0x12d1 product=0x1001

и проверяем наличие новых девайсов

ls -l /dev/usb/tts/*
crw-------    1 admin    root     188,   0 Jan  1 00:00 /dev/usb/tts/0
crw-------    1 admin    root     188,   1 Jan  1 00:00 /dev/usb/tts/1
crw-------    1 admin    root     188,   2 Jan  1 00:00 /dev/usb/tts/2

Выше видно, что у нас появилось три новых девайса /dev/usb/tts/[0-2]. Работать будем с /dev/usb/tts/0.

Если все в порядке, перейдем непосредственно к настройке подключения.
Создадим директорию /tmp/ppp/peers:

mkdir /tmp/ppp/peers

Пропишем в файле /tmp/ppp/peers/dialup необходимые настройки модема, выполнив в консоли ряд команд:

echo "debug" > /tmp/ppp/peers/dialup
echo "/dev/usb/tts/0" >> /tmp/ppp/peers/dialup
echo "460800" >> /tmp/ppp/peers/dialup
echo "crtscts" >> /tmp/ppp/peers/dialup
echo "noipdefault" >> /tmp/ppp/peers/dialup
echo "ipcp-accept-local" >> /tmp/ppp/peers/dialup
echo "lcp-echo-interval 60" >> /tmp/ppp/peers/dialup
echo "lcp-echo-failure 5" >> /tmp/ppp/peers/dialup
echo "usepeerdns" >> /tmp/ppp/peers/dialup
echo "noauth" >> /tmp/ppp/peers/dialup
echo "persist" >> /tmp/ppp/peers/dialup
echo "nodetach" >> /tmp/ppp/peers/dialup
echo "user ''" >> /tmp/ppp/peers/dialup
echo "password ''" >> /tmp/ppp/peers/dialup
echo "connect \"/usr/sbin/chat -s -S -V -t 60 -f /tmp/ppp/dialup.chat 2>/tmp/chat.log\"" >> /tmp/ppp/peers/dialup

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

cat /tmp/ppp/peers/dialup

Вывод должен выглядеть следующим образом:

debug
/dev/usb/tts/0
460800
crtscts
noipdefault
ipcp-accept-local
lcp-echo-interval 60
lcp-echo-failure 5
usepeerdns
noauth
persist
nodetach
user ''
password ''
connect "/usr/sbin/chat -s -S -V -t 60 -f /tmp/ppp/dialup.chat 2>/tmp/chat.log"

Править файлы можно консольным редактором vi, который присутствует в данной прошивке. Например

vi /tmp/ppp/peers/dialup

откроет файл /tmp/ppp/peers/dialup в этом редакторе.

Клавиша «i» переведет редактор в режим редактирования.
«Esc» – выход из режима редактирования.
«:qw» – выход с сохранением.
«:q!» – выход без сохранения.

Теперь настроим файл /tmp/ppp/dialup.chat так же выполнив ряд консольных команд:

echo "'' ''" > /tmp/ppp/dialup.chat
echo "'' 'ATZ'" >> /tmp/ppp/dialup.chat
echo "'' 'AT+CGDCONT=1,"IP","internet"'" >> /tmp/ppp/dialup.chat
echo "'OK' 'ATD *99#'" >> /tmp/ppp/dialup.chat
echo "'CONNECT' ''" >> /tmp/ppp/dialup.chat

Проверим что у нас получилось:

[admin@(none) root]$ cat /tmp/ppp/dialup.chat
'' ''
'' 'ATZ'
'' 'AT+CGDCONT=1,IP,internet'
'OK' 'ATD *99#'
'CONNECT' ''

Если все верно, закрепим результат выполнив еще несколько команд:

echo /tmp/ppp/peers/dialup > /tmp/local/.files
echo /tmp/ppp/dialup.chat >> /tmp/local/.files
flashfs save && flashfs commit && flashfs enable

Последняя строка запишет все наши изменения в память роутера, чтобы они остались после перезагрузки. Результатом её выполнения будет примерно следующее:

tar: removing leading '/' from member names
tmp/local/
tmp/local/.files
tmp/local/root/
tmp/ppp/peers/dialup
tmp/ppp/dialup.chat
-rw-r--r--    1 admin    root          451 Jan  1 00:11 /tmp/flash.tar.gz
Check saved image and type "/sbin/flashfs commit" to commit changes
.
Committed.

Теперь можно перезагрузить маршрутизатор отправив в консоль команду

reboot

Ждем порядка 20 секунд и вновь заходим в консоль с помощью telnet

~$ telnet 192.168.1.1
Trying 192.168.1.1...
Connected to 192.168.1.1.
Escape character is '^]'.
(none) login: admin
Password:
[admin@(none) root]$

После входа в консоль роутера выполняем

insmod usbserial vendor=0x12d1 product=0x1001

и

pppd call dialup

В консоли должно появиться много строк примерно следующего содержания

Script /usr/sbin/chat -s -S -V -t 60 -f /tmp/ppp/dialup.chat 2>/tmp/chat.log finished (pid 104), status = 0x0
Serial connection established.
using channel 1
Using interface ppp0
Connect: ppp0 <--> /dev/usb/tts/0
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x9faec1e2> <pcomp> <accomp>]
rcvd [LCP ConfReq id=0x0 <asyncmap 0x0> <auth chap MD5> <magic 0x102357d> <pcomp> <accomp>]
No auth is possible
sent [LCP ConfRej id=0x0 <auth chap MD5>]
rcvd [LCP ConfAck id=0x1 <asyncmap 0x0> <magic 0x9faec1e2> <pcomp> <accomp>]
rcvd [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x102357d> <pcomp> <accomp>]
sent [LCP ConfAck id=0x1 <asyncmap 0x0> <magic 0x102357d> <pcomp> <accomp>]
sent [LCP EchoReq id=0x0 magic=0x9faec1e2]
sent [CCP ConfReq id=0x1 <mppe -H -M -S -L -D +C> <deflate 15> <deflate(old#) 15> <bsd v1 15>]
sent [IPCP ConfReq id=0x1 <compress VJ 0f 01> <addr 0.0.0.0> <ms-dns1 0.0.0.0> <ms-dns2 0.0.0.0>]
rcvd [LCP DiscReq id=0x2 magic=0x102357d]
rcvd [LCP EchoRep id=0x0 magic=0x102357d 9f ae c1 e2]
rcvd [LCP ProtRej id=0x3 80 fd 01 01 00 15 12 06 00 00 00 01 1a 04 78 00 18 04 78 00 15 03 2f]
Protocol-Reject for 'Compression Control Protocol' (0x80fd) received
rcvd [IPCP ConfNak id=0x1 <ms-dns1 10.11.12.13> <ms-dns2 10.11.12.14> <ms-wins 10.11.12.13> <ms-wins 10.11.12.14>]
sent [IPCP ConfReq id=0x2 <compress VJ 0f 01> <addr 0.0.0.0> <ms-dns1 10.11.12.13> <ms-dns2 10.11.12.14> <ms-wins 10.11.12.13> <ms-wins 10.11.12.14>]
rcvd [IPCP ConfReq id=0x0]
sent [IPCP ConfNak id=0x0 <addr 0.0.0.0>]
rcvd [IPCP ConfRej id=0x2 <compress VJ 0f 01> <ms-wins 10.11.12.13> <ms-wins 10.11.12.14>]
sent [IPCP ConfReq id=0x3 <addr 0.0.0.0> <ms-dns1 10.11.12.13> <ms-dns2 10.11.12.14>]
rcvd [IPCP ConfReq id=0x1]
sent [IPCP ConfAck id=0x1]
rcvd [IPCP ConfNak id=0x3 <addr 10.248.41.100> <ms-dns1 83.149.19.123> <ms-dns2 83.149.19.124>]
sent [IPCP ConfReq id=0x4 <addr 10.248.41.100> <ms-dns1 83.149.19.123> <ms-dns2 83.149.19.124>]
rcvd [IPCP ConfAck id=0x4 <addr 10.248.41.100> <ms-dns1 83.149.19.123> <ms-dns2 83.149.19.124>]
Could not determine remote IP address: defaulting to 10.64.64.64
local  IP address 10.248.41.100
remote IP address 10.64.64.64
primary   DNS address 83.149.19.123
secondary DNS address 83.149.19.124
Script /tmp/ppp/ip-up started (pid 107)
Script /tmp/ppp/ip-up finished (pid 107), status = 0x0

и произойти подключение интернета через модем (синяя лампочка на модеме будет постоянно гореть).

Проверяем интернет, загрузив на компьютере браузер и посетив несколько сайтов.

Отлично. Теперь разорвем подключение комбинацией «Ctrl+C» в консоли и пропишем подключение через модем в автозагрузку роутера:

Выполним несколько команд:

mkdir /tmp/local/sbin
echo "#!/bin/sh" > /tmp/local/sbin/post-boot
echo "insmod usbserial vendor=0x12d1 product=0x1001" >> /tmp/local/sbin/post-boot
echo "sleep 10" >> /tmp/local/sbin/post-boot
echo "pppd call dialup" >> /tmp/local/sbin/post-boot
chmod +x /tmp/local/sbin/post-boot

и проверим что получилось:

[admin@(none) root]$ cat /tmp/local/sbin/post-boot
#!/bin/sh
insmod usbserial vendor=0x12d1 product=0x1001
sleep 10
pppd call dialup

Если все верно, запишем результат в память маршрутизатора:

flashfs save && flashfs commit && flashfs enable

На этом все. Попытка подключения интернета через модем теперь будет происходить автоматически после перезагрузки роутера.


Эпилог

Теперь у нас есть рабочий WiFi-роутер, способный раздавать не только проводной интернет, но так же интернет от 3G USB-модема «Мегафон» и интернет от 4G-модемов WiMAX (последнее включается в web-админке роутера).

Напоследок скажу, что я в курсе существующих «альтернативных» прошивок для DIR-320 в которых подключение можно настроить проще (некоторые имеют встроенный usb-modeswitch и даже 3G-настройки в панели web-администрирования), но в силу ряда причин первое рабочее подключение у меня получилось именного с данной конфигурацией, которой я и решил поделиться.

Думаю, что руководство подойдет ко всей линейке маршрутизаторов ASUS WL-500gx / WL-550gE / WL-500gp / WL-500W / WL-320gE / WL-320gP / WL-330gE / WL-500gp V2 / WL-520gU за исключением способа прошивки.


Полезные ссылки

VN:F [1.9.4_1102]
Rating: 10.0/10 (2 votes cast)
Раздаём 3G-интернет от "Мегафона" через DIR-320., 10.0 out of 10 based on 2 ratings
  • Print
  • PDF
  • Google Bookmarks
  • Twitter
  • Digg
  • del.icio.us
  • Reddit
  • Facebook
  • Identi.ca
  • Slashdot
  • StumbleUpon
Categories: Сети Tags: , , ,
  1. Пока что нет комментариев.
  1. Пока что нет уведомлений.