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 は通せません。