Автор Тема: Автопереключение между 2-мя провайдерами  (Прочитано 3131 раз)

Оффлайн iplir

  • Участник
  • *
  • Сообщений: 97
Всем здравствуйте !

Столкнулся с проблемой, какой день не дает спать спокойно.
Стоит AltLinux  office Server 4

Есть 2 провайдера :
1-ый
   Ip 85.12.хх.хх
   Gateway 85.12.xx.yy
2-ой
   Ip 89.251.xx.xx
   Gateway 89.251.xx.yy.

По отдельности если руками переключаешь, работает, но хотелось бы сделать переключение автоматическим.

Я создал файл auto (sh) и скопировал c инета  содержимое

#!/bin/bash
 PINGHOST= Gateway 85.12.xx.yy
 while 1 do
 ping -qnc 10 $PINGHOST
 if [ $? != 0 ]; then
 if [ $PINGHOST == 85.12.xx.yy ]; then
   rm -rf /etc/net/ifaces
   cat /etc/net/ifaces/eth1 > /etc/net/ifaces
   /etc/init.d/network restart
    sleep 1800
   rm -rf /etc/net/ifaces
   cat /etc/net/ifaces/eth0 > /etc/net/ifaces
   /etc/init.d/network restart
  fi
  fi
sleep 5
 exit

и выдает ошибку синтаксиса line 17 (это exit).

Что может быть не правильно?

 Или подскажите альтернативу, как сделать атопереключение между 2-мя провайдерами

Заранее спасибо !
« Последнее редактирование: 26.05.2009 12:29:21 от Skull »

Оффлайн Andrey

  • Участник
  • *
  • Сообщений: 734
В конце есть завершающий воод, т.е. после 17 й строки должна быть пустая 18тая.

Оффлайн iplir

  • Участник
  • *
  • Сообщений: 97
В конце есть завершающий воод, т.е. после 17 й строки должна быть пустая 18тая.

Поставил пустую строку , пишет : line 18: syntax error

Оффлайн Andrey

  • Участник
  • *
  • Сообщений: 734
Не хватает done от цикла
перед exit
ну или после как вам надо
« Последнее редактирование: 26.05.2009 12:38:27 от Skull »

Оффлайн Andrey

  • Участник
  • *
  • Сообщений: 734
Вот так попробуйте, не вдаюсь в правильность тогочто написано внутри цыкла....  ;)
#!/bin/bash
 PINGHOST= Gateway 85.12.xx.yy
 while 1
do
 ping -qnc 10 $PINGHOST
 if [ $? != 0 ]; then
 if [ $PINGHOST == 85.12.xx.yy ]; then
   rm -rf /etc/net/ifaces
   cat /etc/net/ifaces/eth1 > /etc/net/ifaces
   /etc/init.d/network restart
    sleep 1800
   rm -rf /etc/net/ifaces
   cat /etc/net/ifaces/eth0 > /etc/net/ifaces
   /etc/init.d/network restart
  fi
  fi
sleep 5
 exit
done
А вообще, задача кажется решается с помощью iproute2.
« Последнее редактирование: 26.05.2009 12:40:06 от Andrey »

Оффлайн iplir

  • Участник
  • *
  • Сообщений: 97
поставил после
fi
done
exit

Ошибка:
./auto: line 16: syntax error near unexpected token `done'
./auto: line 16: `done'




Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 20 191
    • Домашняя страница
Не хватает done от цикла
перед exit
ну или после как вам надо
Ему скорее надо до exit. Это бесконечный цикл со странными таймаутами.
Андрей Черепанов (cas@)

Оффлайн iplir

  • Участник
  • *
  • Сообщений: 97
sleep 1800  это после переключения ждет 30 минут и пробует обратно

Оффлайн iplir

  • Участник
  • *
  • Сообщений: 97
./auto: line 3: 1: command not found

вот такая ошибка и почему ему не нравится непонятно


Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 376
  • Учиться .... Телепатами не рождаются, ими ....
http://lartc.org/howto/lartc.rpdb.multiple-links.html
/usr/share/doc/etcnet-0.9.9/examples/routing-LARTC-1/   

Оффлайн Ilya Evseev

  • Участник
  • *
  • Сообщений: 52
Могу порекомендовать собственный костыль:
http://sources.homelink.ru/fallback-gw/

Оффлайн iplir

  • Участник
  • *
  • Сообщений: 97
http://lartc.org/howto/lartc.rpdb.multiple-links.html
/usr/share/doc/etcnet-0.9.9/examples/routing-LARTC-1/   

А можно ли без "additional routing tables" ?

Оффлайн Salomatin

  • Модератор раздела
  • ****
  • Сообщений: 984
    • Пошаговые инструкции
Стоит AltLinux  office Server 4
Есть 2 провайдера :
1-ый
   Ip 85.12.хх.хх
   Gateway 85.12.xx.yy
2-ой
   Ip 89.251.xx.xx
   Gateway 89.251.xx.yy.
По отдельности если руками переключаешь, работает, но хотелось бы сделать переключение автоматическим.

Шаг 1:  настройки 1 провайдера
file /etc/net/ifaces/eth0/ipv4address
85.12.хх.хх/24
#ответ на входящий на eth0 трафик снаружи
file /etc/net/ifaces/eth0/ipv4route
default via 85.12.xx.yy src 85.12.xx.xx table optic
default via 85.12.xx.yy
#посылаем весь трафик с адреса 85.12.xx.xx в таблицу optic
file /etc/net/ifaces/eth0/ipv4rule
from 85.12.xx.xx table optic

Шаг 2:  настройки второго провайдера
file /etc/net/ifaces/eth1/ipv4address
89.251.xx.xx/24
#ответ на входящий на eth1 трафик снаружи
file /etc/net/ifaces/eth1/ipv4route
default via 89.251.xx.уу src 89.251.xx.xx table adsl
#посылаем весь трафик с адреса 89.251.xx.xx в таблицу adsl
file /etc/net/ifaces/eth1/ipv4rule
from 89.251.xx.xx table adsl

Шаг №3: Создаем 2 таблицы маршрутизации ( adsl optic)
#cat /etc/iproute2/rt_tables
#
# reserved values
#
255 local
254 main
253 default
200 optic
199 adsl
0 unspec
#
# local
#
#1 inr.

Шаг №4:
#service network restart

Сервер виден снаружи по двум адресам одновременно.     


Если в  /etc/net/ifaces/eth0/ipv4route убрать строку
default via 85.12.xx.yy
прописав аналогичную в eth1 ,
default via 85.251.xx.yy
#service network restart
то выход изнутри будет по ADSL.

либо командой

ip ro del default # убить
ip ro add default via 85.251.xx.yy # назначить новый, то или тот

и ваш скрипт становится очень простым.

http://forum.altlinux.org/index.php/topic,964.msg21960.html#msg21960
http://forum.altlinux.org/index.php/topic,964.msg28504.html#msg28504
Хочешь понять сам, объясни другому.
"Если уже все испробовал и ничего не помогает - почитай инструкцию"