На кануне новогодних праздников понадобилось пораньше покинуть столицу, покинуть ее в направлении таких мест, в которых интернет бывает довольно редко. На период отсутствия на работе я обещал напарникам быть на связи. А так как мой род деятельности напрямую связан с web, то я решил поэкспериментировать с доступностью интернетов в планируемом месте пребывания.

Суть задачи сводился к следующему:

  1. Достичь комфортной скорости интернета.
  2. Раздавать интернет не только для себя, но и для супруги.

У нас было 2 модема, 750 мегабайт проплаченого интернета, 3 ноутбука, несколько телефонов и целое множество симок всех сортов и расцветок, точка доступа с OpenWRT, usb hub, флэшка и антенна. Не то чтобы это был необходимый запас для поездки, но если начал собирать железки, становится трудно остановиться. Единственное, что вызывало у меня опасение — это антенна. Ничто в мире не бывает более беспомощным, безответственным и слабым, чем сигнал от антенны, прошедший через 3-х метровый usb кабель. Я знал, что рано или поздно мы перейдем и на эту дрянь.

Вариантов решения у меня было несколько:

  1. Использовать имеющийся у меня модем Huawei 5776, прикупив к нему антенну.
  2. Набрать побольше железок и собрать что-то более мощное.

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

Из небходимого у меня было:

  1. TP-Link TL-WR1043ND с прошивкой OpenWRT 15.05
  2. Антенна Connect 2.0 (с 3-х метровым usb кабелем без ферритовых колец).
  3. 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/

Комментарии (11)


  1. frig
    05.01.2016 15:21

    Состоит она в том, что время от времени происходит регистрация на другой базовой станции, даже если она расположена в противоположной стороне относительно направления антенны.


    Антенну помощнее и с наименее выраженными засветами вокруг + аттенюатор. Может быть получится сделать так, что модем будет видеть вообще только одну базовую станцию.


  1. Oroszorszag
    05.01.2016 16:08
    +1

    У нас было 2 модема, 750 мегабайт проплаченого интернета...


    Мистер Томпсон, залогиньтесь!


  1. olartamonov
    05.01.2016 17:07
    +1

    «Антенна Connect 2.0» — это такой рефлектор, перед которым модем торчит?

    Выкиньте это барахло, поставьте нормальную антенну, станет ещё лучше. Если у вас сеть 3G диапазона 2100 МГц — направленная антенна для Wi-Fi подойдёт, если нет — нужна именно сотовая антенна под 900 МГц.

    У меня на даче JA-215MIMO + Huawei E3272 (он же Мегафон М100-4, отличается наличием родных антенных гнёзд) и 5-10 Мбит/с там, где сотовый чего-то как-то качал, если его на втором этаже в окно высунуть.

    P.S. olegart.ru/wordpress/2014/08/09/4352


    1. undying
      05.01.2016 19:24

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

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


  1. bougakov
    05.01.2016 18:02

    Я открыл, что мой модем поддерживает сканирование местности на предмет базовых станций, причем необязательно того оператора, чья сим карта внутри него установлена.
    Вообще-то так любое устройство GSM работает. Если вам приспичит вызвать пожарных или «Скорую» по номеру 112 (для чего, вообще говоря, и SIM-карта не требуется), то аппарат выберет ту БС, связь с которой лучше, проигнорировав, какой её оператор обслуживает.


    1. ganzmavag
      05.01.2016 20:22

      Любое так работает, но не любое информацию эту куда-то выводит. А в этих модемах такой формат удобный еще.
      И ведь лежал же у меня такой, я что-то прочитал про эту функцию и не додумался замеры сделать. Интересно же за городом, например, покрытие быстро сравнить.


      1. redmanmale
        06.01.2016 22:38

        Насколько я помню, вышку выбирает не устройство, а сама SIM-карта.
        Об этом упонималось на Хабре в статьях про «кулхацкерские» HackerSim симки.


  1. hostadmin
    05.01.2016 20:30

    На такую антенну легко ловлю 4-8 мегабит 3G от разных БС на расстоянии 6-15 км. и на неё же 15-25мбит 4G с БС на расстоянии 16км.


  1. mayorovp
    05.01.2016 22:41
    +2

    Ничто в мире не бывает более беспомощным, безответственным и слабым, чем сигнал от антенны, прошедший через 3-х метровый usb кабель.
    Но ведь сигнал от антенны не идет по usb-кабелю. По usb-кабелю идет цифровая информация от модема, и тут «слабым» сигнал уже быть не может. Он либо есть, либо его нет. Или я ошибаюсь?


    1. undying
      06.01.2016 00:38

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


      1. olartamonov
        07.01.2016 18:08

        Кабель нормального сечения решает проблему. Смотрите маркировку на самом шнурке: 28AWG+28AWG — хлам, 28+26 — более-менее, 28+24 — хороший (первое число — сечение сигнальных проводников, второе — силовых). Кроме того, в бельевых верёвках жилы могут быть не медными, а алюминиевыми с медным покрытием; могут и на экранировании поэкономить — но этого вы уже не узнаете.

        Из китайцев приличные кабели у Greenconnect (они более-менее стабильно есть в Юлмарте; с Greenconnect я несколько лет назад общался напрямую, это редкий случай китайского производителя с отделом качества и инженерами).

        И да, «преодолевать» ничего не надо. Надо, чтобы напряжение питания на модемном конце кабеля под нагрузкой оставалось в допустимых для модема пределах.