본문으로 건너뛰기
Chen Dahuang
전체 글
4분 분량 오리지널

프록시 구독 통합을 Cloudflare로 옮겼다

여러 프록시 서비스와 자체 노드를 하나의 구독으로 합치고, 라우팅 규칙을 서버 쪽에서 설정 — 클라이언트는 그냥 구독만 하면 된다.

Chen Dahuang

Chen Dahuang

인디 개발자

프록시 구독 통합을 Cloudflare로 옮겼다

프록시 서비스를 3~4년째 써 왔고, 때때로 직접 VPS 노드를 운영하기도 했다. 항상 짜증 나는 점이 하나 있었다: 서너 개 구독에 자체 호스팅 노드 몇 개가 클라이언트에 흩어져 있어서 하나하나 추가해야 하고, 라우팅 규칙도 클라이언트마다 다시 설정해야 했다. 기기를 바꾸거나, 클라이언트를 바꾸거나, 가족 누군가를 세팅할 때마다 그 의식 전체를 다시 치렀다.

그러다 생각했다: 구독을 클라이언트 안에서 따로따로 관리할 이유가 없다. 전부 하나의 링크로 모으고, 규칙은 서버 쪽에서 정의하고, 클라이언트는 그냥 구독만 하면 된다 — 깔끔하다. 예전에 Sub-Store 방식도 써봤지만, 그건 자체 서버에서 돌아가서 유지보수가 번거로웠다. 그래서 이번엔 Cloudflare에서 호스팅되는 버전을 직접 만들었다. 이름은 sub-store-cloudflare, GitHub에 오픈소스로 공개했다.

정말 한 가지만 한다

여러 구독 소스를 하나의 구독으로 합친다.

구체적으로, 몇 가지를 넣을 수 있다:

  • 여러 프록시 서비스의 구독 링크
  • 자체 VPS의 노드 텍스트 (vless, trojan, ss, vmess — 전부 가능)
  • 임시로 붙여넣은 노드 덩어리도 가능

들어오면 Worker가 가져오고 중복을 제거하고, 네가 준 규칙대로 필터링한 다음, 필요에 따라 이름을 바꾸고, 플래그를 붙이고, 도메인을 리졸브한다. 전부 하나의 통합 구독으로 합쳐져 나온다 — 클라이언트는 그 링크 하나만 구독하면 끝이다.

규칙은 서버 쪽에 산다. 몇 가지 흔한 Mihomo 템플릿이 내장되어 있다 — acl4ssr, Loyalsoldier의 화이트리스트/블랙리스트, ai-streaming 등 — 라우팅 그룹과 규칙 세트가 전부 클라우드에서 설정된다. mihomo/clash, surge, sing-box, shadowrocket 같은 클라이언트에 구독을 넣으면, 다운로드되는 것은 라우팅 규칙이 이미 박힌 완성품이다. 그쪽에서 규칙을 손으로 쓰거나 규칙 세트 URL을 관리할 필요가 없다.

왜 하필 Cloudflare인가

실용적인 이유:

  • 서버가 없다. Workers + D1, 무료 할당량이 개인용으로 충분하다 — 서버 비용과 유지보수를 모두 아낀다.
  • workers.dev 도메인 자체가 방화벽 밖에 있다. 클라이언트가 연결해서 구독을 가져오는 게 처음부터 통한다 — "서버는 해외인데 노드가 자기 구독을 당기려면 여전히 사다리가 필요하다"는 마트료시카 같은 난센스가 없다.
  • 배포하면 웹 관리 패널 + 다운로드 엔드포인트가 된다. 휴대폰에서 클라이언트를 바꿔도 웹페이지를 열어 설정을 바꿀 수 있다.

기술 스택은 일부러 작게 유지했다: Worker + Static Assets + D1 + Worker Secrets. KV, R2, Durable Objects, Queue, Cron은 전부 핵심 경로 밖이다 — 적을수록 좋다.

배포는 일부러 두 갈래로

첫 번째는 그냥 쓰고 싶은 사람을 위한 것이다: 저장소의 Deploy to Cloudflare 버튼을 클릭. Cloudflare가 저장소를 가져와 Worker와 D1을 만들고, 토큰 두 개를 물어본 뒤, 완료되면 토큰이 붙은 관리 링크를 건네준다. 한 단계씩 진행되며 커맨드라인을 만질 필요가 없다.

두 번째는 나와, 그리고 땜질하기 좋아하는 사람들을 위한 것이다: AI 에이전트로 원클릭 설치.

저장소에는 에이전트 프로토콜(AGENTS.md + 에이전트 안의 SKILL)이 들어 있다. 구독 소스, 만들고 싶은 통합 구독, 원하는 규칙 템플릿을 로컬 설정 파일에 적고 pnpm run install:cloudflare을 실행하면, 에이전트가 Cloudflare 로그인을 확인하고, 데이터베이스를 만들고, 시크릿을 쓰고, 마이그레이션하고, 배포하고, 설정을 가져오고, 링크를 검증한 다음, 마지막으로 관리 링크와 다운로드 링크를 네 손에 건네준다.

내 링크도 정확히 이 방법으로 배포했으니, 이 루트를 추천한다 — 수고가 적다. Codex / Claude Code와 함께 쓸 때는 저장소의 agent/install.prompt.md에 있는 프롬프트를 복사하면 된다.

이런 사람에게 맞다

솔직히 말하면: 프록시 서비스가 둘 이상이고 자체 호스팅 노드도 몇 개 있으며, 그것들을 하나의 구독으로 합쳐서 자기 용도로 쓰고 싶다면 — 이 프로젝트가 맞다. 서비스 하나로 만족하고 있다면, 이건 정말 필요 없다.

코드는 완전 오픈소스, AGPL. 프런트엔드 상호작용은 원조 Sub-Store에 대한 오마주다. 원조는 컨테이너에서 돌며 더 넓은 클라이언트 생태계를 커버한다. 내 것은 더 날렵한 Cloudflare 네이티브 형태다 — 수정과 직접 배포가 쉽다. 라인별 복제가 아니다.

관심 있는 사람은 저장소를 둘러보면 된다. README가 꽤 충실하고, 배포 단계를 그대로 따라가면 된다.

도움이 되었다면 친구에게 공유해 주세요.

관련 글