пятница, 8 декабря 2017 г.

Всё о (дешёвом) резервном канале: поднимай и властвуй!


В одном офисе живём мы с замечательной Yota'ой. Чем замечательна Йота? Да за время обладания насмотрелся таких глюков получил кучу опыта.

Канал, например, может упасть так, что пинги изнутри ходят. Низкая поганая скорость в рандомные моменты времени – это просто классика. Перезагрузка, бывает, помогает, а бывает, и нет. Автоматизировать весь этот зоопарк весёлых глюков оказалось задачей, прямо скажем, челленджевой.

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


Правда, остались те же файволл и админ. Некая вероятность, что
тадам
наш админ, наш админ –
рукозадый бабуин

присутствует, но не будем об этом, это несерьёзно :)

Итак, юный падаван, внимай, ежели ты приобщён к нищебродской Йоте, а на ней ещё и сервак висит, который должен быть доступен 24/7. Я причащу тебя тайных знаний про самый простой и дешёвый резервный канал, и как с ним не облажаться.

Проще и дешевле всего сделать резервный канал из USB 3G модема.
Так как канал это резевный, всё время он работать не должен, да и дорого будет. Как узнать, что пришла пора?

Тут есть несколько подводных камней. Например, ежели мы пингуем яндекс, и делаем это с клиентского компа внутри локальной сети, то, если инета нет, нам за яндекс ответит сервер локальной сети! То бишь проверять %errorlevel% после пинга бессмысленно.

Есть несколько вариантов решения:

ping ya.ru -n 2 -w 500 | findstr /i /r /c:"[0-9] *мс"

Ищем миллисекунды, которых в случае ответа локального сервера не будет. Не забудь, что это команду в батнике надо сохранять в кодировке OEM866.

Если наш сервер работает mail-сервером, то можно использовать спам во благо, и проверять, есть ли входящие подключения:

netstat -n | findstr "ESTABLISHED" | findstr /C:"192.168.100.100:443" /C:"192.168.100.100:25" /C:"192.168.100.100:465" /C:"192.168.100.100:143" /C:"192.168.100.100:993" /C:"192.168.100.100:80" /C:"192.168.100.100:3389" | findstr /R /V /C:"^  TCP    192.168.100.* 192.168.100.*"

(всё стандартными средствами Windows, обрати внимание).
Есть нюанс: таймаут TCP-соединения в Windows по умолчанию 2 часа. ДВА. ЧАСА. ДВА ЧАСА, БИЛЛИ! При этом рекомендация самого Microsoft – 5 минут. Важно помнить, юный падаван: в этом мире – всегда всё через зад.

Делаем нормальный таймаут в 5-10 минут:

SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\KeepAliveTime REG_DWORD 60000

Время в миллисекундах, 10 минут.

Или вообще поступить сурово и из командной строки проверить скорость Speedtest'ом
афигительный репозиторий
for /f "tokens=*" %%I in ('speedtest_cli.py --simple') do echo %%I

Надобно помнить, что такой тест сурово грузит и без того поганый канал.

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

Во-первых, перезагрузим йотавский роутер. Если не получится, как рассказывал раньше, то можно "Мини-Монстром" по питанию, опять же.


Включаем 3G USB модем:
rasdial our_3G_modem_windows_connection_name

Тоже есть нюансы:
> такой модем часто часто ВНЕЗАПНО становится кард-ридером по драйверу. Иногда даже сам. Надо контролировать;
> внешнего IP нам в 3G сети не дадут. Но можно в DynDNS-сервис или поднять свой маленький OpenVPN, как я описывал раньше

После поднятия канала надо как-то себя оповестить. Практика показала, что слать себе письмо скриптом после подключения – идея не из лучших. Поэтому поступим совсем сурово и будем слать себе SMS. А что, модем-то есть.
Команды едины для всех модемов:
AT+CMGF=1 - включаем режим смс
AT+CMGS="+71234567890" - указываем номер
opjat ono sdokhlo (и в конце надо добавить служебный символ ASCII №26. Это можно сделать в Notepad++, например)
AT+CMGF=0 – отключаем режим смс (не обязательно)

Сохраняем все команды в файл. Оправить их скопом можно через, например, Realterm
realterm.exe baud=115200 port=8 flow=2 SENDQUIT=our_file_with_commands.txt chardly=3 linedly=50

А чтобы быть абсолютно уверенным, добавим и включение канала по смс!
Команды такие:
AT+CMGF=1 – включаем смс-режим
AT+CMGL="REC UNREAD" – показать в терминале непрочитанные смс-ки.
Перед началом применений и проверок все смс можно посмотреть командой AT+CMGL="ALL" и удалить командой AT+CMGD=НОМЕР_СМС
AT - показ смс долго одупляется

Снова сохраняем их в файл. Передаём и сохраняем то, что ответил модем:
start /wait realterm baud=115200 port=8 flow=2 capture=sms.txt SENDQUIT=check_resch_com.txt chardly=3 linedly=50

И ищем в нем команду от нас:
find "RES CHAN MNE ZAPILIL BYSTRA" sms.txt && rasdial our_3G_modem_windows_connection_name

Так поднимем же на здоровье, дорогие коллеги и примкнувшие!

Комментариев нет:

Отправить комментарий