Назад | Перейти на главную страницу

Как предотвратить удаление pppd маршрута по умолчанию?

Мы используем несколько провайдеров, один из них для создания соединения использует pppoe через демон pppd в ubuntu 14.04.

Ранее без нескольких провайдеров pppd самостоятельно управляет маршрутом по умолчанию (создавая его при установлении соединения и удаляя его, когда pppoe не работает). Но теперь я забанил его следующими опциями в peers/rt

nodefaultroute
noreplacedefaultroute

Потому что мне нужны более сложные IP-правила для работающей схемы с несколькими провайдерами.

Я исследовал сценарии pppd ip-up, ip-down, ip-up.d, ip-down.d, но не нашел удаления маршрута по умолчанию.

Поэтому я предположил, что это делается в их коде.

Я могу добавить post-down директива в конфигурации провайдера /etc/network/interfaces файл как есть:

ip route add default dev ppp60 table default

Как уловка.

Я планировал управлять маршрутом по умолчанию в отдельном скрипте инициализации.

Есть ли обходной путь для предотвращения того, чтобы pppd управлял (удалял) маршрут по умолчанию?

ОБНОВЛЕНИЕ1:

Я хочу запретить pppd удалять маршрут по умолчанию default dev ppp60 scope link, когда соединения восстанавливаются или прерываются.

Я использую интерфейсы (pppd управляется командами ifup и ifdown) и стандартные инструменты настройки сетевой подсистемы debian / ubuntu, например:

auto rt
iface rt inet ppp
provider rt
pre-up /sbin/ifconfig ethtop up
post-up until ip a | grep -q ppp60; do sleep 1 > /dev/null; done
post-up ip route add default via "$( ip -4 a show dev "ppp60" |   grep -E '\<peer\>' | sed -r 's/.*peer ([^ /]*).*/\1/' )" table isc-rt
post-up ip rule add pref 30001 fwmark "0x$( gethostip -x "$(ip -4 a show dev "ppp60" | grep -E '\<inet\>' | sed -r 's/.*inet ([^ /]*).*/\1/')" )" lookup isc-rt
post-up ip rule add pref 30002 from "$( ip -4 a show dev "ppp60" | grep -E '\<inet\>' | sed -r 's/.*inet ([^ /]*).*/\1/' )" lookup isc-rt
post-up ip rule add pref 30003 to "$( ip -4 a show dev "ppp60" | grep -E '\<peer\>' | sed -r 's/.*peer ([^ ]*).*/\1/'  )" lookup isc-rt
post-up /etc/init.d/fw restart
post-down ip route flush table isc-rt
post-down ip rule del pref 30001
post-down ip rule del pref 30002
post-down ip rule del pref 30003
post-down /etc/init.d/fw restart

Это мои основные маршруты:

root@gate:/etc/ppp# ip route list
default dev ppp60  scope link 
10.0.3.0/24 dev lxcbr0  proto kernel  scope link  src 10.0.3.1 
10.8.0.0/24 via 192.168.128.13 dev br-eth0 
83.Y.Y.196 dev ppp60  proto kernel  scope link  src 93.Y.Y.67 
95.X.X.0/24 dev ethmiddle  proto kernel  scope link  src 95.X.X.40 
192.168.128.0/24 dev br-eth0  proto kernel  scope link  src 192.168.128.1 

Также у меня есть таблицы для каждого провайдера с его шлюзом по умолчанию.

Это мои варианты pppd:

root@gate:/etc/ppp# awk '!/^ *#/ && NF' /etc/ppp/options 
asyncmap 0
noauth
crtscts
lock
hide-password
modem
lcp-echo-interval 30
lcp-echo-failure 4
noipx

Это моя текущая конфигурация однорангового провайдера:

user "gsdf6sg84"
noipdefault
defaultroute
unit 60
hide-password
lcp-echo-interval 20
lcp-echo-failure 3
noauth
persist
mtu 1492
maxfail 0
plugin rp-pppoe.so ethtop
debug

Ядро (не pppd) автоматически удаляет все связанные маршруты при удалении соответствующих интерфейсов.