Русская версия English version  
Статьи
Настройка доступа в Интернет на ASUS WL-600G с прошивкой OpenWRT через модем ZTE MF627 (MF626).

Автор: Григорьев Михаил
Редакция от 15.04.2010
Дополнена 18.06.2010
Статья так же доступна на сайте OpenNet

Исходные данные:
1. Роутер ASUS WL-600G
2. USB модем ZTE MF627 (MF626).

На WL-600G установлена последняя версия прошивки OpenWRT под кодовым именем Backfire.
Прошивку можно скачать здесь

Модем ZTE MF627 (MF626) разлочен и на него установлена прошивка от Globe Telecom.
Инструкция по перепрошивке модема здесь

IP адрес роутера: 192.168.1.1
IP адрес моего компьютера: 192.168.1.10
Компьютер подключен к первому Ethernet порту роутера.

Задача:

Настроить доступ в Интернет c роутера через модем ZTE MF627 (MF626).
В качестве провайдера используется МТС с безлимитный тарифом МТС Коннект-2.

Дополнительная задача:

Обеспечить возможность выхода в Интернет с компьютеров подключенных к роутеру через порты Ethernet и Wi-Fi.

Решение:

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

Следует отметить, что в модеме MF627 (MF626) применяете технология ZeroCD, поэтому при подключении модема вначале он представляется как съёмный диск, на котором находятся драйвера для Windows.
Для того, чтобы начать работу непосредственно с модемом, нужно "извлечь диск", то есть переключить устройство в режим модема.

Т.к. у нас используется Linux, то есть 2 способа переключения устройства в режим модема.

1. Вариант с отключением ZeroCD.
2. И вариант без отключения ZeroCD.

У каждого варианта есть свои плюсы и минусы. Если Вы не хотите ждать, пока модем переподключится, и не хотите ковыряться в Linux ядре, то можно поковыряться в модеме.
Я предпочел первый вариант как наиболее быстрый.

Для отключения ZeroCD в Windows нам потребуется программа QPST от Qualcomm. Сама Qualcomm не распространяет открыто эту программу, но, поискав в Интернете её можно найти.
Далее следует установить её, запустить "QPST Configuration", выбрать нужный COM-порт, подключиться к модему, и открыть программу EFSExplorer, которая позволяет работать с файловой системой устройства. В корне файловой системе устройства нужно найти файл CD_STARTUP_FLAG размером в один байт. Сохраните этот файл на компьютере, а так же запишите какие права были у него выставлены. После этого данный файл нужно удалить. В результате устройство будет подключаться сразу в режиме модема.

В варианте без отключения ZeroCD необходимо пересобрать Linux ядро в нашей прошивке OpenWRT, а так же скомпилировать программу usb_modeswitch для переключения MF627 (MF626) в режим модема.

После того как MF627 (MF626) стал сразу же переключатся в режим модема можно приступить к настройке OpenWRT.

1. Необходимо включить поддержку USB и USB-Serial в OpenWRT, т.к. в базовой прошивке она отключена.

Т.к. наш модем еще не может выходить в интернет, а для установки необходимых пакетов он нам нужен, то возможны 2 варианта:
1. Можно запустить у себя в сети web-сервер и скачать туда определеннй набор файлов и произвести обновление с него.
2. Настроить временный выход в интернет для нашего роутера через локальную сеть.

Я выбрал первый вариант, для этого я скачал с сайта следующие файлы и разместил их в корне своего веб-сервера:

chat_2.4.4-5_brcm63xx.ipk
kmod-hid_2.6.32.10-1_brcm63xx.ipk
kmod-input-core_2.6.32.10-1_brcm63xx.ipk
kmod-input-evdev_2.6.32.10-1_brcm63xx.ipk
kmod-nls-base_2.6.32.10-1_brcm63xx.ipk
kmod-scsi-core_2.6.32.10-1_brcm63xx.ipk
kmod-usb-core_2.6.32.10-1_brcm63xx.ipk
kmod-usb-hid_2.6.32.10-1_brcm63xx.ipk
kmod-usb-serial-option_2.6.32.10-1_brcm63xx.ipk
kmod-usb-serial_2.6.32.10-1_brcm63xx.ipk
kmod-usb-storage_2.6.32.10-1_brcm63xx.ipk
kmod-usb-uhci_2.6.32.10-1_brcm63xx.ipk
kmod-usb2_2.6.32.10-1_brcm63xx.ipk
Packages
Packages.gz

Потом необходимо на нашем роутере в файле /etc/opkg.conf исправить адрес сервера обновления.

Вариант моего файла opkg.conf:

src/gz snapshots http://192.168.1.10
dest root /
dest ram /tmp
lists_dir ext /var/opkg-lists
option overlay_root /overlay

Теперь можно приступить к установке необходимых пакетов на наш роутер, для этого в консоли последовательно выполняем команды:

# opkg update

# opkg install kmod-scsi-core

# opkg install kmod-nls-base
# opkg install kmod-usb-core
# opkg install kmod-usb-storage
# opkg install kmod-usb2
# opkg install kmod-usb-serial
# opkg install kmod-usb-serial-option

# opkg install kmod-input-core
# opkg install kmod-input-evdev
# opkg install kmod-hid
# opkg install kmod-usb-hid

# opkg install chat

Почему именно такая последовательность? В принципе можно было начать установку с самого последнего пакета, а он бы по своим зависимостям притянул все остальное. Иногда такое срабатывает, но на моей практике это было раза два, во всех остальных случаях USB модем просто не определялся и более того, всё что связано с USB просто не работало. Поэтому я ставил пакеты по порядку.

После успешной установки всех пакетом перезагружаем роутер и подключаем наш USB модем.
Если на предыдущих шагах все прошло гладко, то при подключении USB модема роутер выдаст нам следующее:

usb 1-2: new high speed USB device using ehci_hcd and address 5
usb 1-2: configuration #1 chosen from 1 choice
option 1-2:1.0: GSM modem (1-port) converter detected
usb 1-2: GSM modem (1-port) converter now attached to ttyUSB0
option 1-2:1.1: GSM modem (1-port) converter detected
usb 1-2: GSM modem (1-port) converter now attached to ttyUSB1
scsi3 : SCSI emulation for USB Mass Storage devices
option 1-2:1.3: GSM modem (1-port) converter detected
usb 1-2: GSM modem (1-port) converter now attached to ttyUSB2
scsi 3:0:0:0: Direct-Access ZTE MMC Storage 2.31 PQ: 0 ANSI: 2
sd 3:0:0:0: [sda] Attached SCSI removable disk

Это значит, что модем найден, а также найдено устройство чтения microSD карт памяти.

По команде:

# ls /dev/ |grep ttyU
ttyUSB0
ttyUSB1
ttyUSB2

Будет выведен список интерфейсов модема.

Аппаратный интерфейс устройства можно посмотреть по команде:

# cat /proc/bus/usb/devices

T: Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=480 MxCh= 4
B: Alloc= 1/800 us ( 0%), #Int= 1, #Iso= 0
D: Ver= 2.00 Cls=09(hub ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=1d6b ProdID=0002 Rev= 2.06
S: Manufacturer=Linux 2.6.32.10 ehci_hcd
S: Product=EHCI Host Controller
S: SerialNumber=0000:00:07.2
C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr= 0mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub
E: Ad=81(I) Atr=03(Int.) MxPS= 4 Ivl=256ms

T: Bus=01 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#= 5 Spd=480 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=19d2 ProdID=0031 Rev= 0.00
S: Manufacturer=ZTE, Incorporated
S: Product=ZTE CDMA Technologies MSM
S: SerialNumber=1234567890ABCDEF
C:* #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr=500mA
I:* If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option
E: Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms
I:* If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option
E: Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms
I:* If#= 2 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage
E: Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
I:* If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=option
E: Ad=84(I) Atr=03(Int.) MxPS= 64 Ivl=2ms
E: Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms

Как можно увидеть, каждый интерфейс предназначен для определённой цели.
Так, третий интерфейс является стандартным преобразователем USB-Serial, к нему подключён драйвер usb-serial-option, и через этот интерфейс осуществляется основной обмен данными.
Второй интерфейс предоставляет доступ к карте microSD, и к данному интерфейсу подключён драйвер usb-storage.
Первый интерфейс предназначен для отправки специфических команд, речь о которых пойдёт ниже.
Нулевой интерфейс предназначен для настройки устройства, именно через него работает программа QPST.

Далее необходимо настроить службу PPP для установки соединения.

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

Конкретно для OpenWRT я не нашел готового решения, поэтому разработал свое, довольно просто и работоспособное.

Итак, на роутере выполняем следующее:

Переходим в каталог /etc/ppp/

# cd /etc/ppp/

Открываем для редактирования файл chap-secrets и записываем в него строчку:

mts * mts *

Создаем файл mts-chat и записываем в него следующие строки:

ABORT BUSY
ABORT ERROR
ABORT 'NO ANSWER'
ABORT 'NO CARRIER'
ABORT 'NO DIALTONE'
ABORT 'Invalid Login'
ABORT 'Login incorrect'
TIMEOUT 5
'' ATZ
OK 'AT+CGDCONT=1,"IP","internet.mts.ru"'
TIMEOUT 10
OK 'ATDT*99#'
CONNECT ''

Создаем каталог peers

# mkdir peers
В каталоге peers создаем файл mts-serial и записываем в него следующие строки:

ipcp-accept-local
ipcp-accept-remote
noipdefault
defaultroute
usepeerdns
user mts
noauth
novj
nobsdcomp
crtscts
modem
lock
mtu 1500
mru 1500
persist
logfile /dev/null

Кому интересно, почитать значение параметров можно здесь

Следует отдельно упомянуть про параметр persist, благодаря которому в случае обрыва связи или даже если модем будет отключен, pppd не завершится автоматом.
Проверено на практике, если модем выдернуть из разъема USB, а потом снова подключить, соединение устанавливается.
Если понадобится вывод отладочной информации в файл, то в mts-serial меняем

logfile /dev/null
на
logfile /var/log/mts-gprs.log

При этом не забываем создать mts-gprs.log командой

# touch /var/log/mts-gprs.log

Примечание: Можно не создавать каталог peers и файл mts-serial, а записать эти строчки в файл /etc/ppp/options, но это лишит нас некоторой универсальности. Ведь в каталоге peers можно создать несколько файлов под разных операторов и несколько файлов XXX-chat и указывать их в параметрах запуска pppd.

На этом настройка завершена, можно запустить pppd командой:

# pppd connect 'chat -f /etc/ppp/mts-chat' call mts-serial /dev/ttyUSB2 115200

Думаю здесь все аргументы pppd понятны и в разъяснениях не нуждаются.

Проверяем с помощью команды ifconfig поднялся ли интерфейс ppp0:

ppp0 Link encap:Point-to-Point Protocol
    inet addr:172.29.69.168 P-t-P:10.64.64.64 Mask:255.255.255.255
    UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
    RX packets:6 errors:2 dropped:0 overruns:0 frame:0
    TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:3
    RX bytes:108 (108.0 B) TX bytes:102 (102.0 B)

Проверяем ping:

root@OpenWrt:/etc/ppp# ping www.ru
PING www.ru (194.87.0.50): 56 data bytes
64 bytes from 194.87.0.50: seq=0 ttl=55 time=2162.011 ms
64 bytes from 194.87.0.50: seq=1 ttl=55 time=1161.568 ms
64 bytes from 194.87.0.50: seq=2 ttl=55 time=180.317 ms
64 bytes from 194.87.0.50: seq=3 ttl=55 time=199.691 ms
64 bytes from 194.87.0.50: seq=4 ttl=55 time=199.090 ms
^C
--- www.ru ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 180.317/780.535/2162.011 ms

Все работает! :)

Для автоматизации запуска pppd создаем файл /etc/init.d/pppd:

#!/bin/sh /etc/rc.common

START=99
start() {
    /usr/sbin/pppd connect 'chat -f /etc/ppp/mts-chat' call mts-serial /dev/ttyUSB2 115200
}
stop() {
    killall pppd
}

Устанавливаем права:

# chmod 755 /etc/init.d/pppd

Создаем симлинк для автостарта:

# ln -s /etc/init.d/pppd /etc/rc.d/S99pppd

Перезагружаемся, pppd должен запуститься автоматически.

Для визуальной сигнализации включения-отключение интерфейса напишем пару простых скриптов для управления светодиодом на передней панели роутера:

1. Создадим файл /etc/ppp/ip-up.d/led-on.sh который будет выполнятся при включении интерфейса ppp0:

#!/bin/sh

/usr/bin/gpioctl clear 3

2. Создадим файл /etc/ppp/ip-down.d/led-off.sh который будет выполнятся при отключении интерфейса ppp0:

#!/bin/sh

/usr/bin/gpioctl set 3

3. Установим права на наши файлы:

# chmod 755 /etc/ppp/ip-up.d/led-on.sh
# chmod 755 /etc/ppp/ip-down.d/led-off.sh

Теперь при включении и отключении интерфейса ppp0 на передней панели будет загораться и гаснуть светодиод с обозначением IP.

Теперь приступим к настройке раздачи Интернета через Ethernet-порты и Wi-Fi.

1. Настроим раздачу Интернета через Ethernet-порты.

Здесь все довольно просто, нужно лишь настроить NAT.

Для этого открываем файл /etc/firewall.user и добавляем туда несколько строк:

#/bin/sh

# Clear all rule
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
iptables -t nat -F
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P POSTROUTING ACCEPT
iptables -t mangle -P INPUT ACCEPT
iptables -t mangle -P OUTPUT ACCEPT
iptables -t mangle -P FORWARD ACCEPT
iptables -t mangle -F

# NAT
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp0 -j MASQUERADE
iptables -A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

Вначале мы очищаем все правила iptables, потом добавляем самое простое правило для NAT.

Запускаем скрипт:

# sh /etc/firewall.user

Проверяем выход в Интернет с компьютера. Все работает, сайты открываются, icq подключилась. :)

2. Настраиваем Wi-Fi карту в нашем роутере.

По-умолчанию Wi-Fi в OpenWRT отключен. Нам его необходимо включить и настроить.

Для этого открываем файл /etc/config/wireless и приводим его к виду:

config wifi-device radio0
    option type mac80211
    option channel 5
    option macaddr 00:22:15:a3:42:e9
    option hwmode 11g
    option disabled 0

config wifi-iface
    option device radio0
    option network lan
    option mode ap
    option ssid MYROUTER
    option encryption psk-mixed/tkip+aes
    option key PASSWORD

Значения параметров macaddr, ssid и key у вас будут другие.

На этом настройка Wi-Fi завершена, можно рестартануть роутер и проверить Wi-Fi.

Я проверял подключение к роутеру с помощью игровой приставки Sony PSP, никаких проблем выявлено не было, подключение в точке доступа прошло успешно, тест на доступ в Интернет так же прошел успешно.

В данной статье я не затронул настройки сервиса DHCP, т.к. в прошивке OpenWRT он уже настроен и для подсети 192.168.1.0/24 ничего дополнительно не нужно. Но если Вам все-таки потребуется что-то настроить дополнительно, то вся конфигурация находится в файле /etc/config/dhcp

На этом все, если есть вопросы, пишите, буду рад ответить.

NVStat Team © 2001 - 2016 Григорьев Михаил