これはプログラミングの一部であり、システム管理者の一部でもあるため、serverfault でこれを終了する必要があると思われる場合は、ご容赦ください。
SOCKS に対応していないアプリケーションがあり、ファイアウォールを介して使用する必要があります。SOCKS をサポートするようにアプリケーションを変更することもできません。
現時点では、アプリケーションがホスト上のループバック アダプターと通信する IP をエイリアス化し、別のホストへの SSH トンネルを作成することでこれを行っています。アプリケーションが使用する IP はハードコーディングされています。SSH 接続は次のようになります。
ssh -L 1.2.3.4:9999:1.2.3.4:9999 user@somehost
1.2.3.x はループバックのエイリアスです。
したがって、アプリケーションはループバックの開いているポートに接続し、SSH ホストと実際の 1.2.3.4 に送信されます。
それは機能しますが、問題は、このアプリケーションがかなりの数の IP (50+) に接続することです。そのため、最初から 50 の ssh 接続になってしまいます。
tsocks などのいくつかの「プロキシ」アプリを使用しようとしましたが、多くの問題がありました (アプリは OS X で実行されており、パッチを適用しても tsocks はうまく機能しません)。
私たちのアイデアは、指定されたポートのすべてのインターフェースをリッスンするデーモンを作成することでした。次に、アプリケーションから着信パケットを取得し、パケット情報 ( dst IP、ポート、ペイロード ) をスクレイピングし、パケットを再作成し、単一のポートを介してプロキシします。 SSH SOCKS 接続 ( ssh -D 1080 user@somehost )。そうすれば、すべてのポートがプロキシされる SSH 接続が 1 つだけになります。
私の質問は - これは実現可能ですか? 私がここで見逃しているものはありますか?私はpfctl、ipfw、iptablesのドキュメントをくまなく調べてきましたが、それらを実行するオプションは見当たらず、これはコーディングが最も難しいことではないようです. 元の宛先 IP とポートに基づいてパケットを再作成し、ローカルの SOCK プロキシに接続して、元のアプリケーションであるかのようにパケットを再送信しますが、現在は SOCKS をサポートしています。
誰かがすでにこれを行っていることを知っている何かが欠けている場合は、お知らせください。ソケット プログラミングや SOCK についてはよくわかりませんが、取り組むには大きすぎるプロジェクトではないように思えますが、必要以上に噛み付いている場合は意見をお願いします。
ありがとう