Про резервирование:
В windows отсутствует штатное определение наличия интернета (точнее доступное пользователю), поэтому пишешь скрипт из пяти строчек, который в цикле проверяет доступность какого-нибудь сервиса в интернете, например гугла, и если он недоступен, переключает шлюз по умолчанию на другой... два цикла, один для первого шлюза, другой для второго, и оба в общий цикл. Так они по кругу будут переключаться с задержкой - таймаут определения интернета (делаешь пинг и смотришь код возврата).
route change 0.0.0.0 mask 0.0.0.0 192.168.1.201
Про баллансировку:
Я настраивал вручную маршрутизацию на клиентах, прописывал что вот на эти адреса пусть интернет будет через первый шлюз, а вот на те - через второй (у меня было два кабеля от разных провайдеров, я перебирал подсети одного провайдера и к нему посылал подключения через его кабель, тот еще был квест, узнать эти подсети)..
Это был батник с сотней строчек вида (в данном примере подсеть 8.8.4.0/24)
route add 8.8.4.0 mask 255.255.255.0 192.168.0.200
В результате торренты у меня загружались на скорости больше 20мбайт/с при двух подключениях по 100мбит (т.е. максимум что в принципе возможно, это было тогда, когда выход во внешний интернет был мегабит и это еще хорошо было)
Понятно что это не полноценная баллансировка, но допускаю что можно запилить скрипт, который будет использовать какую то аналитику нагрузки на роутере (смотреть статистику по нему) и изменять маршруты, выполняя те же команды но с другим шлюзом. И да, во время смены шлюза, текущие подключения через него повиснут, что не очень весело