SOCKS5 プロキシと HTTP プロキシの最大の違いは、運べる通信の種類です。HTTP プロキシは HTTP を話し、CONNECT メソッドで TCP 接続をトンネルします。SOCKS5 プロキシはもう一段低いレイヤーで動き、あらゆる TCP 接続を中継できるうえ、通話、ゲーム、QUIC に必要な UDP も中継できます。どちらも、それ自体では通信を暗号化しません。

この記事では、SOCKS5 と HTTP プロキシの違いを、UDP、DNS と socks5h、HTTPS プロキシや SOCKS5 over TLS による暗号化、速度、そしてどちらを選ぶべきかという観点から詳しく比較します。

SOCKS5 と HTTP プロキシの違い一覧

HTTP プロキシ SOCKS5 プロキシ
規格 HTTP CONNECT(RFC 9110) RFC 1928
TCP 対応 対応
UDP 非対応 対応(サーバが許可している場合)
ドメイン名を解決する側 常にプロキシ デバイスまたはプロキシ(socks5h)
認証 ユーザ名とパスワード(Basic) ユーザ名とパスワード(RFC 1929)
暗号化 なし(HTTPS プロキシなら TLS を追加) なし(SOCKS5 over TLS なら TCP に TLS を追加)
平文の HTTP リクエストを読めるか 読める(転送モード時) 読めない
主なポート 8080、3128 1080
iOS の「設定」に内蔵 あり(Wi-Fi ネットワークごと) なし

HTTP プロキシの仕組み

HTTP プロキシは Web のリクエストを理解します。動作には 2 つのモードがあります。

  • 転送(フォワーディング)。 平文の http:// ページでは、ブラウザがリクエスト全体をプロキシに送り、プロキシがページを取得します。プロキシはすべてを見ることができ、書き換えることもできます。
  • トンネリング。 それ以外のすべて(HTTPS サイトはすべてこちら)では、クライアントが CONNECT リクエストを送り、プロキシが生の TCP トンネルを開きます。
CONNECT example.org:443 HTTP/1.1
Host: example.org:443
Proxy-Authorization: Basic YWxpY2U6czNjcmV0

プロキシが 200 を返すと、クライアントはトンネルを通じて Web サイトと TLS 通信を行います。プロキシに見えるのは、接続先の名前とポートだけです。なお、Proxy-Authorization の行は alice:s3cret を Base64 にしただけなので、素の HTTP プロキシでは、経路上の誰でもパスワードを読み取れます。

SOCKS5 プロキシの仕組み

SOCKS5 は小さなバイナリプロトコルで、中を通るデータの内容には関知しません。クライアントはサーバにあいさつし、認証方式を取り決めてから、次の 3 つのコマンドのいずれかを送ります。

  • CONNECT:IPv4 アドレス、IPv6 アドレス、またはドメイン名に TCP 接続を開きます。
  • UDP ASSOCIATE:別のポートで UDP の中継を準備します。
  • BIND:外部からの接続を受け付けます。アクティブモードの FTP など、一部の古いプロトコルで使われます。

SOCKS5 は通信の中身を一切見ないため、Web ブラウザに限らず、どのアプリでも使えます。

UDP:実用面での最大の違い

UDP は、音声通話やビデオ通話、多くのオンラインゲーム、DNS、そして HTTP/3 の土台である QUIC で使われます。HTTP プロキシは TCP しか運べません。新しい規格として CONNECT-UDP もありますが、対応しているプロキシはわずかです。

SOCKS5 は UDP を中継できますが、それはサーバ側で有効になっていて、ファイアウォールが UDP ポートを通している場合に限られます。有効にしていないプロバイダも多いので、頼りにする前に確認してください。

UDP をプロキシに通せないときは、次のどちらかになります。

  • アプリが TCP にフォールバックする。ブラウザは通常 QUIC から HTTP/2 に切り替えるので、Web サイトは引き続き表示されます。
  • UDP 通信が直接送られるか、失敗する。直接送られた UDP には本当の IP アドレスが使われるため、プライバシー目的でプロキシを使っている場合は注意が必要です。

DNS:リモートでの名前解決と socks5h

example.org に接続する前に、誰かがその IP アドレスを調べる必要があります。

  • HTTP プロキシは、CONNECT リクエストで必ず名前を受け取り、自分で名前解決します。
  • SOCKS5 クライアントは、名前をローカルで解決して IP を送ることも、名前をそのまま送ってサーバに解決させることもできます。後者はリモート DNS と呼ばれ、curl などのツールでは socks5h:// と書きます。

通常はリモート DNS が望ましい方法です。どの名前を調べたかがローカルネットワークに知られず、プロキシの所在地に合った結果が得られるため、地域限定のサイトでも役立ちます。Potatso は TCP 接続では常に名前を送るので、socks5:// と socks5h:// のリンクは同じように動作します。詳しくは SOCKS5 リファレンス をご覧ください。

暗号化:HTTPS プロキシと SOCKS5 over TLS

素の HTTP プロキシと SOCKS5 プロキシは、プロキシのパスワードや訪問先のサイト名を含め、プロキシとの間のやり取りをすべて平文で送ります。HTTPS のサイトはエンドツーエンドで暗号化されたままですが、平文の HTTP 通信は暗号化されません。

プロキシとの間に TLS を加える方式が 2 つあります。

  • HTTPS プロキシは、TLS 経由で接続する HTTP プロキシです。CONNECT リクエストやパスワードを含め、すべてが暗号化されます。HTTP / HTTPS リファレンス をご覧ください。
  • SOCKS5 over TLS は、SOCKS5 の接続を TLS で包みます。TCP は暗号化されますが、SOCKS5 は UDP を TLS 接続の外で送るため、UDP は暗号化されないままサーバに届きます。

どちらも、通信を調べる人から見ればプロキシだとわかります。特徴をつかまれにくい通信が必要なら、Shadowsocks や Trojan のように、そのために設計されたプロトコルを検討してください。

速度

接続が確立した後は、どちらのプロトコルもほとんど何も上乗せしません。接続ごとに数バイトを追加するだけで、あとはデータがそのまま通過します。SOCKS5 のハンドシェイクのほうがやや小さく、HTTP プロキシはヘッダーを 1〜2 行加えることがあります。実際の速度を決めるのは、プロトコルよりもサーバまでの距離、負荷、帯域幅です。TLS を加えると、接続ごとにハンドシェイクが 1 回増えます。

どちらを選ぶべきか

  • SOCKS5 を選ぶ:デバイス全体の通信をプロキシに通したい場合や、通話、ゲーム、QUIC のために UDP が必要な場合。ブラウザ以外のアプリにも SOCKS5 のほうが適しています。
  • HTTP を選ぶ:Web の閲覧だけが目的の場合、プロバイダが HTTP しか提供していない場合、または HTTP しか受け付けない iOS 内蔵の Wi-Fi プロキシ設定を使いたい場合。
  • TLS 対応版を選ぶ(HTTPS プロキシまたは SOCKS5 over TLS):公衆 Wi-Fi など、プロキシまでの経路が信頼できないネットワークを通る場合は必ず。
  • 同じログイン情報で両方が提供されている場合:住宅用(レジデンシャル)やデータセンターのプロキシプロバイダの多くは、HTTP 用と SOCKS5 用のポートを用意しています。SOCKS5 を選び、HTTP は予備として取っておきましょう。

iPhone で SOCKS5 や HTTP プロキシを使う

iOS にあるのは Wi-Fi ネットワークごとの HTTP プロキシ設定だけで、SOCKS5 やモバイルデータ通信向けの設定はありません。iPhone・iPad 向けの無料プロキシクライアント Potatso なら、SOCKS5、SOCKS5 over TLS、HTTP、HTTPS プロキシを、どのネットワークでもデバイス全体で使えます。手順は iPhone で SOCKS5 プロキシを設定する方法 をご覧ください。暗号化プロトコルと比べたい方は プロキシプロトコル比較 をお読みください。

よくある質問

SOCKS5 は HTTP プロキシより速いですか?
普段の利用で体感できるほどの差はありません。どちらも接続が確立した後のオーバーヘッドはごくわずかです。速度を左右するのは、2 つのプロトコルのどちらを使うかよりも、サーバの場所、負荷、帯域幅です。
SOCKS5 プロキシは通信を暗号化しますか?
いいえ。素の SOCKS5 プロキシも HTTP プロキシも、プロキシのパスワードを含めて何も暗号化しません。HTTPS の Web サイトはエンドツーエンドで暗号化されたままですが、プロキシまでの接続そのものを守るには、SOCKS5 over TLS、HTTPS プロキシ、または Shadowsocks や Trojan のような暗号化プロトコルを使ってください。
socks5h とは何ですか?
socks5h は、サイトのドメイン名の名前解決をデバイスではなくプロキシサーバが行う方式です。curl などのツールでは socks5h:// スキームで指定します。DNS の問い合わせがローカルネットワークに流れず、プロキシの所在地から見た結果が得られます。
HTTP プロキシで HTTPS の Web サイトを扱えますか?
はい。クライアントは HTTP の CONNECT リクエストでプロキシにトンネルを開かせ、その中で Web サイトと TLS 通信を行います。プロキシに見えるのはサイト名とポートだけで、ページの内容やデータは見えません。
UDP に対応しているのはどちらのプロキシですか?
SOCKS5 です。サーバ側で有効になっていれば、UDP ASSOCIATE コマンドで UDP を中継できます。HTTP プロキシは TCP しか運べないため、音声通話、多くのゲーム、QUIC は通せません。

他の言語: English · 简体中文 · 繁體中文 · Русский