Резервный канал интернета

Технические обсуждения
VerstaK
Advanced Newbie
Advanced Newbie
Сообщения: 12
Зарегистрирован: 09 ноя 2009 10:14

Re: Резервный канал интернета

Сообщение VerstaK »

Нет, правила не завязаны на интерфейсе. Получается, что этот скрипт не затронет правил файрвола?

Аватара пользователя
hatred
Global Moderator
Global Moderator
Сообщения: 1205
Зарегистрирован: 08 июн 2006 00:32
Откуда: Владивосток
Контактная информация:

Re: Резервный канал интернета

Сообщение hatred »

ну ты сам посмотри, или я тебе скажу сделать rm -rf / ты тоже сделаешь не подумав? :)
Прошли времена когда на элементарные вопросы можно было отвечать man <что-то там> (с) из сети
Hatred's Log Place | My GitHub repos | My Gitlab repos

VerstaK
Advanced Newbie
Advanced Newbie
Сообщения: 12
Зарегистрирован: 09 ноя 2009 10:14

Re: Резервный канал интернета

Сообщение VerstaK »

Просто машина стоит не рядом и попробовать сразу не могу. А хочется прийти, вставить скрипт и учти, зная, что все работает

Аватара пользователя
hatred
Global Moderator
Global Moderator
Сообщения: 1205
Зарегистрирован: 08 июн 2006 00:32
Откуда: Владивосток
Контактная информация:

Re: Резервный канал интернета

Сообщение hatred »

при таком подходе я могу сделать работу платно :) но тестирование на месте один фиг нужно. хотя бы поочередным вытыканием шнурка.
Прошли времена когда на элементарные вопросы можно было отвечать man <что-то там> (с) из сети
Hatred's Log Place | My GitHub repos | My Gitlab repos

VerstaK
Advanced Newbie
Advanced Newbie
Сообщения: 12
Зарегистрирован: 09 ноя 2009 10:14

Re: Резервный канал интернета

Сообщение VerstaK »

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

Аватара пользователя
hatred
Global Moderator
Global Moderator
Сообщения: 1205
Зарегистрирован: 08 июн 2006 00:32
Откуда: Владивосток
Контактная информация:

Re: Резервный канал интернета

Сообщение hatred »

VerstaK писал(а):буду тестировать, может даже на выходных... Даст бог - получится. Спасибо за поддержку, не получится - дам ваши координаты, чтобы вас привлекли


ок, удачи! :)
Прошли времена когда на элементарные вопросы можно было отвечать man <что-то там> (с) из сети
Hatred's Log Place | My GitHub repos | My Gitlab repos

Лимон
Full Member
Full Member
Сообщения: 140
Зарегистрирован: 26 июн 2009 15:11
Откуда: Владивосток

Re: Резервный канал интернета

Сообщение Лимон »

нравится мне чужой код смотреть... к мелочам, типа, параметры iptables, не придираюсь, суть там видна, а на ошибки сама утилита укажет.
1. дергать NAT при переключении маршрута по умолчанию не надо. а зачем? настроил на обоих интерфейсах и все. потом пригодится для балансировки нагрузки. оба линка будут рабочими.
2. последний if - китайский код, copy-paste, сложен в отладке и поддержке.
3. при изменении маршрута надо рвать все соединения и чистить contrack таблицы, т.к. адрес отправителя меняется. если не делать, то в лучшем случае серваки сами быстро порвут соединения, в худшем - все замрет до таймаута, пользователи недовольны, а провайдеры запишут тебя в хакеры, э-э-э, нет, в кракеры.
4. по хорошему это надо цеплять
- на состояние DSL канала - все модемы поддерживают SNMP,
- на количество ошибок типа icmp host is unreachable.
в результате - максимальная скорость реакции и значительно меньшая нагрузка на оборудование.

Аватара пользователя
hatred
Global Moderator
Global Moderator
Сообщения: 1205
Зарегистрирован: 08 июн 2006 00:32
Откуда: Владивосток
Контактная информация:

Re: Резервный канал интернета

Сообщение hatred »

Про нат согласен. Затупилс.
Про китайский код... тебе процитировать ключевую фразу во моём посте?
Когда возникает необходимость чистить таблички и рвать коннекты - настает время задумываться на динамической маршрутизацией, и это решение уже не катируется.
Перечисли какие модемы, что ставит, к примеру дальсвязь или нтк поддерживают snmp? И на моей практике было как минимум несколько раз: несущая есть, устанавливается PPPoE соединение, шлюз провайдера недоступен. Так что состояние линка и связи тут как бе...

ну и... когда теория сталкивается с практикой, теория проигрывает. всегда. (с) угадай кто сказал? ;-) я к тому - мой вариант есть, твоего варианта нет :)))
Прошли времена когда на элементарные вопросы можно было отвечать man <что-то там> (с) из сети
Hatred's Log Place | My GitHub repos | My Gitlab repos

Лимон
Full Member
Full Member
Сообщения: 140
Зарегистрирован: 26 июн 2009 15:11
Откуда: Владивосток

Re: Резервный канал интернета

Сообщение Лимон »

hatred писал(а):мой вариант есть, твоего варианта нет :)))

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

Лимон
Full Member
Full Member
Сообщения: 140
Зарегистрирован: 26 июн 2009 15:11
Откуда: Владивосток

Re: Резервный канал интернета

Сообщение Лимон »

hatred писал(а):Перечисли какие модемы, что ставит, к примеру дальсвязь или нтк поддерживают snmp? И на моей практике было как минимум несколько раз: несущая есть, устанавливается PPPoE соединение, шлюз провайдера недоступен. Так что состояние линка и связи тут как бе...

да любой модем с ethernet интерфейсом snmp умеет, вот, например, рядом валялся:
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 там я не нашел, но есть состояние nas интрефейсов. Можно их использовать.
ну а проблемы дальше dsl линка по счетчикам icmp пакетов определить, правда, я сам сомневаюсь, что это выгорит :)
но и затея с пингами, мне не по душе, техподдержку пинговать надо, а не серверы.

Аватара пользователя
hatred
Global Moderator
Global Moderator
Сообщения: 1205
Зарегистрирован: 08 июн 2006 00:32
Откуда: Владивосток
Контактная информация:

Re: Резервный канал интернета

Сообщение hatred »

Техподдержку нужно пинговать когда уже тылы прикрыты, т.е. канал на резервный перещелкнулся :) дома свой проверю, что-то смущает меня факт наличия там snmp
Прошли времена когда на элементарные вопросы можно было отвечать man <что-то там> (с) из сети
Hatred's Log Place | My GitHub repos | My Gitlab repos

Alex Carcass
Newbie
Newbie
Сообщения: 2
Зарегистрирован: 11 дек 2009 15:12
Откуда: Vladivostok
Контактная информация:

Re: Резервный канал интернета

Сообщение Alex Carcass »

Метрики в роутинге вопрос не решают?

Аватара пользователя
hatred
Global Moderator
Global Moderator
Сообщения: 1205
Зарегистрирован: 08 июн 2006 00:32
Откуда: Владивосток
Контактная информация:

Re: Резервный канал интернета

Сообщение hatred »

Alex Carcass писал(а):Метрики в роутинге вопрос не решают?


если ты роутинг грохаешь или переключаешь метрику - да. ну пусть уже сам делает.
Прошли времена когда на элементарные вопросы можно было отвечать man <что-то там> (с) из сети
Hatred's Log Place | My GitHub repos | My Gitlab repos

VerstaK
Advanced Newbie
Advanced Newbie
Сообщения: 12
Зарегистрирован: 09 ноя 2009 10:14

Re: Резервный канал интернета

Сообщение VerstaK »

Добрался я-таки до той машины и с помощью найденного на просторах мнтернета скрипта сделал переключение канала.
Реализовано следующим образом:
в /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?

Лимон
Full Member
Full Member
Сообщения: 140
Зарегистрирован: 26 июн 2009 15:11
Откуда: Владивосток

Re: Резервный канал интернета

Сообщение Лимон »

VerstaK писал(а):Все работает, при пропадании пинга маршрут перекидывается на НТК, но на клиентах, которые ходят через этот шлюз, после переключения канала не все страницы открываются. Например, если был открыт яндекс, по нему получается посерфить, но на mail.ru уже не получится выйти.
Насколько я понял, нужен кэширующий днс. Хотя, в принципе, на шлюзе прописаны днс обоих провайдеров.
Можете подсказать, куда копать дальше?

шлюзу dns нужен. копай туда, где доменные имена надо преобразовывать в ip. на прокси или на клиенте.

Ответить