У себя реализовал так - написал скрипт, который зпускается через крон и раз в минуту пингует мои внешние серверы в тунеле OPENVPN. Если оба сервера не доступны, начинается пинг интернет серверов и если там бок, начинается правка маршрутизации и правил iptables под второй канал и так по кругу. Единственное что, второй провайдер присылает настройки интерфейса по DHCP, соответственно прописывается его шлюз по умолчанию с метрикой 100 - если этот канал не работает, то скрипт выставляет дефолтный шлюз на второй канал с меньшей метрикой. Тогда в таблице маршрутизации висят два дефолтных шлюза, но все бегает через гейт, у которого метрика меньше.