Задача такова.
Есть некоторая дом.сеть с подсетью А (для конкретики будет /23) в этой подсети выделена подсеть меньшего размера Б (для конкретики /26, входящая в /23).
Есть Cisco-рутер с двумя городскими каналами (и соотв. внешкой) + IP-туннелем до третьего провайдера с более дешёвым внешним трафиком.
Политика маршрутизации такова что по умолчанию подсеть Б (/26) всегда должна роутится чз IP-туннель. Соотв. у меня на внутреннем интерфейсе стоит route-map вида
route-map FOR_SUBNET_B permit 10
match ip address $ACL_OF_SUBNET_B
set ip next-hop $IP_ADDRESS_OF_IP_TUNNEL
т.е. независимо от состояния таблицы маршрутизации (а для 2-х городских каналов исп-ся BGP), трафик из подсети B постоянно уходит в IP-туннель.
Соотв. падение/отключение за неуплату одного из городских аплинков не смертельно для подсети А, а вот падение IP-туннеля "смертельно" для подсети Б.
Хотелось бы всё таки иметь запасной вариант для маршрутизации трафика подсети Б (/26) не чз IP-туннель а чз городские каналы, но как это сделать пока не представляю.
Можно было бы конечно сделать решение в лоб, типа:
route-map FOR_SUBNET_B permit 10
match ip address $ACL_OF_SUBNET_B
set ip next-hop $IP_ADDRESS_OF_IP_TUNNEL
set ip next-hop $IP_ADDRESS_OF_PROVIBER_GW
Предполагая что при падении IP-туннеля сработает второй next-hop. Собственно говоря так и происходит когда интерфейс туннеля administratively disabled, но это приходится делать ручками.
В нормально ситуации интерфес туннеля всегда up
В Linux-e я бы подобную задачу решил заведением отдельной таблицы маршрутизации (не kernel routing table а доп., н-р subnet_b) и правилами вида:
/sbin/ip rule add prio 1000 from $SUBNET_B lookup subnet_b_table
/sbin/ip rule add prio 32768 from all lookup main
дальше с помощью того же bird или quagga можно настроить динамическое изменение именно subnet_b_table по одном из протоколов (BGP,OSPF,RIP)
но есть ли подобная фича в IOS я не знаю.