Skip to content

Shadowsocks

Potatso が対応する Shadowsocks の暗号方式、プラグイン、リンク、機能。

Updated Markdown で表示

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.com

tls のようにキーだけを書くと、そのオプションがオンになります。不要なオプションは省略してください。デフォルト値は以下の表のとおりです。

サーバを読み込むと、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:// リンクは、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)#name

Potatso は、標準と URL セーフの Base64 を、= のパディングの有無を問わず受け付けます。Potatso がサーバを共有するときは、SIP002 の Base64 形式とパーセントエンコード形式、および古い形式を提供します。

各例は、読み込むリンクを示しています。AEAD の例のパスワードは secret です。

aes-256-gcm の基本的なサーバ:

ss://YWVzLTI1Ni1nY206c2VjcmV0@ss.example.com:8388#Basic

16 バイトのキー 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#Legacy

IPv6 アドレスのサーバ:

ss://YWVzLTI1Ni1nY206c2VjcmV0@[2001:db8::1]:8388#IPv6
ナビゲーション

Type to search…

↑↓ navigate↵ selectEsc close