22.07.2008 в 13:18 — Rognvaldr
Подскажите, плз, как провернуть такую проблему: на сервер с дебианом подходят два провайдера(1 и 2). 1 - основной провайдер, работающий постоянно, 2 - резервный. Что нужно сделать, чтобы в случае прекращения работы провайдера 1 сервак автоматически переключался на 2. А при восстановлении связи на 1 - возвращался к нему?
Комментарии
/etc/network/ (if-down.d/ if-post-down.d/ if-pre-up.d/ if-up.d/ )
а что там необходимо прописать? нет ли у вас исходников? (пардон, но дебиан я плохо знаю =))
Пишешь 2 скрипта с настройками айпитэйблс для шлюза на провайдера 1 и на провайдера 2
вкаталог /etc/network/ if-down.d ложишь скрипт провайдера 2, в заголовке которого описываешь правила сброса всех настроек айпитэйблса и поднятия нужных для провайдера 2 . Скрипт должен иметь определенное имя, которое содержит в себе имя ифейса упавшего, точно с лету не скажу, нужно копать
вкаталог /etc/network/ if-up.d/ так же ложишь скрипт с правильным названием для провайдер 1, в котором так же с начала идет сброс параметров айпитэйблс и настройка новых для провайдер 1
тогда призагрузке компа и при поднятии интерфейса провайдер 1 у тебя сработает скрипт для прова 1, а при падении этого ифейса сработает скрипт для провайдера 2 на автомате. Когда интерфейс провайдер 1 поднимится снова, то снова отработает его скрипт и траффик польется через него
так же можно написать скрипт руками на баше без мучений с этими каталогами, если нужен пример, то могу написать пример подобного скрипта
был бы очень благодарен! =)
Этот скрипт я накидал в течении 40 секунд в теории, не проверял, т.к. нет на рабочей машине более 1го физического нтерфейса. Скрипт основан на том, что на серваке в качестве днс указан днс провайдера, если не так, то это можешь поправить изменив регулярное выражение, если не знаешь, то покажу как.
#!/usr/bin/perl
$scripts_path = "put path to scripts";
$prov1_exec = "put script name for prov1";
$prov2_exec = "put script name for prov2";
$prov1_iface = "put prov1 interface";
$prov2_iface = "put prov2 interface";
$current_prov = "1";
while (1) {
WHILE:
sleep 300;
$ping_prov1 = `ping -I $prov1_iface -c 1 `;
$ping_prov2 = `ping -I $prov2_iface -c 1 `;
$foo = "";
if($current_prov eq "1") {
if ($ping_prov1 =~ m/.*unknown.*/) {
if ($ping_prov2 =~ m/.*unknown.*/) {
print "Network is down!\n";
continue WHILE;
}
$foo = `$scripts_path/$prov2_exec`;
$current_prov = "2";
}
}
if($current_prov eq "2") {
if ($ping_prov1 =~ m/.*unknown.*/) {
if ($ping_prov2 =~ m/.*unknown.*/) {
print "Network is down!\n";
continue WHILE;
}
}
$foo = `$scripts_path/$prov1_exec`;
$current_prov = "1";
}
}
$ping_prov1 = `ping -I $prov1_iface -c 1 `;
$ping_prov2 = `ping -I $prov2_iface -c 1 `;
я бы таких одминов престрелил, man route2 юзойте
Очередной крутой перец?
Можешь лучше - сделай молча (с) и не выпендривайся
Тебе ясно дали понять, что написал на коленке не раздумывая. Каждый умник мля желает чето выложить. Где ты был все это время, что сам не помог?
Особо ман роут твой спасет если у него цепочка из 2х а то и более локальных проксей для отсечения рекламы и пара впн тунеллей поверх эзэрнет
у него не цепочка из проксей, и не впн даже а его это спасет, а пинговать каждый раз извините уродство это, меня отсечение рекламы мало волнует а вот работоспособность линии всегда, впн тянет поверх езернет следовательно ему не особо важно на каком из провайдеров крутится так что тут при умелой настройке максимум реконект и всё.. можно конечно на коленях писать скрипты. а потом звонить провайдеру и плакаться... жалуясь на саппорт, меня чесно слово вечные пинги достали, так как умелые админы додумываются пинговать не яндекс а именно сайт провайдера или шлюз...
P.S. не нравится route2 учитесь использовать watchdog там вроде легко до ужаса, есть также программа tc, ip route2. потому что сначала почитайте потом пишите всё, куча средств, лишь выбирай!