터널

스위치가 다루는 것은 시스템 인터페이스이지 어떤 레코드 하나가 아닙니다.

홈 화면 상단의 스위치가 켜는 것은 iOS의 Network Extension입니다. 기기 송신 트래픽이 Shadowrocket의 가상 NIC로 들어갑니다. 레코드, 규칙, Data는 이 인터페이스 뒤에서 일어납니다. 플랫폼 제한은 시스템입니다.

  1. 01스위치를 처음 켤 때
  2. 02「연결됨」은 터널이 있다는 뜻뿐입니다
  3. 03Config · Proxy · Direct
  4. 04연결이 터널에 들어간 뒤
  5. 05시스템은 개인 VPN을 한 번에 하나만 유지합니다

01

스위치를 처음 켤 때

시스템은 VPN 구성 추가를 요청합니다. 허용하면 「설정」의 VPN 목록에 Shadowrocket이 나타납니다. 이것은 OS가 개인 VPN을 인가하는 절차이며 노드 제공자의 로그인도, 이 앱의 계정도 아닙니다. 앱에는 계정이 없습니다.

거절하면 가상 NIC는 만들어지지 않고 스위치가 작용할 대상이 없습니다. 나중에 시스템 설정에서 이 구성을 지우거나 스크린 타임 / MDM이 VPN을 금지하면 스위치는 다시 효력을 잃고 재인가가 필요합니다. 앱을 다시 설치하면 이 시스템 구성이 사라지는 경우가 있어 「갑자기 연결이 안 된다」처럼 보입니다. 인가가 없어진 것이지 레코드가 만료된 것이 아닙니다.

인가 대상은 기기 위 확장입니다. 그다음 행선지는 고른 레코드와 현재 정책이 정합니다. 스토어 라이선스가 덮는 것은 여기까지입니다. 앱이 시스템 VPN을 요청할 수 있다는 층입니다. 출구는 포함되지 않습니다.

02

「연결됨」은 터널이 있다는 뜻뿐입니다

Shadowrocket 홈: 스위치 꺼짐, Global Routing은 Config
위 스위치가 터널입니다. Global Routing에서 Config / Proxy / Direct를 고릅니다. App Store 화면이며 기기 버전이 다를 수 있습니다.

상태 표시줄에 VPN 아이콘이 있고 스위치가 켜져 있으면 확장이 동작 중입니다. 그때도 연결은 DIRECT로 판정되어 셀룰러나 Wi-Fi 원래 경로로 나가고, 하이라이트한 레코드를 전혀 거치지 않을 수 있습니다.

그래서 「이미 연결됐다」를 「모든 요청이 노드로 들어갔다」로 쓰면 안 됩니다. 바이트가 레코드에 들어갔는지는 Data의 두 카운터로 보고, 규칙이 호스트를 직통에 남겼는지는 규칙으로 봅니다.

스위치가 깜빡이며 반복해서 돌아가면 확장이 안정적으로 뜨지 못한 것입니다. 흔한 원인은 현재 레코드 핸드셰이크 실패(유형, 전송, 인증서, UUID가 대향과 불일치)이거나, 시스템에 쓸 수 있는 VPN 구성이 없는 것입니다. 레코드를 바꾸기 전에 정책이 Direct가 아닌지 확인하세요. Direct에서는 터널이 켜진 채로 대향 핸드셰이크를 하지 않습니다. 스위치가 돌아가는 것과 「노드가 죽었다」는 다른 실패입니다.

하이라이트 행이 없는 채로 스위치를 켜는 결과는 버전에 따릅니다. 「선택하지 않아도 연결된다」에 기대지 마세요. 목록에는 출구로 쓸 수 있는 레코드가 필요합니다. 오브젝트를 보세요.

03

Config · Proxy · Direct

이 세 항은 현재 구성 전체를 덮고, 규칙 한 줄보다 먼저 보입니다. 답하는 것은 트래픽이 터널에 들어간 뒤 규칙을 물을지입니다.

정책과 레코드는 따로 고릅니다. 레코드를 바꿔도 Config / Proxy / Direct는 바뀌지 않고, 정책을 바꿔도 하이라이트 행은 바뀌지 않습니다. 둘 다 틀려도 화면은 연결됨으로 남을 수 있습니다.

대조는 Direct → Proxy → Config 순으로 하고, 한 번에 움직이는 것은 정책뿐입니다. Data를 보세요. Config 아래에서 FINAL을 고치면서 레코드도 바꾸면 대조가 아닙니다.

04

연결이 터널에 들어간 뒤

확장이 송신을 받은 뒤 대략 이 순서로 처리합니다. 세부는 현재 버전을 따릅니다.

  1. 정책이 Direct면: 시스템 원래 경로로 되돌리고 규칙은 묻지 않으며 현재 레코드와 핸드셰이크하지 않습니다.
  2. 정책이 Proxy면: 규칙은 묻지 않고 하이라이트 중인 레코드로 보냅니다. 핸드셰이크가 실패하면 이 단계에서 멈춥니다.
  3. 정책이 Config면: 현재 구성의 목록을 위에서 맞춰 DIRECT / PROXY / REJECT를 얻습니다.
  4. DIRECT 연결은 원래 경로로 돌아가고 REJECT는 버리며 PROXY 연결은 현재 레코드로 갑니다.
  5. 리라이트가 켜져 있으면 요청이 이미 보인 뒤에 URL이나 헤더를 바꿉니다. 리라이트를 보세요. 분기 결과를 거슬러 다시 쓰지 않습니다.

UDP와 TCP는 모두 터널에 들어가지만 모든 레코드 유형이 UDP를 동등하게 전달하지는 않습니다. 어떤 앱이 UDP에서만 실패하면(게임, 일부 통화) 먼저 그 레코드가 지원을 선언하는지를 보고, 그다음 규칙이 포트로 REJECT하지 않았는지를 봅니다.

맞춤 앞뒤에서 이름 해결이 어느 단계에 일어나는지가 규칙이 이름을 볼지 주소를 볼지를 정합니다. DNS를 보세요.

05

시스템은 개인 VPN을 한 번에 하나만 유지합니다

다른 VPN 앱이 연결된 상태일 때 iOS는 보통 트래픽을 Shadowrocket에 다시 넘기지 않습니다. 이때 이 앱 스위치가 켜져 있어도 바이트가 이 확장에 들어간 적이 없을 수 있습니다. 장애를 가를 때는 먼저 시스템 VPN 목록에서 지금 유효한 것이 어느 것인지 보세요.

비행기 모드, Wi-Fi와 셀룰러 전환, 저전력, 시스템의 백그라운드 회수는 모두 터널을 뜯습니다. 프레임워크 동작이며 레코드가 갑자기 「만료」된 것이 아닙니다. 포털 인증 망은 먼저 기기 스스로 로그인 페이지를 끝낸 뒤 스위치를 켜세요. 이 경계의 전개는 시스템입니다.