LINUX.ORG.RU
ФорумAdmin

PPP циклически удаляет default route


0

0

Доброго времени суток! Имеется рутер с тремя сетевыми интерфейсами: eth0 (ppp0) - ISP 1 eth1 (ppp1) - ISP 2 eth2 - LAN

Проблема в том что у меня есть два ppp соединения и скрипт проверяющий доступность этих самый соединений. Скрипт также устанавливает маршрут поумолчанию. Проблема в том что при падении одного из ppp соединений, pppd начинает циклические попытки подключений, при этом если подключение прошло неудачно он убивает маршрут по умолчанию, и неважно, кто этот маршрут по умолчанию создал. опция DEFROUTE=no не спасает. как я подозреваю, дело в кривых скриптах инициализации. Подскажите какие именно скрипты посмотреть чтобы ppp не удалял default route при падении канала на который этот самый defroute указывает? Знаю что криво, но в моей ситуации самое оно!

погугли, там будут опции. Только они не во всех версиях pppd работают и действительно есть засада со скриптами.

true_admin ★★★★★ ()
Ответ на: комментарий от true_admin

Я уже просто в панике :) есть в версии pppd 2.4.5 noreplacedefaultroute опция, но у меня такая машина, что отрубить связь просто нельзя 24х7 пашет.

Я придумал сделать так: у меня есть 3 таблицы маршрутизации: MAIN, ISP1 (flowid 10), ISP2 (flowid 20) Я хочу маршрутизировать траф по меткам, тоесть, если работает ISP1 а ISP2 недоступен, делаю так: iptables -t mangle -A OUTPUT -j MARK --set-mark 10 И если я прав то «мерцание» маршрута по умолчанию мне уже неважно, но ошибится и положить связт нехочется. Подскажите плиз, я на правильном пути?

keferoff ()

>чтобы ppp не удалял default route при падении канала на который этот самый defroute указывает

никак. ядро само удаляет этот маршрут при падении интерфейса. решение проблемы - не использовать default route, а пользоваться iproute2 tables+rules.

Cosmicman ★★ ()

Скрипт также устанавливает маршрут поумолчанию.

pppd сам замечательно умеет устанавливать маршрут по умолчанию. А ещё может быть хоть сколько маршрутов по умолчанию с разными метриками =).

Deleted ()
Ответ на: комментарий от Deleted

И не надо никаких корявых говноскриптов.

Deleted ()

>скрипт проверяющий доступность этих самый соединений

Это что-то типа failover? Скриптиком не поделитесь ^_^

anton_jugatsu ★★★★ ()
Ответ на: комментарий от anton_jugatsu

Да у меня говноскрипт если честно :)
Но если нужно, вот исходник.

#!/bin/bash

##############################################################################################################
# Common Variables #
##############################################################################################################

#Other variables
HOSTNANE=/bin/hostname
LOGGER=/bin/logger
IFCONFIG=/sbin/ifconfig
IP=/sbin/ip
GREP=/bin/grep
AWK=«/bin/awk»
CUT=/usr/bin/cut

ADSLSTART=/sbin/adsl-start
ADSLSTOP=/sbin/adsl-stop

#Interface static source address
MEGALINK_SRC=«193.200.32.235»
VEGA_ARCHER_SRC=«213.227.241.95»

#Virtual interfaces dynamic recognation
MEGALINK_IFACE=`$IP addr list | $GREP $MEGALINK_SRC | $AWK '{print $7}'`
VEGA_ARCHER_IFACE=`$IP addr list | $GREP $VEGA_ARCHER_SRC | $AWK '{print $7}'`

#Control hosts (dslam`s or first hop routers)
TARGET_HOST_MLINK=`$IFCONFIG | $GREP $MEGALINK_SRC | $AWK '{print $3}' | $CUT -b 7-21`
TARGET_HOST_VEGA=`$IFCONFIG | $GREP $VEGA_ARCHER_SRC | $AWK '{print $3}' | $CUT -b 7-21`

#Dslams`s of first hop routers ICMP type 8 test
MLINK_TEST=`ping -c 10 $TARGET_HOST_MLINK -I $MEGALINK_IFACE`
VEGA_ARCHER_TEST=`ping -c 10 $TARGET_HOST_VEGA -I $VEGA_ARCHER_IFACE`

##############################################################################################################
# Checking channell`s availability #
##############################################################################################################

#If Megalink line is down after both lines works correctly and Vegatelecom line is up.
if [[ ! $MLINK_TEST == *«64 bytes from»* ]] && [[ $VEGA_ARCHER_TEST == *«64 bytes from»* ]] && [[ ! -e «/var/lock/channel_checker/mlink_down.lock» ]];
then
#Logs link down trap and send to remote syslog server
$LOGGER «`date +'%b %d %T'` $HOSTNAME channel_checker: megalink line is down»
#Execute file with iptables mark directives
source /root/iptables/iptables.megalink_down &> /dev/null
#Makes a «lock» that prevent multiply «mark file» execution
touch /var/lock/channel_checker/mlink_down.lock
#If Vegatelecom line is down after both lines works correctly and Megalink line is up.

else if [[ $MLINK_TEST == *«64 bytes from»* ]] && [[ ! $VEGA_ARCHER_TEST == *«64 bytes from»* ]] && [[ ! -e «/var/lock/channel_checker/vega_down.lock» ]]; then
#Logs link down trap and send to remote syslog server
$LOGGER «`date +'%b %d %T'` $HOSTNAME channel_checker: vegatelecom line is down»
#Execute file with iptables mark directives
source /root/iptables/iptables.vega_down &> /dev/null
#Makes a «lock» that prevent multiply «mark file» execution
touch /var/lock/channel_checker/vega_down.lock

#If both lines in down
else if [[ ! $MLINK_TEST == *«64 bytes from»* ]] && [[ ! $VEGA_ARCHER_TEST == *«64 bytes from»* ]];
then
#Logs link down trap and send to remote syslog server
$LOGGER «`date +'%b %d %T'` $HOSTNAME channel_checker: all lines in down»
touch /var/lock/channel_checker/mlink_down.lock
touch /var/lock/channel_checker/vega_down.lock

# If Megallink line has restored after failure
else if [[ $MLINK_TEST == *«64 bytes from»* ]] && [[ ! $VEGA_ARCHER_TEST == *«64 bytes from»* ]] && [[ -e «/var/lock/channel_checker/mlink_down.lock» ]];
then
#Logs link down trap and send to remote syslog server
$LOGGER «`date +'%b %d %T'` $HOSTNAME channel_checker: megalink line restored after failure, vegatelecom stil in down»
rm -rf /var/lock/channel_checker/mlink_down.lock
source /root/iptables/iptables.vega.down &> /dev/null

# If Vegatelecom line has restored after failure
else if [[ ! $MLINK_TEST == *«64 bytes from»* ]] && [[ $VEGA_ARCHER_TEST == *«64 bytes from»* ]] && [[ -e «/var/lock/channel_checker/vega_down.lock» ]];
then
#Logs link down trap and send to remote syslog server
$LOGGER «`date +'%b %d %T'` $HOSTNAME channel_checker: vegatelecom line restored after failure, megalink line stil in down»
rm -rf /var/lock/channel_checker/vega_down.lock
source /root/iptables/iptables.mlink_down &> /dev/null

else if [[ $MLINK_TEST == *«64 bytes from»* ]] && [[ $VEGA_ARCHER_TEST == *«64 bytes from»* ]] && [[ -e «/var/lock/channel_checker/mlink_down.lock» || -e «/var/lock/channel_checker/vega_down.lock» ]];
then
#Logs link down trap and send to remote syslog server
«$LOGGER `date +'%b %d %T'` $HOSTNAME channel_checker: all lines restored after failure»
rm -rf /var/lock/channel_checker/mlink_down.lock
rm -rf /var/lock/channel_checker/vega_down.lock
source /root/iptables/iptables.megalink_vega_up &> /dev/null
source /root/iptables/iptables.megalink_vega_up &> /dev/null

fi
fi
fi
fi
fi

keferoff ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.