Cloudflare Workers 릴레이

PC와 폰이 모두 NAT 뒤에 있을 때 내 Cloudflare 계정에 Droidline 릴레이를 배포합니다. 계속 켜 둘 서버가 필요 없습니다.

번역된 페이지입니다. 영어 문서와 내용이 다르면 영어 문서가 기준입니다. English

적합한 경우: PC도 폰도 들어오는 연결을 받을 수 없고(예: 집 공유기 뒤의 PC와 모바일 데이터를 쓰는 폰), 서버를 운영하고 싶지 않을 때. 적합하지 않은 경우: 무료 플랜보다 많은 트래픽이 필요한데 유료 플랜은 쓰고 싶지 않을 때, 또는 모든 것을 직접 관리하는 하드웨어에 두고 싶을 때(VPS 릴레이를 쓰세요).

PC와 폰 모두 WSS로 릴레이에 접속합니다. 릴레이는 서버 ID와 기기 ID로 둘을 짝짓고, 자신은 읽을 수 없는 줄을 전달합니다. 코드는 누구에게나 같고, 각자 자기 사본을 배포합니다.

배포

버튼으로 배포: Deploy to Cloudflare를 열고 로그인한 뒤, RELAY_TOKEN을 물으면 길고 무작위인 시크릿을 붙여 넣습니다.

node -e "console.log(require('crypto').randomBytes(32).toString('base64url'))"

또는 저장소를 받아 둔 폴더에서:

cd relay/worker
npm ci
npx wrangler deploy
npx wrangler secret put RELAY_TOKEN

배포가 끝나면 https://droidline-relay.your-account.workers.dev 같은 릴레이 주소가 출력됩니다. 시크릿을 설정하기 전까지 릴레이는 503으로 응답합니다.

PC 연결

droidline relay set https://droidline-relay.your-account.workers.dev <RELAY_TOKEN>

droidline serve를 다시 시작합니다. 로그에 relay connected가 나옵니다. 새 폰은 페어링 QR에서 릴레이 정보를 받습니다. 이미 페어링된 폰은 다음에 와이파이로 접속할 때 자기 전용 릴레이 티켓을 받습니다. 티켓은 폰 한 대에 묶여 있으므로 폰이 릴레이 토큰 자체를 갖는 일은 없습니다.

무료 플랜

Cloudflare 무료 플랜의 Durable Objects는 하루 100,000건의 요청을 허용하고, 들어오는 WebSocket 메시지는 20개당 요청 1건으로 계산합니다(Cloudflare 요금 안내). 대기 중인 폰은 25초마다 ping을 보내고 PC가 릴레이를 거쳐 하나씩 응답하므로, 둘을 합쳐 하루 약 350건입니다. 명령, 스크린샷, dump가 여기에 더해집니다. 무료 플랜으로 부족해지면 Workers 유료 플랜에서 한도가 늘어납니다.

릴레이가 적용하는 제한

  • 폰마다 초당 50줄까지 보낼 수 있고, 순간적으로는 200줄까지 허용합니다. 폰은 이 한도를 넘지 않도록 스스로 속도를 조절합니다.
  • 같은 폰의 두 번째 연결은 첫 번째 연결을 대체합니다.
  • 페어링 티켓으로는 자기 티켓으로 이미 접속해 있는 폰을 밀어낼 수 없습니다.