Shadowsocksは、軽量なSOCKS5ベースの暗号化プロキシプロトコルで、元々は一般的なネットワークにおけるトラフィックシェーピングやブロッキングを回避するために設計されました。フルVPNとは異なり、アプリケーションが明示的に送信するトラフィックのみをプロキシし、プロトコルオーバーヘッドはほとんどなく、接続が制限されている場合でも良好に動作します。VLESS+Realityのように実際のTLSハンドシェイクを模倣しようとはせず、シンプルさ、幅広いクライアントサポート(ルーター、電話、ブラウザ)、そして非常に低いレイテンシが強みですが、その代償として、厳しく監視されているネットワークではトラフィックパターンからフィンガープリンティングされやすくなるという欠点があります。
現在、積極的にメンテナンスされているサーバー実装は2つあります。
- shadowsocks-rust は、shadowsocks 組織が提供する、Rust で記述された最新のリファレンス実装です。新しい AEAD-2022 暗号ファミリーをサポートし、活発に開発が進められており、このガイドではこの実装のインストールと設定を詳細に解説します。
- shadowsocks-libev は、古い C 言語による実装です。バグ修正のために現在もメンテナンスされており、独自の systemd ユニットを含む既製の apt パッケージとして提供されています。手動でバイナリを扱うことなく、極めてシンプルなインストールを実現したい場合に最適な選択肢です。このガイドでは、代替インストール方法としてセクション 3 で説明します。
このガイドでは、WebパネルやDockerを使用せずに、コマンドラインからサーバーを手動で設定する方法について説明します。「IPアドレス」フィールドが表示される箇所はすべて、VPSの実際のIPアドレスに置き換えてください。
必要なもの:Ubuntu 22.04/24.04またはDebian 11/12が動作するVPS、rootアクセス権限、VPSのIPアドレス、および空いているUDP/TCPポート(このガイドではShadowsocksのデフォルトである8388を使用します)。
まだサーバーをお持ちでない場合は、「サーバーの注文方法と支払い方法」をご覧ください。
まず、他のセルフホスト型オプションと比較検討してみませんか?TLSカモフラージュベースの代替案については「Xray VLESS Reality Guide」 、 WireGuardベースのオプションについては「AmneziaWG Server Deployment Guide」 、その他の最新プロキシプロトコルについては「Hysteria2 and TUIC setup」をご覧ください。
サーバーに接続中
Windows (PuTTY)
PuTTYを開き、ホスト名欄にVPSのIPアドレスを入力し、ポート番号を22に設定して、VPSプロバイダからメールで送られてきたパスワードを使ってrootユーザーとしてログインしてください。
サーバーIPアドレス:あなたのIPアドレス
ログイン: root
パスワード: あなたのパスワード
PuTTY/SSH を介した接続方法の詳細については、「SSH を介して Linux サーバーに接続する方法」を参照してください。
Linux / macOS (ターミナル)
ssh root@your_IP_address
以下のコマンドはすべて、同じ SSH セッション内でサーバー上で実行されます。これには、セクション 2 から 7 までと、セクション 13 のサーバー側チェックが含まれます。セクション 8 から 12 (クライアント アプリのインストールと設定) は、プロキシを実行する必要があるデバイスである Windows/macOS/Linux/Android/iOS デバイス上で実行されます。各セクションでは、サーバーにアクセスする行があるかどうか、またある場合はその行が明示的に示されています。
サーバーの準備
システムを更新する
何かをインストールする前に、パッケージリストを更新し、インストール済みのパッケージをアップグレードしてください。
apt update -y && apt upgrade -y
カーネルのアップグレードが行われる場合は、続行する前に再起動することをお勧めします。(aptとLinuxパッケージマネージャーの仕組みについては、「Linuxパッケージマネージャー」を参照してください。)以下を確認してください。
cat /var/run/reboot-required
ファイルが存在する場合は、まず「reboot」コマンドで再起動し、約30秒待ってから再接続してください。
このガイドで使用するツールをインストールしてください。
apt install -y curl wget tar xz-utils ufw qrencode
curl/wgetとtar/xz-utilsは、shadowsocks-rustリリースアーカイブを取得して解凍するために必要です。ufwは、以下で設定するファイアウォールです。qrencodeは、セクション7で完成したクライアントリンクをスキャン可能なQRコードに変換します。
ファイアウォール(UFW)を設定する
UFWルールに関する詳細は、「Linuxでのファイアウォールの設定」を参照してください。
必要な 2 つのポートを開きます。SSH 用の 22/tcp (このルールを無視すると、サーバーへのアクセスを失うリスクがあります) と、tcp と udp の両方の 8388 ポートです。Shadowsocks は TCP 接続と UDP アソシエーションの両方をプロキシします (DNS や一部のゲーム/アプリに役立ちます)。そのため、ポートの両方向を開放する必要があります。
ufw allow 22/tcp
ufw allow 8388/tcp
ufw allow 8388/udp
ufw --force enable
ufw status
ufwのステータス出力では、3つのルールすべてが「ALLOW」と表示されるはずです。後でconfig.jsonのポートを変更した場合は、これらのルールもそれに合わせて更新してください。
サーバーソフトウェアのインストール
以下の2つのオプションから1つを選択してください。オプションA(shadowsocks-rust)をお勧めします。これは現在も活発に開発されている実装であり、このガイドで後述する最新のAEAD-2022暗号をサポートしています。オプションB(shadowsocks-libev)は、既製のsystemdユニットを含むシンプルなaptパッケージを使用したい場合や、AEAD-2022が必要ない場合に適しています。
オプションA — shadowsocks-rust(推奨)
Shadowsocks-rust は最新リリースに apt パッケージを同梱していないため、プロジェクトの GitHub リリースからビルド済みの静的バイナリをダウンロードしてインストールします。GitHub API から最新のリリース タグを取得し、対応する Linux x86_64 アーカイブをダウンロードしてください。
SS_VER=$(curl -s https://api.github.com/repos/shadowsocks/shadowsocks-rust/releases/latest | grep -Po '"tag_name": "\K[^"]*')
echo "Latest version: $SS_VER"
cd /root
wget "https://github.com/shadowsocks/shadowsocks-rust/releases/download/${SS_VER}/shadowsocks-${SS_VER}.x86_64-unknown-linux-gnu.tar.xz"
VPSがx86_64ではなくarm64の場合(`uname -m`で確認してください)、上記のファイル名のx86_64-unknown-linux-gnuをaarch64-unknown-linux-gnuに置き換えてください。
アーカイブを展開し、バイナリをシステム全体にインストールします。
tar -xf shadowsocks-*.tar.xz
install -m 755 ssserver ssservice ssmanager ssurl /usr/local/bin/
rm -f shadowsocks-*.tar.xz ssserver ssservice ssmanager ssurl sslocal 2>/dev/null
バイナリが適切な場所に存在することを確認し、インストールされているバージョンをチェックしてください。
ssserver --version
設定ファイルを格納するディレクトリを作成します。
mkdir -p /etc/shadowsocks-rust
このガイドでは、インストーラースクリプトをbashにパイプするのではなく、固定バージョンをインストールします。後でアップグレードするには、上記の2つのコマンドを新しいSS_VERルックアップで再実行し、サービスを停止し、バイナリを置き換えて、サービスを再起動してください(セクション6)。
オプションB — shadowsocks-libev(代替手段、aptパッケージ)
Shadowsocks-libevはUbuntuのuniverseリポジトリ(Ubuntu 16.10以降)とDebianのメインリポジトリ(Debian 8以降)に含まれているため、22.04/24.04またはDebian 11/12ではサードパーティのPPAは必要ありません。
apt install -y shadowsocks-libev
aptがパッケージが見つからないと報告した場合、universeリポジトリが無効になっています。有効にして再試行してください。
add-apt-repository universe && apt update && apt install -y shadowsocks-libev
このパッケージは独自の systemd ユニット (デフォルト設定用の shadowsocks-libev.service、およびインスタンスごとの名前付き設定用の[email protected] ) をインストールし、/etc/shadowsocks-libev/config.json を自動的に作成します。セクション 4~6 では、Rust のコマンドとファイル パスに加えて、libev 固有のコマンドとファイル パスについても説明しています。このガイドのクライアント セクション (7~13) の残りの部分は、どちらのサーバー実装にも同じように適用されます。どちらも同じ Shadowsocks/SIP002 プロトコルをネットワーク上で使用するためです。
パスワードの生成と暗号方式の選択
Shadowsocks認証は、両者が合意する必要のある単一の共有パスワードと暗号(暗号化方式)で構成されており、管理すべき個別のUUID、鍵ペア、証明書はありません。
暗号ファミリー
- AEAD-2022 (推奨、shadowsocks-rust のみ): 2022-blake3-aes-128-gcm、2022-blake3-aes-256-gcm、2022-blake3-chacha20-poly1305。より強力なリプレイ攻撃対策と、1 つのポートを共有する複数のユーザーをサポートする新しい設計 (SIP022)。パスワードは、暗号の鍵長 (128 ビット版の場合は 16 バイト、256 ビット版の場合は 32 バイト) と完全に一致する base64 文字列である必要があります。
- 従来のAEAD(rustとlibevの両方でサポート):aes-256-gcm、aes-128-gcm、chacha20-ietf-poly1305。古いクライアントやshadowsocks-libevとの互換性が高く、パスワードは鍵素材として直接使用されるのではなく、鍵導出関数を通して渡されるため、任意のパスフレーズを使用できます。
このガイドでは、shadowsocks-rust サーバーに 2022-blake3-aes-256-gcm を使用します。これは、最も強力で最新のオプションであり、後述するすべてのクライアント (v2rayN、v2rayNG、Shadowrocket、Streisand、ShadowsocksX-NG) がこれをサポートしているためです。セクション 3 で shadowsocks-libev をインストールした場合は、libev は AEAD-2022 を実装していないため、代わりに chacha20-ietf-poly1305 または aes-256-gcm を使用してください。
キーを生成する(shadowsocks-rust)
ssservice genkey -m "2022-blake3-aes-256-gcm"
これはbase64文字列を出力します。これがあなたのパスワードです。安全な場所にコピーしておいてください。セクション5のサーバー設定とセクション7のクライアントリンクの両方に貼り付ける必要があります。
パスフレーズを選択してください(shadowsocks-libev)
shadowsocks-libevで使用される古典的なAEAD暗号では、生の鍵として使用されるのではなくPBKDF/HKDFを通されるため、十分な長さのランダムな文字列であればどれでも機能します。以下のコマンドで生成してください。
openssl rand -base64 32
サーバー構成の記述
シャドウソックス・ラスト
設定ファイルを開いて編集します。
nano /etc/shadowsocks-rust/config.json
以下のテンプレートを貼り付け、セクション4のパスワード(およびセクション2のポート番号を8388から変更した場合)に置き換えてください。
{
"server": "0.0.0.0",
"server_port": 8388,
"password": "YOUR-GENERATED-KEY-HERE",
"method": "2022-blake3-aes-256-gcm",
"mode": "tcp_and_udp",
"timeout": 300,
"nofile": 51200
}
ファイルを保存するには、Ctrl+O(書き込み)を押し、ファイル名を確認するにはEnterキーを押し、nanoを終了するにはCtrl+Xを押します。
重要なフィールド: server はすべてのインターフェース (0.0.0.0) でリッスンします。server_port はセクション 2 で開かれたポートです。password/method はセクション 4 の認証情報と暗号です。mode は TCP と UDP の両方のリレーを有効にします。timeout はアイドル接続のタイムアウト (秒単位) です。nofile はビジー状態のサーバーのためにファイルディスクリプタの制限を引き上げます。
systemdに組み込む前に、JSONの内容を検証し、バイナリがそれを受け入れることを確認してください。
ssserver -c /etc/shadowsocks-rust/config.json --help >/dev/null && echo "binary OK"
python3 -m json.tool /etc/shadowsocks-rust/config.json >/dev/null && echo "JSON OK"
systemdユニット(shadowsocks-rust)を作成します。
バイナリリリースにはsystemdユニットが含まれていないため、作成してください。
nano /etc/systemd/system/ssserver.service
[Unit]
Description=Shadowsocks-Rust Server
Documentation=https://github.com/shadowsocks/shadowsocks-rust
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/ssserver -c /etc/shadowsocks-rust/config.json
Restart=on-failure
RestartSec=5s
LimitNOFILE=51200
User=root
[Install]
WantedBy=multi-user.target
上記の手順で保存して終了し、systemdに新しいユニットファイルを認識するように指示します。
systemctl daemon-reload
シャドウソックス-libev
aptパッケージは既に/etc/shadowsocks-libev/config.jsonをデフォルト設定(ループバックのみ、ランダムパスワード)と独自のsystemdユニットで作成しています。編集するには、このファイルを開いてください。
nano /etc/shadowsocks-libev/config.json
内容を以下に置き換えてください。
{
"server":"0.0.0.0",
"server_port":8388,
"password":"YOUR-PASSPHRASE-HERE",
"method":"chacha20-ietf-poly1305",
"mode":"tcp_and_udp",
"timeout":300
}
デフォルトの設定では、server: ["::1", "127.0.0.1"] (ループバックのみ) が使用されます。これを "0.0.0.0" に変更することで、パブリック IP からサーバーにアクセスできるようになります。上記のテンプレートではなく、標準ファイルをコピーした場合は、この手順をスキップしないでください。
サービスの開始と自動起動の有効化
シャドウソックス・ラスト
systemctl enable --now ssserver
systemctl status ssserver --no-pager
ステータスはアクティブ(実行中)と表示されるはずです。実際にポートで何かがリッスンしていることを確認してください(両方のプロトコル)。
ss -lntp | grep ':8388'
ss -lunp | grep ':8388'
サービスが起動しない場合、原因を特定する最も簡単な方法はsystemdジャーナルを確認することです(Linuxログの読み方全般については、「Linuxログの読み方と場所」を参照してください)。
journalctl -u ssserver -n 50 --no-pager
シャドウソックス-libev
systemctl restart shadowsocks-libev
systemctl enable shadowsocks-libev
systemctl status shadowsocks-libev --no-pager
shadowsocks-rustの場合と同様にポートとログを確認しますが、サービス名を置き換えてください。
ss -lntp | grep ':8388'
ss -lunp | grep ':8388'
journalctl -u shadowsocks-libev -n 50 --no-pager
クライアント接続リンクの構築
Shadowsocksクライアントは、設定ファイルではなく、単一のss://共有リンク(SIP002 URL形式)をインポートします。このリンクは、URLのuserinfo部分に暗号文とパスワードをbase64でエンコードします。
ss://base64(method:password)@your_IP_address:port#label
サーバー上でbase64部分を構築する(これにより、手動エンコードによるタイプミスを防ぐことができます)。
METHOD="2022-blake3-aes-256-gcm"
PASSWORD="YOUR-GENERATED-KEY-HERE"
USERINFO=$(echo -n "${METHOD}:${PASSWORD}" | base64 -w0)
echo "ss://${USERINFO}@your_IP_address:8388#My-SS-Server"
出力例(プレースホルダーキー付き):
ss://MjAyMi1ibGFrZTMtYWVzLTI1Ni1nY206eHl6X2V4YW1wbGVfa2V5X2hlcmU=@your_IP_address:8388#My-SS-Server
# の後のテキストは単なる表示ラベルであり、どのクライアントでも自由に名前を変更できます。shadowsocks-libev サーバーの場合は、METHOD="chacha20-ietf-poly1305" (または aes-256-gcm) とセクション 4 のパスフレーズに置き換えてください。
モバイル端末が直接スキャンできるように、QRコードに変換してください。
qrencode -o ~/ss-client.png "ss://${USERINFO}@your_IP_address:8388#My-SS-Server"
scpコマンドを使ってPNGファイルを自分のコンピューターにコピーしてください。サーバーではなく、コンピューターのターミナル(またはWindowsの場合はPowerShell)から実行してください。
scp root@your_IP_address:~/ss-client.png .
Windowsから接続しています
このセクションで説明する内容はすべて、SSH経由ではなく、Windows PC上で実行されます。クライアントは、実際にプロキシを使用するデバイス上で実行する必要があります。
v2rayNをインストールする
v2rayNは、Shadowsocksをネイティブでサポートするほか、VLESS、VMess、Trojanなどにも対応した、無料で活発にメンテナンスされているGUIクライアントです。最新リリースはプロジェクトのページからダウンロードできます。
Windows 64ビット版の.zipアセット(最近のv2rayNバージョンでは、自己完結型ビルドのため別途.NETランタイムは不要です)を入手し、任意の場所に解凍して、v2rayN.exeを実行してください。
サーバーをインポートする
セクション 7 で作成した ss:// リンクをクリップボードにコピーします (または、scp を使用して QR PNG をコピーして開きます)。次に、v2rayN で [サーバー] → [クリップボードから一括 URL をインポート] を選択します (または、内蔵のスキャナを使用して QR コードをスキャンします)。新しいサーバー プロファイルが、# の後に設定したラベルとともにリストに表示されます。
プロファイルを右クリックしてアクティブとして選択し、メインウィンドウのツールバーからシステムプロキシ(またはマシン全体をルーティングするためのTUNモード)を有効にします。
macOSから接続しています
このセクションで説明する内容はすべてMac上で実行され、SSH経由では実行されません。
ShadowsocksX-NGをインストールしてください
ShadowsocksX-NGは、Shadowsocks用のmacOSネイティブGUIクライアントとして長年開発が続けられています。現在のリリースラインでは、Intel版に加え、Apple Silicon版も同梱されています。最新の.dmgファイルはリリースぺージからダウンロードできます。
.dmgファイルを開き、ShadowsocksX-NGをアプリケーションフォルダにドラッグして起動してください。メニューバーにアイコンとして表示されます。
サーバーをインポートする
セクション 7 の ss:// リンクをクリップボードにコピーし、メニューバーのアイコン → サーバー → サーバー設定 → 左下の + をクリックして、「クリップボードからインポート」を選択します (または、PNG を開いた後に「画面から QR コードをスキャン」で QR コードをスキャンします)。メニューバーのドロップダウンから新しいプロファイルを選択し、「Shadowsocks: オン」に切り替えて、同じメニューから「PAC Auto」または「Global」ルーティング モードを選択します。
Linuxデスクトップから接続する
このセクションで説明する内容はすべて、VPSではなく、あなた自身のLinuxマシン上で実行されます。
ローカルクライアントをインストールします
セクション3でサーバーにshadowsocks-rustをインストールした場合、同じリリースアーカイブにはSOCKS5/HTTPローカルプロキシクライアントであるsslocalが含まれています。サーバーバイナリと同じ方法でダウンロードしてインストールしてください(デスクトップのOSがx86_64-unknown-linux-gnuでない場合は、OS/archサフィックスを調整してください)。
SS_VER=$(curl -s https://api.github.com/repos/shadowsocks/shadowsocks-rust/releases/latest | grep -Po '"tag_name": "\K[^"]*')
wget "https://github.com/shadowsocks/shadowsocks-rust/releases/download/${SS_VER}/shadowsocks-${SS_VER}.x86_64-unknown-linux-gnu.tar.xz"
tar -xf shadowsocks-*.tar.xz
sudo install -m 755 sslocal /usr/local/bin/
設定して実行する
127.0.0.1:1080でSOCKS5プロキシとしてリッスンする小さなローカル設定を作成します。
mkdir -p ~/.config/shadowsocks-rust
cat > ~/.config/shadowsocks-rust/local.json << 'EOF'
{
"server": "your_IP_address",
"server_port": 8388,
"password": "YOUR-GENERATED-KEY-HERE",
"method": "2022-blake3-aes-256-gcm",
"local_address": "127.0.0.1",
"local_port": 1080,
"mode": "tcp_and_udp"
}
EOF
sslocal -c ~/.config/shadowsocks-rust/local.json
ブラウザまたはシステムネットワーク設定で、127.0.0.1:1080 の SOCKS5 プロキシを指定してください。GUI の場合、Nekorayまたは ShadowsocksX-Qt5 スタイルのフォークを使用すると、セクション 7 の ss:// リンクをインポートして、手動で実行する代わりに sslocal を管理できます。
Androidから接続中
ここで行われるすべての処理は、SSH経由ではなく、Androidデバイス上で行われます。
クライアントをインストールする
2つの良い選択肢:
- Android 版 Shadowsocks — Shadowsocks 組織の公式クライアントです。Google Play からインストールするか(「Shadowsocks」で検索)、Play が利用できない場合はプロジェクトのリリース ページから直接 APK をダウンロードしてください。 領域。
- v2rayNG — v2rayNのAndroid版で、VLESS/VMess/Trojanに加えてShadowsocksもサポートしています。複数のプロトコルに対応したアプリを1つだけ使いたい場合に便利です。 タイプ。
サーバーをインポートする
どちらのアプリでも、+ ボタンをタップし、セクション 7 の ss:// リンクをコピーした後、「クリップボードからインポート」を選択するか、「QR コードをスキャン」を選択してカメラを PNG に向けます。インポートしたプロファイルをタップして選択し、接続ボタンをタップします。Android は初回に VPN の許可を求めますので、許可してトンネルを確立します。
iOSから接続中
ここで行われるすべての操作は、SSH経由ではなく、iPhoneまたはiPad上で行われます。
Shadowsocks対応クライアントをインストールしてください。
Shadowrocketは、ShadowsocksをサポートするiOSクライアントの中で最も広く利用されているアプリです。ほとんどのアプリストアでは有料アプリとなっています。App Storeで検索するか、アプリを開いてください。
Streisandは、VLESS、Trojan、その他のプロトコルに加えてShadowsocksもサポートする、無料のオープンソースの代替手段です。
App Storeのカタログはストアフロントや地域によって異なり、時間とともに変更される場合があります。お住まいの地域でどちらも表示されない場合は、App Storeで「Shadowsocks」または「V2Box」を検索してください。
サーバーをインポートする
ss:// リンクをクリップボードにコピーし、クライアントを開いて「クリップボードから追加/インポート」オプションを使用するか、クライアントの内蔵スキャナでセクション 7 の QR コードをスキャンします。新しいプロファイルをオンに切り替えます。iOS は初回起動時に VPN 設定の許可を求めますので、Face ID、Touch ID、またはパスコードで承認してください。
接続の確認
セクション 8、9、10、11、または 12 からトンネルがアクティブになっている状態で、自分のデバイス (SSH セッションではない) に戻り、ブラウザで任意の「自分の IP アドレスは?」チェッカーを開きます。表示されるアドレスは、VPS の IP アドレス (your_IP_address) と一致するはずです。
サーバー側から検証するには、systemdジャーナルで接続アクティビティを確認し、ポート上で確立されたセッションを確認します(rustジャーナルにはssserver、libevジャーナルにはshadowsocks-libevを使用します)。
journalctl -u ssserver -n 50 --no-pager
ss -tnp | grep ':8388'
参考文献・引用元
|
フィールド |
値 |
|
住所 |
VPSのパブリックIPアドレス |
|
ポート |
8388(第2節で開通したのと同じ港) |
|
パスワード |
第4節で生成されたキー/パスフレーズ |
|
方法 |
2022-blake3-aes-256-gcm (rust) または chacha20-ietf-poly1305 (libev) — 両側で完全に一致する必要があります |
|
モード |
tcp_and_udp — TCPプロキシとUDPリレーの両方を有効にする(DNS、一部のゲーム) |
|
プラグイン |
このガイドでは使用されていません — Shadowsocksは、機能するためにSNI、証明書、またはトランスポートプラグインを必要としません。 |
結論
このガイドに従うと、VPS 上で独自の Shadowsocks サーバー (最新の AEAD-2022 暗号を使用した shadowsocks-rust、または Ubuntu/Debian のリポジトリにある shadowsocks-libev) が systemd サービスとして実行され、ユーザーによる操作なしで再起動後もサービスが継続されます。
ユーザーの追加:
- 最も簡単な方法は、2つ目のパスワードを生成し(セクション4)、独自の構成ファイルとsystemdユニットを使用して別のポートで2つ目のssserver/shadowsocks-libevインスタンスを実行し、そのポートに対してセクション5~7を繰り返すことです。
- AEAD-2022暗号を使用するshadowsocks-rustは、config.jsonの「users」配列(拡張IDヘッダー、SIP022)を介して、1つのポートとパスワード導出キーを共有する複数のユーザーもサポートしています。単一ポートでユーザーごとのトラフィックアカウンティングが必要な場合は、shadowsocks-rustのREADMEのConfigurationセクションを参照して、正確な構文を確認してください。
サーバーが稼働し始めたら、継続しておくと良い習慣をいくつかご紹介します。
- サーバーを常に最新の状態に保ってください。shadowsocks-rust の場合は、定期的にセクション 3 のダウンロードとインストール手順を最新のバージョン情報で再実行し、その後 systemctl restart ssserver を実行してください。shadowsocks-libev の場合は、apt upgrade で対応できます。
- config.json ファイルをサーバーから離れた安全な場所にバックアップしてください。このファイルにはすべてのクライアントのパスワードが格納されているため、紛失するとすべてのデバイスの認証情報を再生成する必要が生じます。
- デバイスが紛失した場合、またはクライアントが侵害された場合は、パスワードをローテーションしてください。新しいパスワードを生成し(セクション4)、config.jsonを更新し、サービスを再起動し、残りのすべてのデバイスに対してクライアントリンクを再構築します(セクション7)。
接続が確立しない場合は、以下の順序で確認してください。
- サービスの状態(systemctl status ssserver --no-pager、またはshadowsocks-libev)とジャーナル(journalctl -u ssserver -n 50 --no-pager)
- ファイアウォールルール(ufwステータス - ポートはTCPとUDPの両方で開いている必要があります)
- ポートが既に他のサービスによって占有されていないことを確認してください(ss -lntp | grep ':8388' を実行すると、ssserver/ss-server のみが表示されるはずです)。
- クライアントのパスワード、メソッド、ポートがconfig.jsonと完全に一致していることを確認してください。文字が1文字でも一致しない場合、ハンドシェイクはサイレントに失敗し、通常は明示的なエラーではなく接続タイムアウトとして表示されます。
- クライアントが UDP (DNS over proxy、一部のゲーム/アプリなど) を必要とし、tcp_only だけでは対応できない場合、サーバー側でそのモードは tcp_and_udp に設定されます。
Shadowsocks を他のオプションと比較するには、フィルタリングが厳しいネットワークでフィンガープリンティングが困難な TLS カモフラージュベースのプロトコルについてはXray VLESS Reality Guide を、 WireGuard ベースの代替案についてはAmneziaWG Server Deployment GuideおよびHow to set up Wireguard VPN on your server を、損失の大きいネットワークやフィルタリングが厳しいネットワーク向けに構築された 2 つのプロトコルについてはHysteria2 および TUIC の設定を参照してください。完全なトンネリング設定ではなく、単純なプロキシのみが必要な場合は、CentOS/ArchLinux での 3proxy 設定がはるかに軽量な代替案であり、Linux での古いVPN サーバー設定: PPTP または OpenVPN?では、設定が簡単だが DPI で検出およびブロックされやすいプロトコルについて説明しています。プロキシが稼働した後の一般的なサーバーの強化については、 Linux ユーザー: 管理と権限を参照してください。