1

これはプログラミングの一部であり、システム管理者の一部でもあるため、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 についてはよくわかりませんが、取り組むには大きすぎるプロジェクトではないように思えますが、必要以上に噛み付いている場合は意見をお願いします。

ありがとう

4

1 に答える 1

1

アプリケーションが SOCKS クライアントのサポートを追加できる場合はssh -D lock_socks_port remote_machine、ローカルの *lock_socks_port* を localhost の SOCKS サーバーとして開くだけで、リモート マシンからアクセス可能な任意のホストに接続できます。

例: 暗号化されていない信頼できない Wi-Fi ネットワークを使用しているとします。を起動するだけssh -D 1082 homeで、Web ブラウザーを構成してlocalhost:1080を SOCKS サーバーとして使用することができます。もちろん、SOCKS 対応のクライアントが必要です。すべてのトラフィックはゲートウェイから来ているように見え、Wi-Fi をスヌーピングする人には接続が不透明になります。

また、単一の ssh セッション上でトンネリングされる無数sshのリクエストで単一のクライアントを開くこともできます。LocalForward

ControlMasterさらに、ssh のおよびControlPathオプションを使用して、すでに確立されている ssh 接続に ssh 接続を追加できます。

于 2012-10-18T13:04:27.607 に答える