Автоматическое переключение на резервный 3G средствами Windows

Хочу поделиться своим опытом настройки автоматического перехода на резервный интернет 3G, когда основной пропадает, и возврата на основной, когда он заработает. Все это реализовано стандартными средствами Windows.

Задача была — обеспечить постоянное наличие интернета на майнинг ферме. Усердное гугление ничего не дало. Интернет пропадает очень редко, потому покупать Mikrotik или другие железки желания не было.

Имеем проводной интернет (или wi-fi) и 3G свисток.

Вся настройка сводится к подключению 3G свистка и настройки коммутируемого подключения. Далее скрипт в .bat, который кладем в авто запуск.

Все операции проводились на Windows 10. На других версиях должно все работать, но может немного отличаться названия пунктов меню.

Настройка 3G
Естественно ставим дрова. Если с ними ставится GUI, то желательно отключить его авто запуск.
Идем в Центр управления сетями и создаем новое подключение. Выбираем коммутируемое и вводим настройки Вашего 3G провайдера.
Обязательно ставим «запомнить пароль». Имя пишем попроще. Его потом будем использовать в скрипте.
image
Подключаемся. Если все подключилось и есть интернет, то отключаемся и идем дальше.
Заходим в параметры адаптеров, открываем свойства нашего нового соединения, идем в параметры. Снимаем все галочки.
image
Сохраняем. С настройкой 3G все.

В винде, при активном коммутируемом подключении, весь трафик идет через него. А значит не придется возиться с настройкой маршрутизации.

Я имею весьма поверхностное представление о написании .bat файлов. Потому проверка ping реализована через костыль. Пишем результат в файл, а потом считаем длину файла. Методом научного тыка было выяснено, что при удачном пинге размер больше 320, при неудачном меньше 200. В зависимости от системы и языка, размеры файла могут отличаться.
Хотя, думаю, можно все это реализовать без записи в файл. Но пока других вариантов не нашел.

Скрипт .bat
echo off
goto st1
:st0
TIMEOUT 300
:st1
ping -f -n 1 -l 1 8.8.8.8 > 1.txt
for %%i in (1.txt) do (set /a size=%%~Zi)
if %size% GEQ 320 goto st0
TIMEOUT 30
ping -f -n 1 -l 1 google.com > 2.txt
for %%i in (2.txt) do (set /a size=%%~Zi)
if %size% GEQ 320 goto st0
TIMEOUT 30
ping -f -n 1 -l 1 habrahabr.ru > 3.txt
for %%i in (3.txt) do (set /a size=%%~Zi)
if %size% GEQ 320 goto st0
rasdial «3G» /callback:#777
TIMEOUT 3600
rasdial /d
TIMEOUT 30
goto st1
Что делает скрипт?
Первый TIMEOUT 300 — частота проверки наличия интернета в секундах. В данном случае, проверка раз в 5 минут.
Далее пингуем по очереди 3 сайта. Можно заменить на Ваши любимые сайты.
Если пинг есть — возвращаемся и ждем 5 минут. Если нет — пингуем следующий сайт.
Если все 3 сайта не пингуются, то переходим на 3G.
TIMEOUT 3600 — время, до попытки вернуться на основной интернет. В данном случае 1 час.
Через час 3G отключается, проверяем есть ли интернет, если нет, то опять включаем 3G.


Заменяем настройки в строке «rasdial „3G“ /callback:#777» на Ваши.
3G — на название Вашего соединения, #777 на номер, который указывали в соединении.

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

Скрипт .bat с ведением логов
echo off
echo 3G switcher started
set CURDATE=%DATE%
set CURTIME=%TIME%
set CURLOG=%CURDATE:~8,2%%CURDATE:~3,2%%CURDATE:~0,2%%CURTIME:~0,2%%CURTIME:~3,2%log.txt
echo log file %CURLOG%
echo start log > %CURLOG%
date /t >> %CURLOG%
time /t >> %CURLOG%
goto st1
:st0
echo ONLINE
TIMEOUT 300
:st1
ping -f -n 1 -l 1 8.8.8.8 > 1.txt
for %%i in (1.txt) do (set /a size=%%~Zi)
if %size% GEQ 320 goto st0
echo OFFLINE
echo wait for test 2
TIMEOUT 30
ping -f -n 1 -l 1 google.com > 2.txt
for %%i in (2.txt) do (set /a size=%%~Zi)
if %size% GEQ 320 goto st0
echo OFFLINE
echo wait for test 3
TIMEOUT 30
ping -f -n 1 -l 1 habrahabr.ru > 3.txt
for %%i in (3.txt) do (set /a size=%%~Zi)
if %size% GEQ 320 goto st0
echo switch to 3G
echo switch to 3G >> %CURLOG%
date /t >> %CURLOG%
time /t >> %CURLOG%
rasdial «3G» /callback:#777
TIMEOUT 3600
echo switch to eth
echo switch to eth >> %CURLOG%
time /t >> %CURLOG%
rasdial /d
TIMEOUT 30
goto st1

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

При написании скрипта использовались мануалы по .bat файлам и поиск в google. К сожалению, используемые источники уже не вспомню.
Метки:
3G, скрипт, резервный канал