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

Обратный прокси TCP через VPN

У меня довольно странная ситуация, но, клянусь, она проста. У меня есть сервер (назовем его хостом A), который подключен к Интернету, и я использую его для некоторых веб-сайтов и других мелочей. У меня есть другой сервер (назовем его B), на котором размещаются файлы и некоторые другие вещи, но он находится за брандмауэром и NAT.

Я бы хотел настроить его так, чтобы определенный порт на хосте A принимал TCP-трафик на определенный порт и перенаправлял его через VPN или другой двухточечный туннель на хост B. в состоянии ответить. По сути, хост A будет действовать как обратный прокси / балансировщик нагрузки, но поскольку хост B находится в другом месте в другой сети (за брандмауэром), я бы хотел, чтобы A и B подключались через туннель, а не напрямую.

Я знаю, что это неэффективно, но уверен, что это лучшее решение для довольно странной сетевой ситуации с хостом B.

Я думаю, что решением будет некоторая смесь fproxy и туннеля ipsec, но мне сложно понять, как правильно настроить ipsec (я никогда не использовал его раньше). Я посмотрел на OpenSwan и StrongSwan, но проблема в том, что оба они предназначены для объединения двух локальных сетей, и, кроме того, документация по обходу NAT в ipsec, похоже, выходит за рамки моего понимания. В моей ситуации я хочу, чтобы туннель представлялся только двум задействованным машинам, возможно, как собственный интерфейс на каждой машине. Таким образом, я мог бы просто настроить fproxf (или другой обратный прокси) для прокси на виртуальный IP-адрес, который автоматически переносить трафик на другую машину, где он будет отображаться программному обеспечению на этой машине как другой виртуальный адрес.

Однако ключевой вопрос, который я задаю здесь, заключается в том, что я не знаю, лучший ли это способ сделать это. Я открыт для любых предложений или советов о том, как настроить ipsec для обеспечения связи только между двумя машинами.

Вы можете создать SSH-туннель, как предлагает @David, хотя постоянное поддержание туннеля потребует некоторого процесса на машине, завершающей туннель, чтобы периодически проверять состояние туннеля и восстанавливать его (при необходимости).

Я бы, вероятно, установил OpenVPN на обеих машинах с машиной «хост A», настроенной как сервер, и машиной «хоста B», настроенной как клиент. OpenVPN автоматически восстановит туннель, если он выйдет из строя (поэтому я был бы неравнодушен к нему через SSH). Как только это будет запущено, я, вероятно, буду использовать iptables правила на компьютере «хоста A» для NAT / перенаправления трафика на машину «хоста B» через туннель OpenVPN.

Это не должно быть сложно. Используя ваши примеры host_a и host_b:

host_b# ssh -f -N -g -R 80:host_b:80 user@host_b

Это должно перенаправить порт 80 (www) на host_b на порт 80 (www). Я не тестировал эту точную комбинацию, но я часто использую такие перенаправленные порты.