私はサーバーの1つでSquidを非常に長い間(数年)透過プロキシとして使用してきました。
基本的に、クライアントから、クライアントとssh + Squidサーバーの間にSSHトンネルを作成していました。
ssh -T -N -x -C -L3128:127.0.0.1:3128 cedric@xxx
次に、Webブラウザー(chromium)を起動して、ポート3128の127.0.0.1にプロキシサーバーを配置します。
これは非常に長い間問題なく機能しましたが、その後、多くのWebサイト(フォーラム、ログイン権限としてGoogleを使用するスタック交換など)でログの問題が発生し始めました。一部は正常に動作し続けました(GMailやすべてのGMailサービスなど)。ログインの問題の原因がわかりません。サーバーのOSとソフトウェアをアップグレードしたときのSquidの構成の問題が原因だと思います。
そこで、VPNの設定を検討しましたが、「貧乏人のVPNとしてのSSH」という記事を読んで、クライアントからSSHを使用して簡単に実行できることに気付きました。
ssh -D 5222 cedric@xxx -N
次に、ポート5222でSOCKSホストとして127.0.0.1を使用するようにブラウザを設定します。
これですべてが正常に機能します。ログインの問題はすべて解決されたようで、サーバー上にSquidも必要ありません。
しかし、私はそれがどのように機能するのか理解していません。さまざまな「私のIPとは何か」のWebサイトから、自分のサーバーのアドレスがわかります(これが私の望みです)。また、これらのサイトは、SSH「トンネル」が進行中であることを検出していないようです。
基本的に私の質問は、技術的に、Squidを透過プロキシとして使用することと、「SSH -D ... -N」を使用することと、VPNを使用することの違いは何ですか?
そして、私が訪問しているウェブサイトの観点から、何か違いはありますか?
また、「SSH -D ... -N」を使用しているときに、アクセスしているWebサイトが実際のIPを検出できる方法があるかどうかを知りたいですか?これは技術的に実現可能ですか、それともその情報がブラウザで利用できないのですか?
1)Squidは、httpおよびhttpsトラフィック用の特別なプロキシです。このプロトコルを知っているので、キャッシュ、フィルタリング、書き換えルール、DNS解決などのいくつかの高度な機能を提供できます。すべてのWebブラウザーは、そのプロトコル仕様の一部であるhttpプロキシの処理方法を知っています。
さらに、Squidはtransparentプロキシとして機能し、Webブラウザーを使用するように構成していなくても、ファイアウォールがトラフィックをプロキシにリダイレクトします。ブラウザは、このシナリオで透過的な意味であるプロキシを使用していることを認識していません。この意味では、古い設定は透過的ではありませんでした。
2)ssh -Dは、プロトコルにとらわれないSOCKSプロキシとして機能します。トンネルのローカル側のソックスポートに着信するすべてのトラフィックを取得し、ペイロードを抽出して、変更もチェックもせずにリモート側に送信し、そこで実際の宛先に送信します。 SOCKSプロキシが機能するには、クライアントからsocksプロキシに送信される各パッケージを変更(カプセル化)して、socksプロキシが送信先を認識できるようにする必要があるため、クライアントプログラムはそれを特別にサポートする必要があります。すべてのWebブラウザーがサポートしているかどうかはわかりませんが、原則として、httpだけでなく、多くのプロトコルで動作します。
3)古いコマンドラインssh -T -N -x -C -L3128:127.0.0.1:3128 ...
ローカルポート3128に着信するすべてのトラフィックが未変更の事前定義された宛先127.0.0.1:3128に送信される1つの単純なトンネルのみを開きました。送信されたパッケージを変更する必要がないため、これはどのクライアントにも使用できますが、宛先は固定されています。
プロキシに加えて、sshは常に暗号化されたトンネルを使用するため、トンネルを通過している間、データを盗み見ることはできません。
古い設定では方法1と3を組み合わせましたが、状況によっては、原則として単独で機能する可能性があります。
4)VPNを使用すると、ローカルホストから「プロキシ」サーバーへの暗号化されたトンネルも作成します。この場合、1つのクライアントプログラムに限定されませんが、オペレーティングシステムは、すべての非ローカルネットワークトラフィックをプロキシに送信し、プロキシはそれを宛先に転送します。これを管理するには、root /管理者権限が必要です。そのため、設定が簡単ではない場合があります。
4つのケースすべてで、データは最初にリモートホストに送信され、リモートホストは宛先Webサーバーへの実際の接続を作成して、要求を送信します。答えは、最初にリモートホストに戻ります。リモートホストは、内部データで実際の宛先を検索してから、元のクライアントに送り返します。 IPを表示するWebサイトは、リモートホストのみを表示し、トンネル/プロキシについては知りません。
編集:
Webサイトが本当にあなたのIPを知りたい場合、おそらくいくつかのバグを使用して、ブラウザ内でコードを実行するWebページ内のJavaScriptまたはプラグインを介していくつかの可能性があります。実際のIPアドレスを絶対に隠す必要がある場合は、JavaScriptとプラグインを無効にする必要があります。
Edit2:
VPNを追加