Skip to content

SOCKS5 與 SOCKS5 over TLS

Potatso 支援的 SOCKS5 與 SOCKS5 over TLS 選項、連結與功能。

Updated 以 Markdown 檢視

SOCKS5 伺服器會替你開啟連線並轉送 UDP,有無使用者名稱和密碼都可以(RFC 1928)。SOCKS5 over TLS 是同一種伺服器,但透過 TLS 連上,所以與伺服器之間的連線同樣經過加密。

Potatso 傳給伺服器的是你造訪網站的名稱,而不是它的位址,由伺服器自行查詢該名稱。其他 App 稱這種做法為 socks5h,也就是遠端 DNS。

你可以手動加入 SOCKS5 伺服器、使用 socks5:// 連結,或透過匯入:

  • Clash 或 Mihomo 訂閱(type: socks5),
  • Surge 設定(socks5 和 socks5-tls),
  • Xray 或 V2Ray 設定(socks outbound,可搭配或不搭配 TLS)。

若要手動加入 SOCKS5 over TLS 伺服器,請選擇 SOCKS5 並開啟 TLS。

設定

設定 說明
伺服器、連接埠 伺服器的位址與連接埠。IPv6 位址也可以使用。
驗證 無,或使用者名稱和密碼。
使用者名稱、密碼 各最多 255 位元組。
UDP 轉送 預設為開啟。請見 UDP。
TLS SOCKS5 over TLS 需開啟。
略過憑證驗證 僅限 SOCKS5 over TLS。接受任何憑證。僅用於測試。
憑證釘選 僅限 SOCKS5 over TLS,選填。伺服器憑證的 SHA-256 指紋,以 64 個十六進位數字表示。設定釘選後,Potatso 只接受被釘選的憑證(包含自簽憑證),不接受其他任何憑證。

如果伺服器要求使用者名稱和密碼,而你沒有設定,Potatso 不會連線。Potatso 不支援 GSSAPI(Kerberos)驗證。

username 為空的 Clash 或 Mihomo 伺服器,會以不驗證的方式匯入,與 Clash 相同。

憑證

使用 SOCKS5 over TLS 時,TLS 交握中的伺服器名稱一律是伺服器的位址,且伺服器的憑證必須對該位址有效。如果無效,請設定憑證釘選或開啟略過憑證驗證。你無法設定不同的伺服器名稱:Potatso 不會匯入帶有不同名稱的連結、Surge 伺服器或 Xray 伺服器。Clash 和 Mihomo 的 SOCKS5 沒有伺服器名稱,所以 Potatso 會像它們一樣,忽略那裡的 sni。

Potatso 不支援:

  • 自訂 CA 憑證:請改為釘選伺服器的憑證,
  • TLS 用戶端憑證(Clash 的 certificate 和 private-key),或用來比對憑證的不同名稱(name-cert-verify):Potatso 不會匯入需要它們的伺服器,
  • ALPN 清單:Potatso 匯入伺服器時會省略它。

UDP

QUIC、語音與視訊通話和許多遊戲都使用 UDP。開啟 UDP 轉送後,Potatso 會透過伺服器傳送 UDP(UDP ASSOCIATE),支援 IPv4 與 IPv6 位址。對於位於 NAT 後方、並將自己的位址回報為 0.0.0.0 的伺服器也能運作:Potatso 會把 UDP 傳送到你設定的位址。

如果你的伺服器不轉送 UDP,請關閉 UDP 轉送。之後:

  • 使用規則時,Potatso 會略過把 UDP 導向這台伺服器的規則,由下一條符合的規則決定。沒有其他規則符合的 UDP 會直接傳送。
  • 在全域模式下,UDP 無法運作,因為所有流量都必須經由該伺服器。

關於 UDP 的一些須知:

  • UDP 是透過伺服器另外的 UDP 連接埠轉送的,所以伺服器的防火牆必須允許 UDP 通過。
  • 使用 SOCKS5 over TLS 時,只有與伺服器之間的連線經過加密。SOCKS5 會在其外傳送 UDP,因此你的 UDP 流量是以未加密的方式抵達伺服器。
  • 對於 UDP,Potatso 會自行查詢網站的位址,並把位址傳給伺服器。
  • 從 Clash、Mihomo 或 Surge 匯入時,除非伺服器設定了 udp: false(Surge 中為 udp-relay=false),否則 UDP 轉送為開啟。當缺少 udp 時,Clash 會讓 UDP 保持關閉,所以請確認你的伺服器有轉送 UDP。

功能支援

功能 支援
連到 IPv4、IPv6 與網域目標的 CONNECT(RFC 1928) ✅
遠端 DNS:由伺服器查詢網域名稱(socks5h) ✅ 適用於 TCP
不驗證 ✅
使用者名稱和密碼(RFC 1929) ✅
GSSAPI(RFC 1961) ❌
連到 IPv4 與 IPv6 目標的 UDP ASSOCIATE ✅
位於 NAT 後方伺服器的 UDP(0.0.0.0 中繼位址) ✅
UDP 分片 ❌ 分片的資料報會被丟棄,這是 RFC 1928 允許的
BIND(傳入連線,例如主動模式 FTP) ❌
SOCKS5 over TLS ✅ 支援憑證釘選與略過憑證驗證
與伺服器位址不同的 TLS 伺服器名稱、ALPN、自訂 CA、用戶端憑證 ❌
以 TLS 加密的 UDP ❌ SOCKS5 在 TLS 之外傳送 UDP
IPv6 伺服器位址 ✅
SOCKS4 與 SOCKS4a ❌

每一項支援的功能都用真實的 SOCKS5 伺服器測試過:Xray、sing-box、Mihomo、3proxy 和 microsocks。sing-box 是在它的 mixed inbound 上提供 SOCKS5 over TLS,而不是 socks inbound。

SOCKS5 連結用一行就包含整台伺服器:

socks5://user:password@host:port#name
socks5+tls://user:password@host:port?insecure=1#name
部分 說明
協定前綴 SOCKS5 使用 socks5://、socks:// 或 socks5h://;SOCKS5 over TLS 使用 socks5+tls:// 或 socks+tls://。Potatso 一律把網域名稱傳給伺服器,所以 socks5h:// 的作用與 socks5:// 相同。
user:password 選填。密碼中的 :、@ 與其他特殊字元請使用百分比編碼,例如 p:ss 寫成 p%3Ass。使用者名稱不可包含 :。
host 伺服器位址。IPv6 位址請放在方括號中,例如 [2001:db8::1]。
port 伺服器連接埠。
insecure 僅限 SOCKS5 over TLS,選填。1 表示開啟略過憑證驗證。Potatso 也會讀取 allowInsecure 和 skip-cert-verify。
name 選填。伺服器在 Potatso 中的名稱。

連結無法包含憑證釘選。帶有與伺服器位址不同的 sni 的連結不會被匯入。

Potatso 也會匯入另外兩種形式:

socks://base64(user:password)@host:port#name
socks5://base64(user:password@host:port)#name

第一種是 v2rayN 分享 SOCKS 伺服器的方式。第二種是較舊的形式,也就是 :// 與 # 之間的所有內容都以 Base64 編碼。Potatso 分享帶有密碼的 SOCKS5 伺服器時,會提供標準連結和 v2rayN 形式。

沒有密碼的伺服器:

socks5://proxy.example.com:1080#Open

使用者名稱為 alice、密碼為 s3cret 的伺服器:

socks5://alice:s3cret@proxy.example.com:1080#Auth

密碼 p:ss wörd 經過百分比編碼:

socks5://alice:p%3Ass%20w%C3%B6rd@proxy.example.com:1080#Encoded

同一台伺服器的 socks5h:// 連結:

socks5h://alice:s3cret@proxy.example.com:1080#Remote-DNS

v2rayN 形式,其中 alice:s3cret 以 Base64 編碼:

socks://YWxpY2U6czNjcmV0@proxy.example.com:1080#v2rayN

較舊的形式:

socks5://YWxpY2U6czNjcmV0QHByb3h5LmV4YW1wbGUuY29tOjEwODA#Legacy

使用 IPv6 位址的伺服器:

socks5://[2001:db8::1]:1080#IPv6

SOCKS5 over TLS 伺服器:

socks5+tls://alice:s3cret@proxy.example.com:443#TLS

使用自簽憑證的 SOCKS5 over TLS 伺服器:

socks+tls://proxy.example.com:443?insecure=1#Self-signed
導覽

Type to search…

↑↓ navigate↵ selectEsc close