eth0 = LAN
ppp0 = WAN
ppp1 = WAN
Есть скрипт, который поднимает два маршрута по умолчанию, если оба конекта активны. Находится в папке /etc/ppp/ip-up.d
#!/bin/sh
# ip-up.d balancing dual-WAN script.
# Prov1 routing. Table provider1.
isp1rt() {
ip route add 192.168.1.0/24 dev eth0 table provider1
ip rule add from $(ip a s dev ppp0 |tail -1 | awk '{print $2}') table provider1
ip route add default dev ppp0 table provider1
}
# Prov2 routing. Table provider2.
isp2rt() {
ip route add 192.168.1.0/24 dev eth0 table provider2
ip rule add from $(ip a s dev ppp1 |tail -1 | awk '{print $2}') table provider2
ip route add default dev ppp1 table provider2
}
# Check channels and select route.
if [ "$6" = "dsl-provider2" ] && [ -f /var/run/ppp1.pid ]; then
if [ $(ip r | grep nexthop | wc -l) != 2 ]; then
ip route del default
ip route add default nexthop dev ppp0 weight 9 nexthop dev ppp1 weight 7
isp1rt
isp2rt
fi
elif [ "$6" = "dsl-provider2" ] && [ ! -f /var/run/ppp1.pid ]; then
ip route add default dev ppp1
fi
if [ "$6" = "dsl-provider" ] && [ -f /var/run/ppp0.pid ]; then
if [ $(ip r | grep nexthop | wc -l) != 2 ]; then
ip route del default
ip route add default nexthop dev ppp0 weight 9 nexthop dev ppp1 weight 7
isp1rt
isp2rt
fi
elif [ "$6" = "dsl-provider" ] && [ ! -f /var/run/ppp0.pid ]; then
ip route add default dev ppp0
fi
exit 0
Второй скрипт, находится в папке /etc/ppp/ip-down.d и предназначен для назначения одного дефолтного маршрута, при падении одного из них.
#!/bin/sh
# ip-down.d balancing dual-WAN script.
# Flushing Route tables isp1 and isp2
flushtbl() {
ip route flash table provider1
ip route flash table provider2
ip route flash cache
}
# Check channels, flushing rules & route tables. Select default route.
if [ "$6" = "dsl-provider2" ] && [ -f /var/run/ppp1.pid ]; then
<------>ip rule del from $(ip a |grep ppp1 | tail -1 |awk '{print $2}') table provider2
<------>ip route del default
<------>ip route add default dev ppp1
<------>flushtbl
elif [ "$6" = "dsl-provider2" ] && [ ! -f /var/run/ppp1.pid ]; then
flushtbl
ip route del default
fi
if [ "$6" = "dsl-provider" ] && [ -f /var/run/ppp0.pid ]; then
<------>ip rule del from $(ip a |grep ppp0 | tail -1 |awk '{print $2}') table provider1
<------>ip route del default
<------>ip route add default dev ppp0
<------>flushtbl
elif [ "$6" = "dsl-provider" ] && [ ! -f /var/run/ppp0.pid ]; then
flushtbl
ip route del default
fi
Вот содержимое rt_tables:
#
# reserved values
#
255<--->local
254<--->main
253<--->default
102<--->provider2
101<--->provider1
0<----->unspec
#
# local
#
#1<---->inr.ruhep
При поднятых 2-х интерфейсах ppp+
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
208.100.61.101 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0
195.82.146.114 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0
85.25.118.35 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0
212.117.174.172 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0
94.100.191.201 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0
94.100.191.202 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0
217.20.154.42 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0
94.100.191.203 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0
217.20.154.43 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0
94.100.191.204 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0
217.20.154.44 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0
195.2.238.16 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0
95.66.185.86 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0
217.20.154.45 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0
176.31.107.75 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0
195.2.238.18 0.0.0.0 255.255.255.255 UH 0 0 0 ppp1
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
0.0.0.0 0.0.0.0 0.0.0.0 U 0 0 0 ppp0
208.100.61.101 dev ppp0 scope link
195.82.146.114 dev ppp0 scope link
85.25.118.35 dev ppp0 scope link
212.117.174.172 dev ppp0 scope link
94.100.191.201 dev ppp0 scope link
94.100.191.202 dev ppp0 scope link
217.20.154.42 dev ppp0 scope link
94.100.191.203 dev ppp0 scope link
217.20.154.43 dev ppp0 scope link
94.100.191.204 dev ppp0 scope link
217.20.154.44 dev ppp0 scope link
195.2.238.16 dev ppp0 proto kernel scope link src 195.2.238.226
195.2.238.16 dev ppp1 proto kernel scope link src 46.148.140.32
95.66.185.86 dev ppp0 scope link
217.20.154.45 dev ppp0 scope link
176.31.107.75 dev ppp0 scope link
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.1
default
nexthop dev ppp0 weight 9
nexthop dev ppp1 weight 7
И после падения одного из них
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
195.2.238.16 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
195.2.238.16 dev ppp0 proto kernel scope link src 195.2.238.226
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.1
При этом связь со шлюзом есть, а вот ping наружу
ping ya.ru
ping: unknown host ya.ru
Соответственно инета ни на шлюзе ни в локалке нет.
Я понимаю что проблема в скрипте ip-down.d но в чем не пойму.