URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 34958
[ Назад ]

Исходное сообщение
"переброс пользователей на резервный канал"

Отправлено RobinStone , 21-Сен-03 14:08 
Доброго времени суток уважаемые линуксоводы :)

Возникла у меня такая вот проблемма. Есть машина:
eth0 - шлюз в интернет от одного провайдера
eth1 - шлюз в интернет от другого провайдера
eth2 - локальный интерфейс а котором висит некоторое количество клиентов, т.е. локальных сетей.

Часть локалок висит на одном провайдере, а часть на другом... все это организовывается путем SNAT через iptables, на них же и файрволл построен.

Вопрос: как сделать чтобы когда падает один из провайдеров другие пользователи автоматом NATились на другого провайдера???

***Система: Mandrake 9.0


Содержание

Сообщения в этом обсуждении
"переброс пользователей на резервный канал"
Отправлено Михаил , 21-Сен-03 14:41 
>Вопрос: как сделать чтобы когда падает один из провайдеров другие пользователи автоматом
>NATились на другого провайдера???

как вариант:
ежеминутный пинг на какой-нибудь непрерывно живущий сервак в интернете через каждого из провайдеров и переброс правилами iptables на того провайдера, который жив или на своего провайдера, если живы оба.


"переброс пользователей на резервный канал"
Отправлено RobinStone , 21-Сен-03 14:52 
>как вариант:
>ежеминутный пинг на какой-нибудь непрерывно живущий сервак в интернете через каждого из
>провайдеров и переброс правилами iptables на того провайдера, который жив или
>на своего провайдера, если живы оба.

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

Я думал может в iptables есть какое-то правило точнее условие для метки на предмет наличия соединения...



"переброс пользователей на резервный канал"
Отправлено Justuss , 21-Сен-03 16:45 
да ладно, если каджые 3 минуты пинговать, получаются
фигня трафика.
а соединение иначе никак не определишь.. разве что
у тебя падение провайдера == обрыву линии (или что у тебя там),
но ИМХО обычные проблемы с отсутствием тяги гораздо чаще
происходят, а тут уж только пингом..



"переброс пользователей на резервный канал"
Отправлено Михаил , 21-Сен-03 19:01 
>Ну то тоже в принципе тема, но только помоему это в круглую
>сумму выйдет... по крайней мере один из провайдеров считает весь траффик
>в том числе и пинг пакеты тоже... исходящие естевственно бесплатно, а
>вот ответы, т.е. входящие - платно...
прикинь объем этих пакетов по отношению к трафику и получишь стоимость этого пинга. если он тебе все-таки покажется большим, то можно увеличить период пингования, но, соответсвенно, это даст задержки в переключении.

>Я думал может в iptables есть какое-то правило точнее условие для метки
>на предмет наличия соединения...
а что ты понимаешь под понятием "соединение"? строго говоря, на уровнях ниже чем TCP оно неопределено. вряд ли в данном контексте соединением может быть наличие линка на сетевухе... если только у тебя прямой Ethernet-линк до провайдера без всяких промежуточных устройств и при отказах у этого провайдера всегда отказывает только этот линк и ничего больше... но тогда этот линк нужно просто поменять на исправный...


"переброс пользователей на резервный канал"
Отправлено RobinStone , 22-Сен-03 13:27 
>>Ну то тоже в принципе тема, но только помоему это в круглую
>>сумму выйдет... по крайней мере один из провайдеров считает весь траффик
>>в том числе и пинг пакеты тоже... исходящие естевственно бесплатно, а
>>вот ответы, т.е. входящие - платно...
>прикинь объем этих пакетов по отношению к трафику и получишь стоимость этого
>пинга. если он тебе все-таки покажется большим, то можно увеличить период
>пингования, но, соответсвенно, это даст задержки в переключении.
>
>>Я думал может в iptables есть какое-то правило точнее условие для метки
>>на предмет наличия соединения...
>а что ты понимаешь под понятием "соединение"? строго говоря, на уровнях ниже
>чем TCP оно неопределено. вряд ли в данном контексте соединением может
>быть наличие линка на сетевухе... если только у тебя прямой Ethernet-линк
>до провайдера без всяких промежуточных устройств и при отказах у этого
>провайдера всегда отказывает только этот линк и ничего больше... но тогда
>этот линк нужно просто поменять на исправный...


Ну вот для TCP/IP соединений есть всяческие там состояния типа ESTABLISHED... а в принципе для интерфейса есть какие либо состояния... тот же линк например... т.е. вопрос то в том что если есть линк до провайдера то инет как правило тоже есть... но у них там стоит гранч, который постоянно вылетает... и линк физически пропадает, т.е. гаснет лампочка на сетевухе... вот состояние этой самой лампочки мне и надо узнать... ну а с пингом получается дороговато, но скорее всего придется использовать этот прием дабы подстраховаться... просто поставлю пинг раз в 20 минут... в крайнем случае посидят клиенты без интернета 20 мин. ничего страшного


"переброс пользователей на резервный канал"
Отправлено maratkaz , 24-Сен-03 12:22 
>>>Ну то тоже в принципе тема, но только помоему это в круглую
>>>сумму выйдет... по крайней мере один из провайдеров считает весь траффик
>>>в том числе и пинг пакеты тоже... исходящие естевственно бесплатно, а
>>>вот ответы, т.е. входящие - платно...
>>прикинь объем этих пакетов по отношению к трафику и получишь стоимость этого
>>пинга. если он тебе все-таки покажется большим, то можно увеличить период
>>пингования, но, соответсвенно, это даст задержки в переключении.
>>
>>>Я думал может в iptables есть какое-то правило точнее условие для метки
>>>на предмет наличия соединения...
>>а что ты понимаешь под понятием "соединение"? строго говоря, на уровнях ниже
>>чем TCP оно неопределено. вряд ли в данном контексте соединением может
>>быть наличие линка на сетевухе... если только у тебя прямой Ethernet-линк
>>до провайдера без всяких промежуточных устройств и при отказах у этого
>>провайдера всегда отказывает только этот линк и ничего больше... но тогда
>>этот линк нужно просто поменять на исправный...
>
>
>Ну вот для TCP/IP соединений есть всяческие там состояния типа ESTABLISHED... а
>в принципе для интерфейса есть какие либо состояния... тот же линк
>например... т.е. вопрос то в том что если есть линк до
>провайдера то инет как правило тоже есть... но у них там
>стоит гранч, который постоянно вылетает... и линк физически пропадает, т.е. гаснет
>лампочка на сетевухе... вот состояние этой самой лампочки мне и надо
>узнать... ну а с пингом получается дороговато, но скорее всего придется
>использовать этот прием дабы подстраховаться... просто поставлю пинг раз в 20
>минут... в крайнем случае посидят клиенты без интернета 20 мин. ничего
>страшного

Спасибо мужики, вы идею подсказали,
вообще-то у меня такая же задача
я так жалею, что ещё не могу на perl скрипты писать
1) ping -s 10 mail.ru пример одно из решений s задаёт размер пакета
2) тот товарищ также прав на счёт интервала


"переброс пользователей на резервный канал"
Отправлено a1x , 22-Сен-03 05:52 
>Доброго времени суток уважаемые линуксоводы :)
>
>Возникла у меня такая вот проблемма. Есть машина:
>eth0 - шлюз в интернет от одного провайдера
>eth1 - шлюз в интернет от другого провайдера
>eth2 - локальный интерфейс а котором висит некоторое количество клиентов, т.е. локальных
>сетей.
>
>Часть локалок висит на одном провайдере, а часть на другом... все это
>организовывается путем SNAT через iptables, на них же и файрволл построен.
>
>
>Вопрос: как сделать чтобы когда падает один из провайдеров другие пользователи автоматом
>NATились на другого провайдера???
>
>***Система: Mandrake 9.0

zebra?


"переброс пользователей на резервный канал"
Отправлено maratkaz , 24-Сен-03 12:29 
>>Доброго времени суток уважаемые линуксоводы :)
>>
>>Возникла у меня такая вот проблемма. Есть машина:
>>eth0 - шлюз в интернет от одного провайдера
>>eth1 - шлюз в интернет от другого провайдера
>>eth2 - локальный интерфейс а котором висит некоторое количество клиентов, т.е. локальных
>>сетей.
>>
>>Часть локалок висит на одном провайдере, а часть на другом... все это
>>организовывается путем SNAT через iptables, на них же и файрволл построен.
>>
>>
>>Вопрос: как сделать чтобы когда падает один из провайдеров другие пользователи автоматом
>>NATились на другого провайдера???
>>
>>***Система: Mandrake 9.0
>
>zebra?

продолжаем
3) мне кажется провайдеры всего мира не считают локальный трафик
то есть в пределах их сетки, если скажем ping какого нибудь
хоста сдедующего за интерфейсом к которому вы подключены



"переброс пользователей на резервный канал"
Отправлено Michael , 24-Сен-03 12:38 
>продолжаем
>3) мне кажется провайдеры всего мира не считают локальный трафик
> то есть в пределах их сетки, если скажем ping какого нибудь
>
>хоста сдедующего за интерфейсом к которому вы подключены
оно конечно хорошо, но не всегда...
например, у моего провайдера намного чаще пропадает связь с вышестоящим провайдером, нежели внутренние линки или линк от меня до провайдера...
т.е. любой сервак провайдера пингуется, а внешний мир - нет.

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


"переброс пользователей на резервный канал"
Отправлено maratkaz , 26-Сен-03 11:40 
>>продолжаем
>>3) мне кажется провайдеры всего мира не считают локальный трафик
>> то есть в пределах их сетки, если скажем ping какого нибудь
>>
>>хоста сдедующего за интерфейсом к которому вы подключены
>оно конечно хорошо, но не всегда...
>например, у моего провайдера намного чаще пропадает связь с вышестоящим провайдером, нежели
>внутренние линки или линк от меня до провайдера...
>т.е. любой сервак провайдера пингуется, а внешний мир - нет.
>
>хотя если оба линка ведут к одному маршрутизатору одного провайдера, то вряд
>ли на них связь с внешним миром будет пропадать по-отдельности, и,
>значит, переброс трафика делать смысла мало...

Cлышь мужики, давайте продолжим эту тему очень интересно и нужно
Я ночью кое-что придумал
Я обыскал весь инет  это решается такими сложными способами  

1) Я подсчитал, если задать размер ping -s 0 это равно 8 bytes - это уже
   здорово, ещё ping -s 0 -i 30 rambler.ru     -i звадаёт интервал 30 cекунд итого получает 675 Kb в месяц, слышали  в месяц -это недорого за надёжность связи
2) Этот способ примитивный,но  работает
Я очень хочу начать программировать на PERL
что-то навроде
так, что кто может помогите
Я даже это не могу переложить на практику

while или другой оператор (положительный ответ от ping -s 0 -i 30 rambler.ru
маршрут должен быть route add default gw 192.168.1.1)

если ответ отрицательный( то есть Ping не проходит)
    то route del default gw 192.168.1.1
      и задать другой маршрут   route add default gw 192.168.1.2

Я проверял это вручную - работает

                      



"переброс пользователей на резервный канал"
Отправлено Dimez , 26-Сен-03 12:58 
Не надо перл подключать для решения админовских задач, если задача может быть решена обычным bash-scripting.
посмотри системные стартовые скрипты - там всё очень понятно

Смотри - простенький bash-скрипт
---
#!/bin/bash
if ping -s 0 -i 30 -c 2 rambler.ru >/dev/null 2>&1 ; then ### если проходит пинг
команда, какую надо
else
команда, какую надо
fi
---

почитай man ping и положи этот скрипт в крон и будет тебе щастье :)


"переброс пользователей на резервный канал"
Отправлено maratkaz , 26-Сен-03 13:08 
>Не надо перл подключать для решения админовских задач, если задача может быть
>решена обычным bash-scripting.
>посмотри системные стартовые скрипты - там всё очень понятно
>
>Смотри - простенький bash-скрипт
>---
>#!/bin/bash
>if ping -s 0 -i 30 -c 2 rambler.ru >/dev/null 2>&1 ; then ### если проходит пинг
>команда, какую надо
>else
>команда, какую надо
>fi
>---
>
>Положи этот скрипт в крон и будет тебе щастье :)

Спасибо огромное!
Буду пробовать.
Я просто сильно прикололся к  Linux С++  Perl
и всё никак не могу начать делать что-нибудь
Shell тоже здорово!



"переброс пользователей на резервный канал"
Отправлено maratkaz , 26-Сен-03 14:00 
>>Не надо перл подключать для решения админовских задач, если задача может быть
>>решена обычным bash-scripting.
>>посмотри системные стартовые скрипты - там всё очень понятно
>>
>>Смотри - простенький bash-скрипт
>>---
>>#!/bin/bash
>>if ping -s 0 -i 30 -c 2 rambler.ru >/dev/null 2>&1 ; then ### если проходит пинг
>>команда, какую надо
>>else
>>команда, какую надо
>>fi
>>---
>>
>>Положи этот скрипт в крон и будет тебе щастье :)
>
>Спасибо огромное!
>Буду пробовать.
>Я просто сильно прикололся к  Linux С++  Perl
>и всё никак не могу начать делать что-нибудь
>Shell тоже здорово!

А как если нет ответа Ping
if not ping .... ? так верно?


"переброс пользователей на резервный канал"
Отправлено boykov , 26-Сен-03 14:16 
>А как если нет ответа Ping
>if not ping .... ? так верно?

  ping -c $COUNT -i $WAIT  $PINGADDR > /dev/null
  if [ $? != 0 ] ; then    # host is down
      echo "down"
  else
      echo "up"
      fi  



"переброс пользователей на резервный канал"
Отправлено mar , 26-Сен-03 14:35 
а готовые решения вроде OSPF не нравятся?



"переброс пользователей на резервный канал"
Отправлено RobinStone , 26-Сен-03 14:45 
>>А как если нет ответа Ping
>>if not ping .... ? так верно?
>
>  ping -c $COUNT -i $WAIT  $PINGADDR > /dev/null
>  if [ $? != 0 ] ; then  
> # host is down
>      echo "down"
>  else
>      echo "up"
>      fi


Все это конечно хорошо, но только это все сильно грузит систему что я думаю не очень надо ИМХО нада делать на PHP, тут есть несколько преимуществ:

1) удобство работы с БД... соответственно туда можно кидать все настройки

2) легко разбирать тексты (типа тот же возврат команды пинг)

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

в этом случае я сделал так: анализирую файл ip_contrack и если обнаруживаю в нем что какие-то пакеты не проходят, то есть выдается флаг - нет соединения... и таких пакетов скажем больше 50 то я переключаю всех на другого провайдера...

но это так - временно... потому что это тоже бьет по системе, хотя не так ощутимо как тот же перл

но ИМХО я думаю что это должен вообще решать файр волл или policy routing но я что-то разобраться не могу нифига


"переброс пользователей на резервный канал"
Отправлено Michael , 26-Сен-03 15:06 
что-то народ куда-то в дебри полез...
внесу и свою лепту...

я для контроля соединения (у меня всего один провайдер) через MRTG я использую вот такой скриптик:
#!/bin/bash
if ping -c 1 -I eth1 -w 1 213.85.29.65 > /dev/null; then
  echo "1000";
else
  echo "0";
fi

if ping -c 1 -I eth1 -w 1 195.2.72.149 > /dev/null; then
  echo "1000";
else
  echo "0";
fi

/usr/bin/uptime
echo "Internet"

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

в этом скриптике вполне можно поставить вместо echo какие-либо другие команды, в том числе и для перенаправления на другого провайдера...


"переброс пользователей на резервный канал"
Отправлено maratkaz , 26-Сен-03 15:27 
>что-то народ куда-то в дебри полез...
>внесу и свою лепту...
>
>я для контроля соединения (у меня всего один провайдер) через MRTG я
>использую вот такой скриптик:
>#!/bin/bash
>if ping -c 1 -I eth1 -w 1 213.85.29.65 > /dev/null; then
>  echo "1000";
>else
>  echo "0";
>fi
>
>if ping -c 1 -I eth1 -w 1 195.2.72.149 > /dev/null; then
>  echo "1000";
>else
>  echo "0";
>fi
>
>/usr/bin/uptime
>echo "Internet"
>
>кроме того, что MRTG визуально отображает, когда пропадала связь, и на каком
>участке она пропадала, он еще и считает среднюю надежность канала.
>
>в этом скриптике вполне можно поставить вместо echo какие-либо другие команды, в
>том числе и для перенаправления на другого провайдера...
В том, моя беда, я стлолько разных прог с инета пробовал и MRTG т SQUID
около 20 штук ipactt net-acct ipac и т.д.



"переброс пользователей на резервный канал"
Отправлено Michael , 26-Сен-03 15:37 
>В том, моя беда, я стлолько разных прог с инета пробовал и
>MRTG т SQUID
>около 20 штук ipactt net-acct ipac и т.д.
и что? как успехи?

MRTG я упомянул только потому, что в нем я использую скрипт такого же назаначения - выяснить работает инет или нет...


"переброс пользователей на резервный канал"
Отправлено maratkaz , 26-Сен-03 16:21 
>>В том, моя беда, я стлолько разных прог с инета пробовал и
>>MRTG т SQUID
>>около 20 штук ipactt net-acct ipac и т.д.
>и что? как успехи?
>
>MRTG я упомянул только потому, что в нем я использую скрипт такого
>же назаначения - выяснить работает инет или нет...

здорово подучилось  я создал два скрипта astranet  
- - - - - - - - - -
if ping -s 0 -i 5 -c 2 rambler.u > /dev/null 2&>1;
then
           echo provider 1
else
           route add default gw 192.168.1.1;
           route del default gw 192.168.1.2
fi
- - - - - - -- - - - -    


astrapage
- - - - - - - - - -
if ping -s 0 -i 5 -c 2 rambler.u > /dev/null 2&>1;
then
           echo provider 2
else
           route add default gw 192.168.1.2;
           route del default gw 192.168.1.1
fi
- - - - - - -- - - - -    


только моя проблема сейчас crontab
однажды я где-то видел как коротко написать что-бы каждую минуту
1,2,3,4,5,6,7,...* * *  это глупо
можно примерно так
1/*  *  *  *  *  /usr/local .....  - это значит каждую минуту
только не помню точно



"переброс пользователей на резервный канал"
Отправлено Mikhail , 26-Сен-03 17:01 
*/1  *  *  *  * <user> </path/to/>script - раз в минуту.
Тут еще важно не погорячиться с частотой - он точно отработает за минуту?

"переброс пользователей на резервный канал"
Отправлено Михаил , 29-Сен-03 11:21 
>*/1  *  *  *  * <user> </path/to/>script - раз в минуту.
>Тут еще важно не погорячиться с частотой - он точно отработает за
>минуту?
неплохо бы параметр -w добавить с парой секунд... тогда точно отработает...

"переброс пользователей на резервный канал"
Отправлено maratkaz , 30-Сен-03 08:38 
>>*/1  *  *  *  * <user> </path/to/>script - раз в минуту.
>>Тут еще важно не погорячиться с частотой - он точно отработает за
>>минуту?
>неплохо бы параметр -w добавить с парой секунд... тогда точно отработает...

что -w означает? какой-то deadline не пойму смысл параметра


"переброс пользователей на резервный канал"
Отправлено boykov , 30-Сен-03 09:44 
>что -w означает? какой-то deadline не пойму смысл параметра
максимальное время ожидания ответа. если за это время ответа не пришло, то завершить обработку (послать следующий или выйти). Указывается, чтобы ping гарантированно завершился через небольшое время (потому как параметр -с указывает количество _полученных_ пакетов; их может и вообще не быть).

PS Learn English.



"переброс пользователей на резервный канал"
Отправлено maratkaz , 30-Сен-03 12:39 
>>что -w означает? какой-то deadline не пойму смысл параметра
>максимальное время ожидания ответа. если за это время ответа не пришло, то
>завершить обработку (послать следующий или выйти). Указывается, чтобы ping гарантированно завершился
>через небольшое время (потому как параметр -с указывает количество _полученных_ пакетов;
>их может и вообще не быть).
>
>PS Learn English.
Спасибо за ответ.
В первый раз сработало эго на счёт PS Learn English
My problem was not English. I just did not understand the meaning of the frase "deadline" which often hapens.
:)
Best regards.


"переброс пользователей на резервный канал"
Отправлено pavel , 30-Сен-03 22:48 
>продолжаем
>3) мне кажется провайдеры всего мира не считают локальный трафик
> то есть в пределах их сетки, если скажем ping какого нибудь
>
>хоста сдедующего за интерфейсом к которому вы подключены


Мне кажется, что такое глобальное обобщение как минимум неточно.
Как максимум-транспорт провайдера помрет от такой бесплатности.


"переброс пользователей на резервный канал"
Отправлено boykov , 01-Окт-03 11:25 
>продолжаем
>3) мне кажется провайдеры всего мира не считают локальный трафик
> то есть в пределах их сетки, если скажем ping какого нибудь
>
>хоста сдедующего за интерфейсом к которому вы подключены

Неправдушки ваши. Считают. Могут даже трафик до своего сервера статистики вам приписать. Как пример -- подсчет на уровне портов. То есть провайдер берет и считает сколько у него уходит с порта циски/DSLMax/еще чего-нибудь. А то и с пользовательского интерфейса считает :)

И если в случае циски это неоправдано, то при пользовании железяк, у которых просто нет возможности разделить трафик -- провайдеру просто не остается другого варианта. Это они так говоят :)

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