Пользователь
0,1
рейтинг
21 февраля 2013 в 04:02

Администрирование → Домашний/проводной интернет с резервным каналом по 3g из песочницы

Решил написать, так как в основном есть статьи по резервированию основного 3g канала на другой, а 3g как резервный при проводном интернете — почему то сложно найти.

Была поставлена задача организовать людям резервирование доступа в интернет с автоматическим переключением канала.

Покопав интернет, были найдены устройства с поддержкой 3g «свистков». Выбор был из Zyxel Keenetic, drytek и TP-Link (но всю жизнь работали с Asus и D-Link по объективным причинам и собственным статистическим данным). По опыту решения «всяких» задач, выбор пал на TP-Link. Выбрать было просто, Open WRT дружит со всеми TP-Link'ами (запасной вариант). Так же требования по 3g связи. Предоставили мне Huawei E367 от мегафона.

Коробка попала ко мне в руки. (описывать ее не буду, описаний много, сразу к делу). Приятные плюшки от TP-Link'а радовали всегда. В «поле» он у нас ни когда не тестился. Работа всегда велась с более стабильными роутерами. Но Open WRT в данном вопросе — перевесил все сомнения. И как оказалось — не зря, но об этом позже.

Базовая прошивка, базовая настройка, Wan preffered, запуск, тест. Эмуляция «сетевой кабель не подключен» работает на ура. В обе стороны как надо переключается канал. Но мы то знаем, что «падения» бывают не только на «крыше», но и дальше. Кто то что то копал, задел кабель, порвал. Свитч жив, линк по кабелю жив, роутер «думат» что всё ок. Нас это не устраивает.

Задача:
1) TP-LINK TL-MR3420 V2
2) 3g интернет Мегафон Huawei E367
3) Провайдер с настройками по Static IP и проводом с RJ-45

Сразу оговорюсь, что статья не для новичков, вы должны осознавать всё то, что вы делае

Обшарив прошивку — нужного нам не нашли. Да и прошивка отключает 3g если он не используется, так что переход на 3g занимает довольно много времени, пока включится, пока идентифицирует «свисток», пока подключится, проходит где то минута, полторы в лучшем случае.

Значит Open WRT. TP-Link обновил железо, официальной прошивки нет, но где то с 13 января 2013 года много положительных отзывов об использовании этого роутера на прошивках OpenWRT. Качаем, пробуем, завелась. (как шить Open WRT можно найти в интернете).

Далее настройка по шагам

Этап 1. Веб морда.
Заходим 192.168.1.1
root



Шаг 1.
Настройка провайдера — Static IP, всё интуитивно понятно, заработало сразу. IP, Маска, шлюз, 2 DNS. Advanced Settings — Use gateway metric ставим 20, не нужно спрашивать почему, не отвечу. Надо) Всё что угодно, отличное от 0.
Firewall Settings оставляем в wan

Шаг 2.
Настройка 3g.
UMTS/GPRS/EV-DO
/dev/ttyUSB0
UMTS/GPRS
APN: internet
username: megafon
password: megafon
Advanced Settings — Use gateway metric ставим 10.
Firewall Settings создаем зону wan_3g



Шаг 3.
Настройка lan
Делаем как нравится.

Все интерфейсы должны включаться при загрузке роутера (Bring up on boot)

Шаг 4.
Network – Firewall
Редактируем lan, Inter-Zone Forwarding добавляем и wan, и wan_3g.
Это избавит нас от головной боли с фаерволом (я не дружу с iptables)
для зоны wan_3g копируем галочки с зоны wan.



Шаг 5.
System — Scheduled Tasks
*/1 * * * * /etc/config/rezerv/t5t > /dev/null



Это наш скрипт проверки связи, запускается раз в минуту.
О файлах — ниже, сначала вебморда.

Шаг 6.
Имена хостов
Так как интернет домашний, или нам могут понадобиться другие наши хосты — добавляем то, что нам нужно.
Шаг важный. Для теста мы выбрали www.ru, будем его пинговать
Создаем хост alltimeallivehost.lan и берем IP с www.ru -194.87.0.50.
alltimeallivehost.lan — будет участвовать в проверке.



С мордой вроде бы всё.

Этап 2 SSH
берем putty, заходим 192.168.1.1
root@OpenWrt:~# cd /etc/config/
root@OpenWrt:/etc/config# mkdir rezerv
root@OpenWrt:/etc/config# cd ./rezerv


создаем файлики:
root@OpenWrt:/etc/config/rezerv# cat > имя_файла

Копируем текст
жмем Ctrl + Z
Файл создан.
Моя папка выглядит так:
root@OpenWrt:/etc/config/rezerv# ls -l
-rwxrwxrwx    1 root     root           190 Feb 19 20:49 3g_on
-rwxrwxrwx    1 root     root           186 Feb 19 21:14 t5t
-rwxrwxrwx    1 root     root          1136 Feb 20 13:44 test_sh
-rw-r--r--    1 root     root             0 Feb 20 13:44 wan
-rwxrwxrwx    1 root     root           100 Feb 20 12:13 wan_on

3g_on, wan_on, t5t, test_sh – исполняемые файлы
делаются так:
root@OpenWrt:/etc/config/rezerv# chmod 777 файл


Теперь алгоритм и файлы.
wan_on – включает wan интерфейс.
3g_on – включает 3g интерфейс.
test_sh – основной алгоритм работы
t5t – вызов test_sh 5 раз. (он же выше указывался в cron, System — Scheduled Tasks)

t5t:
/etc/config/rezerv/test_sh; sleep 8;
/etc/config/rezerv/test_sh; sleep 8;
/etc/config/rezerv/test_sh; sleep 8;
/etc/config/rezerv/test_sh; sleep 8;
/etc/config/rezerv/test_sh; sleep 8;

2 секунды на проверку, спим 8 секунд, итого 50 секунд. Всё прозрачно.

wan_on:
#wan
/sbin/ifconfig 3g-3g down
#ifconfig eth0 up
/sbin/route add default gw 10.112.28.253 metric 0

Файлик опускает один интерфейс и подымает второй, но! Нам eth0 нужен постоянно живым, что бы понять — поднялся основной канал или нет. По этому мы его не подымаем. (строка за комментирована). Дальше будет понятно почему.

3g_on:
#3g - vklu4aem 3g
/sbin/ifconfig eth0 down
/sbin/ifconfig 3g-3g up
/sbin/route add default gw 10.64.64.64 metric 0
/sbin/ifconfig eth0 up
/sbin/route add default gw 10.112.28.253 metric 20

Отключаем eth0, при отключении все маршруты интерфейса обнуляются, поднимаем 3g, прописываем маршрут для 3g, подымает eth0. Тут eth0 прописывает маршрут default с метрикой 20 (смотрите Этап 1, вебморда), и у нас 2 маршрута default с разными метриками.
Ну и дописываем маршрут, так как он все равно куда то терялся.

wan – файл флаг, говорит о том, что у нас проводной интернет в данный момент.

Последний файл — основной скрипт:
test_sh
root@OpenWrt:/etc/config/rezerv# cat test_sh
#!/bin/sh

#blok1
DIR=/etc/config/rezerv/
#DIR=/home/calc/rezerv/
ROUTE=/sbin/route
GREP=/bin/grep
RM=/bin/rm
TOUCH=/bin/touch

#blok2
#tested address www.ru
#WWW_RU=194.87.0.50
WWW_RU=alltimeallivehost.lan

#blok3
#flags
F3G=3g
FWAN=wan
FCUR=$FWAN

#blok4
#on
ON_3G=3g_on
ON_WAN=wan_on
ON_DEF=$ON_WAN

#blok5
#def routines
R_WAN=10.112.28.253
R_3G=10.64.64.64
R_CUR=$R_WAN

#blok6
#proverka flagov
if [ ! -f $DIR$F3G ]; then
  if [ ! -f $DIR$FWAN ]; then
    echo "no one file exist, use default iface"
    echo $DIR$ON_DEF
  else
    R_CUR=$R_WAN
    FCUR=$FWAN
  fi
else
  R_CUR=$R_3G
  FCUR=$F3G
fi

#blok7
#proverka tekushego marshruta
if [ "$ROUTE | $GREP default | $GREP $R_CUR | wc -l" != "0" ]; then
  echo "$FCUR route exist"
else
  echo "add $FCUR route"
  $ROUTE add default gw $R_CUR metric 0
fi

#blok8
#toggle if not work
##PING www.ru
if ping -w3 -c2 -I eth0  $WWW_RU > /dev/null 2>&1; then
  echo "MAIN working";
  if [ -f $DIR$F3G ]; then
    echo "3g used, wan_on"
    $DIR$ON_WAN
    $RM $DIR$F3G
    $TOUCH $DIR$FWAN
  fi
else
  echo "MAIN not working";
  #if [ -f $DIR$FWAN ]; then
    echo "wan used, 3g_on"
    $DIR$ON_3G
    $RM $DIR$FWAN
    $TOUCH $DIR$F3G
  #fi
fi


Блок 1
По опыту работы с разными Linux переменные окружения куда то пропадают, ну бывает, по этому всё в жесткую.

Блок 2
alltimeallivehost.lan — прописывали в морде в хосты.

Блок 3
Файлы — флаги.
Если файл есть, значит этот интерфейс используется.

Блок 4
Скрипты включения интерфейсов

Блок 5
Маршруты, с ними почему то возникали проблемы, по этому раз в 10 секунд будем проверять наличие этих маршрутов и добавлять их при необходимости.

Блок 6
Проверяет вообще наличие флагов, если их нет, то включаем интерфейс по умолчанию (wan, проводной). Так же смотрим какой интерфейс в данный момент используется.

Блок 7
Проверяем наличие маршрута default для используемого подключения, если нет ни одного, то добавляем маршрут.

Блок 8
Основная проверка работоспособности интерфейса.
Если пинтуется наш хост через eth0, то проверяем какой интерфейс включен, если 3g, включаем wan, если wan, ни чего не делаем.
Если не пингуется, и используется интерфейс wan, то включаем интерфейс 3g.

Основная логика готова.

Теперь забиваем последние гвозди.

root@OpenWrt:/etc/config/rezerv# cat /etc/rc.local
# Put your custom commands here that should be executed once
# the system init finished. By default this file does nothing.

echo $((10*1024*1024)) > /sys/block/zram0/disksize
mkswap /dev/zram0
swapon /dev/zram0

#udalaem flagi
rm /etc/config/rezerv/wan
rm /erc/config/rezerv/3g

exit 0

Т.е. При загрузке роутера удаляем наши флаги.

в /etc/dnsmasq.conf дописываем строку
dhcp-option=lan,6,10.112.1.1,10.112.2.1,8.8.8.8

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

Надо не забыть включить сервис dnsmasq и cron, можно сделать через Веб морду.

Результат работы:
C:\Users\calc>ipconfig /all
Ethernet adapter Подключение по локальной сети:

   DNS-суффикс подключения . . . . . : lan
   Описание. . . . . . . . . . . . . : Atheros AR8161/8165 PCI-E Gigabit Etherne
t Controller (NDIS 6.20)
   Физический адрес. . . . . . . . . : 10-BF-48-22-58-64
   DHCP включен. . . . . . . . . . . : Да
   Автонастройка включена. . . . . . : Да
   Локальный IPv6-адрес канала . . . : fe80::d1de:d8aa:f5c4:667b%13(Основной)
   IPv4-адрес. . . . . . . . . . . . : 192.168.1.112(Основной)
   Маска подсети . . . . . . . . . . : 255.255.255.0
   Аренда получена. . . . . . . . . . : 20 февраля 2013 г. 12:11:43
   Срок аренды истекает. . . . . . . . . . : 21 февраля 2013 г. 0:36:25
   Основной шлюз. . . . . . . . . : 192.168.1.1
   DHCP-сервер. . . . . . . . . . . : 192.168.1.1
   IAID DHCPv6 . . . . . . . . . . . : 353419080
   DUID клиента DHCPv6 . . . . . . . : 00-01-00-01-17-6E-9B-C2-10-BF-48-22-58-64

   DNS-серверы. . . . . . . . . . . : 10.112.1.1
                                       10.112.2.1
                                       8.8.8.8
   NetBios через TCP/IP. . . . . . . . : Включен


Схема: Интернет — зона провайдера — свитч — роутер — ноутбук
Рвем связь перед свитчем:
C:\Users\calc>ping www.ru -t

Обмен пакетами с www.ru [194.87.0.50] с 32 байтами данных:
Ответ от 194.87.0.50: число байт=32 время=2мс TTL=57
Ответ от 194.87.0.50: число байт=32 время=2мс TTL=57
Ответ от 194.87.0.50: число байт=32 время=2мс TTL=57
#рвем савязь
Превышен интервал ожидания для запроса.
Превышен интервал ожидания для запроса.
Превышен интервал ожидания для запроса.
Превышен интервал ожидания для запроса.
Превышен интервал ожидания для запроса.
Превышен интервал ожидания для запроса.
Превышен интервал ожидания для запроса.
Ответ от 194.87.0.50: число байт=32 время=1946мс TTL=47
Ответ от 194.87.0.50: число байт=32 время=78мс TTL=47
Ответ от 194.87.0.50: число байт=32 время=56мс TTL=47
Ответ от 194.87.0.50: число байт=32 время=55мс TTL=47
Ответ от 194.87.0.50: число байт=32 время=64мс TTL=47
Ответ от 194.87.0.50: число байт=32 время=53мс TTL=47
Ответ от 194.87.0.50: число байт=32 время=52мс TTL=47
Ответ от 194.87.0.50: число байт=32 время=61мс TTL=47
Ответ от 194.87.0.50: число байт=32 время=60мс TTL=47
Ответ от 194.87.0.50: число байт=32 время=59мс TTL=47
Ответ от 194.87.0.50: число байт=32 время=57мс TTL=47
Ответ от 194.87.0.50: число байт=32 время=57мс TTL=47
Ответ от 194.87.0.50: число байт=32 время=55мс TTL=47
Ответ от 194.87.0.50: число байт=32 время=54мс TTL=47
#где то тут мы вставили кабель обратно
Ответ от 194.87.0.50: число байт=32 время=62мс TTL=47
Ответ от 194.87.0.50: число байт=32 время=61мс TTL=47
Ответ от 194.87.0.50: число байт=32 время=60мс TTL=47
Ответ от 194.87.0.50: число байт=32 время=59мс TTL=47
Ответ от 194.87.0.50: число байт=32 время=58мс TTL=47
#вернулись на wan
Ответ от 194.87.0.50: число байт=32 время=2мс TTL=57
Ответ от 194.87.0.50: число байт=32 время=2мс TTL=57
Ответ от 194.87.0.50: число байт=32 время=2мс TTL=57

Статистика Ping для 194.87.0.50:
    Пакетов: отправлено = 32, получено = 25, потеряно = 7
    (21% потерь)
Приблизительное время приема-передачи в мс:
    Минимальное = 2мсек, Максимальное = 1946 мсек, Среднее = 120 мсек
Control-C
^C
C:\Users\calc>


Устройство стоит 1200 руб.
Хост проверки alltimeallivehost.lan при необходимости меняется в веб морде.
У меня всё.

UPDATED 17.06.2014 Перезалил картинки
@Calc
карма
17,0
рейтинг 0,1
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Администрирование

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

  • +3
    Не привычно OpenWRT выглядит у Вас на скриншотах. Это так интерфейс OpenWRT в trunk преобразился или это скин какой-то?
    • 0
      видимо, переписали под bootstrap.
    • 0
      Судя по всему, это пакет luci-theme-bootstrap, ставится из репозитария.
    • 0
      Вообще он из коробки такой вылез.
      Пол года назад Люси была другая, да и железка была у меня другая.
  • +3
    cat > file
    

    Копируем текст
    жмем Ctrl + Z

    Ctrl + D!

    ^D — конец файла, ^Z — приостановка процесса
    • 0
      Не знал)
  • +2
    А если торрент какой-нибудь на скачивание/раздачу стоял, и переключилось на 3G? Так и по миру пойти можно будет!
    • 0
      Можно по подробнее? Уже несколько лет не использую P2P всвязи с полным бесплатным доступом к 100-1000Мбитам интернета.
      • 0
        Ку да уж подробнее? Вы предлагаете создать резервный канал через 3G, что в свою очередь требует оплаты. Ведь в России-матушке реально безлимитного 3G нет. А торрент на скачивании/раздаче высосет весь трафик за несколько часов. Еще хуже, если 3G от мегафона по 1 рублю за мегабайт.
        • +1
          Ну мне какой то безлимит принесли. За интернет я так же не плачу уже несколько лет)
          Ну заблокируйте UDP через 3g канал, оставьте только то что нужно (например 5060).
          Железка уехала на промзону, где будет стоять в черном ящике с антенной.
          Вот вы играете в покер, онлайн игру, проводите банковские операции перед закрытием банковского дня. У вас есть железка, которая без вашей помощи за 2 минуты дает вам резерв.
          Так же по описанной выше технологии 3g легко заменяется на второй проводной провайдер.
          Идея в том, что конечный пользователь не будет знать о том, где он, резерв или нет. Вон, в бухгалтерию поставьте такую штуку, вас расцелуют ;)
  • 0
    У меня TL-MR3420 V1
    OpenWRT с ним работает просто отлично. 3G у меня основной канал (безлимит), резервный — соседский wifi :) Правда подключаюсь вручную и очень редко, когда забуду заплатить, дабы попасть в онлайн-банк и поправить ситуацию.

    После приобретения экспериментировал с разными прошивками, вплоть до того, что превратил его в кирпич. Не беда, гугл, паяльник, переходник usb-uart, консоль, всё готово. В итоге остановился на OpenWRT, более гибкого и удачного варианта вряд ли найти.
    • 0
      Я так понял что эти железки переключают канал по эвентам.
      Для 3g — потеря связи, для PPTP тоже будет эвент при разрыве, PPPoE тоже должен быть при разрыве, даже когда WiFi потеряет сеть, будет эвент.
      Когда просто Static IP и есть линк — эвенту на смену канала взяться просто не откуда.
      • 0
        Само собой.
  • 0
    Надо было брать Keenetic — там из коробки можно настроить переброс интерфейса на 3G, причем делается все в 2 клика.
    • 0
      Ну когда у вас локальные подсети 10.0.0.0/8 и другие, wan порт жив, то роутер как то не задумывается о смене канала, для него всё что за wan находится — уже интернет. Виден шлюз, есть линк — значит интернет работает. Идея в том, что у провайдера может упасть транспорт, но вся внутренняя инфраструктура работает.
  • 0
    3) Провайдер с настройками по Static IP и проводом с RJ-45

    Между прочим неверно — правильно 8P8C
    • 0
      Угу, но мир уже не изменить ;)
      • +1
        Зато можно троллить продавцов в магазине :)
  • 0
    Пингать лучше несколько хостов:
    (ping -c4 -W1 $host1 || ping -c4 -W1 $host2 || ping -c4 -W1 $host3) || echo «wan down»
    Ну и ключики по вкусу.
    • 0
      Угу, но это уже этап отладки.
      больше скажу, можно через веб морду создать хосты gwwan.lan, gw3g.lan и так же записать в скрипты.
      route add default gw gwwan.lan metric 0 — работает на ура.
      Следовательно мы получаем оправление через веб морду, криво, но работает.
  • 0
    Хм… А чем не устроил замечательный пакет mwan3?
    Умеет все то же самое, плюс балансировщик нагрузки, никаких шаманств с кроном и скриптами, плюс еще luci интерфейс в наличии. По собственному опыту — работает стабильно третий месяц в режиме основой проводной провайдер + 3g backup.
    • 0
      Сколько весит? Стоит по умолчанию? Как он определит что упала именно ru зона? или как он определит, что упала зарубежка?
      • 0
        5 Кб основной пакет + 5 Кб веб-морда
        По-умолчанию, естественно, отсутствует, ставится стандартно, через opkg.
        Определят самым простым способом — ping на указанные хосты (можно указать любое количество). Интервал проверки, количество пингов — все настраивается.
        Работает через ядро и стандартную таблицу маршрутов, что дает огромный плюс — всякие тунели, VPN и т.п. на роутере работает как положено, вне зависимости от активного маршрута.
        • 0
          Не поленился, достал свой TL-MR3020 с флешкой в 8 Гигов.
          8 и 12 Кбайт.
          Ну будет в руках такая же железка — протестим.
          Там какие то совсем проблемы с местом. Возможно Кбайт 50 остается после установки OpenWRT.
          Спасибо за подсказку.
    • 0
      А у вас он работает на TR-3420 v2? На мой роутер ставится не особо хочет.

      root@OpenWrt:/tmp# opkg install mwan3_1.2-17_all.ipk
      Installing mwan3 (1.2-17) to root…
      Collected errors:
      * satisfy_dependencies_for: Cannot satisfy the following dependencies for mwan3:
      * ip * iptables-mod-conntrack-extra * iptables-mod-ipopt *
      * opkg_install_cmd: Cannot install package mwan3.

      root@OpenWrt:/tmp# uname -a
      Linux OpenWrt 3.3.8 #6 Thu Jan 10 11:39:41 WIT 2013 mips GNU/Linux
      • +1
        opkg при ручной установке автоматически не ставит зависимости, поэтому их надо поставить вручную:
        opkg update
        opkg install ip iptables-mod-conntrack-extra iptables-mod-ipopt
        opkg install mwan3_1.2-17_all.ipk
        
        • 0
          Спасибо за совет, но вчера после opkg update и попытки установить первый же пакет закончилось место на роутере, причем настолько капитально, что удаление любого пакета через opkg проваливается, ровно как и создание любого файла/каталога на файловой системе. Сбросил в настройки по умолчанию и отложил до воскресенья, когда будет время заняться им.
  • 0
    НЛО прилетело и опубликовало здесь эту надпись
  • 0
    Ребят такой вопрос, у меня вылетает wifi через какое то время работы роутера. всё настроено всё хорошо, по локалке есть интернет, а wifi сначало пропадает интернет при активном подключении а при попытке переподключения он не выдает ip, идет постоянная идентификация, решается перезагрузкой роутера или же перезагрузкой /etc/init.d/network

    что делать, подскажите

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.