打算在VPS上部署一個Shadowsocks。由於Shadowsocks-Libev已經轉入bug維護的狀態,不再有新的更新,因此本次計劃使用Shadowsocks-Rust。Rust重寫世界!下面寫一下Linux上配置的方法:
首先,Linux上要有Snap。
如果正在使用非Ubuntu的Linux發行版,請進入這裏查看如何安裝Snap。
但是,我使用CentOS安装了Snap和Shadowsocks-Rust後,無法啓動Shadowsocks-Rusts,我不知道哪裏出了問題。所以下面還是用Ubuntu來演示。
如果正在使用Ubuntu 16.04 LTS或以後的版本,大概會有Snap預裝了。接下來通過Snap安裝Shadowsocks-Rust:
sudo snap install shadowsocks-rust安裝後,不要馬上啓動Shadowsocks-Rust,而是先寫配置文件:
sudo mkdir -p /var/snap/shadowsocks-rust/common/etc/shadowsocks-rust
sudo vim /var/snap/shadowsocks-rust/common/etc/shadowsocks-rust/config.json然後將配置文件複製進去,如果需要多個配置,可以這樣寫:
{
"servers": [
{
"server":"::",
"server_port":10086,
"password":"123456",
"timeout":60,
"method":"chacha20-ietf-poly1305",
"mode":"tcp_and_udp",
"fast_open":false
},
{
"server":"::",
"server_port":10087,
"password":"1234567",
"timeout":60,
"method":"aes-256-gcm",
"mode":"tcp_and_udp",
"fast_open":false
}
]
}可以注意到,server的參數填寫了"::",這樣可同時接收來自IPv4和IPv6的入站請求。一些教程寫"0.0.0.0"的也有,估計寫"0.0.0.0"是不能接收IPv6的入站請求的。另外,在以前用Shadowsocks-Libev的時候,可以寫["::0","0.0.0.0"],然而這種寫法在Shadowsocks-Rust中是無效的。
在2022年,Shadowsocks引入了一種新的cipher,Shadowsocks-2022,包含2022-blake3-aes-256-gcm、2022-blake3-chacha20-poly1305等等。如果上方想將10087端口的aes-256-gcm改成2022-blake3-chacha20-poly1305,要怎么办呢?要使用Shadowsocks-2022,配置相对複雜一些,光是把"method"一项改成"2022-blake3-chacha20-poly1305"是不行的,如果這樣做,服务端就無法運行。還有什麼其他修改要做呢?原來,密碼必須使用特定方式生成的,不能自由心證,下方是官方文档的說明:
AEAD 2022 Ciphers
- 2022-blake3-aes-128-gcm, 2022-blake3-aes-256-gcm
- 2022-blake3-chacha20-poly1305, 2022-blake3-chacha8-poly1305
These Ciphers require "password" to be a Base64 string of key that have exactly the same length of Cipher's Key Size. It is recommended to use ssservice genkey -m "METHOD_NAME" to generate a secured and safe key.
可以看到,我们必須生成一個Base64串,而這Base64串的隨機原始數據的長度必須與Cipher的Key長度相同。文章中建議用ssservice生成,但是snap安裝的Shadowsocks-Rust好像無法直接用ssservice命令,所以我们這裏用openssl來生成。經過查找資料,我知道2022-blake3-chacha20-poly1305的Key長度為32字節:
| Encryption Method | Key Length |
|---|---|
| 2022-blake3-aes-128-gcm | 16 |
| 2022-blake3-aes-256-gcm | 32 |
| 2022-blake3-chacha20-poly1305 | 32 |
因此,我们在終端內輸入以下命令(openssl須有安裝):
openssl rand -base64 32於是生成了一個字符串:
yWVG455ldIVsUWRsrQC6jr5ka8R+7F/TnacJAOGT/ik=之後就可以用這個字符串作為password一項。修改完method和password項,就可以使用了。配置文件全貌如下:
{
"servers": [
{
"server":"::",
"server_port":10086,
"password":"123456",
"timeout":60,
"method":"chacha20-ietf-poly1305",
"mode":"tcp_and_udp",
"fast_open":false
},
{
"server":"::",
"server_port":10087,
"password":"yWVG455ldIVsUWRsrQC6jr5ka8R+7F/TnacJAOGT/ik=",
"timeout":60,
"method":"2022-blake3-chacha20-poly1305",
"mode":"tcp_and_udp",
"fast_open":false
}
]
}我们上面演示了2022-blake3-chacha20-poly1305在多服務中的配置方法,但是2022-blake3-chacha20-poly1305有一個問題,它不能支持多用戶,如果需要多用戶,就不能使用它,否则服務端會報錯無法啓動。一定要使用Shadowsocks 2022的話,可以用2022-blake3-aes-256-gcm。要使用2022-blake3-aes-256-gcm,把10087端口的"method"改成"2022-blake3-aes-256-gcm"就行了,如果還要支持多用戶,我们需要再加入一項"users",示例如下:
"users": [
{
"name": "username",
"password": "x6gORw2zKM9woUa8XoMsL+p4koCLDDjpwpny+FlAVAE="
}
]必須注意,這裏還有一个"password"。這個"password"同樣用openssl生成,而且Key長度要與前述的Key長度一致,對於2022-blake3-aes-256-gcm而言是32。綜上所述,我們有這樣一個配置文件:
{
"servers": [
{
"server":"::",
"server_port":10086,
"password":"123456",
"timeout":60,
"method":"chacha20-ietf-poly1305",
"mode":"tcp_and_udp",
"fast_open":false
},
{
"server":"::",
"server_port":10087,
"password":"yWVG455ldIVsUWRsrQC6jr5ka8R+7F/TnacJAOGT/ik=",
"timeout":60,
"method":"2022-blake3-aes-256-gcm",
"mode":"tcp_and_udp",
"fast_open":false,
"users": [
{
"name": "username",
"password": "x6gORw2zKM9woUa8XoMsL+p4koCLDDjpwpny+FlAVAE="
}
]
}
]
}此时,客戶端如果要使用10087端口提供的服務,密碼是password:userpassword,在本例中是:
yWVG455ldIVsUWRsrQC6jr5ka8R+7F/TnacJAOGT/ik=:x6gORw2zKM9woUa8XoMsL+p4koCLDDjpwpny+FlAVAE=如果不想要多服務,只想要單服務,可以這樣寫:
{
"server":"::",
"server_port":10086,
"password":"123456",
"timeout":60,
"method":"chacha20-ietf-poly1305",
"mode":"tcp_and_udp",
"fast_open":false
}单用戶示例中,我沒有以Shadowsocks-2022为例,因为很多客戶端不支持Shadowsocks-2022,如果定義為Shadowsocks-2022,將會有較差的兼容性。
注意,實際操作中,密碼應設置得很複雜,無論是否用Shadowsocks-2022,生成複雜密碼的方式都可以用上面介绍的openssl方法。
然後,激活並啓動服務:
sudo snap start --enable shadowsocks-rust.ssserver-daemon查看服務狀態:
sudo snap services shadowsocks-rust.ssserver-daemon查看運行日誌:
sudo snap logs shadowsocks-rust.ssserver-daemon之後,為了安全起見,應配置防火牆,在此不提。如果之後改變了config.json,要應用配置,需重新啓動服務,命令如下:
sudo snap restart shadowsocks-rust.ssserver-daemon配置就完成了。
參考資料:
- https://blog.chaos.run/dreams/debian-shadowsocks-rust-server/
- https://hostloc.com/thread-1226848-1-1.html
- https://github.com/shadowsocks/shadowsocks-rust
- https://github.com/SagerNet/sing-box/issues/1652
- https://shadowsocks.org/doc/sip022.html
- https://xtls.github.io/en/config/inbounds/shadowsocks.html#clientobject