Резервный канал интернета
Re: Резервный канал интернета
Нет, правила не завязаны на интерфейсе. Получается, что этот скрипт не затронет правил файрвола?
- hatred
- Global Moderator
- Сообщения: 1205
- Зарегистрирован: 08 июн 2006 00:32
- Откуда: Владивосток
- Контактная информация:
Re: Резервный канал интернета
ну ты сам посмотри, или я тебе скажу сделать rm -rf / ты тоже сделаешь не подумав?
Прошли времена когда на элементарные вопросы можно было отвечать man <что-то там> (с) из сети
Hatred's Log Place | My GitHub repos | My Gitlab repos
Hatred's Log Place | My GitHub repos | My Gitlab repos
Re: Резервный канал интернета
Просто машина стоит не рядом и попробовать сразу не могу. А хочется прийти, вставить скрипт и учти, зная, что все работает
- hatred
- Global Moderator
- Сообщения: 1205
- Зарегистрирован: 08 июн 2006 00:32
- Откуда: Владивосток
- Контактная информация:
Re: Резервный канал интернета
при таком подходе я могу сделать работу платно но тестирование на месте один фиг нужно. хотя бы поочередным вытыканием шнурка.
Прошли времена когда на элементарные вопросы можно было отвечать man <что-то там> (с) из сети
Hatred's Log Place | My GitHub repos | My Gitlab repos
Hatred's Log Place | My GitHub repos | My Gitlab repos
Re: Резервный канал интернета
буду тестировать, может даже на выходных... Даст бог - получится. Спасибо за поддержку, не получится - дам ваши координаты, чтобы вас привлекли
- hatred
- Global Moderator
- Сообщения: 1205
- Зарегистрирован: 08 июн 2006 00:32
- Откуда: Владивосток
- Контактная информация:
Re: Резервный канал интернета
ок, удачи!VerstaK писал(а):буду тестировать, может даже на выходных... Даст бог - получится. Спасибо за поддержку, не получится - дам ваши координаты, чтобы вас привлекли
Прошли времена когда на элементарные вопросы можно было отвечать man <что-то там> (с) из сети
Hatred's Log Place | My GitHub repos | My Gitlab repos
Hatred's Log Place | My GitHub repos | My Gitlab repos
Re: Резервный канал интернета
нравится мне чужой код смотреть... к мелочам, типа, параметры iptables, не придираюсь, суть там видна, а на ошибки сама утилита укажет.
1. дергать NAT при переключении маршрута по умолчанию не надо. а зачем? настроил на обоих интерфейсах и все. потом пригодится для балансировки нагрузки. оба линка будут рабочими.
2. последний if - китайский код, copy-paste, сложен в отладке и поддержке.
3. при изменении маршрута надо рвать все соединения и чистить contrack таблицы, т.к. адрес отправителя меняется. если не делать, то в лучшем случае серваки сами быстро порвут соединения, в худшем - все замрет до таймаута, пользователи недовольны, а провайдеры запишут тебя в хакеры, э-э-э, нет, в кракеры.
4. по хорошему это надо цеплять
- на состояние DSL канала - все модемы поддерживают SNMP,
- на количество ошибок типа icmp host is unreachable.
в результате - максимальная скорость реакции и значительно меньшая нагрузка на оборудование.
1. дергать NAT при переключении маршрута по умолчанию не надо. а зачем? настроил на обоих интерфейсах и все. потом пригодится для балансировки нагрузки. оба линка будут рабочими.
2. последний if - китайский код, copy-paste, сложен в отладке и поддержке.
3. при изменении маршрута надо рвать все соединения и чистить contrack таблицы, т.к. адрес отправителя меняется. если не делать, то в лучшем случае серваки сами быстро порвут соединения, в худшем - все замрет до таймаута, пользователи недовольны, а провайдеры запишут тебя в хакеры, э-э-э, нет, в кракеры.
4. по хорошему это надо цеплять
- на состояние DSL канала - все модемы поддерживают SNMP,
- на количество ошибок типа icmp host is unreachable.
в результате - максимальная скорость реакции и значительно меньшая нагрузка на оборудование.
- hatred
- Global Moderator
- Сообщения: 1205
- Зарегистрирован: 08 июн 2006 00:32
- Откуда: Владивосток
- Контактная информация:
Re: Резервный канал интернета
Про нат согласен. Затупилс.
Про китайский код... тебе процитировать ключевую фразу во моём посте?
Когда возникает необходимость чистить таблички и рвать коннекты - настает время задумываться на динамической маршрутизацией, и это решение уже не катируется.
Перечисли какие модемы, что ставит, к примеру дальсвязь или нтк поддерживают snmp? И на моей практике было как минимум несколько раз: несущая есть, устанавливается PPPoE соединение, шлюз провайдера недоступен. Так что состояние линка и связи тут как бе...
ну и... когда теория сталкивается с практикой, теория проигрывает. всегда. (с) угадай кто сказал? ;-) я к тому - мой вариант есть, твоего варианта нет ))
Про китайский код... тебе процитировать ключевую фразу во моём посте?
Когда возникает необходимость чистить таблички и рвать коннекты - настает время задумываться на динамической маршрутизацией, и это решение уже не катируется.
Перечисли какие модемы, что ставит, к примеру дальсвязь или нтк поддерживают snmp? И на моей практике было как минимум несколько раз: несущая есть, устанавливается PPPoE соединение, шлюз провайдера недоступен. Так что состояние линка и связи тут как бе...
ну и... когда теория сталкивается с практикой, теория проигрывает. всегда. (с) угадай кто сказал? ;-) я к тому - мой вариант есть, твоего варианта нет ))
Прошли времена когда на элементарные вопросы можно было отвечать man <что-то там> (с) из сети
Hatred's Log Place | My GitHub repos | My Gitlab repos
Hatred's Log Place | My GitHub repos | My Gitlab repos
Re: Резервный канал интернета
это ключевая фраза, перед которой не устоит ни один самый веский аргумент.hatred писал(а):мой вариант есть, твоего варианта нет ))
Re: Резервный канал интернета
да любой модем с ethernet интерфейсом snmp умеет, вот, например, рядом валялся:hatred писал(а): Перечисли какие модемы, что ставит, к примеру дальсвязь или нтк поддерживают snmp? И на моей практике было как минимум несколько раз: несущая есть, устанавливается PPPoE соединение, шлюз провайдера недоступен. Так что состояние линка и связи тут как бе...
ADSL2110EHR V7.0+
Код: Выделить всё
# snmpwalk -v 1 -c public 192.168.1.1
SNMPv2-MIB::sysDescr = STRING: Linux (none) 2.4.17_mvl21-malta-mips_fp
...
IF-MIB::ifDescr.1 = STRING: lo
IF-MIB::ifDescr.2 = STRING: eth0
IF-MIB::ifDescr.3 = STRING: usb0
IF-MIB::ifDescr.4 = STRING: nas0
...
IF-MIB::ifOperStatus.1 = INTEGER: up(1)
IF-MIB::ifOperStatus.2 = INTEGER: up(1)
IF-MIB::ifOperStatus.3 = INTEGER: down(2)
IF-MIB::ifOperStatus.4 = INTEGER: down(2)
...
IP-MIB::icmpInMsgs = Counter32: 8
IP-MIB::icmpInErrors = Counter32: 0
IP-MIB::icmpInDestUnreachs = Counter32: 0
IP-MIB::icmpInTimeExcds = Counter32: 0
ну а проблемы дальше dsl линка по счетчикам icmp пакетов определить, правда, я сам сомневаюсь, что это выгорит
но и затея с пингами, мне не по душе, техподдержку пинговать надо, а не серверы.
- hatred
- Global Moderator
- Сообщения: 1205
- Зарегистрирован: 08 июн 2006 00:32
- Откуда: Владивосток
- Контактная информация:
Re: Резервный канал интернета
Техподдержку нужно пинговать когда уже тылы прикрыты, т.е. канал на резервный перещелкнулся дома свой проверю, что-то смущает меня факт наличия там snmp
Прошли времена когда на элементарные вопросы можно было отвечать man <что-то там> (с) из сети
Hatred's Log Place | My GitHub repos | My Gitlab repos
Hatred's Log Place | My GitHub repos | My Gitlab repos
-
- Newbie
- Сообщения: 2
- Зарегистрирован: 11 дек 2009 15:12
- Откуда: Vladivostok
- Контактная информация:
Re: Резервный канал интернета
Метрики в роутинге вопрос не решают?
- hatred
- Global Moderator
- Сообщения: 1205
- Зарегистрирован: 08 июн 2006 00:32
- Откуда: Владивосток
- Контактная информация:
Re: Резервный канал интернета
если ты роутинг грохаешь или переключаешь метрику - да. ну пусть уже сам делает.Alex Carcass писал(а):Метрики в роутинге вопрос не решают?
Прошли времена когда на элементарные вопросы можно было отвечать man <что-то там> (с) из сети
Hatred's Log Place | My GitHub repos | My Gitlab repos
Hatred's Log Place | My GitHub repos | My Gitlab repos
Re: Резервный канал интернета
Добрался я-таки до той машины и с помощью найденного на просторах мнтернета скрипта сделал переключение канала.
Реализовано следующим образом:
в /usr/sbin положил скрипт
вставил свои значения - адреса, шлюзы. Поставил вес больший у ДС, чем у НТК
В rc.local дописал строки
Тоже со своими значениями
Все работает, при пропадании пинга маршрут перекидывается на НТК, но на клиентах, которые ходят через этот шлюз, после переключения канала не все страницы открываются. Например, если был открыт яндекс, по нему получается посерфить, но на mail.ru уже не получится выйти.
Насколько я понял, нужен кэширующий днс. Хотя, в принципе, на шлюзе прописаны днс обоих провайдеров.
Можете подсказать, куда копать дальше?
почему-то не срабатывает маскарадинг, прописанный в rc.local
И еще. Поставил shorewall, прописал на оба интерфейса сразу маскарадинг, а из rc.local строки с маскарадингом удалил. Но тогда при падении основного канала и включения резервного клиенты не могуг гулять по интернету... Может, лучше вписать каждый набор правил в скрипт gwping? Т.е. если работает основной провайдер, подгружаются правила iptables_DS, а когда резервный - IPTABLES_NTC?
Реализовано следующим образом:
в /usr/sbin положил скрипт
Код: Выделить всё
#!/bin/bash
# Time between checks in seconds
SLEEPTIME=10
#IP Address or domain name to ping. The script relies on the domain being
#pingable and always available
TESTIP=www.yahoo.com
#Ping timeout in seconds
TIMEOUT=2
# External interfaces
EXTIF1=eth1
EXTIF2=eth2
#IP address of external interfaces. This is not the gateway address.
IP1=82.162.244.**
IP2=93.88.15.***
#Gateway IP addresses. This is the first (hop) gateway, could be your router IP
#address if it has been configured as the gateway
GW1=82.162.244.**
GW2=93.88.15.***
# Relative weights of routes. Keep this to a low integer value. I am using 4
# for TATA connection because it is 4 times faster
W1=8
W2=1
# Broadband providers name; use your own names here.
NAME1=DSV
NAME2=NTC
#No of repeats of success or failure before changing status of connection
SUCCESSREPEATCOUNT=4
FAILUREREPEATCOUNT=1
# Do not change anything below this line
# Last link status indicates the macro status of the link we determined. This is down initially to force routing change upfront. Don't change these values.
LLS1=1
LLS2=1
# Last ping status. Don't change these values.
LPS1=1
LPS2=1
# Current ping status. Don't change these values.
CPS1=1
CPS2=1
# Change link status indicates that the link needs to be changed. Don't change these values.
CLS1=1
CLS2=1
# Count of repeated up status or down status. Don't change these values.
COUNT1=0
COUNT2=0
while : ; do
ping -W $TIMEOUT -I $IP1 -c 1 $TESTIP > /dev/null 2>&1
RETVAL=$?
if [ $RETVAL -ne 0 ]; then
echo $NAME1 Down
CPS1=1
else
CPS1=0
fi
if [ $LPS1 -ne $CPS1 ]; then
echo Ping status changed for $NAME1 from $LPS1 to $CPS1
COUNT1=1
else
if [ $LPS1 -ne $LLS1 ]; then
COUNT1=`expr $COUNT1 + 1`
fi
fi
if [[ $COUNT1 -ge $SUCCESSREPEATCOUNT || ($LLS1 -eq 0 && $COUNT1 -ge $FAILUREREPEATCOUNT) ]]; then
echo Uptime status will be changed for $NAME1 from $LLS1
CLS1=0
COUNT1=0
if [ $LLS1 -eq 1 ]; then
LLS1=0
else
LLS1=1
fi
else
CLS1=1
fi
LPS1=$CPS1
ping -W $TIMEOUT -I $IP2 -c 1 $TESTIP > /dev/null 2>&1
RETVAL=$?
if [ $RETVAL -ne 0 ]; then
echo $NAME2 Down
CPS2=1
else
CPS2=0
fi
if [ $LPS2 -ne $CPS2 ]; then
echo Ping status changed for $NAME2 from $LPS2 to $CPS2
COUNT2=1
else
if [ $LPS2 -ne $LLS2 ]; then
COUNT2=`expr $COUNT2 + 1`
fi
fi
if [[ $COUNT2 -ge $SUCCESSREPEATCOUNT || ($LLS2 -eq 0 && $COUNT2 -ge $FAILUREREPEATCOUNT) ]]; then
echo Uptime status will be changed for $NAME2 from $LLS2
CLS2=0
COUNT2=0
if [ $LLS2 -eq 1 ]; then
LLS2=0
else
LLS2=1
fi
else
CLS2=1
fi
LPS2=$CPS2
if [[ $CLS1 -eq 0 || $CLS2 -eq 0 ]]; then
if [[ $LLS1 -eq 1 && $LLS2 -eq 0 ]]; then
echo Switching to $NAME2
ip route replace default scope global via $GW2 dev $EXTIF2
elif [[ $LLS1 -eq 0 && $LLS2 -eq 1 ]]; then
echo Switching to $NAME1
ip route replace default scope global via $GW1 dev $EXTIF1
elif [[ $LLS1 -eq 0 && $LLS2 -eq 0 ]]; then
echo Restoring default load balancing
ip route replace default scope global nexthop via $GW1 dev $EXTIF1 weight $W1 nexthop via $GW2 dev $EXTIF2 weight $W2
fi
fi
sleep $SLEEPTIME
done
В rc.local дописал строки
Код: Выделить всё
ip route add 192.168.1.0/24 dev eth1 src 192.168.1.10 table bsnl
ip route add default via 192.168.1.1 table bsnl
ip route add 192.168.0.0/24 dev eth2 src 192.168.0.10 table tata
ip route add default via 192.168.0.1 table tata
ip rule add from 192.168.1.10 table bsnl
ip rule add from 192.168.0.10 table tata
ip route add default scope global nexthop via 192.168.1.1 dev eth1 weight 1 nexthop via 192.168.0.1 dev eth2 weight 4
IPTABLES -t nat -a POSTROUTING -s 192.168.1.0/24 eth1 -j MASQUERADE
IPTABLES -t nat -a POSTROUTING -s 192.168.1.0/24 eth2 -j MASQUERADE
nohup /usr/sbin/gwping &
Все работает, при пропадании пинга маршрут перекидывается на НТК, но на клиентах, которые ходят через этот шлюз, после переключения канала не все страницы открываются. Например, если был открыт яндекс, по нему получается посерфить, но на mail.ru уже не получится выйти.
Насколько я понял, нужен кэширующий днс. Хотя, в принципе, на шлюзе прописаны днс обоих провайдеров.
Можете подсказать, куда копать дальше?
почему-то не срабатывает маскарадинг, прописанный в rc.local
И еще. Поставил shorewall, прописал на оба интерфейса сразу маскарадинг, а из rc.local строки с маскарадингом удалил. Но тогда при падении основного канала и включения резервного клиенты не могуг гулять по интернету... Может, лучше вписать каждый набор правил в скрипт gwping? Т.е. если работает основной провайдер, подгружаются правила iptables_DS, а когда резервный - IPTABLES_NTC?
Re: Резервный канал интернета
шлюзу dns нужен. копай туда, где доменные имена надо преобразовывать в ip. на прокси или на клиенте.VerstaK писал(а): Все работает, при пропадании пинга маршрут перекидывается на НТК, но на клиентах, которые ходят через этот шлюз, после переключения канала не все страницы открываются. Например, если был открыт яндекс, по нему получается посерфить, но на mail.ru уже не получится выйти.
Насколько я понял, нужен кэширующий днс. Хотя, в принципе, на шлюзе прописаны днс обоих провайдеров.
Можете подсказать, куда копать дальше?