Shadowsocks サーバは、暗号方式とパスワードで表され、任意で接続を偽装するプラグインも使えます。Potatso は、暗号方式と、プラグインがある場合はそのプラグインに対応していれば、サーバに接続します。プロバイダが示す設定、またはサーバの ss:// リンクを見ながら、以下の表でサーバの設定を確認してください。
Shadowsocks サーバは、手動、ss:// リンク、または次のものからの読み込みで追加できます。
- Clash または Mihomo のサブスクリプション、
- ファイルまたはリンクからの SIP008 オンライン構成、
- shadowsocks-rust または shadowsocks-libev の
config.json、 - Surge の構成、または Xray や V2Ray の構成。
暗号方式
サーバが 2022 の暗号方式を提供している場合はそれを、次に AEAD の暗号方式を優先してください。ストリーム暗号には既知の弱点があります。ほかに選択肢がないサーバに対してのみ使ってください。
| 暗号方式 | 種類 | 対応 |
|---|---|---|
2022-blake3-aes-128-gcm、2022-blake3-aes-256-gcm |
2022 | ✅ マルチユーザに対応 |
2022-blake3-chacha20-poly1305、2022-blake3-chacha8-poly1305 |
2022 | ✅ |
aes-128-gcm、aes-192-gcm、aes-256-gcm |
AEAD | ✅ |
chacha20-ietf-poly1305、xchacha20-ietf-poly1305 |
AEAD | ✅ |
aes-128-ccm、aes-256-ccm、aes-128-gcm-siv、aes-256-gcm-siv |
AEAD | ✅ |
sm4-gcm、sm4-ccm |
AEAD | ✅ |
aes-128-ctr、aes-192-ctr、aes-256-ctr |
ストリーム | ✅ |
aes-128-cfb、aes-192-cfb、aes-256-cfb(-cfb128 とも書かれます) |
ストリーム | ✅ |
aes-128-cfb1、aes-192-cfb1、aes-256-cfb1 |
ストリーム | ✅ |
aes-128-cfb8、aes-192-cfb8、aes-256-cfb8 |
ストリーム | ✅ |
aes-128-ofb、aes-192-ofb、aes-256-ofb |
ストリーム | ✅ |
camellia-128-ctr、camellia-192-ctr、camellia-256-ctr |
ストリーム | ✅ |
camellia-128-cfb、camellia-192-cfb、camellia-256-cfb(-cfb128 とも書かれます) |
ストリーム | ✅ |
camellia-128-cfb1、camellia-192-cfb1、camellia-256-cfb1 |
ストリーム | ✅ |
camellia-128-cfb8、camellia-192-cfb8、camellia-256-cfb8 |
ストリーム | ✅ |
camellia-128-ofb、camellia-192-ofb、camellia-256-ofb |
ストリーム | ✅ |
chacha20-ietf、chacha20、salsa20 |
ストリーム | ✅ |
bf-cfb、rc4-md5、rc4、table |
ストリーム | ✅ |
none(plain とも書かれます) |
暗号化なし | ✅ |
cast5-cfb、des-cfb、idea-cfb、rc2-cfb、seed-cfb、rc4-md5-6 |
ストリーム | ❌ ShadowsocksR のみ |
xchacha20、xsalsa20 |
ストリーム | ❌ |
名前は大文字と小文字を区別しないため、AES-256-GCM は aes-256-gcm と同じように動作します。
none は通信を暗号化せずに送信します。TLS 付きの v2ray-plugin など、接続自体を暗号化するプラグインと組み合わせる場合にのみ使ってください。
対応しているすべての暗号方式は、実際の Shadowsocks サーバ(shadowsocks-rust、sing-box、または元の Python サーバ)のうち、少なくとも 1 つに対してテスト済みです。上記の AEAD 暗号のうち、aes-*-ccm、aes-*-gcm-siv、sm4-* を提供するのは shadowsocks-rust のサーバだけで、使っているプロバイダはほとんどありません。
2022 のキー
2022 の暗号方式(SIP022)はパスワードを使いません。キーを使います。これは、暗号方式が必要とする長さのランダムなバイト列を Base64 でエンコードしたものです。2022-blake3-aes-128-gcm には 16 バイトのキー、そのほかの 2022 暗号方式には 32 バイトのキーが必要です。サーバにあるとおりのキーをそのまま使ってください。
Potatso は、長さが正しくないキーや、Base64 ではないパスワードでは接続しません。サーバ用に新しいキーを作るには、2022-blake3-aes-128-gcm では openssl rand -base64 16 を、そのほかの 2022 暗号方式では openssl rand -base64 32 を実行します。
マルチユーザサーバ
2022 のサーバは、1 つのポートを複数のユーザで共有できます(SIP023)。各ユーザが自分のキーを持ちます。このようなサーバでは、パスワードに、サーバのキーとユーザのキーをコロンで区切って設定します。
server-key:user-keyマルチユーザサーバに対応しているのは、2022-blake3-aes-128-gcm と 2022-blake3-aes-256-gcm だけです。
プラグイン
プラグインは、Shadowsocks の接続を包んで、検出されにくくします。Potatso にはこれらのプラグインが組み込まれているので、ほかに何もインストールする必要はありません。
| プラグイン | プラグイン名 | 対応 | UDP |
|---|---|---|---|
| Simple Obfs | obfs-local、simple-obfs、obfs |
✅ obfs=http と obfs=tls |
プラグインなしでサーバに送信されます |
| v2ray-plugin | v2ray-plugin |
✅ WebSocket(TLS の有無は問いません)。QUIC モードには対応していません。 | ❌ |
| gost-plugin | gost-plugin |
✅ WebSocket(TLS の有無は問いません) | ❌ |
| ShadowTLS | shadow-tls |
✅ バージョン 1、2、3 | ❌ |
| Restls | restls |
✅ | ❌ |
| JLS | jls |
✅ | ❌ |
別のプラグインが必要なサーバは、Potatso では読み込まれません。
- Cloak、xray-plugin などのプラグインは、デバイスが Potatso と並べて実行しなければならないプログラムであり、iOS では許可されていません。
- kcptun と ech-tls-tunnel は、Potatso ではまだ利用できません。
プラグインを設定する
サーバの設定で、プラグインからプラグインを選び、プラグインパラメータにそのオプションを入力します。オプションは、セミコロンで区切った key=value の組です。Simple Obfs の例を示します。
obfs=tls;obfs-host=cdn.example.comtls のようにキーだけを書くと、そのオプションがオンになります。不要なオプションは省略してください。デフォルト値は以下の表のとおりです。
サーバを読み込むと、Potatso がプラグインとそのオプションを設定します。
ss://リンクでは、pluginパラメータの、プラグイン名のあとに指定します:simple-obfs;obfs=tls;obfs-host=cdn.example.com。- Clash または Mihomo のサブスクリプションでは、
pluginとplugin-optsに指定されます。 - SIP008 構成、または shadowsocks-rust や shadowsocks-libev の
config.jsonでは、pluginとplugin_optsに指定されます。
どの形式でも、オプションは同じです。Clash の plugin-opts のように、プロバイダが 1 行に 1 つずつ書いている場合は、それぞれを key=value にして、セミコロンでつないでください。
プラグインのオプション
Simple Obfs
| オプション | 説明 |
|---|---|
obfs |
必須。http または tls。 |
obfs-host |
Host ヘッダー(http)、または TLS ハンドシェイクで送信されるサーバ名(tls)。空の場合、Potatso はサーバのアドレスを使います。 |
obfs-uri |
http のみ。リクエストのパス。デフォルトは /。 |
http-method |
http のみ。リクエストのメソッド。デフォルトは GET。 |
v2ray-plugin
| オプション | 説明 |
|---|---|
mode |
websocket(デフォルト)。QUIC モードには対応していません。 |
tls |
TLS で接続します。デフォルトはオフ。 |
host |
Host ヘッダーと、TLS のサーバ名。空の場合、Potatso はサーバのアドレスを使います。 |
path |
WebSocket のパス。デフォルトは /。 |
mux |
多重化。デフォルトはオフ。サーバが使っている場合にのみオンにしてください。 |
skip-cert-verify |
あらゆるサーバ証明書を受け入れます。信頼できるサーバに対してのみ使用してください。 |
header |
追加のリクエストヘッダー(header=Name:Value)。ヘッダーを増やすには繰り返し指定します。 |
gost-plugin
| オプション | 説明 |
|---|---|
mode |
必須。websocket。 |
tls |
TLS で接続します。デフォルトはオフ。 |
host |
Host ヘッダーと、TLS のサーバ名。gost と同様に、デフォルトは bing.com。 |
path |
WebSocket のパス。デフォルトは /。 |
mux |
多重化。デフォルトはオン。 |
skip-cert-verify |
あらゆるサーバ証明書を受け入れます。信頼できるサーバに対してのみ使用してください。 |
fingerprint |
その証明書だけを受け入れるための、サーバ証明書の SHA-256 フィンガープリント。 |
header |
追加のリクエストヘッダー(header=Name:Value)。ヘッダーを増やすには繰り返し指定します。 |
ShadowTLS
| オプション | 説明 |
|---|---|
host |
必須。偽装先サイトのサーバ名(www.example.com など)。 |
version |
必須。1、2、3 のいずれか。 |
password |
パスワード。バージョン 2 と 3 で必要です。 |
alpn |
ALPN のリスト。カンマ区切り。デフォルトは h2,http/1.1。 |
skip-cert-verify |
あらゆる偽装先サイトの証明書を受け入れます。 |
Restls
| オプション | 説明 |
|---|---|
host |
必須。偽装先サイトのサーバ名。 |
password |
必須。パスワード。 |
version-hint |
必須。サーバの設定に合わせて tls13 または tls12。 |
restls-script |
レコードスクリプト。プロバイダから提供されている場合。 |
JLS
| オプション | 説明 |
|---|---|
host |
必須。偽装先サイトのサーバ名。 |
username |
必須。ユーザ名。 |
password |
必須。パスワード。 |
alpn |
ALPN のリスト。カンマ区切り。デフォルトは h2,http/1.1。 |
必須のオプションがない場合、または値が無効な場合、Potatso はサーバに接続しません。
UDP
Shadowsocks サーバでは UDP はデフォルトでオンで、対応するすべての暗号方式で動作します。サーバが UDP を中継しない場合は、サーバの設定でオフにしてください。
UDP はプラグインを通して送られないので、Simple Obfs 以外のプラグインを使うと、サーバは TCP しか運びません。Potatso は UDP-over-TCP(リンクやサブスクリプションの udp-over-tcp や uot)には対応しておらず、それを必要とするサーバは読み込みません。
機能の対応状況
| 機能 | 対応 |
|---|---|
SIP002 の ss:// リンク |
✅ 古い Base64 形式を含む |
| SIP003 プラグイン | 組み込みのプラグインのみ |
| SIP003u(プラグイン経由の UDP) | ❌ |
| AEAD 暗号(SIP004) | ✅ |
| SIP008 オンライン構成 | ✅ |
| SIP022 2022 暗号方式 | ✅ TCP と UDP |
| SIP023 マルチユーザの ID ヘッダー | ✅ AES 2022 暗号方式で |
| ストリーム暗号 | ✅ 暗号方式を参照してください |
| UDP-over-TCP | ❌ |
| TCP Fast Open、MPTCP | ❌ |
shadowsocks-rust の機能の一部は、そのクライアントプログラム sslocal 自体の設定で、Potatso は同じ役割を独自の方法で果たしています。
- ローカルの SOCKS5、HTTP、tunnel、redir、DNS、TUN サーバ:Potatso がデバイスの通信を自分で取り込みます。
- アクセス制御リスト(ACL):プロファイルのルールを使ってください。
- 複数のサーバから最速のものを選ぶ:プロファイルのプロキシグループを使ってください。
ss:// リンク
ss:// リンクは、1 行にサーバ全体の情報をまとめたものです(SIP002)。
ss://userinfo@host:port/?plugin=…#name| 部分 | 説明 |
|---|---|
userinfo |
cipher:password 形式の暗号方式とパスワード。Base64 エンコードまたはパーセントエンコードのいずれか。2022 暗号方式では、パーセントエンコードの形式を使う必要があります。 |
host |
サーバのアドレス。IPv6 アドレスは [2001:db8::1] のように角括弧で囲みます。 |
port |
サーバのポート。 |
plugin |
任意。プラグイン名とそのオプションを、セミコロンで区切ってパーセントエンコードしたもの(simple-obfs;obfs=tls;obfs-host=cdn.example.com など)。 |
name |
任意。Potatso でのサーバ名。 |
Potatso は、# より前のすべてが Base64 でエンコードされた、古い形式も読み込めます。
ss://base64(cipher:password@host:port)#namePotatso は、標準と URL セーフの Base64 を、= のパディングの有無を問わず受け付けます。Potatso がサーバを共有するときは、SIP002 の Base64 形式とパーセントエンコード形式、および古い形式を提供します。
例
各例は、読み込むリンクを示しています。AEAD の例のパスワードは secret です。
aes-256-gcm の基本的なサーバ:
ss://YWVzLTI1Ni1nY206c2VjcmV0@ss.example.com:8388#Basic16 バイトのキー MTIzNDU2Nzg5MDEyMzQ1Ng== を使う 2022 サーバ:
ss://2022-blake3-aes-128-gcm:MTIzNDU2Nzg5MDEyMzQ1Ng%3D%3D@ss.example.com:8388#2022サーバのキーとユーザのキーをコロン(%3A)で区切った、マルチユーザの 2022 サーバ:
ss://2022-blake3-aes-256-gcm:MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTI%3D%3AYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU%3D@ss.example.com:8388#Multi-userサーバ名に cdn.example.com を使う、TLS の Simple Obfs:
ss://YWVzLTI1Ni1nY206c2VjcmV0@ss.example.com:443/?plugin=simple-obfs%3Bobfs%3Dtls%3Bobfs-host%3Dcdn.example.com#Obfs基本的なサーバの古い形式:
ss://YWVzLTI1Ni1nY206c2VjcmV0QHNzLmV4YW1wbGUuY29tOjgzODg#LegacyIPv6 アドレスのサーバ:
ss://YWVzLTI1Ni1nY206c2VjcmV0@[2001:db8::1]:8388#IPv6