TRENDSHIFT · 2026.06.15

vpn-configs-for-russia 딥다이브
— "설정 파일을 데이터로 배포하는" 검열우회 프록시 구독 리포지토리의 구조

vpn-configs-for-russia는 코드가 거의 없는 "데이터 리포지토리"다. VLESS·Reality·Shadowsocks·Tor 브리지 같은 검열우회 프로토콜의 접속 설정(config) 텍스트 묶음을 모아 두고, 클라이언트 앱이 URL 하나로 통째로 받아 가는 구독(subscription) 방식으로 배포한다. 매일 갱신되는 .txt/Base64/Clash YAML/QR 코드 4종 포맷과, GitHub가 막혀도 살아남도록 5개 미러 사이트로 자동 동기화하는 GitHub Actions가 핵심이다.

이 문서는 "검열우회 프로토콜과 프록시 설정 배포 구조에서 무엇을 배울 수 있는가"에 초점을 둔 네트워크·프라이버시 교육용 해설이다. 특정 국가·기관을 겨냥한 운영 우회 지침이 아니며, §7·문서 끝에 법적·윤리적 주의를 명시한다. 본문의 모든 키·UUID·IP는 구조 설명용으로 마스킹했다.
목차
  1. 프로젝트 한줄 요약
  2. 왜 주목받는가
  3. 기술 스택 전체 지도 (프로토콜·도구)
  4. 아키텍처 심화 분석
  5. 디렉토리 구조 해부
  6. 학습 포인트 (네트워크·프록시·암호화)
  7. 시스템 / 환경 요구사항 · 법적 주의
  8. 직접 해볼 수 있는 실습 과제
  9. 관련 기술 심화 학습 로드맵
  10. 핵심 키워드 사전
  11. 참고 링크

1프로젝트 한줄 요약

이 레포가 무엇을 하는 물건인가.

핵심 메시지

"앱을 배포하는 게 아니라,
앱이 읽어 갈 '접속 설정 묶음'을 매일 갱신해 데이터로 배포한다."

일반 오픈소스는 실행 코드를 배포한다. 그런데 이 레포에는 실행 코드가 거의 없다. 대신 vless://..., ss://... 같은 프록시 접속 문자열 수백 개.txt 파일에 줄줄이 모아 두고, 사용자는 파일의 URL을 클라이언트 앱(예: v2rayN·Karing·Clash)에 "구독"으로 등록한다. 그러면 앱이 그 URL을 주기적으로 내려받아 서버 목록을 자동 갱신한다.

즉 이 레포의 본질은 "프록시 서버 설정의 패키지 매니저 저장소"에 가깝다. npm 레지스트리가 패키지를 호스팅하듯, 이 레포는 프록시 설정을 호스팅하고, 클라이언트가 profile-update-interval 헤더를 보고 알아서 갱신한다.

vpn-configs-for-russia는 검열·접속 차단 환경에서 공개 웹에 접근하려는 사용자를 위해, 무료 프록시 설정 구독을 모아 배포하는 데이터 큐레이션 프로젝트다. 설정은 크게 두 갈래로 나뉜다 — "블랙리스트(검은 목록)"는 차단된 사이트로 나갈 때만 프록시를 타는 일반 모드용이고, "화이트리스트(흰 목록)"는 국내(러시아) 대역만 직접 가고 나머지를 프록시로 보내는, 더 강한 차단 환경(자국 IP만 허용되는 상황)을 가정한 모드용이다. 각 목록은 VLESS·Shadowsocks·Tor 브리지 등 프로토콜별로, 또 PC용/모바일용으로 갈라져 있다.

용어
구독 (subscription) URL
개별 서버를 하나씩 손으로 넣는 대신, "서버 목록이 들어 있는 파일의 URL" 하나만 클라이언트에 등록하는 방식. 앱이 그 URL을 주기적으로 다시 받아 서버 목록을 통째로 교체한다. 서버가 죽거나 바뀌어도 사용자는 아무것도 안 해도 되는 것이 장점. 파일 첫 줄의 profile-update-interval: 1은 "1시간마다 갱신하라"는 클라이언트용 힌트다.
용어
블랙리스트 모드 vs 화이트리스트 모드
블랙리스트(⚫) = "차단된 목적지로 갈 때만" 프록시 경유, 나머지는 직접. 일상 환경. 화이트리스트(⚪) = "허용된(국내) 대역만" 직접, 그 외 전부 프록시. 외부 인터넷 자체가 막힌 강한 차단 상황을 가정한 라우팅 전략이다. 이 레포의 WHITE-CIDR/WHITE-SNI 파일이 후자에 해당한다.

2왜 주목받는가

TrendShift 상위에 오른 이유 · 다른 "free config" 레포 대비 장점.

"무료 프록시 설정 모음" 레포는 GitHub에 수없이 많다. 그런데 이 레포가 트렌딩에 오른 데는 몇 가지 구조적 차별점이 있다. 첫째 매일·시간 단위로 자동 갱신되는 신선도(파일 헤더에 모스크바 기준 타임스탬프가 박힌다), 둘째 한 종류 설정을 .txt·Base64·Clash YAML·QR 4포맷으로 동시 제공해 거의 모든 클라이언트를 커버, 셋째 GitHub 차단에 대비한 5개 미러 자동 동기화, 넷째 블랙/화이트 라우팅 전략을 분리해 차단 강도별로 고를 수 있게 한 점이다.

비교 항목흔한 "free config" 레포vpn-configs-for-russia
갱신 주기비정기 · 수동 커밋매일/시간 단위 자동(헤더에 타임스탬프)
배포 포맷주로 .txt 하나.txt · Base64 · Clash YAML · QR 4종
차단 내성GitHub 단일 호스팅GitLab·Codeberg·Gitea·SourceHut·Bitbucket 5미러 + GitHack RAW 프록시
라우팅 전략전부 프록시(블랙만)블랙(⚫)/화이트(⚪) 분리 — 차단 강도별 선택
프로토콜 폭VLESS 위주VLESS·SS·Hy2·VMess·Trojan·Tor 브리지(obfs4·webtunnel 등)
플랫폼 분리구분 없음PC용/모바일용 분리(_mobile 접미사)
다국어 안내없음/영어RU·EN·ZH·FA(페르시아어) README 4종
흔한 방식의 한계
"GitHub에 .txt 하나 올리기"의 두 가지 약점 — 신선도와 단일 장애점

무료 프록시 서버는 수명이 짧다. 누가 운영을 멈추거나 IP가 차단당하면 그 항목은 죽는다. 그래서 "한 번 올리고 끝"인 정적 목록은 며칠 만에 절반이 안 통한다. 또 모든 걸 GitHub 한 곳에만 두면, GitHub 자체가 차단되는 순간 사용자는 설정을 갱신할 길이 끊긴다(검열 환경에서 실제로 일어나는 일).

이 레포의 대응
"자동 갱신 파이프라인 + 다중 미러" = 데이터의 가용성 설계

이 레포는 목록을 주기적으로 재생성해 죽은 서버를 걸러내고 새 서버를 채운다(헤더 타임스탬프가 그 증거). 그리고 커밋이 들어올 때마다 GitHub Actions가 5개 외부 호스트로 동시에 push(mirror-to-*.yml)해, 어느 한 곳이 막혀도 같은 데이터를 다른 곳에서 받을 수 있게 한다. 이것은 검열우회 도구가 아니라 "고가용 데이터 배포 인프라"의 패턴으로 봐야 배울 게 많다.

3기술 스택 전체 지도 (프로토콜·도구)

이 레포는 "코드 스택"이 아니라 "프로토콜·포맷·배포" 스택이다.

① 우회 프로토콜 (설정이 가리키는 대상)

레포에 든 설정 문자열들은 아래 프로토콜용이다. 공통 목표는 "프록시 트래픽을 평범한 HTTPS 트래픽처럼 위장"해 심층 패킷 검사(DPI)에 걸리지 않게 하는 것이다.

프로토콜역할 · 특징
VLESSXray/V2Ray 계열의 경량 전송 프로토콜. 자체 암호화가 없어(encryption=none) TLS·Reality에 보안을 위임 → 오버헤드가 작다. 이 레포의 주력.
RealityVLESS의 보안 계층. 유효한 실제 사이트의 TLS 인증서를 빌려 위장해 "가짜 TLS"임을 들키지 않게 한다. pbk(공개키)·sid·sni 필드가 그 핵심.
XTLS-Vision (flow)flow=xtls-rprx-vision — TLS 안의 데이터를 한 번 더 감싸는 비용을 줄여 속도를 높이는 흐름 제어.
Shadowsocks (ss)가벼운 암호화 SOCKS 프록시. 오래됐지만 단순·빠름. 레포의 SS+All 묶음에 포함.
Hysteria2 / VMess / Trojan각각 QUIC 기반 고속 전송 / V2Ray 표준 / TLS 위장 프로토콜. SS+All 혼합 묶음에 함께 들어감.
Tor BridgesTor의 비공개 진입점. obfs4·webtunnel·vanillapluggable transport별로 분리 제공.
용어
DPI (Deep Packet Inspection, 심층 패킷 검사)
통신 내용·패턴을 분석해 "이건 VPN/프록시 트래픽이다"라고 식별·차단하는 검열 기술. 우회 프로토콜들은 자신을 평범한 HTTPS 웹 트래픽과 구별 불가능하게 만드는 것이 핵심 목표다. Reality·obfs4·webtunnel이 모두 "위장(obfuscation)" 계열인 이유.

② 배포 포맷 (같은 데이터, 4가지 표현)

포맷역할
평문 .txt한 줄당 한 서버(vless://...). 첫 5줄은 # 주석 메타데이터(제목·갱신주기·타임스탬프·개수).
Base64/위 .txt 전체를 Base64로 인코딩. 일부 구형 클라이언트가 요구하는 표준 구독 포맷.
Clash/*.yamlClash/Mihomo 클라이언트용 YAML. proxies·proxy-groups·rules 구조. 서버 주소를 \x.. 16진 이스케이프로 숨긴 점이 특징.
QR-codes/*.png구독 URL을 QR로 인코딩. 모바일에서 카메라로 즉시 등록. GitHub용 · GitLab미러용 · GitHack RAW용 세 벌 (GitHack분은 QR-codes/GitHack-proxy/ 하위).

③ 배포 · 가용성 인프라

요소역할
GitHub Actions.github/workflows/mirror-to-*.yml 5개. main 푸시 시 외부 5개 호스트로 자동 미러 push.
5개 미러 호스트GitLab · Codeberg · Gitea · SourceHut · Bitbucket. 토큰은 secrets로 주입.
GitHack RAW 프록시raw.githack.com 경유로 RAW 파일을 CDN처럼 캐싱·우회 제공.
다국어 READMEREADME.md(RU, 152KB) · EN · ZH · FA(페르시아) 4종.
라이선스 · 후원긴 LICENSE(34KB) · FUNDING.yml(Patreon).
용어
미러링 (mirroring) · 단일 장애점(SPOF)
같은 데이터를 여러 독립 호스트에 복제해 두는 것. 한 곳(GitHub)이 차단·삭제돼도 다른 곳에서 받을 수 있어 단일 장애점(Single Point of Failure)을 제거한다. 이 레포는 CI(GitHub Actions)로 미러링을 자동화해, 데이터 가용성을 코드 없이 인프라로 보장한다.

4아키텍처 심화 분석

데이터 생성 → 다포맷 변환 → 미러 배포 → 클라이언트 구독, 그리고 우회 프로토콜의 동작 원리.

전체 배포 파이프라인 한눈에

이 레포를 "프로그램"이 아니라 "데이터 공장 + 다중 출고장"으로 보면 구조가 선명하다. 어딘가에서 서버 목록이 갱신되면(레포 외부 자동화로 추정 — 헤더 타임스탬프가 그 흔적), 한 종류 목록이 4가지 포맷으로 파생되고, main에 푸시되는 순간 5개 미러로 동시 출고된다. 최종 소비자는 클라이언트 앱이 구독 URL로 끌어가는 것이다.

[서버 목록 갱신: 죽은 노드 제거 · 신규 추가] (헤더 타임스탬프 = 모스크바 시각 기록) │ ┌───────────────▼────────────────┐ │ 원본 목록 (vless:// / ss:// ...) │ │ 블랙리스트(⚫) · 화이트리스트(⚪) │ └───────────────┬────────────────┘ │ 같은 데이터를 4포맷으로 파생 ┌──────────────┬──────┴──────┬───────────────┐ ▼ ▼ ▼ ▼ 평문 .txt Base64/ Clash/*.yaml QR-codes/*.png (주석 메타+노드) (구독표준) (proxies/rules) (모바일 카메라 등록) └──────────────┴──────┬──────┴───────────────┘ │ git push main ═════════ GitHub Actions (mirror-to-*.yml) ═════════ on: push[main] / workflow_dispatch secrets: 각 호스트 토큰 · git remote add → push ═══════════════════╤══════════════════════════════ │ 5곳으로 동시 출고 ┌──────────┬────────────┼────────────┬───────────┐ ▼ ▼ ▼ ▼ ▼ GitLab Codeberg Gitea SourceHut Bitbucket └──────────┴──────┬─────┴────────────┴───────────┘ │ (+ raw.githack.com RAW 프록시) ▼ [구독 URL] ←── 클라이언트 앱이 주기적으로 GET v2rayN · Karing · Clash/Mihomo · Throne · Streisand │ profile-update-interval 헤더 보고 자동 갱신 ▼ 로컬 프록시(127.0.0.1:포트) → 라우팅 규칙대로 분기

VLESS + Reality 접속 문자열 해부 (구조만)

레포의 한 줄(vless://...)은 사실 URI 형식에 모든 접속 파라미터를 담은 것이다. 아래는 실제 값이 아니라 필드 구조를 보여 주는 마스킹 예시다.

VLESS-Reality 구독 라인 구조 (값 마스킹)
vless://<UUID>@<SERVER_IP>:<PORT>?
        type=tcp                 # 전송 방식 (tcp/xhttp/ws...)
       &security=reality         # 보안 계층 = Reality
       &encryption=none          # VLESS 자체 암호화 없음(TLS에 위임)
       &flow=xtls-rprx-vision    # 흐름 제어(오버헤드 절감)
       &sni=<위장할_실제도메인>    # 빌려 쓸 진짜 사이트 이름
       &fp=firefox               # TLS 핑거프린트 위장(브라우저 흉내)
       &pbk=<REALITY_PUBKEY>     # Reality 공개키
       &sid=<SHORT_ID>           # 서버가 부여한 짧은 식별자
        #<표시이름(국기·태그)>     # 클라이언트 목록에 보일 라벨

핵심은 snipbk다. Reality는 "sni에 적힌 실제 유명 사이트로 향하는 정상 TLS처럼 보이게" 하면서, 실제로는 pbk로 검증되는 프록시 서버와 통신한다. 검열 장비가 보기엔 "그 유명 사이트로 가는 HTTPS"라 막기 어렵다.

우회 프로토콜이 "위장"하는 3가지 원리

기법무엇을 위장하나이 레포에서의 흔적
Reality (TLS 위장)"가짜 TLS"임을 들키지 않게, 진짜 사이트 인증서를 빌려 핸드셰이크 위장security=reality · pbk · sni=ya.ru
핑거프린트 위장(uTLS)TLS 핸드셰이크의 미세 특징을 크롬·파폭 등 실제 브라우저와 동일하게fp=firefox · fp=chrome · fp=random
obfs4 / webtunnel (Tor)Tor 트래픽을 난수 바이트열 / 일반 웹소켓처럼 보이게TOR-BRIDGES/TOR_BRIDGES_OBFS4.txt

블랙 vs 화이트 라우팅의 차이 (동작 관점)

[블랙리스트 모드 ⚫] [화이트리스트 모드 ⚪] 목적지 = 차단 사이트? 목적지 = 국내(RU) 대역? │ 예 아니오 │ 예 아니오 ▼ ▼ ▼ ▼ 프록시 경유 직접 연결 직접 연결 프록시 경유 (대부분 직접, 일부만 우회) (국내만 직접, 나머지 전부 우회) → 평상시 차단 환경 → 외부망 자체가 막힌 강한 차단 환경 → WHITE-CIDR(IP대역) / WHITE-SNI(도메인) 목록으로 "국내" 판정
비유 — 구독과 미러

이 레포를 "여러 도시에 같은 신문을 동시에 배달하는 신문사"로 생각하자. 본사(GitHub)가 폐쇄돼도, 5개 지국(미러)에 똑같은 신문이 이미 깔려 있어 독자(클라이언트)는 가까운 지국에서 받아 본다. 독자는 매번 새 신문을 사러 가지 않는다 — "정기구독(subscription)"을 걸어 두면 배달부(앱)가 알아서 갱신본을 가져온다. 신문 내용(서버 목록)이 매일 바뀌어도 구독자는 신경 쓸 필요가 없다.

5디렉토리 구조 해부

루트의 .txt가 "원본", 하위 폴더는 모두 "같은 데이터의 다른 표현"이다.

vpn-configs-for-russia/ ├── README.md ★ 본체(RU, 152KB) — 안내·링크·클라이언트 가이드 ├── README-EN-US.md / -ZH-CN.md / -FA-IR.md 다국어 README 3종 │ │ ── 블랙리스트(⚫) 원본 .txt ── ├── BLACK_VLESS_RUS.txt ★ VLESS 풀(약 117노드) ├── BLACK_VLESS_RUS_mobile.txt 모바일용(상위 노드 선별) ├── BLACK_SS+All_RUS.txt SS·Hy2·VMess·Trojan 혼합(약 30노드) │ │ ── 화이트리스트(⚪) 원본 .txt ── ├── WHITE-CIDR-RU-all.txt 국내 IP대역(CIDR) 기준 라우팅 + 노드 ├── WHITE-CIDR-RU-checked.txt 검증된 호스터(VK·Yandex 등)만 ├── WHITE-SNI-RU-all.txt 국내 도메인(SNI) 기준 라우팅 + 노드 ├── Vless-Reality-White-Lists-Rus-Mobile.txt 화이트 모바일용 ├── Vless-Reality-White-Lists-Rus-Mobile-2.txt 화이트 모바일용 (2번째 세트) │ │ ── 같은 데이터의 다른 포맷 ── ├── Base64/ 위 .txt들을 Base64 인코딩한 버전 ├── Clash/ Clash/Mihomo용 YAML(proxies/rules) ├── QR-codes/ 구독 URL QR (GitHub용 + GitLab미러용) │ └── GitHack-proxy/ githack RAW용 QR 별도 │ │ ── Tor ── ├── TOR-BRIDGES/ │ ├── TOR_BRIDGES_OBFS4.txt obfs4 transport 브리지 │ ├── TOR_BRIDGES_WEBTUNNEL.txt webtunnel transport │ ├── TOR_BRIDGES_VANILLA.txt 평범한 브리지 │ ├── TOR_BRIDGES_TOP100.txt 상위 100 │ └── TOR_BRIDGES_ALL.txt 전체 │ │ ── 인프라 ── ├── .github/ │ ├── workflows/ │ │ ├── mirror-to-gitlab.yml ★ main 푸시 → GitLab push │ │ ├── mirror-to-codeberg.yml → Codeberg │ │ ├── mirror-to-gitea.yml → Gitea │ │ ├── mirror-to-sourcehut.yml → SourceHut │ │ └── mirror-to-bitbucket.yml → Bitbucket │ └── FUNDING.yml Patreon 후원 링크 └── LICENSE 라이선스(34KB)
읽는 순서 추천

① 아무 BLACK_VLESS_RUS.txt의 첫 5줄(# 주석 메타) → "구독 파일이 자기 자신을 어떻게 설명하나" 파악 → ② 같은 파일의 vless:// 한 줄을 쿼리스트링까지 뜯어 보기(§4 해부) → ③ Clash/같은이름.yaml을 열어 "동일 노드가 YAML로 어떻게 표현되나" 비교 → ④ .github/workflows/mirror-to-gitlab.yml로 "데이터가 어떻게 5곳에 복제되나" 확인. 코드라 부를 건 ④뿐이고, 거기에 이 레포의 엔지니어링 핵심이 있다.

미러 워크플로우 핵심 (mirror-to-gitlab.yml 요약)
on: push: { branches: [main] }, workflow_dispatch
permissions: contents: read         # 읽기 권한만(최소권한)
concurrency: cancel-in-progress: true # 중복 실행 취소

steps:
  - checkout (fetch-depth: 0)            # 전체 히스토리
  - git remote add gitlab \
      https://oauth2:${GITLAB_TOKEN}@.../repo.git
  - git push gitlab HEAD:main           # 토큰은 secrets로 주입

5개 파일이 호스트만 다를 뿐 같은 패턴이다. 배울 점: 최소 권한(read-only), 비밀값은 코드가 아닌 secrets, 중복 실행 방지(concurrency) — 작지만 모범적인 CI 설계다.

6학습 포인트 (네트워크·프록시·암호화)

검열우회 데이터 레포에서 무엇을 배우나.

A. URI 스킴으로 설정을 직렬화하는 법

vless://UUID@host:port?key=val&...#label은 사실 "객체 하나를 URL 한 줄로 직렬화"한 것이다. 사용자·호스트·포트·쿼리파라미터·프래그먼트(라벨)라는 표준 URI 구성요소에 모든 설정을 욱여넣는다. 이 패턴(scheme://... 한 줄로 복잡한 설정 전달)은 DB 접속 문자열·spotify:·magnet: 등 어디에나 있다. "왜 굳이 URI로?"의 답은 "QR·복붙·구독으로 옮기기 쉬워서"다.

실습: 가짜 설정 객체({host, port, sni, label})를 만들어, 이를 myproto://host:port?sni=...#label 문자열로 직렬화하고 다시 파싱해 객체로 복원하는 함수 한 쌍을 작성하라. URL 인코딩(encodeURIComponent)이 왜 필요한지 라벨에 한글·이모지를 넣어 확인.

B. 같은 데이터, 여러 표현 (포맷 변환 파이프라인)

이 레포의 .txt·Base64·Clash YAML·QR은 전부 하나의 원본에서 파생된 표현이다. "원본 모델 → N개 포맷 직렬화기"는 소프트웨어 설계의 핵심 원리다. 원본을 단일 진실원(single source of truth)으로 두고 나머지를 자동 생성하면 불일치가 사라진다.

실습: 노드 객체 배열 하나를 입력받아 (1) 평문 .txt (2) Base64 (3) 최소 Clash YAML(proxies: 리스트)로 동시에 내보내는 변환기 3개를 작성하라. 모두 같은 입력만 받도록.

C. TLS·SNI·핑거프린트 — "위장"의 네트워크 원리

Reality·fp=firefox·obfs4를 이해하려면 TLS 핸드셰이크가 평문으로 무엇을 노출하는지를 알아야 한다. 특히 SNI(Server Name Indication)는 암호화 이전에 평문으로 도메인을 노출해, 검열의 단골 표적이 된다. Reality와 ECH(Encrypted Client Hello)가 왜 등장했는지가 여기서 나온다. 이건 우회를 떠나 모든 웹 보안 엔지니어의 필수 지식이다.

실습: 본인이 운영하는 사이트나 example.com에 대해 openssl s_client -connect host:443 -servername host로 핸드셰이크를 떠 보고, ClientHello의 SNI가 어디서 평문으로 보이는지 패킷(Wireshark)으로 확인하라. 본인/공개 테스트 대상만.

D. CI로 만드는 고가용 데이터 배포 (미러링)

가장 실무적인 교훈은 mirror-to-*.yml에 있다. "한 곳에 푸시하면 N곳으로 자동 복제"는 문서·릴리스·백업 어디에나 쓰는 패턴이다. 여기서 최소 권한 토큰·secrets 분리·concurrency 제어라는 CI 보안 기본기를 배울 수 있다.

실습: 본인의 GitHub 레포에 "main 푸시 시 자기 소유 GitLab/Codeberg 레포로 자동 미러"하는 워크플로우를 작성해 보라. 토큰은 반드시 레포 secrets에 넣고, permissions: contents: read로 최소화.

7시스템 / 환경 요구사항 · 법적 주의

"기술 요구사항"보다 "법적·윤리적 전제"가 훨씬 중요한 레포다.

항목요구사항
소비 측(사용자)구독 URL을 지원하는 클라이언트 — PC: v2rayN·Karing·Throne / 모바일: Karing·Streisand·v2RayTun 등.
프로토콜 지원클라이언트가 VLESS·Reality·Shadowsocks·(Tor면 Tor 클라이언트)를 지원해야 함.
네트워크구독 URL(GitHub 또는 미러)에 도달 가능해야 갱신됨. 막히면 미러/QR/저장본 사용.
운영 측(레포)GitHub Actions + 5개 외부 호스트 계정·토큰(secrets). 코드 실행 환경은 ubuntu-latest 러너.
법적 전제(필수)거주·이용 관할지에서 해당 도구·접속이 합법인지 사용자가 직접 확인해야 한다. 이것이 가장 중요한 "요구사항"이다.
법적 · 윤리적 · 보안 주의 (반드시 읽을 것)
이 문서는 "우회 운영 지침"이 아니라 "프로토콜·배포 구조 학습"이다

관할지 법률 우선. VPN·프록시·우회 도구의 적법성은 나라마다 다르다. 일부 관할지에서는 특정 도구 사용·배포가 제재 대상일 수 있다. 본 문서는 네트워크 프로토콜과 데이터 배포 아키텍처를 교육적으로 설명할 뿐, 특정 검열 체계를 겨냥한 운영 회피 절차를 제공하지 않으며, 어떤 행위의 적법성도 보증하지 않는다. 사용 여부·방식의 책임은 전적으로 이용자에게 있다.

출처를 신뢰하지 말 것(보안). 출처 불명의 무료 프록시는 당신의 모든 트래픽이 운영자를 거친다는 뜻이다. 악의적 운영자는 트래픽 감청·자격증명 탈취·중간자 공격을 할 수 있다. 따라서 실명 로그인·금융·민감 정보를 신뢰할 수 없는 프록시로 보내지 말 것이며, 가능하면 본인이 직접 구축한 서버(§8)를 쓰는 것이 안전하다.

학습 범위. §8 실습은 모두 본인 소유 서버·합법 테스트 대상에 한정한다. 타인의 망·시스템에 대한 무단 우회·접근 시도는 금지된다.

8직접 해볼 수 있는 실습 과제

난이도별 5단계 — 모두 본인 소유 서버 / 합법 테스트 대상으로 안전하게(합법 자가 호스팅·학습 범위).

과제 1 난이도 ★☆☆☆☆

구독 파일 포맷 읽기 (관찰)

레포의 BLACK_VLESS_RUS.txt 첫 5줄(# 주석)을 분석해 profile-title·profile-update-interval·Date/Time·Количество(개수)가 각각 무슨 뜻인지 정리한다. 그다음 vless:// 한 줄을 §4 해부표에 맞춰 필드별로 쪼개 표로 만든다. 접속은 하지 않고 구조만 분석.

과제 2 난이도 ★★☆☆☆

구독 URI 파서/생성기 작성

임의 언어로 vless:// 한 줄을 {uuid, host, port, params, label} 객체로 파싱하고, 다시 같은 문자열로 직렬화하는 함수 쌍을 만든다. 라벨에 한글·이모지를 넣어 URL 인코딩의 필요성을 확인한다. 실제 서버에 연결하지 말고 문자열 변환만.

과제 3 난이도 ★★★☆☆

본인 VPS로 합법적 자가 호스팅

본인이 비용을 내고 빌린 VPS 한 대에 sing-box 또는 Xray를 설치해 자기만 쓰는 프록시 서버를 세우고, 자기 기기에서만 접속해 본다. 목적은 "Reality/TLS가 실제로 어떻게 핸드셰이크하는지"를 본인 서버 로그로 관찰하는 것. 타인 제공 무료 노드가 아니라 본인 서버로 — 트래픽 보안과 학습 모두에 안전하다.

과제 4 난이도 ★★★★☆

나만의 구독 + 자동 미러 CI 만들기

본인 노드 객체 배열에서 .txt·Base64·간단 Clash YAML을 자동 생성하는 스크립트를 쓰고, 결과를 본인 GitHub 레포에 둔 뒤 mirror-to-*.yml을 본떠 본인 소유 GitLab/Codeberg로 자동 미러하는 GitHub Actions를 작성한다. 토큰은 secrets, 권한은 read-only.

과제 5 난이도 ★★★★★

라우팅 규칙(블랙/화이트) 직접 설계

Clash/sing-box 설정에서 rules를 직접 짜 본다 — 예: "특정 사내 테스트 도메인만 직접, 나머지는 본인 프록시 경유"(화이트 모드 흉내) 또는 그 반대(블랙 모드). CIDR 기반 vs 도메인(SNI) 기반 규칙의 차이를 본인 환경에서 실측한다. 본인 망·본인 서버 범위에서만.

9관련 기술 심화 학습 로드맵

6주 코스 — TCP/TLS 기초부터 프록시 라우팅·CI 배포까지.

주차주제실습 · 참고
1주차네트워크 기초 — TCP/UDP·포트·NAT·DNS, 프록시 vs VPN의 차이Wireshark로 평범한 HTTPS 패킷 관찰
2주차TLS 심화 — 핸드셰이크·인증서·SNI 평문 노출·ECHopenssl s_client · ClientHello 분석(과제3 전 단계)
3주차우회 프로토콜 — VLESS·Reality·Shadowsocks·핑거프린트(uTLS)Xray/sing-box 공식 문서 · 본인 VPS 자가호스팅(과제3)
4주차Tor 구조 — 릴레이·브리지·pluggable transport(obfs4·webtunnel)Tor Project 문서 · TOR-BRIDGES/ 포맷 비교
5주차라우팅 엔진 — Clash/Mihomo 규칙·CIDR/도메인/지오IP 매칭Clash/*.yaml 정독 · 규칙 직접 설계(과제5)
6주차배포·가용성 — 구독 포맷·CI 미러링·최소권한 토큰·secretsmirror-to-*.yml · 본인 자동 미러 CI(과제4)

10핵심 키워드 사전

본문·파일에 나온 용어 빠른 참조.

용어의미
구독(subscription) URL서버 목록 파일의 URL 하나만 등록하면 클라이언트가 주기적으로 갱신해 가는 배포 방식.
profile-update-interval구독 파일 주석 헤더의 갱신 주기 힌트(시간 단위).
블랙리스트(⚫) / 화이트리스트(⚪)차단 목적지만 우회 / 국내 대역만 직접+나머지 전부 우회. 차단 강도별 라우팅 전략.
VLESSXray/V2Ray 계열 경량 전송 프로토콜. 자체 암호화 없이 TLS/Reality에 위임.
Reality실제 사이트의 TLS를 빌려 "가짜 TLS"임을 숨기는 위장 보안 계층(pbk·sid·sni).
XTLS-Vision (flow)TLS 이중 암호화 비용을 줄이는 흐름 제어(flow=xtls-rprx-vision).
SNITLS 핸드셰이크에서 암호화 이전 평문으로 노출되는 목적지 도메인. 검열의 표적.
fp (fingerprint / uTLS)TLS 핸드셰이크를 특정 브라우저처럼 위장하는 핑거프린트(firefox·chrome·random).
Shadowsocks (ss)가벼운 암호화 SOCKS 프록시. 단순·빠름.
Hysteria2 / VMess / TrojanQUIC 기반 고속 / V2Ray 표준 / TLS 위장 프로토콜.
Tor 브리지 · pluggable transportTor의 비공개 진입점과, 트래픽을 위장하는 전송 계층(obfs4·webtunnel·vanilla).
DPI심층 패킷 검사 — 트래픽 패턴으로 우회 통신을 식별·차단하는 검열 기술.
CIDR51.250.23.0/24 같은 IP 대역 표기. 화이트리스트 라우팅의 "국내 판정"에 사용.
Clash / Mihomoproxies·rules 기반 규칙형 프록시 클라이언트(YAML 설정).
미러링 / SPOF여러 호스트 복제로 단일 장애점 제거. 이 레포는 5개 미러 + githack RAW.
Base64 구독구독 .txt 전체를 Base64로 인코딩한 표준 호환 포맷.

11참고 링크