Назад | Перейти на главную страницу

Отслеживайте интернет-ссылку на удаленный хост

У меня есть сервер Debian Wheezy под управлением Xivo (назовем его A), у этого сервера 2 интерфейса: eth0 и eth1 . Шлюза по умолчанию нет, и только несколько серверов статически доступны из A. eth0 имеет общедоступный IP-адрес и напрямую подключается к удаленному серверу (назовем его B), второму интерфейсу A, eth1 находится в локальной сети с другим подключением к Интернету, которое предполагается использовать для других целей.

В таблице маршрутизации A, B доступен через интерфейс eth0. Я хочу настроить аварийный маршрут, который пытается подключиться через eth1 если попытка подключения не удалась eth0. У меня нет доступа к маршрутизаторам, и не может быть задействована динамическая маршрутизация извне A.

Пока что я вижу разные вещи вроде ip rule, heartbeat HA и другие технологии, но с этим вопросом я хочу определить, возможно ли то, что я хочу делать, и, если возможно, с помощью каких технологий.

ИЗМЕНИТЬ 1

Я решил перефразировать свой вопрос, потому что чувствую, что никто не знает.
Как я могу отслеживать ссылку с одного сервера на другой и принимать меры, если ссылка не работает? Это также может быть связано с разрешением arp, потому что я виртуально подключен к удаленному хосту и знаю его MAC-адрес.
Я почти уверен, что в джунглях Интернета уже есть возможности, и я не хочу изобретать велосипед для этой задачи.

РЕДАКТИРОВАТЬ 2

Поскольку решение сценария, наконец, то, что я выбрал, я принимаю его и награждаю, но я добавил своего рода компиляцию всего, что я пробовал, прежде чем использовать сценарий

Некоторое время назад у меня была аналогичная проблема с подключением к удаленному серверу из регистратора данных (Ubuntu) через нестабильное соединение HDSL (иногда не работающее в течение нескольких дней!). Я создал простой сценарий bash, работающий в регистраторе данных в crontab. Скрипт работал так:

  • проверить статус HDSL-пинга общедоступного / всегда доступного сервера (например, DNS или чего-то подобного)
  • если тест был KO, скрипт добавлял маршрут к удаленному серверу через резервный 3G роутер в той же сети
  • если тест прошел успешно, предыдущий маршрут был удален, и регистратор данных достигал удаленного сервера через маршрутизатор HDSL.

Это не было изящным решением, но в моем сценарии оно сработало!

У меня есть несколько решений, и одно из них - это скрипт crontabed, работающий с arping это сценарий:

#!/bin/sh

#remote host to test on public interface
REMOTE_TEST_IP="195.168.156.1"
REMOTE_TEST_MAC="00:2D:FF:FF:FF:FF"

#number of arp request send to test connectivity
TEST_COUNT=4

#the rate acceptable of arp request failling, strictly above this rate the route will be change
#NEVER put 100 or it will never set up failover
ACCEPTABLE_FAILURE_RATE=20

#list of network that will be rerouted if test fails
NETWORK_LIST="25.14.0.0/20 198.27.45.40/32 21.1.80.0/20"

PUBLIC_DEVICE="eth0"
PUBLIC_GATEWAY="192.168.1.250"

PRIVATE_DEVICE="eth1"
PRIVATE_GATEWAY="15.168.16.4"

#try to ping the remote host ip and the remote host mac, extract the result line and get the failure rate
FAILURE_RATE=$(arping -i $PUBLIC_DEVICE -c $TEST_COUNT -t $REMOTE_TEST_MAC $REMOTE_TEST_IP | grep % | sed -r s/.* ([0-9]{1,3})% .*/\1/)



#if the faillure is superior to the acceptable failure rate, change the route to remote the remote host
if [ $FAILURE_RATE -gt $ACCEPTABLE_FAILURE_RATE ]
then

  for NETWORK in $NETWORK_LIST
  do
    logger "$0 - WARNING -The network route to $NETWORK_LIST are set to failover route."
    route del -net $NETWORK gw $PUBLIC_GATEWAY dev $PUBLIC_DEVICE
    route add -net $NETWORK gw $PRIVATE_GATEWAY dev $PRIVATE_DEVICE
  done

else

  for NETWORK in $NETWORK_LIST
  do
       #back to default route
       route del -net $NETWORK gw $PRIVATE_GATEWAY dev $PRIVATE_DEVICE
       route add -net $NETWORK gw $PUBLIC_GATEWAY dev $PUBLIC_DEVICE

  done
fi

Я также нашел другое решение, например, упоминание в других ответах.

Я действительно не знаю других решений, упоминание в блоге Джона Олда Вот датируется 2005 годом, когда linux все еще использовал метрику маршрута, чего больше нет, за исключением случаев, когда вы используете протокол динамической маршрутизации.

В следующей статье объясняется, как можно простым способом добиться отказоустойчивой маршрутизации.

http://archive09.linux.com/feature/113988

Это включает добавление двух маршрутов к одному и тому же пункту назначения, один через eth0 и один через eth1, а также настройку тайм-аута, которая переключает активный маршрут, когда один из них становится недоступным.

Имейте в виду, что исходящий IP-адрес исходящих пакетов изменится, если используется nat. Для протоколов без установления соединения, таких как HTTP, это не имеет значения. Однако с протоколами, ориентированными на соединение, маршрут может переключиться, но при изменении IP-адреса источника соединения не удастся.

VoIP упоминается в ваших комментариях, и вы должны ожидать, что вызовы не будут выполнены и их нужно будет перезапустить.

Ваш вопрос интересный. Поиск google дал Mpath-инструменты

Mpath-tools - это набор программ для Linux 2.6+, которые призваны облегчить балансировку нагрузки и переключение при отказе через несколько и разнородных подключений ISP.

Mpathd - это демон и ядро ​​mpath-tools, он работает в фоновом режиме, отслеживая состояние каждого соединения. Он динамически обновляет таблицы маршрутизации в соответствии с состоянием шлюзов и набором правил, установленных администратором.

Состояние каждого соединения определяется отправкой через ICMP-зонды на один или несколько адресов.

Я никогда не пробовал.
Это конфиденциальный проект, они плохо проиндексированы, поиск «Linux static route failover» ничего не дал, а «Linux Dynamic route failover» дал сайт на странице 4 (возможно, мои навыки поиска не очень хороши); даже "mpath-tools" возвращает лишь несколько ссылок. Обратите внимание, это не означает, что он не работает.