---
title: "Shadowsocks"
description: "Potatso가 지원하는 Shadowsocks 암호화 방식, 플러그인, 링크, 기능입니다."
---

> Documentation Index
> Fetch the complete documentation index at: https://potatso.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Shadowsocks

Shadowsocks 서버는 **암호화 방식**과 **암호**, 그리고 선택적으로 연결을 위장하는 **플러그인**으로 정의됩니다. Potatso는 서버의 암호화 방식과, 있다면 플러그인을 지원할 때 서버에 연결합니다. 제공업체가 알려 준 내용이나 `ss://` 링크에 나온 서버 설정을 아래 표로 확인하세요.

Shadowsocks 서버는 직접 추가하거나, [`ss://` 링크](#links)로 추가하거나, 다음을 가져와서 추가할 수 있습니다.

- Clash 또는 Mihomo 구독,
- 파일이나 링크로 받은 [SIP008](https://shadowsocks.org/doc/sip008.html) 온라인 구성,
- shadowsocks-rust 또는 shadowsocks-libev의 `config.json`,
- Surge 구성, Xray 또는 V2Ray 구성.

## 암호화 방식 {#ciphers}

서버가 2022 암호화 방식을 제공하면 그것을 우선 사용하고, 그다음에 AEAD 암호화 방식을 쓰세요. 스트림 암호화 방식에는 알려진 약점이 있으므로 다른 선택지가 없는 서버에서만 사용하세요.

| 암호화 방식 | 종류 | 지원 |
| --- | --- | --- |
| `2022-blake3-aes-128-gcm`, `2022-blake3-aes-256-gcm` | 2022 | ✅ [다중 사용자](#multi-user) 지원 |
| `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](https://github.com/shadowsocks/shadowsocks-rust), [sing-box](https://sing-box.sagernet.org/) 또는 원조 Python 서버입니다. 위의 AEAD 암호화 방식 중 `aes-*-ccm`, `aes-*-gcm-siv`, `sm4-*`는 shadowsocks-rust 서버만 제공하며, 이를 쓰는 제공업체는 드뭅니다.

### 2022 키 {#2022-keys}

2022 암호화 방식([SIP022](https://shadowsocks.org/doc/sip022.html))은 암호를 사용하지 않고 키를 사용합니다. 키는 암호화 방식에 필요한 길이의 임의 바이트를 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`를 실행하세요.

### 다중 사용자 서버 {#multi-user}

2022 서버는 한 포트를 여러 사용자가 공유할 수 있습니다([SIP023](https://shadowsocks.org/doc/sip023.html)). 각 사용자에게는 고유한 키가 있습니다. 이런 서버에서는 암호를 서버 키와 사용자 키를 콜론으로 구분해 설정합니다.

```text
server-key:user-key
```

다중 사용자 서버는 `2022-blake3-aes-128-gcm`과 `2022-blake3-aes-256-gcm`만 지원합니다.

## 플러그인 {#plugins}

플러그인은 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에서 사용할 수 없습니다.

### 플러그인 설정 {#set-plugin}

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

```text
obfs=tls;obfs-host=cdn.example.com
```

`tls`처럼 키만 쓰면 해당 옵션이 켜집니다. 필요 없는 옵션은 생략하세요. 기본값은 아래 표에 나와 있습니다.

서버를 가져오면 Potatso가 플러그인과 옵션을 설정합니다.

- [`ss://` 링크](#links)는 `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`로 쓰고 세미콜론으로 이어 붙이세요.

### 플러그인 옵션 {#plugin-options}

**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 {#udp}

Shadowsocks 서버는 UDP가 기본으로 켜져 있으며 지원하는 모든 암호화 방식에서 작동합니다. 서버가 UDP를 중계하지 않으면 서버 설정에서 끄세요.

UDP는 플러그인을 통해 전송되지 않으므로 Simple Obfs 이외의 플러그인을 쓰면 서버는 TCP만 전달합니다. Potatso는 UDP-over-TCP(링크나 구독의 `udp-over-tcp` 또는 `uot`)를 지원하지 않으며, 이를 요구하는 서버는 가져오지 않습니다.

## 기능 지원 {#features}

| 기능 | 지원 |
| --- | --- |
| [SIP002](https://shadowsocks.org/doc/sip002.html) `ss://` 링크 | ✅ 이전 Base64 형식 포함 |
| [SIP003](https://shadowsocks.org/doc/sip003.html) 플러그인 | [내장 플러그인](#plugins)만 |
| SIP003u(플러그인을 통한 UDP) | ❌ |
| [AEAD 암호화 방식](https://shadowsocks.org/doc/aead.html)(SIP004) | ✅ |
| [SIP008](https://shadowsocks.org/doc/sip008.html) 온라인 구성 | ✅ |
| [SIP022](https://shadowsocks.org/doc/sip022.html) 2022 암호화 방식 | ✅ TCP와 UDP |
| [SIP023](https://shadowsocks.org/doc/sip023.html) 다중 사용자 ID 헤더 | ✅ AES 2022 암호화 방식 |
| [스트림 암호화 방식](https://shadowsocks.org/doc/stream.html) | ✅ [암호화 방식](#ciphers) 참고 |
| UDP-over-TCP | ❌ |
| TCP Fast Open, MPTCP | ❌ |

shadowsocks-rust의 일부 기능은 자체 클라이언트 프로그램인 `sslocal`의 설정이며, Potatso는 같은 역할을 자체 방식으로 처리합니다.

- 로컬 SOCKS5, HTTP, 터널, redir, DNS, TUN 서버: Potatso가 기기의 트래픽을 직접 가져옵니다.
- 액세스 제어 목록(ACL): 프로필의 규칙을 사용하세요.
- 여러 서버 중 가장 빠른 서버 선택: 프로필의 프록시 그룹을 사용하세요.

## `ss://` 링크 {#links}

`ss://` 링크는 서버 전체를 한 줄에 담습니다([SIP002](https://shadowsocks.org/doc/sip002.html)).

```text
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로 인코딩하던 이전 형식도 가져옵니다.

```text
ss://base64(cipher:password@host:port)#name
```

Potatso는 표준 및 URL-safe Base64를 `=` 패딩 유무와 관계없이 받아들입니다. Potatso가 서버를 공유할 때는 SIP002의 Base64 및 퍼센트 인코딩 형식과 이전 형식을 제공합니다.

### 예시 {#link-examples}

각 예시는 가져올 링크를 보여 줍니다. AEAD 예시의 암호는 `secret`입니다.

`aes-256-gcm`을 쓰는 기본 서버:

```text
ss://YWVzLTI1Ni1nY206c2VjcmV0@ss.example.com:8388#Basic
```

16바이트 키 `MTIzNDU2Nzg5MDEyMzQ1Ng==`를 쓰는 2022 서버:

```text
ss://2022-blake3-aes-128-gcm:MTIzNDU2Nzg5MDEyMzQ1Ng%3D%3D@ss.example.com:8388#2022
```

서버 키와 사용자 키를 콜론(`%3A`)으로 구분한 다중 사용자 2022 서버:

```text
ss://2022-blake3-aes-256-gcm:MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTI%3D%3AYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU%3D@ss.example.com:8388#Multi-user
```

서버 이름으로 `cdn.example.com`을 쓰는 TLS용 Simple Obfs:

```text
ss://YWVzLTI1Ni1nY206c2VjcmV0@ss.example.com:443/?plugin=simple-obfs%3Bobfs%3Dtls%3Bobfs-host%3Dcdn.example.com#Obfs
```

기본 서버의 이전 형식:

```text
ss://YWVzLTI1Ni1nY206c2VjcmV0QHNzLmV4YW1wbGUuY29tOjgzODg#Legacy
```

IPv6 주소를 쓰는 서버:

```text
ss://YWVzLTI1Ni1nY206c2VjcmV0@[2001:db8::1]:8388#IPv6
```

Source: https://potatso.com/docs/ko/protocols/shadowsocks/index.mdx
