SOCKS5 サーバは、代わりに接続を開き、UDP を中継します。ユーザ名とパスワードの有無は問いません(RFC 1928)。SOCKS5 over TLS は、同じサーバに TLS 経由で接続するもので、サーバまでの接続も暗号化されます。
Potatso は、アクセス先のアドレスではなく、サイト名をサーバに送り、名前の解決はサーバが行います。ほかのアプリでは socks5h やリモート DNS と呼ばれる方式です。
SOCKS5 サーバは、手動、socks5:// リンク、または次のものからの読み込みで追加できます。
- Clash または Mihomo のサブスクリプション(
type: socks5)、 - Surge の構成(
socks5とsocks5-tls)、 - Xray または V2Ray の構成(
socksアウトバウンド。TLS の有無は問いません)。
SOCKS5 over TLS サーバを手動で追加するには、SOCKS5 を選び、TLS をオンにします。
設定
| 設定 | 説明 |
|---|---|
| サーバ、ポート | サーバのアドレスとポート。IPv6 アドレスも使えます。 |
| 認証 | なし、またはユーザ名とパスワード。 |
| ユーザ名、パスワード | それぞれ最大 255 バイト。 |
| UDP リレー | デフォルトはオン。UDP を参照してください。 |
| TLS | SOCKS5 over TLS ではオン。 |
| 証明書の検証をスキップ | SOCKS5 over TLS のみ。あらゆる証明書を受け入れます。テストにのみ使用してください。 |
| 証明書のピン | SOCKS5 over TLS のみ、任意。サーバの証明書の SHA-256 フィンガープリント(16 進数 64 桁)。ピンを設定すると、Potatso は自己署名証明書を含め、ピンに一致する証明書だけを受け入れます。 |
サーバがユーザ名とパスワードを要求しているのに、設定していない場合、Potatso は接続しません。Potatso は GSSAPI(Kerberos)認証には対応していません。
username が空の Clash または Mihomo のサーバは、Clash と同様に、認証なしで読み込まれます。
証明書
SOCKS5 over TLS では、TLS ハンドシェイクのサーバ名は常にサーバのアドレスで、サーバの証明書はそれに対して有効でなければなりません。有効でない場合は、証明書のピンを設定するか、証明書の検証をスキップをオンにしてください。別のサーバ名は設定できません。別の名前を持つリンク、Surge のサーバ、Xray のサーバは、Potatso では読み込まれません。Clash と Mihomo には SOCKS5 用のサーバ名がないため、Potatso は、それらと同様に、そこにある sni を無視します。
Potatso は次のものに対応していません。
- カスタム CA 証明書:代わりにサーバの証明書をピン留めしてください、
- TLS クライアント証明書(Clash の
certificateとprivate-key)や、証明書の照合に使う別の名前(name-cert-verify):これが必要なサーバは、Potatso は読み込みません、 - ALPN のリスト:Potatso は、それなしでサーバを読み込みます。
UDP
UDP は、QUIC、音声・ビデオ通話、多くのゲームで使われます。UDP リレーがオンのとき、Potatso は UDP を、IPv4 と IPv6 のアドレスに対して、サーバ経由(UDP ASSOCIATE)で送ります。自分のアドレスを 0.0.0.0 と報告する NAT の内側のサーバでも動作します。Potatso は、設定されたアドレスに UDP を送ります。
サーバが UDP を中継しない場合は、UDP リレーをオフにしてください。その場合は次のようになります。
- ルールを使う場合、Potatso は UDP をこのサーバに送るルールをスキップし、次に一致するルールが転送先を決めます。ほかのどのルールにも一致しない UDP は、直接送られます。
- グローバルモードでは、すべての通信がサーバを経由しなければならないため、UDP は動作しません。
UDP について知っておくべきこと:
- UDP は、サーバの別の UDP ポートで中継されるため、サーバのファイアウォールで UDP を通す必要があります。
- SOCKS5 over TLS で暗号化されるのは、サーバへの接続だけです。SOCKS5 は UDP をその外側で送るため、UDP 通信は暗号化されずにサーバに届きます。
- UDP では、Potatso がサイトのアドレスを自分で調べ、そのアドレスをサーバに送ります。
- Clash、Mihomo、Surge から読み込む場合、サーバが
udp: false(Surge ではudp-relay=false)を指定していない限り、UDP リレーはオンです。udpがない場合、Clash は UDP をオフのままにするため、サーバが UDP を中継するか確認してください。
機能の対応状況
| 機能 | 対応 |
|---|---|
IPv4、IPv6、ドメインの宛先への CONNECT(RFC 1928) |
✅ |
リモート DNS:サーバによるドメイン名の解決(socks5h) |
✅ TCP の場合 |
| 認証なし | ✅ |
| ユーザ名とパスワード(RFC 1929) | ✅ |
| GSSAPI(RFC 1961) | ❌ |
IPv4 と IPv6 の宛先への UDP ASSOCIATE |
✅ |
NAT の内側のサーバでの UDP(0.0.0.0 のリレーアドレス) |
✅ |
| UDP のフラグメント化 | ❌ フラグメント化されたデータグラムは破棄されます(RFC 1928 で許容されています) |
BIND(アクティブモードの FTP などの着信接続) |
❌ |
| SOCKS5 over TLS | ✅ 証明書のピンと、証明書の検証のスキップに対応 |
| サーバのアドレス以外の TLS サーバ名、ALPN、カスタム CA、クライアント証明書 | ❌ |
| TLS で暗号化された UDP | ❌ SOCKS5 は UDP を TLS の外側で送ります |
| IPv6 のサーバアドレス | ✅ |
| SOCKS4 と SOCKS4a | ❌ |
対応しているすべての機能は、実際の SOCKS5 サーバ(Xray、sing-box、Mihomo、3proxy、microsocks)に対してテスト済みです。sing-box は、socks インバウンドではなく mixed インバウンドで SOCKS5 over TLS を提供します。
リンク
SOCKS5 リンクは、1 行にサーバ全体の情報をまとめたものです。
socks5://user:password@host:port#name
socks5+tls://user:password@host:port?insecure=1#name| 部分 | 説明 |
|---|---|
| スキーム | SOCKS5 では socks5://、socks://、socks5h://。SOCKS5 over TLS では socks5+tls:// または socks+tls://。Potatso は常にドメイン名をサーバに送るので、socks5h:// は socks5:// と同じように動作します。 |
user:password |
任意。パスワード内の :、@、その他の特殊文字はパーセントエンコードします。たとえば p:ss は p%3Ass と書きます。ユーザ名に : は使えません。 |
host |
サーバのアドレス。IPv6 アドレスは [2001:db8::1] のように角括弧で囲みます。 |
port |
サーバのポート。 |
insecure |
SOCKS5 over TLS のみ、任意。1 で「証明書の検証をスキップ」がオンになります。Potatso は allowInsecure と skip-cert-verify も読み取ります。 |
name |
任意。Potatso でのサーバ名。 |
リンクには証明書のピンを含められません。サーバのアドレス以外の sni を持つリンクは読み込まれません。
Potatso は、ほかに次の 2 つの形式も読み込みます。
socks://base64(user:password)@host:port#name
socks5://base64(user:password@host:port)#name1 つ目は、v2rayN が SOCKS サーバを共有するときの形式です。2 つ目は、:// と # の間のすべてが Base64 でエンコードされた、古い形式です。Potatso がパスワード付きの SOCKS5 サーバを共有するときは、標準のリンクと v2rayN 形式を提供します。
例
パスワードなしのサーバ:
socks5://proxy.example.com:1080#Openユーザ名 alice、パスワード s3cret のサーバ:
socks5://alice:s3cret@proxy.example.com:1080#Authパスワード p:ss wörd をパーセントエンコードしたもの:
socks5://alice:p%3Ass%20w%C3%B6rd@proxy.example.com:1080#Encoded同じサーバを socks5h:// リンクにしたもの:
socks5h://alice:s3cret@proxy.example.com:1080#Remote-DNSalice:s3cret を Base64 でエンコードした v2rayN 形式:
socks://YWxpY2U6czNjcmV0@proxy.example.com:1080#v2rayN古い形式:
socks5://YWxpY2U6czNjcmV0QHByb3h5LmV4YW1wbGUuY29tOjEwODA#LegacyIPv6 アドレスのサーバ:
socks5://[2001:db8::1]:1080#IPv6SOCKS5 over TLS サーバ:
socks5+tls://alice:s3cret@proxy.example.com:443#TLS自己署名証明書の SOCKS5 over TLS サーバ:
socks+tls://proxy.example.com:443?insecure=1#Self-signed