Pull to refresh

Автоматическое переключение на резервный 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. К сожалению, используемые источники уже не вспомню.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.