xtavras 29.04.2013 14:47

Есть вопрос! [РЕШЕНО] Автоматический роутинг для нескольких 3G модемов.

Есть машину с несколькими 3G модемами, все модемы работают. Цель - при выходе из строя одного из модемов (нет сети, физически сломан и т.д), трафик автоматически шел через оставшиеся.
В принципе это почти работает. Есть три модема (ppp1, ppp2, ppp3) с 3мя гейтвеями (10.64.64.1,10.64.64.2,10.64.64.3). С помощью iproute2 можно их объединить в общий default scope.

1
ip route add default scope global nexthop via 10.64.64.1 dev ppp1 weight 1 nexthop via 10.64.64.2 dev ppp2 weight 1 nexthop via 10.64.64.3 dev ppp3 weight 1



Таким образом, если ppp1 выйдет из строя, все пойдет через ppp2, и это даже работает несколько секунду: ppp1 помечается как "dead" и трафик идет через ppp2 (это хорошо видно в ifconfig'e) но потом интерфейс ppp1 отваливается (логично, если нет сети) и весь рутинг удаляется. Вопрос можно ли это как то побороть?

UPD: Решил проблему с помощью ip-down скрипта вот таким образом, если кому интересно (утилита ifdata входит в пакет moreitils)

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
export DEVICE1=DOWN
export DEVICE2=DOWN
export DEVICE3=DOWN
export DEVICE4=DOWN
for i in 1 2 3 4
do if ifdata -e ppp$i; then
#echo "yes" >> /tmp/test_ip.txt
export DEVICE$i=UP
fi
done
ip route del default
if [ $DEVICE1 = UP ]; then
#echo "ppp1 is up" >> /tmp/test_ip.txt
ip route add default via 10.64.64.65
fi

if [ $DEVICE2 = UP ]; then
#echo "ppp2 is up" >> /tmp/test_ip.txt
ip route add default via 10.64.64.66
fi
if [ $DEVICE3 = UP ]; then
#echo "ppp3 is up" >> /tmp/test_ip.txt
ip route add default via 10.64.64.67
fi
if [ $DEVICE4 = UP ]; then
#echo "ppp4 is up" >> /tmp/test_ip.txt
ip route add default via 10.64.64.68
fi



Тэги: iproute2 Сеть
+ 2 -
Похожие Поделиться

ananas 30.04.2013 09:00 #
bonding, не?
xtavras 30.04.2013 12:11 #
bonding как таковой для ppp невозможен, есть аналогичный multilink ppp, но для него нужна поддержка у второй стороны, в данном случае провайдера, а они ее не предоставляют.
dront78 30.04.2013 15:54 #
xtavras 02.05.2013 16:33 #
Спасибо, интересно, но в моем случае не совсем подходит, мне нужно что-то на низком уровне.
dront78 30.04.2013 10:17 #
есть if-up/down скрипты
по идее для всей сети при смене состояния можно написать скрипт изменения роутинга для _доступных_ на момент вызова модемов

и да. объединение в bonding - хорошая идея)
xtavras 02.05.2013 16:32 #
Сходу ip-down скрипты не заработали, и я не совсем уверен что они будут работать, если подключение само прервется, а не я сам завершу его с помошью ip-down? Еще интересное наблюдение, если я вытаскиваю антенну, то ppp0 никуда не пропадает, а вот если добавил в default scope то вылетает через 10 секунд, я так подозреваю это делает iproute после того как помечает его "dead"...