# SOCKS5プロキシ：プロトコルの仕組みと使い方 | ProxyJam

SOCKS5とは何か、HTTPプロキシとどう違うか、リモートDNSが重要になるのはどんなときか。そしてProxyJamの静的ISPプロキシをSOCKS5に切り替え、切り替え後に注文に表示されるポートと認証情報で接続する方法を説明します。

- Canonical: https://proxyjam.com/ja/socks5-proxies/
- Updated: 2026-10-23
- Language: ja

SOCKS5はトランスポート層のプロキシプロトコルです。お客様に代わって接続を開き、中身を読んだり書き換えたりせずにバイトを運びます。当社が販売するすべての静的ISPプロキシは、すでにお持ちの注文のままHTTPとSOCKS5を切り替えられます。

プロトコルの切り替えは別の製品ではありません。すでにお持ちのプロキシをダッシュボードまたはAPIから切り替えると、注文が接続に使う新しいポートと認証情報に更新されます。


SOCKS5はプロキシのプロトコルであり、アドレスの種類ではありません。TCP接続を、中身を読んだり書き換えたりせずに中継します。ProxyJamが販売するすべての静的レジデンシャル（ISP）プロキシはHTTP（HTTPSも通します）またはSOCKS5で動作し、すでにお持ちの注文のまま両者を切り替えられます。切り替えたあとは、注文に表示されるポートと認証情報で接続してください。


## お客様のクライアントと当社のあいだで起きること

短いやり取りが3回あるだけで、どれもプロキシがお客様の通信を理解する必要はありません。

1. **クライアントがプロキシに挨拶し、認証方法を取り決める。** クライアントは対応している方法を提示し、プロキシは使いたい方法を一つ指定します。当社のアドレスでは、それはユーザー名とパスワードか、代わりにご自身のIPをホワイトリストに登録している場合は認証なしです。
2. **クライアントが接続先を求める。** ホストとポートを、アドレスか名前のどちらかで送ります。注目すべきは名前を送る場合です。プロキシが名前を解決するので、名前の照会はお客様のネットワークではなくプロキシのネットワークから出ていきます。
3. **そのあと、プロキシはバイトを運ぶだけ。** ペイロードを解析せず、ヘッダーも加えず、運んでいるのがウェブページなのか、データベースのセッションなのか、メールの転送なのかも知りません。この無関心こそが、HTTPプロキシではなくSOCKS5を選ぶ理由のすべてです。

## クライアントをどのプロトコルに向けるかを決めるために

### 開発者

クライアントをどのプロトコルに向けるか、そしてプロキシを切り替えたあとにクライアントに設定するスキームがsocks5かsocks5hか。

### 運用担当者

クライアントをどのプロトコルに向けるか、そしてすでにお持ちのプロキシをダッシュボードやAPIからどう切り替えるか。


## ProxyJamのプロキシをSOCKS5に移す

1. **プロキシそのものを切り替える** ダッシュボードから、または注文に対する1回のAPI呼び出しで切り替えます。クライアントだけを変えても足りません。切り替えのあいだ、プロキシが短時間使えなくなることがあります。
2. **切り替え後に注文に表示されるポート、ユーザー名、パスワードをコピーする** HTTPで接続していたときの値を使い回さないでください。
3. **クライアントにスキームを設定する** プロキシにホスト名を解決させるなら`socks5h://USERNAME:PASSWORD@HOST:PORT`、お客様の側で解決するなら`socks5://`です。
4. **コードに手を付ける前にターミナルでテストする** `curl -x socks5h://USERNAME:PASSWORD@HOST:PORT https://example.com/`。
5. **PythonではSOCKSのエクストラをインストールする** Pythonでは、`socks5h://`のプロキシURLを使えるようにする前に、requestsのSOCKSエクストラが必要です。`pip install requests[socks]`を実行してください。

## まず接続し、それからスキームを切り替える

以下のサンプルは、注文の開始時のプロトコルであるHTTPで接続します。SOCKS5を使うには、まずプロキシそのものをダッシュボードから、または1回のAPI呼び出しで切り替えてください。すると注文に、以後使うポートと認証情報が表示されます。クライアントでは、そのポートと認証情報を使い、スキームをsocks5に、プロキシにホスト名を解決させたい場合はsocks5hに変更します。そのためにPythonではrequests[socks]が、Node.jsではHTTPSエージェントの代わりにSOCKSエージェントが必要です。

### Python

Python requests でご自身のプロキシ経由のリクエストを送ります。

```
import requests

# HOST, PORT, USERNAME, PASSWORD come with your order (dashboard or API)
proxy = "http://USERNAME:PASSWORD@HOST:PORT"

proxies = {
    "http": proxy,
    "https": proxy,
}

response = requests.get(
    "https://example.com/",
    proxies=proxies,
)

print(response.status_code)
```

### cURL

ご自身のプロキシ経由でリクエストを送る1つのコマンド。

```
# HOST, PORT, USERNAME, PASSWORD come with your order (dashboard or API)
curl -x http://USERNAME:PASSWORD@HOST:PORT \
     https://example.com/
```

### Node.js

数行で axios をご自身のプロキシ経由にします。

```
import axios from "axios";
import { HttpsProxyAgent } from "https-proxy-agent";

// HOST, PORT, USERNAME, PASSWORD come with your order (dashboard or API)
const proxy = "http://USERNAME:PASSWORD@HOST:PORT";
const agent = new HttpsProxyAgent(proxy);

const response = await axios.get(
  "https://example.com/",
  {
    httpAgent: agent,
    httpsAgent: agent,
  },
);

console.log(response.status);
```

### Go

http.Transport にご自身のプロキシを設定してリクエストを送信します。

```
package main

import (
    "fmt"
    "net/http"
    "net/url"
)

func main() {
    // HOST, PORT, USERNAME, PASSWORD come with your order (dashboard or API)
    proxy, _ := url.Parse(
        "http://USERNAME:PASSWORD@HOST:PORT")

    client := &http.Client{Transport: &http.Transport{
        Proxy: http.ProxyURL(proxy),
    }}

    res, _ := client.Get("https://example.com/")
    fmt.Println(res.Status)
}
```


## SOCKS5とHTTPプロキシの比較：それぞれが運ぶものと、プロキシから見えるもの

|  | HTTPプロキシ | CONNECTによるHTTPS | SOCKS5 |
|---|---|---|---|
| 運べるもの | HTTPリクエストのみ | 指定したホストとポートへのTCPトンネル | あらゆるTCPストリーム |
| プロキシがペイロードを読むか | はい。リクエストを解析します | トンネルが開いたあとは読みません | どの時点でも読みません |
| ヘッダーを変更できるか | はい。ヘッダーを転送し、Viaのような独自のヘッダーを加えることがあります | トンネルが開いたあとはできません | いいえ。ヘッダーという概念がありません |
| ホスト名が解決される場所 | プロキシ側 | プロキシ側。CONNECTがホストを名指しします | どちら側かを選べます |
| クライアントの一般的な対応状況 | HTTPのツールなら必ず対応 | HTTPのツールなら必ず対応 | コマンドラインツールでは一般的。追加のパッケージが必要なライブラリもあります |
| 向いている用途 | 単純なウェブリクエスト | 通常のHTTPSの閲覧とスクレイピング | ウェブ以外のプロトコルと混在する通信 |

ProxyJamのプロキシは、HTTP（CONNECTでHTTPSを通します）またはSOCKS5で動作し、注文に対して切り替えます。どちらを選ぶかは、クライアントが何を送る必要があるかで決まります。


## 当社のアドレスでSOCKS5が提供するもの

- **プロトコル:** SOCKS5またはHTTP（HTTPSも通す）で、注文に対して切り替え
- **認証:** ユーザー名とパスワード、またはIPホワイトリスト
- **接続先から見えるアドレス:** 名前の分かる通信事業者のネットワーク上にある静的ISPアドレス
- **通信事業者の選択:** 米国では名前の分かる19社。その他の国ではより少ない
- **対応範囲:** カタログに77か国。それぞれ通信事業者の名前を表示
- **ローテーション:** なし。期間中にアドレスは変わらない
- **同時セッション:** プロキシ1つあたり100、1か月に50 GBを超えると10
- **トラフィックの計上:** IP単位、期間単位。どのプロトコルでも転送量は計測しない

## SOCKS5についての質問

以下の回答は当社の販売条件を述べており、条件を述べる回答にはそれぞれ、当社をその条件に拘束する文書へのリンクを付けています。

### SOCKS5プロキシとは何ですか？

SOCKS5は、RFC 1928で定義された、トランスポート層で動作するプロキシのプロトコルです。クライアントがプロキシにホストとポートへの接続を開くよう求めると、プロキシがそれを開き、以後は双方向のバイトを解釈せずに転送します。運んでいるものを解析しないので、ウェブの通信に限られず、TCPの上で動くものなら何でも通せます。

### HTTPプロキシとはどう違うのですか？

HTTPプロキシはHTTPを理解します。リクエスト行とヘッダーを読み、それらを自由に追加、削除、書き換えできます。お客様が設定していないヘッダーでひそかに自分の存在を知らせるプロキシがあるのはそのためです。SOCKS5にはヘッダーという概念がまったくなく、見えるのは接続先とバイトのストリームだけです。通信がHTTPでない場合や、途中で何者にも通信を編集させたくない場合は、SOCKS5を選んでください。

### SOCKS5は通信を暗号化しますか？

いいえ。HTTPプロキシも暗号化しません。SOCKS5はプロキシに対してお客様を認証し、そのあとはバイトを転送するだけです。仕様では認証方法が独自の保護を加えることを認めていますが、ユーザー名とパスワードによる認証（RFC 1929）はパスワードを平文で送り、そのあとの通信を何も保護しません。中の通信がHTTPSやSSHなら、すでにエンドツーエンドで暗号化されており、プロキシはそれを読めません。中の通信が平文なら平文のままなので、SOCKS5を暗号化の層として扱わないでください。

### socks5hはsocks5と何が違うのですか？

DNSの照会を行う場所が変わります。socks5では、クライアントがホスト名を手元で解決し、得られたアドレスへの接続をプロキシに求めます。socks5hでは、クライアントは名前を送り、プロキシがそれを解決します。これには二つの意味があります。お客様自身のリゾルバーには、どのホストにアクセスしているかが見えません。そして、プロキシのネットワークが受け取る答えが返ってきます。地域によって答えが変わるホスト名では、それは自宅で得られる答えとは違うことがよくあります。

### UDPに対応していますか？

UDP ASSOCIATEはRFC 1928にありますが、クライアントやサーバーがそれを実装しているかどうかはさまざまなので、思い込まずに両側を確認してください。当社のプロキシについてはUDP対応を公表していないので、TCPを前提に計画し、UDPに依存するものを作る前にサポートにお問い合わせください。

### SOCKS5を使うには別のプロキシが必要ですか？

いいえ。すでにお持ちのプロキシを、HTTP（HTTPSも通します）とSOCKS5のあいだで切り替えます。ダッシュボードから、または同じ注文に対する1回のAPI呼び出しで行えます。これはクライアントの設定だけの話ではありません。切り替えはプロキシに対して行われ、注文は新しいプロトコル、ポート、認証情報に更新され、そのあいだプロキシが短時間使えなくなることがあります。プロキシはお支払いいただいた期間全体を通じてお客様のものであり、応答しなくなったり指定した対象でブロックされたりした場合は、暦月ごとに注文の最大20%まで無料で交換されます。また初回注文には、最大10 IPを対象とする24時間の返金が付いており、テストしても対象から外れません。


## HTTPかSOCKS5か

送るのがウェブの通信だけで、お使いのツールがすでにHTTPプロキシに対応しているなら、HTTPのままにしてください。クライアントがHTTP以外のものを運ぶ必要がある場合や、ホスト名をプロキシ側で解決させ、途中で何者にもヘッダーを編集させたくない場合は、SOCKS5に切り替えてください。どちらにしても同じ製品で、[ISPプロキシ](/ja/isp-proxies/)のページで注文でき、[静的レジデンシャルプロキシ](/ja/static-residential-proxies/)とも呼ばれます。別の注文は不要で、切り替えに料金はかかりません。設定についての質問には[よくある質問](/ja/faq/)でお答えしています。このページの通信事業者と国の数は、当社の[編集方針](/ja/editorial-policy/)で説明しているとおり、サイトのビルドに使うカタログのスナップショットから読み込んでいます。



## 出典

- [RFC 1928: SOCKS Protocol Version 5](https://www.rfc-editor.org/rfc/rfc1928)：1996年の仕様。認証方法の取り決め、CONNECT、BIND、UDP ASSOCIATEの各コマンド、ドメイン名またはIPv6アドレスで指定する接続先
- [RFC 1929: Username/Password Authentication for SOCKS V5](https://www.rfc-editor.org/rfc/rfc1929)：パスワードを平文で送るログイン方法
- [RFC 9110: HTTP Semantics](https://www.rfc-editor.org/rfc/rfc9110)：9.3.6節。CONNECTリクエストは接続先のホストとポートを名指しし、プロキシがそこへのトンネルを開く
- [curl man page](https://curl.se/docs/manpage.html)：`--socks5`はホスト名を手元で解決し、`--socks5-hostname`はプロキシに解決させる
- [Everything curl: SOCKS proxy](https://everything.curl.dev/usingcurl/proxies/socks.html)：プロキシURLの`socks5://`と`socks5h://`、そしてどちら側がホスト名を解決するか
- [OpenBSD manual: ssh(1)](https://man.openbsd.org/ssh)：`-D`はローカルの動的ポートフォワーディングを設定し、sshがSOCKS4とSOCKS5のサーバーとして動作する。`-N`はリモートのコマンドを実行せずにポートを転送する




SOCKS5は、HTTPプロキシでは転送できない通信も含め、クライアントがTCP接続を開けるものなら何でも運び、バイトに手を加えずに通します。そのため、データベースのクライアント、SSHのセッション、HTTPを話さないあらゆるツールにとって自然な選択肢になります。一方で、アドレスの性質は変わりません。プロキシのプロトコルはクライアントとプロキシのあいだで話されるもので、向こう側のサイトから見えるのは、プロキシのアドレスからの接続と、HTTPプロキシが加えることにしたヘッダーです。ですから、問うべきなのはどのプロトコルを買うかではありません。そのアドレスがどのネットワークに属しているかです。その答えは名前の分かるインターネット事業者で、米国では19社です。

## 仕様に書かれていること

SOCKSバージョン5は1996年に[RFC 1928](https://www.rfc-editor.org/rfc/rfc1928)として公開されました。ファイアウォールを越えるためのプロトコルで、SOCKSバージョン4にUDP、認証方法の枠組み、ドメイン名またはIPv6アドレスで指定する接続先を加えたものです。クライアントは対応している認証方法を提示し、サーバーがそのうち一つを選びます。そのあとクライアントは、外向きの接続（CONNECT）、待ち受けポート（BIND）、UDPの中継（UDP ASSOCIATE）のいずれかを求めます。ユーザー名とパスワードによるログインはそれ自体が短い仕様[RFC 1929](https://www.rfc-editor.org/rfc/rfc1929)になっており、パスワードを平文で送ります。そのため、重要な通信はトンネルの中で暗号化しておいてください。

socks5とsocks5hのスキームが選び分けているのは、このドメイン名のオプションです。[curlのマニュアル](https://curl.se/docs/manpage.html)は、`--socks5`をプロキシを使いつつ「but resolve the hostname locally」（ただしホスト名は手元で解決する）ものとし、`--socks5-hostname`を「the proxy resolve the hostname」（プロキシにホスト名を解決させる）形の変種として説明しています。プロキシURLでは、[Everything curl](https://everything.curl.dev/usingcurl/proxies/socks.html)の表にあるとおり、`socks5://`が前者の動作に、`socks5h://`が後者の動作になります。HTTPSを運ぶHTTPプロキシは、通常は代わりに名前を受け取ります。CONNECTリクエストが接続先のホストとポートを名指しし、プロキシがそこへのトンネルを開くからです（[RFC 9110](https://www.rfc-editor.org/rfc/rfc9110)、9.3.6節）。UDPの中継はSOCKS5の仕様の一部ですが、実装によって扱いが異なります。当社のプロキシでそれが何を意味するかは、下のFAQで説明しています。

## SSH経由でSOCKS5を使う

すでにサーバーにSSHでログインできるなら、プロキシを買わなくてもSOCKS5プロキシが手に入ります。`ssh -N -D 1080 user@server`は、[OpenBSDのsshマニュアル](https://man.openbsd.org/ssh)がローカルの「dynamic」（動的）なアプリケーションレベルのポートフォワーディングと呼ぶものを設定します。sshはお客様のマシンのポート1080で待ち受け、「will act as a SOCKS server」（SOCKSサーバーとして動作する）ことで、各接続を暗号化されたSSHのチャネルで運び、リモートのマシンから開きます。`-N`を付けるとリモートのシェルを起動せず、転送だけを行います。クライアントを`socks5h://127.0.0.1:1080`に向ければ、その通信はサーバーから出ていきます。

購入したSOCKS5プロキシとの違いは、接続がどこから出ていくかです。SSHトンネルを通すと、向こう側のサイトから見えるのはSSHサーバーのアドレスと、そのサーバーが属するネットワークで、借りたサーバーならたいていホスティング会社のネットワークです。SSHが暗号化するのはお客様とサーバーのあいだの区間で、サーバーからサイトまでの通信はもともとの状態のままです。SOCKS5に切り替えたProxyJamのプロキシは、購入手続きで国と通信事業者を選んだ、名前の分かるインターネット事業者のネットワーク上のアドレスから出ていきます。注文に表示されるポートと認証情報で直接接続するので、あいだにSSHは入らず、ご自身でサーバーを運用する必要もありません。

つまり、この二つは別々の問いに答えるものです。SSHのトンネルは、すでに管理しているマシンから通信を送り出します。ISPアドレスのSOCKS5プロキシは、出口のアドレスそのもの、つまりそれを照会したときにどのネットワークが表示されるかが重要になる作業のためのものです。

