Есть железка (обозначим как host1) на Linux, которая должна общаться с двумя удаленными железками (host2 и host3). Железка подключенная двумя интерфейсами к двум... назовем это «маршрутизаторам» (хотя функционально ограниченными), R1 и R2. Каждый маршрутизатор соединен двумя каналами через внешние сети с обоими удаленными железкам (внешняя сеть не IP, для маршрутизатора каждый канал выглядит как выделенный).
Вот так: https://i.ibb.co/myfdxcB/net.png
Если какой-то канал (ch1 или ch2) становится недоступен, то на маршрутизаторе пропадает и соответствующий маршрут на удаленную железку. На host1 каждый маршрутизатор умеет сообщать свои маршруты только по RIPv2 и больше никак. При этом все активные маршруты передает с одинаковой метрикой.
Т.е., если все каналы работают, то на локальной железке есть по два маршрута на каждую удаленную железку с одинаковой метрикой. А нужно по другому - чтобы маршрут на host2 через R1 имел метрику ниже (приоритет выше), чем маршрут на host3 через R1. И маршрут на host3 через R2 имел метрику ниже, чем маршрут на host3 через R1.
Тогда в нормальной ситуации (все каналы в работе) трафик на host2 пойдет через R1, трафик на host3 - через R2. Если какой-то канал отвалился, то соответствующий маршрут в таблице на host1 пропадет, и трафик на удаленный хост пойдет через другой маршрутизатор.
Маршруты нужно именно получать по RIP, а не прописывать статически, т.к. именно по RIP я получаю информацию о падении каналов (исчезает соответствующий маршрут - не сразу, конечно, но это устраивает), использовать же другие протоколы динамической маршрутизации возможности нет.
Т.е. задача: средствами host1 (Linux) уметь принудительно изменить метрику маршрута, полученного по RIPv2, в зависимости от сети назначения и адреса шлюза.
я покопался в возможностях ip2, iptables - но что-то ничего похожего не нашел.