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

Использование двух клиентов openvpn для предоставления услуг сервера

В настоящее время я пытаюсь использовать два клиента 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/. По крайней мере, это даст вам указатели на проблемы.