Приведённые скрипты, подразумевают, что уже должен существовать маршрут по умолчанию. А если его нет?
Пользователь решил продолжить мысль 16 Июля 2011, 22:19:33:
Т.е. приоритет такой: анлим если есть (ppp1), если нету то eth0, и если уже совсем всё плохо то ppp0.
Странно, что мне раньше в голову это не пришло. Реально все очень просто:
Три маршрута по умолчанию с разными метриками, которые и помогают нам выставить приоритет, наименьшая метрика - наивысший приоритет.
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 0.0.0.0 0.0.0.0 U 30 0 0 ppp0
0.0.0.0 2.2.2.3 0.0.0.0 U 20 0 0 eth0
0.0.0.0 0.0.0.0 0.0.0.0 U 0 0 0 ppp1
Если недоступен ppp1 гуляем через eth0, в свою очередь если недоступен eth0, гуляем через ppp0.
Метрику маршрутов ppp0 и ppp1 можно выставить написав простейший скрипт в /etc/ppp/ip-up.d/, например
#!/bin/sh
# См /etc/ppp/ip-up для переменных
if [ $6 = "peer_name1" ]; then
ip r a default dev $1 metric one_metric
elif [ $6 = "peer_name2" ]; then
ip r a default dev $1 metric another_metric
fi
exit 0
И убрав в /etc/ppp/peers/<conn_name> упоминания о маршрутах по умолчанию.
А метрику для eth0 можно выставить в /etc/network/interfaces опция metric.
В принципе использование скриптов, выполняемых при поднятии и опускании интерфейсов, позволяет избегать пингования шлюзов, иногда бесполезных, бывает, там просто запрещены эхо-ответы.