web-dev-qa-db-ja.com

TCP VPNを介したリバースプロキシ

私はかなり奇妙な状況にありますが、それは単純です、私は誓います。私はインターネットに接続されたサーバー(これをホストAと呼びます)を持っており、いくつかのWebサイトやその他のオッズとエンドに使用しています。ファイルやその他のものをホストしている別のサーバー(Bと呼びます)がありますが、ファイアウォールとNATの背後にあります。

私がやりたいのは、ホストAの特定のポートが特定のポートのTCPトラフィックを受け入れ、VPNまたは他のポイントツーポイントトンネルを介して転送するように設定することですホストBに応答できるようになります。基本的に、ホストAはリバースプロキシ/ロードバランサーとして機能しますが、ホストBは別のネットワーク上の別の場所(ファイアウォールの後ろ)にあるため、AとBは、直接ではなくトンネルを介して接続します。

これは非効率的であることは知っていますが、ホストBのかなり奇妙なネットワーク状況に利用できる最善のソリューションであると確信しています。

解決策はfproxyとipsecトンネルを組み合わせたものになると思いますが、ipsecを適切に設定する方法を理解するのに苦労しています(これまで使用したことがありません)。 OpenSwanとStrongSwanを見てきましたが、問題は両方が2つのLANをブリッジすることを目的としていることです。さらに、NAT ipsecでのトラバーサルは超えているようです。私の理解。私の状況では、トンネルを関係する2つのマシンにのみ、おそらく各マシンの独自のインターフェイスとして提示したいのです。このようにして、fproxf(または別のリバースプロキシ)を設定して、仮想IPアドレスにプロキシすることができます。 automagicallyトラフィックを他のマシンに転送し、そのマシン上のソフトウェアには別の仮想アドレスとして表示されます。

ただし、ここで私が尋ねる重要な質問は、それが最善の方法かどうかわからないためです。 2台のマシン間でのみ通信を有効にするようにipsecを構成する方法に関する提案やアドバイスを歓迎します。

4
jcrawfordor

これは複雑である必要はありません。 Host_aHost_bの例を使用すると:

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

これにより、Host_bのポート80(www)がポート80(www)に転送されます。この正確な組み合わせはテストしていませんが、このような転送ポートを頻繁に使用しています。

2
Mei

@Davidが示唆するように、SSHトンネルを実行できますが、トンネルを永続的に維持するには、トンネルの状態を定期的にチェックして再確立するために、トンネルを終了するマシンで何らかのプロセスが必要になります(必要な場合)。

「ホストA」マシンをサーバーとして構成し、「ホストB」マシンをクライアントとして構成した両方のマシンにOpenVPNをインストールする可能性があります。 OpenVPNは、失敗した場合にトンネルを自動的に再確立します(そのため、SSH経由でトンネルに部分的になります)。それが稼働したら、おそらく「ホストA」マシンでiptablesルールを使用してNAT/OpenVPNトンネルを介して「ホスト "B」マシンにトラフィックを転送します。

3
Evan Anderson