Была поставлена задача организовать людям резервирование доступа в интернет с автоматическим переключением канала.
Покопав интернет, были найдены устройства с поддержкой 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 при необходимости меняется в веб морде.
У меня всё.
ссылка на оригинал статьи http://habrahabr.ru/post/170169/
Добавить комментарий