開啟 3 天免費試用
註冊即可免費體驗全部高級功能。
*只限新用戶;每位用戶只可獲得一次試用。


Shadowsocks 伺服器部署應先選定實作,再令客戶端密鑰相符,不能把其他項目的設定當成通用範本。本指南固定 shadowsocks-rust,採用一種官方記錄的 2022 加密方案,並分清本地應用代理與整部裝置的流量覆蓋。
關鍵要點
- 實作、加密方案、密鑰、端點和傳輸模式須一致。
- 2022 密鑰不是可隨意填入的易記密碼。
- 應用 TCP、UDP 和錯誤密鑰拒絕須分別驗證。
- 本例共享密鑰輪換會撤銷全部使用舊值的客戶端。
先按自建節點責任指南規劃獨立管理及復原。選擇流量範圍前,比較全隧道與應用代理。本例只影響明確設定的測試應用和受控 UDP 轉發監聽,不安裝 TUN、不改全域路由,亦不提供斷網保護。
Shadowsocks 介紹說明協議邊界。若維護主機並非目的,應比較VPS 自行維護與託管出口。配對的Hysteria2 部署採用另一種 UDP 傳輸並需要憑證,不應把它的欄位混進本流程。
**適用範圍及依據:**專用 Ubuntu 24.04 LTS x86-64 伺服器、另一部獲授權 Linux 客戶端、公網 IPv4,兩端均為 shadowsocks-rust v1.25.0。本文限定 Rust 實作,不是 Python、libev、面板或未說明的客戶端應用。沒有報告作者端到端實測;預期結果按官方資料訂為讀者驗收條件。其他架構須使用相符官方發行檔。[1][2][3]
確認新的 SSH 連線與雲端控制台不依賴代理。私下記錄原有監聽、路由、DNS、防火牆負責方、服務及費用。預留伺服器 TCP/UDP 8388、客戶端 TCP 1080 和 UDP 19001。如有衝突,或已存在 shadowsocks-ops 路徑、服務單元、用戶便停止,不接管其他服務。
從 Ubuntu 可信套件安裝缺少的 curl、ca-certificates、xz-utils 和 Python 3。在新建私有工作目錄下載指定官方封存檔與對應校驗檔。逐條執行,任何一步失敗便停止;校驗成功前不可解壓或執行。
umask 077
mkdir shadowsocks-1.25.0-reader
cd shadowsocks-1.25.0-reader
curl --fail --show-error --location \
https://github.com/shadowsocks/shadowsocks-rust/releases/download/v1.25.0/shadowsocks-v1.25.0.x86_64-unknown-linux-gnu.tar.xz \
-o shadowsocks-v1.25.0.x86_64-unknown-linux-gnu.tar.xz
curl --fail --show-error --location \
https://github.com/shadowsocks/shadowsocks-rust/releases/download/v1.25.0/shadowsocks-v1.25.0.x86_64-unknown-linux-gnu.tar.xz.sha256 \
-o shadowsocks-v1.25.0.x86_64-unknown-linux-gnu.tar.xz.sha256
sha256sum --check shadowsocks-v1.25.0.x86_64-unknown-linux-gnu.tar.xz.sha256
校驗和只確認檔案與官方發行檔一致,並非獨立發佈者簽署。還須核對項目歸屬和可取得的發行來源依據。先查封存列表有沒有異常路徑,再以非特權用戶解壓。預期二進位檔位於解壓根目錄;結構不同便停止調查,不可猜測帶特權的複製指令。[1][2]
tar -tf shadowsocks-v1.25.0.x86_64-unknown-linux-gnu.tar.xz
tar -xf shadowsocks-v1.25.0.x86_64-unknown-linux-gnu.tar.xz
./ssserver --version
./sslocal --version
./ssservice genkey -m "2022-blake3-aes-128-gcm"
sudo install -m 755 ssserver /usr/local/bin/ssserver-ops
sudo useradd --system --home /nonexistent --shell /usr/sbin/nologin shadowsocks-ops
sudo install -d -o root -g shadowsocks-ops -m 750 /etc/shadowsocks-ops
兩個版本指令均應對應 1.25.0。保護封存檔及驗證依據副本。產生器輸出的是秘密,終端須保持私密,直接存入密碼管理器,不貼公開討論或放進指令參數。
固定採用 2022-blake3-aes-128-gcm。password 欄位須填入此方案產生的 16 位元組密鑰之 Base64 表示。一般 AEAD 密碼派生與 2022 密鑰屬不同契約;不可改填易記密碼、256 位方案的密鑰、冒號分隔的多用戶形式或其他項目的預設設定。[2][4]
以 root 編輯器建立 /etc/shadowsocks-ops/server.json,把佔位符換成產生的密鑰。佔位符刻意不能直接使用。保留正確 JSON 語法,這個嚴格 JSON 示例不可加入註解。
{
"server": "0.0.0.0",
"server_port": 8388,
"method": "2022-blake3-aes-128-gcm",
"password": "REPLACE_WITH_GENERATED_2022_KEY",
"mode": "tcp_and_udp"
}
0.0.0.0 是伺服器監聽地址,絕不是客戶端目的地。本原生示例不用 TLS 憑證或外掛;共享密鑰是必要認證資料,並非憑證私鑰。不可為了接通錯誤客戶端而換用 none、plain 或已棄用的串流加密。
AEAD-2022 以時間戳檢查作重放保護,須透過可信時間服務確認兩端時鐘正常。時鐘故障應排查,不可關掉協議保護。[4]
把以下專用服務單元存為 /etc/systemd/system/shadowsocks-ops.service。高連接埠 8388 容許非特權服務用戶運行,毋須 root 網絡能力或特權容器。
[Unit]
Description=Dedicated Shadowsocks Rust reader deployment
After=network-online.target
Wants=network-online.target
[Service]
User=shadowsocks-ops
Group=shadowsocks-ops
ExecStart=/usr/local/bin/ssserver-ops -c /etc/shadowsocks-ops/server.json
Restart=no
NoNewPrivileges=true
PrivateTmp=true
ProtectHome=true
ProtectSystem=strict
[Install]
WantedBy=multi-user.target
保留 SSH 和無關防火牆規則,透過實際雲端及主機防火牆負責方,初期只容許測試客戶端來源存取 TCP 及 UDP 8388。若批准政策只容許 TCP,便記錄 UDP 不可用,不能算驗證成功。不可清空規則或開放本地 SOCKS 來解決遠端連線。
sudo chown root:shadowsocks-ops /etc/shadowsocks-ops/server.json
sudo chmod 640 /etc/shadowsocks-ops/server.json
sudo systemctl daemon-reload
sudo systemctl start shadowsocks-ops
sudo systemctl status shadowsocks-ops --no-pager
sudo ss -lntup
預期所選服務持續運行,IPv4 8388 有兩種傳輸監聽。若啟動失敗,保持入口關閉,按私有日誌分開查 JSON、不支援的方案或密鑰格式、檔案權限、架構、時鐘及連接埠衝突。成功綁定不能證明密鑰一致或應用轉發正常。
在獨立 Linux 客戶端按前述流程取得並驗證同版本相符發行檔,保留 sslocal 和 ssservice。將 ss.example.com 換成伺服器真實可達 IPv4 或域名,任何已發佈 AAAA 均須符合另行設計的 IPv6 路徑。兩端須使用相同方案及密鑰。
UDP 練習另須由你控制且獲授權的回顯回應端,替換 udp-check.example.net:9001,並可由伺服器連接。示例名稱不是公開測試服務。沒有回應端便保留 UDP 為未驗證。確認所選構建支援官方記錄的 local-tunnel 功能;協議不受支援便停止,不能暗中更換實作。[2]
{
"server": "ss.example.com",
"server_port": 8388,
"method": "2022-blake3-aes-128-gcm",
"password": "REPLACE_WITH_GENERATED_2022_KEY",
"locals": [
{
"protocol": "socks",
"local_address": "127.0.0.1",
"local_port": 1080,
"mode": "tcp_only"
},
{
"protocol": "tunnel",
"local_address": "127.0.0.1",
"local_port": 19001,
"forward_address": "udp-check.example.net",
"forward_port": 9001,
"mode": "udp_only"
}
]
}
SOCKS 監聽刻意只處理 TCP;獨立 tunnel 項目是應用 UDP 測試路徑,兩者都只綁定回環。在私有目錄啟動客戶端,確認沒有意外的區域網絡監聽。
chmod 600 client.json
./sslocal -c client.json
測試瀏覽器明確選用 SOCKS5 127.0.0.1:1080,支援時由代理端解析域名。發起新的 HTTPS 請求,檢查可見出口 IP,與伺服器已知出口比較。只有監聽或「已連接」提示並不足夠。
反向檢查時停止客戶端,私下複製設定。用同一產生器及方案建立另一把格式正確的密鑰,只換副本的 password,保留地址和方案。啟動該設定並發起新代理請求,應無法傳送流量。連到伺服器之前出現的 Base64 錯誤不能證明伺服器拒絕。若流量仍通過,關閉入口,排查直接連線回退、另一個運行中設定及伺服器實際密鑰。
轉回有效設定,經 127.0.0.1:19001 轉發傳送一次受控 UDP 回顯。下列讀者指令預期收到獲授權回應端返回的相同內容;本文沒有聲稱已觀察到輸出。
python3 - <<'CHECK'
import socket
with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as sock:
sock.settimeout(3)
sock.sendto(b"reader-check", ("127.0.0.1", 19001))
data, _ = sock.recvfrom(1024)
assert data == b"reader-check", "Unexpected UDP reply"
CHECK
| 檢查 | 讀者應取得的證據 | 失敗處理 |
|---|---|---|
| 應用 TCP | 新代理 HTTPS 請求與預期出口 | 分開查瀏覽器、密鑰、伺服器出口及目的地 |
| 應用 UDP | 回顯與傳送內容相同 | 查客戶端轉發、兩端 UDP 規則、伺服器模式和回程 |
| DNS | 應用解析遵循所選政策 | 獨立檢查本地及代理解析,不憑出口 IP 推斷 |
| IPv6 | 適用應用路徑明確納入或排除 | IPv4 驗收不等於整機保護 |
| 斷線 | 測試應用按設定報錯或回退 | 預期失敗政策未確認前停止敏感活動 |
| 開放代理 | 未授權及錯誤密鑰不能中繼,SOCKS 保持回環 | 立即關入口,修正綁定或認證 |
再以錯誤密鑰設定傳送同一受控 UDP 請求,不能收到認證中繼回包。逾時本身成因很多,須在反向檢查前後保留有效密鑰的成功對照。來源限制是認證的補充;若所有請求都被防火牆擋住,就不能獨立證明密鑰拒絕。
在授權維護時段重啟伺服器,重做正確與錯誤密鑰的 TCP/UDP 檢查。驗收並確認重啟後受保護設定仍可讀,才啟用自動啟動。
撤銷時先關閉本次部署入口,產生同方案的新密鑰,替換伺服器數值,再重啟以終止既有工作階段。只更新保留的客戶端。單密鑰基線撤銷全部使用舊值的客戶端,並非按裝置標籤隔離。輪換記錄存於備份以外;再次重啟後,確認舊密鑰被拒絕、保留客戶端正常。
一致性備份只停止這個服務單元。以下目的地目錄不得已存在,否則停止。每條指令都以上一條成功為條件;複製失敗須保留來源檔,主動復回已知正常狀態,不可刪除原設定。
sudo systemctl stop shadowsocks-ops
sudo install -d -m 700 /root/shadowsocks-backup-20261011
sudo cp -a /etc/shadowsocks-ops /root/shadowsocks-backup-20261011/
sudo cp -a /usr/local/bin/ssserver-ops /root/shadowsocks-backup-20261011/
sudo cp -a /etc/systemd/system/shadowsocks-ops.service /root/shadowsocks-backup-20261011/
sudo chmod -R go-rwx /root/shadowsocks-backup-20261011
sudo systemctl start shadowsocks-ops
復原計劃另存防火牆記錄、客戶端構建、檔案擁有者和權限、外部輪換清單。封存內有認證密鑰,應先加密再放到受限異機儲存,不可公開或留下所有人可讀副本。
在同版本隔離替代主機、入口關閉時復原:把二進位檔與服務單元放回指定路徑,重建服務用戶,把設定目錄複製至 /etc/shadowsocks-ops。啟動前重新設定目錄 root:shadowsocks-ops、權限 750,設定檔擁有者 root:shadowsocks-ops、權限 640,二進位檔 755、服務單元 644。先從獨立清單套用目前密鑰,再重新載入 systemd 並啟動。開放前重做正向、反向、UDP 及重啟檢查,不能讓舊封存復活已撤銷密鑰。
退役時只關閉此服務 TCP/UDP 規則,停止並停用 shadowsocks-ops,停止客戶端,恢復測試應用原有代理設定,確認本地 1080/19001 監聽已消失。決定保留期限後,只刪建立的服務單元、二進位檔、檔案和用戶,再載入 systemd,另查 DNS 與雲端資源。獨立確認新 SSH 登入及原有服務。移除軟件不取消計費;未確定復原便停止後續變更。
不能。此方案要求指定長度密鑰的 Base64 表示。應使用該實作指定方案的產生器,並把產生值當秘密保護。
不同實作的功能和欄位契約不同。本文兩端固定 Rust v1.25.0,其他實作須獨立驗證,不可混用示例便假定兼容。
不能。UDP 需要獨立客戶端模式、伺服器設定、防火牆路徑與受控回應端,應和瀏覽器請求分開驗收記錄。
只覆蓋明確設定的應用流量及示例轉發監聽。整機路由和斷網保護須另外設計、獨立驗證,不能由此推斷。
本基線所有客戶端共用伺服器密鑰,輪換會影響全部用戶。獨立身份須有其他受支援設定及相應驗收計劃。
加密監聽可達不能證明未授權中繼。須檢查錯誤密鑰拒絕和本地 SOCKS 綁定,保留有效密鑰對照以分清認證與網絡失敗。
本文不聲稱端到端實測。指令定義讀者檢查;驗收前須記錄實際版本、授權資源、網絡、結果及復原證據。
來源:
Sources checked 2026 年 10 月 11 日。
延伸閱讀:
註冊即可免費體驗全部高級功能。
*只限新用戶;每位用戶只可獲得一次試用。