- Несколько внешних каналов

alexhemp- March 13th, 2014
Подключили резервный канал. Сетевой инженер настроил pbr на роутере, так что ip адреса резервного провайдера вешаются на интерфейсы серверов просто алиасами.
В итоге сервера прекрасно доступны каждый по двум адресам, по одному от провайдера.
Основной канал - толстый, резервный - тонкий. Поэтоме нельзя прописать в DNS два ip адреса для web-сервера, будет round-robin и при аварии одного из каналов половина клиентов отвалиться. Да и половина клиентов будет ходить через тонкий канал - хотя у основного надежность порядка 99,5% - т.е. лежит он редко (но обычно метко)
Проблема первая - как определить какой канал использовать? Если упала последняя миля - это легко определить, ближайший шлюз будет недоступен. На практике в Ростелекоме у нас чаще бывает где-то на магистральном роутере затык, а ближайший работает как часы. А с последней милей раз в 5 лет что-то случается.
Или бывает падает канал Питер-Москва, или какой-нить толстый зарубежный - Яндекс работает, а Гугл нет. А через резерв возможно все живое.
Напрашивается решение - несколько "датчиков", с разными весами (пинг ближайшего шлюза, пинги разных узлов, запросы яндекса-гугла-бинга и т.п. - что в голову придет) и интегрально оценивать доступность каждого канала. Упала доступность ниже 80% - переключаем сервисы на резерв. Восстановилось - обратно.
Не знает ли кто готовых систем подобного рода?
Zabbix или Nagios - это будет черезчур, для мониторинга нам Cacti с парой плагинов за глаза хватает...
Проблема вторая:
Переключать не резерв SMTP вообще не нужно, у него штаный механизм приоритетов MX.
c HTTP-прокси решаются относительно просто, у Squid можно к примеру менять tcp_outgoing_address скриптом (ну или еще как-нить извратиться)
Проблемы начинаются с доступными "снаружи" по http ресурсами. В DNS-зоне все NS-сервера равноправны, клиент может любой получить и использовать. Поэтому вариант с разным содержимом зон на разных тоже NS отпадает.
Значит нужно реализовывать какой-то аналог сервиса route53 от Amazon. Грубо говоря идея такая - DNS сервер может узнать что основной канал не рабочий и заменить содержимое DNS-зон таким, в котором все записи имеют ip адреса резервного канала.
Опять-же - нет ли готовых систем подобного рода? Или и тут велосипед городить...
И все это хочется запустить на FreeBSD, Open Source обязательно.