Доброго времени суток уважаемые линуксоводы :)Возникла у меня такая вот проблемма. Есть машина:
eth0 - шлюз в интернет от одного провайдера
eth1 - шлюз в интернет от другого провайдера
eth2 - локальный интерфейс а котором висит некоторое количество клиентов, т.е. локальных сетей.Часть локалок висит на одном провайдере, а часть на другом... все это организовывается путем SNAT через iptables, на них же и файрволл построен.
Вопрос: как сделать чтобы когда падает один из провайдеров другие пользователи автоматом NATились на другого провайдера???
***Система: Mandrake 9.0
>Вопрос: как сделать чтобы когда падает один из провайдеров другие пользователи автоматом
>NATились на другого провайдера???как вариант:
ежеминутный пинг на какой-нибудь непрерывно живущий сервак в интернете через каждого из провайдеров и переброс правилами iptables на того провайдера, который жив или на своего провайдера, если живы оба.
>как вариант:
>ежеминутный пинг на какой-нибудь непрерывно живущий сервак в интернете через каждого из
>провайдеров и переброс правилами iptables на того провайдера, который жив или
>на своего провайдера, если живы оба.Ну то тоже в принципе тема, но только помоему это в круглую сумму выйдет... по крайней мере один из провайдеров считает весь траффик в том числе и пинг пакеты тоже... исходящие естевственно бесплатно, а вот ответы, т.е. входящие - платно...
Я думал может в iptables есть какое-то правило точнее условие для метки на предмет наличия соединения...
да ладно, если каджые 3 минуты пинговать, получаются
фигня трафика.
а соединение иначе никак не определишь.. разве что
у тебя падение провайдера == обрыву линии (или что у тебя там),
но ИМХО обычные проблемы с отсутствием тяги гораздо чаще
происходят, а тут уж только пингом..
>Ну то тоже в принципе тема, но только помоему это в круглую
>сумму выйдет... по крайней мере один из провайдеров считает весь траффик
>в том числе и пинг пакеты тоже... исходящие естевственно бесплатно, а
>вот ответы, т.е. входящие - платно...
прикинь объем этих пакетов по отношению к трафику и получишь стоимость этого пинга. если он тебе все-таки покажется большим, то можно увеличить период пингования, но, соответсвенно, это даст задержки в переключении.>Я думал может в iptables есть какое-то правило точнее условие для метки
>на предмет наличия соединения...
а что ты понимаешь под понятием "соединение"? строго говоря, на уровнях ниже чем TCP оно неопределено. вряд ли в данном контексте соединением может быть наличие линка на сетевухе... если только у тебя прямой Ethernet-линк до провайдера без всяких промежуточных устройств и при отказах у этого провайдера всегда отказывает только этот линк и ничего больше... но тогда этот линк нужно просто поменять на исправный...
>>Ну то тоже в принципе тема, но только помоему это в круглую
>>сумму выйдет... по крайней мере один из провайдеров считает весь траффик
>>в том числе и пинг пакеты тоже... исходящие естевственно бесплатно, а
>>вот ответы, т.е. входящие - платно...
>прикинь объем этих пакетов по отношению к трафику и получишь стоимость этого
>пинга. если он тебе все-таки покажется большим, то можно увеличить период
>пингования, но, соответсвенно, это даст задержки в переключении.
>
>>Я думал может в iptables есть какое-то правило точнее условие для метки
>>на предмет наличия соединения...
>а что ты понимаешь под понятием "соединение"? строго говоря, на уровнях ниже
>чем TCP оно неопределено. вряд ли в данном контексте соединением может
>быть наличие линка на сетевухе... если только у тебя прямой Ethernet-линк
>до провайдера без всяких промежуточных устройств и при отказах у этого
>провайдера всегда отказывает только этот линк и ничего больше... но тогда
>этот линк нужно просто поменять на исправный...
Ну вот для TCP/IP соединений есть всяческие там состояния типа ESTABLISHED... а в принципе для интерфейса есть какие либо состояния... тот же линк например... т.е. вопрос то в том что если есть линк до провайдера то инет как правило тоже есть... но у них там стоит гранч, который постоянно вылетает... и линк физически пропадает, т.е. гаснет лампочка на сетевухе... вот состояние этой самой лампочки мне и надо узнать... ну а с пингом получается дороговато, но скорее всего придется использовать этот прием дабы подстраховаться... просто поставлю пинг раз в 20 минут... в крайнем случае посидят клиенты без интернета 20 мин. ничего страшного
>>>Ну то тоже в принципе тема, но только помоему это в круглую
>>>сумму выйдет... по крайней мере один из провайдеров считает весь траффик
>>>в том числе и пинг пакеты тоже... исходящие естевственно бесплатно, а
>>>вот ответы, т.е. входящие - платно...
>>прикинь объем этих пакетов по отношению к трафику и получишь стоимость этого
>>пинга. если он тебе все-таки покажется большим, то можно увеличить период
>>пингования, но, соответсвенно, это даст задержки в переключении.
>>
>>>Я думал может в iptables есть какое-то правило точнее условие для метки
>>>на предмет наличия соединения...
>>а что ты понимаешь под понятием "соединение"? строго говоря, на уровнях ниже
>>чем TCP оно неопределено. вряд ли в данном контексте соединением может
>>быть наличие линка на сетевухе... если только у тебя прямой Ethernet-линк
>>до провайдера без всяких промежуточных устройств и при отказах у этого
>>провайдера всегда отказывает только этот линк и ничего больше... но тогда
>>этот линк нужно просто поменять на исправный...
>
>
>Ну вот для TCP/IP соединений есть всяческие там состояния типа ESTABLISHED... а
>в принципе для интерфейса есть какие либо состояния... тот же линк
>например... т.е. вопрос то в том что если есть линк до
>провайдера то инет как правило тоже есть... но у них там
>стоит гранч, который постоянно вылетает... и линк физически пропадает, т.е. гаснет
>лампочка на сетевухе... вот состояние этой самой лампочки мне и надо
>узнать... ну а с пингом получается дороговато, но скорее всего придется
>использовать этот прием дабы подстраховаться... просто поставлю пинг раз в 20
>минут... в крайнем случае посидят клиенты без интернета 20 мин. ничего
>страшногоСпасибо мужики, вы идею подсказали,
вообще-то у меня такая же задача
я так жалею, что ещё не могу на perl скрипты писать
1) ping -s 10 mail.ru пример одно из решений s задаёт размер пакета
2) тот товарищ также прав на счёт интервала
>Доброго времени суток уважаемые линуксоводы :)
>
>Возникла у меня такая вот проблемма. Есть машина:
>eth0 - шлюз в интернет от одного провайдера
>eth1 - шлюз в интернет от другого провайдера
>eth2 - локальный интерфейс а котором висит некоторое количество клиентов, т.е. локальных
>сетей.
>
>Часть локалок висит на одном провайдере, а часть на другом... все это
>организовывается путем SNAT через iptables, на них же и файрволл построен.
>
>
>Вопрос: как сделать чтобы когда падает один из провайдеров другие пользователи автоматом
>NATились на другого провайдера???
>
>***Система: Mandrake 9.0zebra?
>>Доброго времени суток уважаемые линуксоводы :)
>>
>>Возникла у меня такая вот проблемма. Есть машина:
>>eth0 - шлюз в интернет от одного провайдера
>>eth1 - шлюз в интернет от другого провайдера
>>eth2 - локальный интерфейс а котором висит некоторое количество клиентов, т.е. локальных
>>сетей.
>>
>>Часть локалок висит на одном провайдере, а часть на другом... все это
>>организовывается путем SNAT через iptables, на них же и файрволл построен.
>>
>>
>>Вопрос: как сделать чтобы когда падает один из провайдеров другие пользователи автоматом
>>NATились на другого провайдера???
>>
>>***Система: Mandrake 9.0
>
>zebra?продолжаем
3) мне кажется провайдеры всего мира не считают локальный трафик
то есть в пределах их сетки, если скажем ping какого нибудь
хоста сдедующего за интерфейсом к которому вы подключены
>продолжаем
>3) мне кажется провайдеры всего мира не считают локальный трафик
> то есть в пределах их сетки, если скажем ping какого нибудь
>
>хоста сдедующего за интерфейсом к которому вы подключены
оно конечно хорошо, но не всегда...
например, у моего провайдера намного чаще пропадает связь с вышестоящим провайдером, нежели внутренние линки или линк от меня до провайдера...
т.е. любой сервак провайдера пингуется, а внешний мир - нет.хотя если оба линка ведут к одному маршрутизатору одного провайдера, то вряд ли на них связь с внешним миром будет пропадать по-отдельности, и, значит, переброс трафика делать смысла мало...
>>продолжаем
>>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Я проверял это вручную - работает
Не надо перл подключать для решения админовских задач, если задача может быть решена обычным bash-scripting.
посмотри системные стартовые скрипты - там всё очень понятноСмотри - простенький bash-скрипт
---
#!/bin/bash
if ping -s 0 -i 30 -c 2 rambler.ru >/dev/null 2>&1 ; then ### если проходит пинг
команда, какую надо
else
команда, какую надо
fi
---почитай man ping и положи этот скрипт в крон и будет тебе щастье :)
>Не надо перл подключать для решения админовских задач, если задача может быть
>решена обычным 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 тоже здорово!
>>Не надо перл подключать для решения админовских задач, если задача может быть
>>решена обычным 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 .... ? так верно?
>А как если нет ответа Ping
>if not ping .... ? так верно?ping -c $COUNT -i $WAIT $PINGADDR > /dev/null
if [ $? != 0 ] ; then # host is down
echo "down"
else
echo "up"
fi
а готовые решения вроде OSPF не нравятся?
>>А как если нет ответа 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 но я что-то разобраться не могу нифига
что-то народ куда-то в дебри полез...
внесу и свою лепту...я для контроля соединения (у меня всего один провайдер) через MRTG я использую вот такой скриптик:
#!/bin/bash
if ping -c 1 -I eth1 -w 1 213.85.29.65 > /dev/null; then
echo "1000";
else
echo "0";
fiif 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 я
>использую вот такой скриптик:
>#!/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 и т.д.
>В том, моя беда, я стлолько разных прог с инета пробовал и
>MRTG т SQUID
>около 20 штук ipactt net-acct ipac и т.д.
и что? как успехи?MRTG я упомянул только потому, что в нем я использую скрипт такого же назаначения - выяснить работает инет или нет...
>>В том, моя беда, я стлолько разных прог с инета пробовал и
>>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 ..... - это значит каждую минуту
только не помню точно
*/1 * * * * <user> </path/to/>script - раз в минуту.
Тут еще важно не погорячиться с частотой - он точно отработает за минуту?
>*/1 * * * * <user> </path/to/>script - раз в минуту.
>Тут еще важно не погорячиться с частотой - он точно отработает за
>минуту?
неплохо бы параметр -w добавить с парой секунд... тогда точно отработает...
>>*/1 * * * * <user> </path/to/>script - раз в минуту.
>>Тут еще важно не погорячиться с частотой - он точно отработает за
>>минуту?
>неплохо бы параметр -w добавить с парой секунд... тогда точно отработает...что -w означает? какой-то deadline не пойму смысл параметра
>что -w означает? какой-то deadline не пойму смысл параметра
максимальное время ожидания ответа. если за это время ответа не пришло, то завершить обработку (послать следующий или выйти). Указывается, чтобы ping гарантированно завершился через небольшое время (потому как параметр -с указывает количество _полученных_ пакетов; их может и вообще не быть).PS Learn English.
>>что -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.
>продолжаем
>3) мне кажется провайдеры всего мира не считают локальный трафик
> то есть в пределах их сетки, если скажем ping какого нибудь
>
>хоста сдедующего за интерфейсом к которому вы подключены
Мне кажется, что такое глобальное обобщение как минимум неточно.
Как максимум-транспорт провайдера помрет от такой бесплатности.
>продолжаем
>3) мне кажется провайдеры всего мира не считают локальный трафик
> то есть в пределах их сетки, если скажем ping какого нибудь
>
>хоста сдедующего за интерфейсом к которому вы подключеныНеправдушки ваши. Считают. Могут даже трафик до своего сервера статистики вам приписать. Как пример -- подсчет на уровне портов. То есть провайдер берет и считает сколько у него уходит с порта циски/DSLMax/еще чего-нибудь. А то и с пользовательского интерфейса считает :)
И если в случае циски это неоправдано, то при пользовании железяк, у которых просто нет возможности разделить трафик -- провайдеру просто не остается другого варианта. Это они так говоят :)
В любом случае способ подсчета трафика провайдером -- как правило неизменяемая данность: как он решил для себя, так и будет считать (а решит он по принципу персональной выгоды)