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 서버입니다. 위의 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 서버는 한 포트를 여러 사용자가 공유할 수 있습니다(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에서 사용할 수 없습니다.

플러그인 설정

서버 설정에서 플러그인으로 플러그인을 선택한 다음 플러그인 매개변수에 옵션을 입력합니다. 옵션은 다음 Simple Obfs 예시처럼 세미콜론으로 구분한 key=value 쌍입니다.

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처럼 한 줄에 하나씩 나열해 주었다면 각각 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, 터널, redir, DNS, TUN 서버: Potatso가 기기의 트래픽을 직접 가져옵니다.
  • 액세스 제어 목록(ACL): 프로필의 규칙을 사용하세요.
  • 여러 서버 중 가장 빠른 서버 선택: 프로필의 프록시 그룹을 사용하세요.

ss:// 링크는 서버 전체를 한 줄에 담습니다(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-safe 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