Shadowsocks는 일반 네트워크에서 트래픽 셰이핑 및 차단을 우회하기 위해 설계된 경량 SOCKS5 기반 암호화 프록시 프로토콜입니다. 완전한 VPN과 달리, Shadowsocks는 애플리케이션이 명시적으로 전송하는 트래픽만 프록시하며, 프로토콜 오버헤드가 거의 없고, 제한된 연결 환경에서도 잘 작동합니다. VLESS+Reality처럼 실제 TLS 핸드셰이크를 모방하려 하지 않으며, 단순성, 폭넓은 클라이언트 지원(라우터, 스마트폰, 브라우저), 그리고 매우 낮은 지연 시간이 강점입니다. 다만, 엄격하게 검사되는 네트워크에서는 트래픽 패턴을 통해 식별하기가 다소 어려울 수 있습니다.
현재 활발하게 유지 관리되는 서버 구현은 두 가지입니다.
- shadowsocks-rust는 shadowsocks 조직에서 제공하는 Rust로 작성된 최신 참조 구현체입니다. 최신 AEAD-2022 암호 계열을 지원하며, 활발하게 개발되고 있고, 이 가이드에서는 해당 구현체를 설치하고 구성하는 방법을 자세히 설명합니다.
- shadowsocks-libev는 구형 C 구현체입니다. 버그 수정이 여전히 유지 관리되고 있으며, 자체 systemd 유닛이 포함된 apt 패키지로 제공되므로 수동으로 바이너리를 처리하지 않고 가장 간단하게 설치하려는 경우 좋은 선택입니다. 이 가이드의 3절에서 대체 설치 경로로 다룹니다.
이 가이드에서는 웹 패널이나 Docker를 사용하지 않고 명령줄을 통해 서버를 수동으로 구성하는 방법을 설명합니다. "IP 주소" 필드가 나오는 모든 곳에 VPS의 실제 IP 주소를 입력하십시오.
필요한 준비물: Ubuntu 22.04/24.04 또는 Debian 11/12가 설치된 VPS, 루트 액세스 권한, VPS의 IP 주소, 그리고 사용 가능한 UDP/TCP 포트(이 가이드에서는 Shadowsocks의 기본값인 8388번 포트를 사용합니다).
아직 서버가 없으신가요? 서버 주문 및 결제 방법을 참조하세요.
다른 자체 호스팅 옵션과 먼저 비교해 보시겠습니까? TLS 위장 기반 대안으로는 Xray VLESS 실전 가이드를 , WireGuard 기반 옵션으로는 AmneziaWG 서버 배포 가이드를 , 또는 다른 두 가지 최신 프록시 프로토콜인 Hysteria2 및 TUIC 설정 가이드를 참조하십시오.
서버에 연결 중
윈도우(PuTTY)
PuTTY를 열고 호스트 이름 필드에 VPS IP 주소를 입력한 다음 포트를 22로 설정하고 VPS 제공업체에서 이메일로 보내준 비밀번호를 사용하여 root로 로그인하세요.
서버 IP 주소: 사용자의 IP 주소
root로 로그인
비밀번호: 비밀번호
PuTTY/SSH를 통한 연결에 대한 자세한 안내는 SSH를 통해 Linux 서버에 연결하는 방법을 참조하세요.
리눅스/macOS (터미널)
ssh root@your_IP_address
아래의 모든 명령은 동일한 SSH 세션 내에서 서버에서 실행됩니다. 이는 2장부터 7장까지의 내용과 13장의 서버 측 검사에 해당합니다. 8장부터 12장까지의 내용(클라이언트 앱 설치 및 구성)은 프록시가 실행되어야 하는 Windows/macOS/Linux/Android/iOS 기기에서 실행됩니다. 각 장에서는 서버에 접근해야 하는 부분이 있는지 명시적으로 설명합니다.
서버 준비
시스템 업데이트
무엇을 설치하기 전에 패키지 목록을 새로 고치고 설치된 패키지를 업그레이드하십시오.
apt update -y && apt upgrade -y
커널이 업그레이드되면 계속 진행하기 전에 재부팅하는 것이 좋습니다. (apt 및 Linux 패키지 관리자 작동 방식에 대한 자세한 내용은 Linux 패키지 관리자를 참조하세요 .) 다음 명령어로 확인하세요.
cat /var/run/reboot-required
파일이 이미 존재하는 경우, 먼저 '재부팅' 명령어로 재부팅하고 약 30초 정도 기다린 후 다시 연결하십시오.
이 가이드에서 사용하는 도구를 설치하세요.
apt install -y curl wget tar xz-utils ufw qrencode
shadowsocks-rust 릴리스 아카이브를 가져오고 압축을 풀려면 curl/wget 및 tar/xz-utils가 필요합니다. ufw는 아래에 구성된 방화벽입니다. qrencode는 완성된 클라이언트 링크를 섹션 7에서 스캔 가능한 QR 코드로 변환합니다.
방화벽(UFW)을 구성합니다.
UFW 규칙에 대한 자세한 내용은 Linux에서 방화벽 구성하기를 참조하세요.
SSH 연결을 위해 22/tcp 포트(이 규칙을 건너뛰면 서버 접속이 차단될 수 있습니다)와 TCP 및 UDP 연결을 위한 8388 포트, 이렇게 두 개의 포트를 모두 열어야 합니다. Shadowsocks는 TCP 연결과 UDP 연결(DNS 및 일부 게임/앱에 유용)을 모두 프록시하므로 양방향 포트가 모두 열려 있어야 합니다.
ufw allow 22/tcp
ufw allow 8388/tcp
ufw allow 8388/udp
ufw --force enable
ufw status
ufw 상태 출력에서 세 가지 규칙 모두 ALLOW로 표시되어야 합니다. 나중에 config.json에서 포트를 변경하는 경우 이러한 규칙도 일치하도록 업데이트하십시오.
서버 소프트웨어 설치
아래 두 가지 옵션 중 하나를 선택하세요. 옵션 A(shadowsocks-rust)를 권장합니다. 이 옵션은 활발하게 개발되고 있는 구현체이며, 이 가이드 후반부에서 사용되는 최신 AEAD-2022 암호화를 지원합니다. 옵션 B(shadowsocks-libev)는 systemd 유닛이 포함된 일반 apt 패키지를 사용하고 싶고 AEAD-2022가 필요하지 않은 경우에 적합한 선택입니다.
옵션 A — shadowsocks-rust (권장)
Shadowsocks-rust는 현재 릴리스에 apt 패키지가 포함되어 있지 않으므로 프로젝트의 GitHub 릴리스에서 미리 빌드된 정적 바이너리를 다운로드하여 설치합니다. GitHub API에서 최신 릴리스 태그를 가져와서 해당 Linux x86_64 아카이브를 다운로드하세요.
SS_VER=$(curl -s https://api.github.com/repos/shadowsocks/shadowsocks-rust/releases/latest | grep -Po '"tag_name": "\K[^"]*')
echo "Latest version: $SS_VER"
cd /root
wget "https://github.com/shadowsocks/shadowsocks-rust/releases/download/${SS_VER}/shadowsocks-${SS_VER}.x86_64-unknown-linux-gnu.tar.xz"
VPS가 x86_64가 아닌 arm64인 경우(`uname -m` 명령으로 확인), 위 파일 이름에서 x86_64-unknown-linux-gnu를 aarch64-unknown-linux-gnu로 바꾸십시오.
압축 파일을 해제하고 바이너리 파일을 시스템 전체에 설치하십시오.
tar -xf shadowsocks-*.tar.xz
install -m 755 ssserver ssservice ssmanager ssurl /usr/local/bin/
rm -f shadowsocks-*.tar.xz ssserver ssservice ssmanager ssurl sslocal 2>/dev/null
실행 파일이 제 위치에 있는지 확인하고 설치된 버전을 점검하십시오.
ssserver --version
설정 파일이 저장될 디렉토리를 생성하세요:
mkdir -p /etc/shadowsocks-rust
이 가이드에서는 설치 스크립트를 bash로 파이프하는 대신 고정 버전을 설치합니다. 나중에 업그레이드하려면 위의 두 명령을 새로운 SS_VER 조회와 함께 다시 실행하고, 서비스를 중지하고, 바이너리를 교체한 다음 다시 시작하십시오(섹션 6).
옵션 B — shadowsocks-libev (대안, apt 패키지)
Shadowsocks-libev는 Ubuntu의 universe 저장소(Ubuntu 16.10 이상)와 Debian의 메인 저장소(Debian 8 이상)에 포함되어 있으므로 22.04/24.04 또는 Debian 11/12에서는 타사 PPA가 필요하지 않습니다.
apt install -y shadowsocks-libev
apt에서 패키지를 찾을 수 없다고 보고하는 경우, universe 저장소가 비활성화된 것입니다. 저장소를 활성화하고 다시 시도하십시오.
add-apt-repository universe && apt update && apt install -y shadowsocks-libev
이 패키지는 자체 systemd 유닛(기본 구성의 경우 shadowsocks-libev.service, 인스턴스별 명명된 구성을 위한 [email protected] )을 설치하고 /etc/shadowsocks-libev/config.json 파일을 자동으로 생성합니다. 섹션 4~6에서는 Rust 코드와 함께 libev 관련 명령 및 파일 경로를 설명합니다. 이 가이드의 나머지 클라이언트 섹션(7~13)은 두 서버 구현 모두 Shadowsocks/SIP002 프로토콜을 사용하므로 동일하게 적용됩니다.
비밀번호 생성 및 암호화 방식 선택
Shadowsocks 인증은 양측이 동의해야 하는 단일 공유 암호와 암호화 방식(암호화 방법)으로 구성됩니다. 별도의 UUID, 키 쌍 또는 인증서를 관리할 필요가 없습니다.
암호 패밀리
- AEAD-2022(권장, shadowsocks-rust만 해당): 2022-blake3-aes-128-gcm, 2022-blake3-aes-256-gcm, 2022-blake3-chacha20-poly1305. 더 강력한 재전송 공격 방지 기능과 하나의 포트를 여러 사용자가 공유할 수 있도록 지원하는 최신 설계(SIP022). 비밀번호는 암호화 키 길이와 정확히 일치하는 base64 문자열이어야 합니다(128비트 변형의 경우 16바이트, 256비트 변형의 경우 32바이트).
- 클래식 AEAD(Rust 및 libev 모두 지원): aes-256-gcm, aes-128-gcm, chacha20-ietf-poly1305. 구형 클라이언트 및 shadowsocks-libev와 폭넓게 호환됩니다. 비밀번호는 키 자료로 직접 사용되는 대신 키 유도 함수를 통해 전달되므로 어떤 암호문이라도 사용할 수 있습니다.
이 가이드에서는 shadowsocks-rust 서버에 2022-blake3-aes-256-gcm을 사용합니다. 이는 가장 강력하고 최신 옵션이며, 이후에 권장되는 모든 클라이언트(v2rayN, v2rayNG, Shadowrocket, Streisand, ShadowsocksX-NG)에서 지원하기 때문입니다. 3절에서 shadowsocks-libev를 설치했다면 libev가 AEAD-2022를 구현하지 않으므로 chacha20-ietf-poly1305 또는 aes-256-gcm을 사용하십시오.
키 생성(shadowsocks-rust)
ssservice genkey -m "2022-blake3-aes-256-gcm"
이 출력은 base64로 인코딩된 문자열을 보여줍니다. 이것이 바로 비밀번호입니다. 이 문자열을 안전한 곳에 복사해 두세요. 5절의 서버 설정과 7절의 클라이언트 링크에 모두 붙여넣어야 합니다.
암호를 선택하세요 (shadowsocks-libev)
shadowsocks-libev에서 사용하는 기존 AEAD 암호화 방식의 경우, PBKDF/HKDF를 거쳐 처리되므로 충분히 긴 임의 문자열이면 어떤 것이든 사용할 수 있습니다. 다음 명령어로 생성하세요:
openssl rand -base64 32
서버 설정 작성
섀도삭스-러스트
편집을 위해 구성 파일을 엽니다.
nano /etc/shadowsocks-rust/config.json
아래 템플릿을 붙여넣고, 4번 항목에서 자신의 비밀번호를 입력하세요(포트 번호를 8388에서 변경한 경우 2번 항목의 포트 번호도 입력하세요).
{
"server": "0.0.0.0",
"server_port": 8388,
"password": "YOUR-GENERATED-KEY-HERE",
"method": "2022-blake3-aes-256-gcm",
"mode": "tcp_and_udp",
"timeout": 300,
"nofile": 51200
}
Ctrl+O(WriteOut)를 눌러 파일을 저장하고, Enter 키를 눌러 파일 이름을 확인한 다음, Ctrl+X를 눌러 nano를 종료하십시오.
중요 필드: server는 모든 인터페이스(0.0.0.0)에서 수신 대기합니다. server_port는 섹션 2에서 열린 포트입니다. password/method는 섹션 4의 자격 증명과 암호화 방식입니다. mode는 TCP 및 UDP 릴레이를 모두 활성화합니다. timeout은 유휴 연결 시간 초과(초)입니다. nofile은 사용량이 많은 서버의 경우 파일 디스크립터 제한을 높입니다.
systemd에 연결하기 전에 JSON의 유효성을 검사하고 바이너리가 이를 허용하는지 확인하십시오.
ssserver -c /etc/shadowsocks-rust/config.json --help >/dev/null && echo "binary OK"
python3 -m json.tool /etc/shadowsocks-rust/config.json >/dev/null && echo "JSON OK"
systemd 유닛(shadowsocks-rust)을 생성합니다.
바이너리 릴리스에는 systemd 유닛이 포함되어 있지 않으므로 직접 생성해야 합니다.
nano /etc/systemd/system/ssserver.service
[Unit]
Description=Shadowsocks-Rust Server
Documentation=https://github.com/shadowsocks/shadowsocks-rust
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/ssserver -c /etc/shadowsocks-rust/config.json
Restart=on-failure
RestartSec=5s
LimitNOFILE=51200
User=root
[Install]
WantedBy=multi-user.target
위와 같이 저장하고 종료한 다음 systemd가 새 유닛 파일을 인식하도록 하십시오.
systemctl daemon-reload
섀도우삭스-리베브
apt 패키지가 이미 기본 설정(루프백 전용, 임의 비밀번호)과 자체 systemd 유닛이 포함된 /etc/shadowsocks-libev/config.json 파일을 생성했습니다. 편집하려면 해당 파일을 여세요.
nano /etc/shadowsocks-libev/config.json
내용을 다음으로 바꾸세요:
{
"server":"0.0.0.0",
"server_port":8388,
"password":"YOUR-PASSPHRASE-HERE",
"method":"chacha20-ietf-poly1305",
"mode":"tcp_and_udp",
"timeout":300
}
기본 설정은 server: ["::1", "127.0.0.1"] (루프백 전용)을 사용합니다. 이를 "0.0.0.0"으로 변경해야 공용 IP에서 서버에 접근할 수 있습니다. 위의 템플릿 대신 기본 파일을 복사한 경우 이 부분을 건너뛰지 마세요.
서비스 시작 및 자동 시작 활성화
섀도삭스-러스트
systemctl enable --now ssserver
systemctl status ssserver --no-pager
상태가 활성(실행 중)으로 표시되어야 합니다. 해당 포트에서 실제로 무언가가 수신 대기 중인지 확인하십시오(두 프로토콜 모두).
ss -lntp | grep ':8388'
ss -lunp | grep ':8388'
서비스 시작에 실패하는 경우, 원인을 확인하는 가장 빠른 방법은 systemd 저널을 확인하는 것입니다(리눅스 로그 읽기에 대한 일반적인 배경 지식은 "리눅스 로그 읽는 방법 및 위치 "를 참조하세요 ).
journalctl -u ssserver -n 50 --no-pager
섀도우삭스-리베브
systemctl restart shadowsocks-libev
systemctl enable shadowsocks-libev
systemctl status shadowsocks-libev --no-pager
shadowsocks-rust와 동일한 방식으로 포트와 로그를 확인하되, 서비스 이름만 바꿔주세요.
ss -lntp | grep ':8388'
ss -lunp | grep ':8388'
journalctl -u shadowsocks-libev -n 50 --no-pager
클라이언트 연결 링크 구축
Shadowsocks 클라이언트는 설정 파일 대신 단일 ss:// 공유 링크(SIP002 URL 형식)를 가져옵니다. 이 링크는 URL의 사용자 정보 부분에 암호와 비밀번호를 base64로 인코딩합니다.
ss://base64(method:password)@your_IP_address:port#label
서버에서 base64 부분을 생성합니다(이렇게 하면 수동 인코딩으로 인한 오타를 방지할 수 있습니다).
METHOD="2022-blake3-aes-256-gcm"
PASSWORD="YOUR-GENERATED-KEY-HERE"
USERINFO=$(echo -n "${METHOD}:${PASSWORD}" | base64 -w0)
echo "ss://${USERINFO}@your_IP_address:8388#My-SS-Server"
예시 출력 (플레이스홀더 키 포함):
ss://MjAyMi1ibGFrZTMtYWVzLTI1Ni1nY206eHl6X2V4YW1wbGVfa2V5X2hlcmU=@your_IP_address:8388#My-SS-Server
# 뒤의 텍스트는 클라이언트에서 자유롭게 이름을 변경할 수 있는 표시 레이블일 뿐입니다. shadowsocks-libev 서버의 경우, METHOD="chacha20-ietf-poly1305"(또는 aes-256-gcm)와 섹션 4의 암호를 대신 사용하십시오.
모바일 기기에서 바로 스캔할 수 있도록 QR 코드로 변환하세요.
qrencode -o ~/ss-client.png "ss://${USERINFO}@your_IP_address:8388#My-SS-Server"
scp 명령어를 사용하여 PNG 파일을 자신의 컴퓨터로 복사하세요. 서버가 아닌 컴퓨터의 터미널(또는 Windows의 PowerShell)에서 실행하세요.
scp root@your_IP_address:~/ss-client.png .
Windows에서 연결하기
이 섹션의 모든 작업은 SSH를 통하지 않고 Windows PC에서 수행됩니다. 클라이언트는 실제로 프록시를 사용할 장치에서 실행되어야 합니다.
v2rayN을 설치하세요
v2rayN은 Shadowsocks를 비롯하여 VLESS, VMess, Trojan 등 다양한 프레임워크를 기본적으로 지원하는 무료 GUI 클라이언트이며, 활발하게 유지보수되고 있습니다. 프로젝트 페이지 에서 최신 버전을 다운로드하세요.
Windows 64비트 .zip 파일을 다운로드하고(최신 v2rayN 버전부터는 자체 포함 빌드이므로 별도의 .NET 런타임이 필요하지 않습니다), 아무 곳에나 압축을 풀고 v2rayN.exe를 실행하세요.
서버를 가져옵니다
7절에서 생성된 ss:// 링크를 클립보드에 복사하거나(또는 scp를 사용하여 QR PNG 파일을 복사한 후 엽니다), v2rayN에서 서버 → 클립보드에서 대량 URL 가져오기를 선택하거나(또는 내장 스캐너를 사용하여 QR 코드를 스캔합니다). 새 서버 프로필이 # 뒤에 설정한 레이블과 함께 목록에 나타납니다.
프로필을 마우스 오른쪽 버튼으로 클릭하고 활성 프로필로 선택한 다음, 기본 창의 도구 모음에서 시스템 프록시(또는 전체 시스템을 라우팅하는 TUN 모드)를 활성화합니다.
macOS에서 연결하기
이 섹션의 모든 작업은 SSH를 통하지 않고 Mac에서 수행됩니다.
ShadowsocksX-NG를 설치하세요
ShadowsocksX-NG는 Shadowsocks의 오랜 역사를 자랑하는 macOS 네이티브 GUI 클라이언트입니다. 최신 릴리스에는 인텔 버전과 함께 Apple Silicon 버전도 포함되어 있습니다. 릴리스 페이지에서 최신 .dmg 파일을 다운로드하세요.
.dmg 파일을 열고 ShadowsocksX-NG를 응용 프로그램 폴더로 드래그한 다음 실행하세요. 메뉴 막대에 아이콘으로 나타납니다.
서버를 가져옵니다
섹션 7의 ss:// 링크를 클립보드에 복사한 다음, 메뉴 막대 아이콘 → 서버 → 서버 기본 설정 → 왼쪽 하단의 + 버튼을 클릭하고 "클립보드에서 가져오기"를 선택합니다(또는 PNG 파일을 연 후 "화면에서 QR 코드 스캔"으로 QR 코드를 스캔합니다). 메뉴 막대 드롭다운에서 새 프로필을 선택한 다음 "Shadowsocks: 켜기"를 활성화하고 같은 메뉴에서 "PAC 자동" 또는 "전역" 라우팅 모드를 선택합니다.
리눅스 데스크톱에서 연결하기
이 섹션의 모든 작업은 VPS가 아닌 사용자 자신의 Linux 머신에서 수행됩니다.
로컬 클라이언트를 설치하세요
3절에서 서버에 shadowsocks-rust를 설치했다면, 동일한 릴리스 아카이브에 SOCKS5/HTTP 로컬 프록시 클라이언트인 sslocal이 포함되어 있습니다. 서버 바이너리와 동일한 방식으로 다운로드하여 설치하십시오(데스크톱 운영체제가 x86_64-unknown-linux-gnu가 아닌 경우 OS/아키텍처 접미사를 조정하십시오).
SS_VER=$(curl -s https://api.github.com/repos/shadowsocks/shadowsocks-rust/releases/latest | grep -Po '"tag_name": "\K[^"]*')
wget "https://github.com/shadowsocks/shadowsocks-rust/releases/download/${SS_VER}/shadowsocks-${SS_VER}.x86_64-unknown-linux-gnu.tar.xz"
tar -xf shadowsocks-*.tar.xz
sudo install -m 755 sslocal /usr/local/bin/
구성 및 실행
127.0.0.1:1080에서 SOCKS5 프록시로 작동하는 간단한 로컬 구성 파일을 생성합니다.
mkdir -p ~/.config/shadowsocks-rust
cat > ~/.config/shadowsocks-rust/local.json << 'EOF'
{
"server": "your_IP_address",
"server_port": 8388,
"password": "YOUR-GENERATED-KEY-HERE",
"method": "2022-blake3-aes-256-gcm",
"local_address": "127.0.0.1",
"local_port": 1080,
"mode": "tcp_and_udp"
}
EOF
sslocal -c ~/.config/shadowsocks-rust/local.json
브라우저 또는 시스템 네트워크 설정을 127.0.0.1:1080의 SOCKS5 프록시로 지정하십시오. GUI를 사용하는 경우, Nekoray 또는 ShadowsocksX-Qt5 스타일 포크를 사용하면 7절의 ss:// 링크를 가져와 sslocal을 수동으로 실행하는 대신 자동으로 관리할 수 있습니다.
안드로이드에서 연결하기
여기서 일어나는 모든 일은 SSH를 통하지 않고 안드로이드 기기에서 발생합니다.
클라이언트를 설치하세요
두 가지 좋은 옵션:
- Shadowsocks for Android는 Shadowsocks 개발팀에서 제공하는 공식 클라이언트입니다. Google Play 스토어에서 "Shadowsocks"를 검색하여 설치하거나, Play 스토어를 이용할 수 없는 경우 프로젝트 공식 릴리스 페이지에서 APK 파일을 직접 다운로드하세요. 부위.
- v2rayNG는 v2rayN의 안드로이드 버전으로, Shadowsocks를 비롯해 VLESS/VMess/Trojan을 지원합니다. 여러 프로토콜을 하나의 앱으로 처리하고 싶을 때 유용합니다. 유형.
서버를 가져옵니다
두 앱 중 하나에서 + 버튼을 탭하거나, 7번 항목의 ss:// 링크를 복사한 후 "클립보드에서 가져오기"를 선택하거나, "QR 코드 스캔"을 선택하고 카메라로 PNG 이미지를 스캔하세요. 가져온 프로필을 탭하여 선택한 다음 연결 버튼을 탭합니다. Android에서 처음 VPN 권한을 요청할 때 승인하면 터널이 설정됩니다.
iOS에서 연결하기
여기서 일어나는 모든 일은 SSH를 통하지 않고 아이폰이나 아이패드에서 발생합니다.
Shadowsocks를 지원하는 클라이언트를 설치하세요.
Shadowrocket은 Shadowsocks를 지원하는 가장 널리 사용되는 iOS 클라이언트이며, 대부분의 앱 스토어에서 유료 앱입니다. 앱 스토어에서 검색하거나 직접 실행해 보세요.
Streisand는 Shadowsocks, VLESS, Trojan 및 기타 프로토콜을 지원하는 무료 오픈 소스 대안입니다.
앱 스토어 카탈로그는 스토어/지역에 따라 다르며 시간이 지남에 따라 변경될 수 있습니다. 사용하시는 앱 스토어에서 Shadowsocks 또는 V2Box를 찾을 수 없는 경우, 앱 스토어에서 "Shadowsocks" 또는 "V2Box"를 검색해 보세요.
서버를 가져옵니다
ss:// 링크를 클립보드에 복사하고, 클라이언트를 열어 '클립보드에서 추가/가져오기' 옵션을 사용하거나, 7번 섹션의 QR 코드를 클라이언트의 내장 스캐너로 스캔하세요. 새 프로필을 활성화하면 iOS에서 처음 VPN 구성 권한을 요청하는데, Face ID, Touch ID 또는 암호를 통해 승인해야 합니다.
연결 확인
섹션 8, 9, 10, 11 또는 12에서 터널이 활성화되면 (SSH 세션이 아닌) 본인 장치로 돌아가 브라우저에서 "내 IP 주소는 무엇입니까?" 확인 도구를 엽니다. 표시되는 주소가 VPS의 IP 주소(your_IP_address)와 일치해야 합니다.
서버 측에서 확인하려면 systemd 저널에서 연결 활동을 확인하고 해당 포트에서 설정된 세션을 확인하십시오(Rust 저널의 경우 ssserver를, libev 저널의 경우 shadowsocks-libev를 사용하십시오).
journalctl -u ssserver -n 50 --no-pager
ss -tnp | grep ':8388'
참조 :
|
분야 |
가치관 |
|
주소 |
VPS의 공용 IP 주소 |
|
포트 |
8388 (섹션 2에서 열린 것과 동일한 포트) |
|
비밀번호 |
섹션 4에서 생성된 키/암호 |
|
방법 |
2022-blake3-aes-256-gcm(rust) 또는 chacha20-ietf-poly1305(libev) — 양쪽이 정확히 일치해야 합니다. |
|
모드 |
tcp_and_udp — TCP 프록싱과 UDP 릴레이를 모두 활성화합니다(DNS, 일부 게임). |
|
플러그인 |
이 가이드에서는 사용되지 않습니다. Shadowsocks는 작동하는 데 SNI, 인증서 또는 전송 플러그인이 필요하지 않습니다. |
맺음말
이 가이드를 따르면 VPS에서 Shadowsocks 서버(최신 AEAD-2022 암호화를 사용하는 shadowsocks-rust 또는 Ubuntu/Debian 저장소의 shadowsocks-libev)가 systemd 서비스로 실행되어 재부팅 후에도 별도의 조치 없이 유지됩니다.
사용자 추가하기:
- 가장 간단한 방법은 두 번째 암호를 생성하고(섹션 4) 자체 구성 파일과 systemd 유닛을 사용하여 다른 포트에서 두 번째 ssserver/shadowsocks-libev 인스턴스를 실행한 다음 해당 포트에 대해 섹션 5~7을 반복하는 것입니다.
- AEAD-2022 암호화를 사용하는 shadowsocks-rust는 config.json의 "users" 배열을 통해 여러 사용자가 하나의 포트와 암호 파생 키를 공유하는 것을 지원합니다(확장 가능한 ID 헤더, SIP022). 단일 포트에서 사용자별 트래픽 관리가 필요한 경우 정확한 구문은 shadowsocks-rust README의 구성 섹션을 참조하십시오.
서버가 가동된 후에도 꾸준히 유지하면 좋은 몇 가지 습관:
- 서버를 최신 상태로 유지하세요. shadowsocks-rust의 경우, 3절의 다운로드 및 설치 단계를 최신 버전으로 주기적으로 다시 실행한 다음 `systemctl restart ssserver` 명령을 실행하세요. shadowsocks-libev의 경우, `apt upgrade` 명령만으로 충분합니다.
- config.json 파일을 서버 외부의 안전한 곳에 백업해 두세요. 이 파일에는 모든 클라이언트의 비밀번호가 저장되어 있으므로, 분실 시 모든 기기에 대해 자격 증명을 다시 생성해야 합니다.
- 기기를 분실했거나 클라이언트가 손상된 경우 암호를 변경하십시오. 새 암호를 생성하고(섹션 4), config.json을 업데이트하고, 서비스를 다시 시작하고, 나머지 모든 기기에 대해 클라이언트 링크를 다시 구축하십시오(섹션 7).
연결이 되지 않으면 다음 순서대로 확인하세요.
- 서비스 상태(systemctl status ssserver --no-pager 또는 shadowsocks-libev) 및 저널(journalctl -u ssserver -n 50 --no-pager)을 확인할 수 있습니다.
- 방화벽 규칙(ufw status — TCP 및 UDP 모두에 대해 포트가 열려 있어야 함)
- 해당 포트가 이미 다른 서비스에 의해 사용 중인지 확인합니다. (ss -lntp | grep ':8388' 명령을 실행하면 ssserver/ss-server만 표시되어야 합니다.)
- 클라이언트의 비밀번호, 메서드, 포트가 config.json 파일과 정확히 일치해야 합니다. 문자 하나라도 일치하지 않으면 핸드셰이크가 실패하고, 일반적으로 명시적인 오류 메시지 대신 연결 시간 초과로 표시됩니다.
- 클라이언트가 UDP(DNS-over-proxy, 일부 게임/앱)를 필요로 하고 TCP만 필요로 하지 않는 경우, 서버에서 해당 모드는 tcp_and_udp로 설정됩니다.
Shadowsocks를 다른 옵션과 비교하고 계신가요? Xray VLESS Reality Guide를 참고하시면 TLS 위장 기반 프로토콜을 사용하여 필터링이 심한 네트워크 환경에서도 탐지하기 어려운 보안을 강화할 수 있습니다. WireGuard 기반 대안으로는 AmneziaWG 서버 배포 가이드 와 서버에 WireGuard VPN을 설정하는 방법을 , 손실이 심하거나 필터링이 심한 네트워크에 적합한 Hysteria2 및 TUIC 설정 방법을 참고하세요. 완전한 터널링 설정이 아닌 간단한 프록시만 필요한 경우, CentOS/ArchLinux에서 3proxy를 구성하는 것이 훨씬 간편한 대안이며, Linux에서 VPN 서버 설정: PPTP 또는 OpenVPN? 에서는 설정은 간단하지만 DPI에 의해 탐지 및 차단되기 쉬운 프로토콜에 대해 다룹니다. 프록시가 활성화된 후 서버 보안을 강화하려면 Linux 사용자: 관리 및 권한을 참조하세요.