Мы используем несколько провайдеров, один из них для создания соединения использует 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) автоматически удаляет все связанные маршруты при удалении соответствующих интерфейсов.