В настоящее время я пытаюсь использовать два клиента openvpn для предоставления услуг сервера, как уже сказано в заголовке. Возможно, я играю с силами, далеко выходящими за рамки моего нынешнего понимания, но, пожалуйста, потерпите меня :-)
Это моя текущая установка:
INTERNET eth0 | | VPN tun0
/----- perimeter-a -----\
internet clients-: :------ server
\----- perimeter-b -----/
server
в данном случае также является VPN-сервером. perimeter-a
и perimeter-b
являются VPN-клиентами.
server
имеет eth0 (публичный интерфейс), eth1 (другой публичный интерфейс) и tun0 (vpn-интерфейс). Каждый perimeter
имеет eth0 (публичный интерфейс) и tun0 (vpn интерфейс).
Цель для любого internet client
иметь возможность поговорить с любым perimeter-a
или perimeter-b
и должно быть похоже, что их обслуживает кто-то из них, в то время как на самом деле вас обслуживает server
. Подключение к игровому серверу (например) на perimeter-a
и подключение к игровому серверу на perimeter-b
заставит вас оказаться в server
каждый раз.
Единственное исключение из этого правила должно быть, когда perimeter-a
или perimeter-b
не пересылает соответствующий порт. Порты должны быть перенаправлены явно на любой из этих двух машин. И UDP, и TCP должны обрабатываться.
Моя предыдущая попытка зависела от NAT через iptables, но имела проблему потери адреса фактического internet client
на server
. Адрес internet client
должны быть сохранены - вот почему я решил использовать VPN и в первую очередь направлять трафик из и в server
через это.
Моя текущая попытка использует perimeter-a
и perimeter-b
как интернет-шлюзы для server
. Проблема в том, что я не уверен, можно ли это настроить, когда оба perimeters
- это клиенты VPN, а не серверы.
Могу ли я передать пакет из любого perimeters
к server
без перезаписи источника пакета, а затем отправить его обратно в любой из perimeters
выяснив, что это произошло server
через tun0? Но тогда мне нужно было бы иметь два tun-интерфейса, чтобы различать оба perimeters
, право? А затем, когда эти пакеты прибудут на perimeter-XY
, Мне нужно, чтобы эта машина переписала исходный код на себя и отправила его в internet client
, учитывая, что пакет пришел от tun0 - правильно?
Я полностью потерялся в этот момент и не смог найти ничего, что описывало бы мой настоящий случай. Как далеко я от решения? Я ошибаюсь? Возможно ли все это?
По сути, я пытаюсь построить два псевдошлюза и одну машину для их использования в зависимости от того, откуда пришло соединение.
Редактировать 1: Три рассматриваемых сервера не находятся в одной локальной сети - они расположены в совершенно разных местах.
Если я правильно понял ваш вопрос, то, чего вы пытаетесь достичь, решается проектом Linux Virtual Server - http://linuxvirtualserver.org/. По крайней мере, это даст вам указатели на проблемы.