LINUX.ORG.RU
ФорумAdmin

Скрипт для переключения каналов интернета


0

0

Всем привет! Есть очень упрощенный скрипт для переключения каналов инетрнет провайдеров, его выполняет каждую минуту cron, именно выполняет, так как тестовое сообщение записывается. Но при потере канала связи ничего не происходит... Но при запуске из терминала все нормально переключается... В чем может быть проблема? Вот текст самого скрипта:

Вот тот скрипт который запускается кроном:

#!/bin/bash echo "test" >>/212.tmp if ping -q -c 1 -n 192.168.10.210; then if ping -q -n -c 1 88.210.55.2; then ifdown dev27125; pptp-command start; iptables -t nat -A POSTROUTING -o ppp+ -s 192.168.10.0/24 -j SNAT --to-source 88.210.55.65 ping -q -n -c 20 'www.ya.ru'; fi else if ! ping -q -n -c 1 'www.ya.ru'; then ifup dev27125; pptp-command stop; iptables -t nat -A POSTROUTING -o dev27125 -s 192.168.10.0/24 -j SNAT --to-source 192.168.10.210; fi fi

что пишет в mail возможным не представляется, так как размер того файла 70 Мб. и комп тупо виснеть при его открытии.

Внизу когда пишешь сообщение можно выбрать preformatted text.

#!/bin/bash
if ping -q -c 1 -n 192.168.10.210; then
	if ping -q -n -c 1 88.210.55.2; then
		ifdown dev27125;
		pptp-command start;
		iptables -t nat -A POSTROUTING -o ppp+ -s 192.168.10.0/24 -j SNAT --to-source 88.210.55.65
		ping -q -n -c 20 'www.ya.ru';
	fi
else 
	if ! ping -q -n -c 1 'www.ya.ru'; then
		ifup dev27125;
		pptp-command stop;
		iptables -t nat -A POSTROUTING -o dev27125 -s 192.168.10.0/24 -j SNAT --to-source 192.168.10.210;
	fi
fi

Основной интерфейс для инета это ppp, dev27125 - резервный насколько я понимаю?
88.210.55.2 это что такое? Другой конец pptp тунеля?
Во первых у тебя явный косяк. правила iptables добавляются каждый раз при переключении. После пару сотни переключений у тебя будет куча бесполезных правил в iptables -t nat POSTROUTING
Достаточно добавить их один раз при загрузке системы.

ping -q -c 1 -n 192.168.10.210 для локального интерфейса это конечно жесть.

>Но при запуске из терминала все нормально переключается...
Ты прямо точь-в-точь этот скрипт пытаешься выполнить или кусок из него?

Nao ★★★★★
()
Ответ на: комментарий от Nao

Скрипт лежит в /.. я из термнала набираю /3.sh и все работает в cron тоже под root На счет правильности: я линукс мучаю только месяц, это мой первый скрипт, потому он такой. Я пока не искал как по другому определить поднят ли интерфейс. Пояснения: dev27125 - 2-й канал и-нета (резервный) 88.210.55.2 - VPN сервер провайдера

anonymous
()
Ответ на: комментарий от Nao

если да, то можно попробовать такой скрипт:

#!/bin/bash
if ! ip link show ppp0; then
	if ping -q -n -c 1 88.210.55.2; then
		ifdown dev27125
		pptp-command start
	else
		#pptp-command stop #это наверно не нужно
		ifup dev27125
	fi
fi

правила 
iptables -t nat -A POSTROUTING -o ppp+ -s 192.168.10.0/24 -j SNAT --to-source 88.210.55.65
iptables -t nat -A POSTROUTING -o dev27125 -s 192.168.10.0/24 -j SNAT --to-source 192.168.10.210

нужно прописать один раз при загрузке машины.

Nao ★★★★★
()
Ответ на: комментарий от Nao

ppp0 к сожалению отваливается не всегда. И еще, после дисконнекта иногда поднимается соединение на ppp1 или даже ppp2, при использовании преременной ppp+ трафик будет направлен на последний интерфейс?

Andrywww
() автор топика

Если два интерфейса активны постоянно (до момента падения какого то из них), я бы для переключений использовал смену маршрута по умолчанию.

anonymous
()
Ответ на: комментарий от anonymous

В моем случае один интерфейс по-умолчанию отключен, а при падении ВПН соединения он включается

anonymous
()
Ответ на: комментарий от Andrywww

>ppp0 к сожалению отваливается не всегда. И еще, после дисконнекта 
>иногда поднимается соединение на ppp1 или даже ppp2, при использовании преременной ppp+ 
>трафик будет направлен на последний интерфейс?
ppp+ в iptables? туда куда будет перенаправлен трафик будет решать в данном случае не iptables а маршрут по умолчанию.
man route
Возможно у тебя проблема именно с маршрутами.

Вот скрипт, я попробовал допилить:
-----------------------8<------------------------------
#!/bin/bash
if ! ip link show | grep ppp[0-9]\\+; then
	if ping -q -n -c 1 88.210.55.2; then
		ifdown dev27125 &
		pptp-command start
	elif ! ip link show dev27125 | grep UP; then
		pptp-command stop &
		ifup dev27125
	fi
elif ! ping -q -n -c 1 ya.ru; then
		pptp-command stop &
		ifup dev27125
fi
----------------------->8------------------------------
Единственный минус, когда первый раз выполнится по крону этот скрипт 
то он поднимет ppp (или dev27125 если впн сервер недоступен).
Этом может произойти почти сразу после старта cron.

Nao ★★★★★
()
Ответ на: комментарий от Nao

To Nao: я не силен в синтаксисе скриптов, потому сам не могу понять, почему он ругается на строчку

elif ! ip link show dev27125 | grep UP; then

со словами line 7: syntax error near unexpected token `elif'

Andrywww
() автор топика
Ответ на: комментарий от Andrywww

незнаю. у меня вроде всё работает((
ты точь в точь скопировал?

может точки с запятой проставить?
#!/bin/bash
if ! ip link show | grep ppp[0-9]\\+; then
	if ping -q -n -c 1 88.210.55.2; then
		ifdown dev27125 &
		pptp-command start;
	elif ! ip link show dev27125 | grep UP; then
		pptp-command stop &
		ifup dev27125;
	fi
elif ! ping -q -n -c 1 ya.ru; then
		pptp-command stop &
		ifup dev27125;
fi

Nao ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.