На кануне новогодних праздников понадобилось пораньше покинуть столицу, покинуть ее в направлении таких мест, в которых интернет бывает довольно редко. На период отсутствия на работе я обещал напарникам быть на связи. А так как мой род деятельности напрямую связан с web, то я решил поэкспериментировать с доступностью интернетов в планируемом месте пребывания.
Суть задачи сводился к следующему:
- Достичь комфортной скорости интернета.
- Раздавать интернет не только для себя, но и для супруги.
У нас было 2 модема, 750 мегабайт проплаченого интернета, 3 ноутбука, несколько телефонов и целое множество симок всех сортов и расцветок, точка доступа с OpenWRT, usb hub, флэшка и антенна. Не то чтобы это был необходимый запас для поездки, но если начал собирать железки, становится трудно остановиться. Единственное, что вызывало у меня опасение — это антенна. Ничто в мире не бывает более беспомощным, безответственным и слабым, чем сигнал от антенны, прошедший через 3-х метровый usb кабель. Я знал, что рано или поздно мы перейдем и на эту дрянь.
Вариантов решения у меня было несколько:
- Использовать имеющийся у меня модем Huawei 5776, прикупив к нему антенну.
- Набрать побольше железок и собрать что-то более мощное.
Так как про возможность подключения антенны в своем E5776 я вспомнил слишком поздно, то первого варианта выбора у меня на самом деле и не было.
Из небходимого у меня было:
- TP-Link TL-WR1043ND с прошивкой OpenWRT 15.05
- Антенна Connect 2.0 (с 3-х метровым usb кабелем без ферритовых колец).
- USB Hub
Для полной картины мне не хватало usb модема, выбор пал на Huawei 3372h.
Сборка конструктора
USB порт на TP-Link у меня был один, и он уже был занят накопителем под корневую файловую систему, плюс ко всему вызывал подозрение длиный провод у антенны. Меня терзали сомнения, что точка доступа сможет запитать модем через 3-х метровый провод, поэтому подключение через USB hub было единственным решением.
В качестве хаба использовал старый добрый D-Link Dub-104 (красивый компактный хаб с невероятно здоровенным блоком питания).
Промежуточный вариант:
Установка необходимого ПО на точку доступа
Так как направлялись мы в деревню, в которой все телефоны еле работали в режиме GPRS, все ПО я решил поставить еще будучи в большом городе, поэтому ставил по-максимуму, чтобы на месте ловить уже минимум приключений. Познания по настройке черпал из этой статьи: https://wiki.openwrt.org/doc/recipes/3gdongle.
ssh root@<точка доступа>
opkg update
opkg install comgt kmod-usb-serial kmod-usb-serial-option kmod-usb-serial-wwan usb-modeswitch usb-modeswitch-data
В целом, после этого можно пробовать вставить модем и смотреть, появились ли устройства типа /dev/ttyUSB*. В моем случае usb_modeswitch сделал всю работу и устройства появились. Если это не ваш случай, стоит подробно почитать статью на тему usb_modeswitch.
Настройка параметров соединения
Настроим параметры wan:
vim /etc/config/network
config interface 'wan'
option device /dev/ttyUSB0
option username 'gdata'
option password 'gdata'
option apn 'internet'
option service 'umts'
option maxwait '0'
option dialnumber '*99#'
option proto '3g'
В моем случае симка была от Мегафона, поэтому параметры подбирались специально под него.
Еще я добавил строчку в chatscript, чтобы видеть уровень сигнала от вышки при подключении:
vim /etc/chatscripts/3g.chat
ABORT BUSY
ABORT 'NO CARRIER'
ABORT ERROR
REPORT CONNECT
TIMEOUT 10
"" "AT+CSQ"
"" "AT&F"
OK "ATE1"
OK 'AT+CGDCONT=1,"IP","$USE_APN"'
SAY "Calling UMTS/GPRS"
TIMEOUT 30
OK "ATD$DIALNUMBER"
CONNECT ' '
Подключение
Теперь делаем ifup wan, смотрим logread ииии… Если вам повезло, то вы увидете нечто вроде такого:
Wed Dec 30 21:47:01 2015 local2.info chat[30352]: CONNECT
Wed Dec 30 21:47:01 2015 local2.info chat[30352]: -- got it
Wed Dec 30 21:47:01 2015 local2.info chat[30352]: send ( ^M)
Wed Dec 30 21:47:01 2015 daemon.info pppd[30347]: Serial connection established.
Wed Dec 30 21:47:01 2015 kern.info kernel: [98634.870000] 3g-wan: renamed from ppp0
Wed Dec 30 21:47:01 2015 daemon.info pppd[30347]: Using interface 3g-wan
Wed Dec 30 21:47:01 2015 daemon.notice pppd[30347]: Connect: 3g-wan <--> /dev/ttyUSB0
Wed Dec 30 21:47:02 2015 daemon.info pppd[30347]: CHAP authentication succeeded: Welcome!!
Если же нет и ваш оператор Мегафон, то идем дальше.
Пляски с бубном
У меня при выполнении модемом команды ATD происходила ошибка. Немного пошерстив форумы, обнаружил интересную особенность оператора Мегафон. На одном из форумов предлагалось вручную отключить на модеме все лишнее и оставить только функции самого модема и возможно sd карты. На другом — перепрошить модем с заводской (не брендированной) прошивкой (в моем случае прошивка тоже была от Мегафона).
Удивительным был тот факт, что при подключении к ноутбуку с ОС Windows, модем работал исправно. Стоило подключить к Linux — получал ошибку.
Сперва я решил проверить, действительно ли это связано с Мегафоном. Я взял из запасов симку с Tele2, чутка подправил конфигурацию подключения:
vim /etc/config/network
config interface 'wan'
option device /dev/ttyUSB0
option apn 'internet.tele2.ru'
option service 'umts'
option maxwait '0'
option dialnumber '*99#'
option proto '3g'
Ииии, все заработало. Сразу. Окей, пойдем сперва наиболее простым путем и поотключаем все лишнее на модеме:
ssh root@<точка доступа>
picocom -b 9600 -f n -p n -d 8 -r /dev/ttyUSB1
at^setport="ff;10,12,16,a2"
Выходим комбинацией:
CTRL+A+X
Теперь выключаем usb_modeswitch за ненадобностью:
/etc/init.d/usbmode stop
/etc/init.d/usbmode disable
Перевтыкаем модем, ждем пока загрузится и поднимаем wan интерфейс:
ifup wan
В моем случае теперь все заработало. Ура!
Оптимизация
Первичная настройка проводилась без подключения антенны, теперь было интересно посмотреть, будет ли от нее эффект.
Уровень сигнала без антенны:
gcom sig -d /dev/ttyUSB1
Signal Quality: 15,99
А теперь с антенной:
gcom sig -d /dev/ttyUSB1
Signal Quality: 21,99
Выглядело так круто, что я почуял подвох. И подвох действительно был. Для меня стало открытием, что хороший сигнал от базовой станции еще ничего не значит.
Ниже пинги для первого и второго варианта:
1.
root@OpenWrt:~# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: seq=0 ttl=44 time=986.652 ms
64 bytes from 8.8.8.8: seq=1 ttl=44 time=327.628 ms
64 bytes from 8.8.8.8: seq=2 ttl=44 time=246.212 ms
64 bytes from 8.8.8.8: seq=3 ttl=44 time=265.568 ms
64 bytes from 8.8.8.8: seq=4 ttl=44 time=285.271 ms
2.
64 bytes from 8.8.8.8: seq=233 ttl=45 time=1567.306 ms
64 bytes from 8.8.8.8: seq=234 ttl=45 time=1126.106 ms
64 bytes from 8.8.8.8: seq=235 ttl=45 time=569.993 ms
64 bytes from 8.8.8.8: seq=236 ttl=45 time=1403.010 ms
64 bytes from 8.8.8.8: seq=237 ttl=45 time=428.891 ms
И тут для меня открылся новый дивный мир мобильной связи.
Я открыл, что мой модем поддерживает сканирование местности на предмет базовых станций, причем необязательно того оператора, чья сим карта внутри него установлена.
Делалось это следующей командой:
AT^NETSCAN=20,-110,1
20 — сколько вышек выводить
-110 — минимальный уровень сигнала
0/1 — 0 — 2G вышки, 1 — 3G вышки. С LTE пока никак.
Список отсортирован по уровню сигнала и выглядит следующим образом:
^NETSCAN: 10638,,,1e7e,250,02,0,-78,8b77,400000
^NETSCAN: 10687,,,1e7e,250,02,0,-79,d5c8,400000
^NETSCAN: 10662,,,1e7e,250,02,0,-82,8ade,400000
^NETSCAN: 10587,,,4cf8,250,20,0,-105,d4fc,400000
^NETSCAN: 10563,,,4cf8,250,20,0,-106,d4f9,400000
1e7e — LAC станции
250 — MCC (Россия)
02 — MNC (В данном случае — МТС)
-78 — уровень сигнала данной базовой станции
8b77 — CID станции
400000 — диапазон, в котором принимается сигнал базовой станции (как в команде ^syscfgex)
Теперь, имея эти данные, можно зайти на сайт http://xinit.ru/bs/ и посмотреть, где эти вышки расположены относительно себя.
Как правило, если есть направленная антенна, то ее следует направлять на ближайшую базовую станцию, — я так думал. Тут меня ждало следующее открытие. Даже если мы направим на нее антенну, далеко не факт, что пройдет регистрация на этой базовой станции. А если и пройдет, то не факт, что скорость передачи данных будет выше, чем через вышку, находящуюся вдвое дальше нее. Так я прошелся по ближайшим станциям в радиусе от 1.5 километров до 3-х и все они при хорошем сигнале передавали данные с большой задержкой. Пинг в среднем был ~300ms.
Экспериментируя, я случайно попал на вышку, которая находилась на расстоянии 6-7 километров от меня. Подключившись к ней, время пинга упало до ~90ms, при том, что уровень сигнала упал вместе с ним.
Для сравнения, уровень сигнала от:
близлежащих вышек: 13-20
от удаленной вышки: 5-12
(измерения проводились утилитой gcom sig -d /dev/ttyUSB1, где в качестве значения может быть цифра от 0 до 99).
Тем не менее я провел скоростные тесты на самой лучшей ближней вышке и на удаленной, результаты:
одна из ближайших станций — 2/0.35 Мбит.
Удаленная станция — 4.28/1.68 Мбит.
Честно говоря, я и от двух мегабит обалдел, т.к. при использовании обычного телефона даже Google Play Market не открывался. А тут, оказывается, можно еще и до 4-х разогнаться!
Итог
Таких результатов для меня оказалось достаточно. Я оставил антенну смотреть в направлении самой удаленной вышки в надежде всегда держать с ней связь, но надежды мои оказались наивны. Возникла новая и пока нерешенная проблема. Состоит она в том, что время от времени происходит регистрация на другой базовой станции, даже если она расположена в противоположной стороне относительно направления антенны. В такие моменты задержки при передаче данных возрастают, и как это побороть — я пока не нашел.
В интернетах на вопрос типа: “можно ли модему указать, с какой вышкой работать” отвечают, что не вы выбираете вышку, а она вас. Быть может знающие люди подскажут, есть ли решения для таких ситуаций?
На этом все. Спасибо всем тем, кто прочел до конца.
P.S.
Тут под руку попалась симка Билайна, ее вышки ближе всего к нам и после подключения тест скорости показал аж 20/2 Мегабита. Привожу конфигурацию для Биллайна:
vim /etc/config/network
config interface 'wan'
option device /dev/ttyUSB0
option username 'beeline'
option password 'beeline'
option apn 'internet.beeline.ru'
option service 'umts'
option maxwait '0'
option dialnumber '*99#'
option proto '3g'
Используемые ресурсы
4pda.ru
wiki.openwrt.org
xinit.ru/bs/
Автор: undying