Мне нужно настроить следующую схему:
Когда соединение не работает ИЛИ происходит какое-то другое событие (например, потеря пакета, много повторных передач и т. Д.), Что-то не сработает, и нам нужно сделать следующее:
Вероятно, это можно смоделировать с помощью haproxy и openvpn, но подключение openvpn слишком медленное для быстрых коммутаторов, а настройка слишком сложна только для одной службы (скажем, порта tcp).
[-Это похоже на туннелирование порта-] и локальной клиентской программе на server1 не нужно повторно подключаться (или создавать новое соединение) к серверной программе на server2, когда что-то происходит между server1 и server2
Изменить: я не имел в виду, что мне нужно сохранить сеанс tcp или около того.
Мне нужно что-то вроде haproxy (работает на 7 слое),
когда client_prog_1_srv_1 подключает localhost haproxy_1_srv_1,
haproxy_1_srv_1 подключается (Интернет) к haproxy_2_srv_2,
но когда нет связи между haproxy_1_srv_1 и haproxy_2_srv_2,
Вот в чем суть произвольных или общих программ Linux ... Они не имеют характерных черт ...
Вам нужна сеть прикладного уровня [уровень 7], но на основе общей программы / протокола. http://tools.ietf.org/html/rfc3768 (RFC 3768 -
Добавьте LVS, и вдруг вы снова окажетесь на HAProxy. Чтобы сделать это на седьмом уровне, вам нужно будет написать свой собственный сервер-оболочку для:
Ваш вопрос ... сложный ... Но я считаю, что это потому, что вы делаете много предположений. Скорее всего, VPN - хороший способ усложнить ситуацию до такой степени, что вы никогда не заставите его работать. Если вы ТОЧНО сообщите нам, что вам нужно сделать, мы мощь быть в состоянии помочь направить вас в правильном направлении.
Невозможно создать такой прокси с TCP, если исходящие IP-адреса на серверах 2 и 3 разные.
Это возможно, если у вас есть контроль над своими маршрутами и вы можете использовать метрики маршрута, OSPF или что-то подобное для автоматической маршрутизации пакетов вокруг плохих соединений, если NAT не задействован. Если задействован NAT, вероятно, есть менее сложные решения, например, научить вашего клиента повторно подключаться при ошибке.
Если он действительно должен быть разработан таким образом, вы можете использовать anycast или аварийное переключение, чтобы позволить обоим серверам 2 и 3 иметь один и тот же исходящий IP-адрес, но без более подробной информации ваш вариант использования не похож на то, что вы бы иметь такую возможность.
Это можно сделать при следующей настройке:
Вы когда-нибудь пользовались vpn? Вы подключаете свой компьютер к серверу vpn, затем вы находитесь в своей корпоративной частной сети, затем вы используете ssh на своем рабочем компьютере, если подключение к Интернету прерывается на минуту, vpn пытается повторно подключиться, но ssh повторно передает в течение времени ожидания период. Подключение к Интернету устанавливается через минуту, vpn снова строит туннель, ssh продолжается, без необходимости повторного подключения (в конечном итоге повторные передачи будут успешными, прежде чем произойдет тайм-аут). Это тот эффект, который мне нужен, но туннель должен проходить через промежуточный сервер, потому что на какое-то время у него улучшенная связь. Это можно сделать, если весь TCP-трафик передается через хапрокси, говорящие друг с другом. Но я думаю, что эта настройка очень сложна, и openvpn (или туннели) медленные при повторном подключении. Обратите внимание, что haproxy - это приложение - http://haproxy.1wt.eu/ , который имеет режим tcp - очень похожий по функциональности на http-прокси.