ソースコードにアクセスできないレガシーアプリケーションを実行しています。これらのコンポーネントは、特定のポートでプレーンテキストを使用して相互に通信します。 OpenVPNなどの従来の(集中型の)VPNパッケージを使用するのではなく、stunnelなどを使用して2つ以上のノード間の通信を保護し、ピアツーピア通信を容易にできるようにしたいと考えています。
理想的には、トラフィックフローは次のようになります。
基本的に、ポートNへの(ローカルマシンで生成された)アウトバウンドトラフィックがstunnelを介してポートN + 1に転送され、受信側がポートN + 1で受信し、復号化して転送するようにこれを設定しようとしています。ポートNのローカルアプリケーションに接続します。
通信ペイロードには識別情報が含まれているため、stunnel @hostBがapp @ hostBに転送するときに、hostAオリジンのIPアドレス/マシンIDが失われることについては特に心配していません。
これの他のトリックは、通常、stunnelではクライアント/サーバーアーキテクチャを使用していることです。ただし、ノードは動的に出入りする可能性があり、stunnel構成で何らかの「connection = hostN:port」をハードコーディングできないため、このアプリケーションははるかにP2Pです。
編集:もう1つの可能性は、ポートNへのアウトバウンドトラフィックがゲートウェイとして構成されたstunnelを介して転送されるように、ある種のデフォルトルートを構成することです。
ここではiptablesはやや不必要に思えます。
appAはhostA(外部IP A.A.A.A)上のアプリのインスタンスですappBはhostB(外部IP B.B.B.B)上のアプリのインスタンスです
暗号化された接続をA.A.A.A:1234から127.0.0.1:1234に転送するように構成されたhostAのstunnel
[appA]
受け入れる= A.A.A.A:1234
接続= 127.0.0.1:1234
クライアント=いいえ
暗号化されたトンネルを作成し、127.0.0.1:4321からA.A.A.A:1234への転送接続を作成するように構成されたhostB上のstunnel
/ usr/bin/stunnel -d 127.0.0.1:4321 -r A.A.A.A:1234
appBは127.0.0.1:4321との接続を確立します
hostBの場合はその逆です。