---
status: LIVE_CANARY_SAFELY_REVOKED_NAT_OVERLAY_REQUIRED
candidate_version: 1.4.83-peer-sponsored-upnp-diagnostic-default-off-locked
candidate_bytes: 488809
candidate_sha256: 94bb1528978d8be464b201d7ce3cfe3015c62ed76704c5b01df57bc252dfb1b8
production_enabled: false
rollout_policy_written: false
router_mapping_present: false
operator_signing_used: false
validator_changed: false
current_continuity: false
---

# 유한 UPnP live canary 결과

## 결론

승인된 3개 PC, TCP 52001·52002·52003, 최대 1,800초 범위에서 실제 canary를 수행했다. 세 PC의 후보 설치와 동시에 유효한 Ed25519 RPC attestation 3개까지는 확인했지만, 서로 다른 공개 relay 3개를 동시에 확보하지 못했다. 따라서 메인 호스트 단절 생존은 아직 증명되지 않았다.

실패한 시도는 모두 false policy 전달, attestation lease 만료, canary 포트 삭제, rollout policy 삭제까지 확인했다. canary 이전부터 존재한 TCP 5277 gateway는 삭제하지 않았다.

## 확인된 사실

- 최종 PC Sync 후보 `1.4.83-peer-sponsored-upnp-diagnostic-default-off-locked`가 대상 3대에 설치됐다.
- 3개 node identity와 2개 관측 failure domain에서 유효한 서명 3개가 동시에 도착했다.
- 한 시도에서 node-bound high port UPnP mapping 한 개와 기존 public 5277 한 개, 합계 두 public relay까지 도달했다.
- 세 번째 노드는 private gateway에 머물렀다.
- 메인 호스트에서 다른 라우터의 private PC mapping을 대신 만들 수 없었다.
- 같은 failure-domain hash로 분류된 두 PC도 실제 private LAN 대역이 달라 peer-sponsored mapping을 만들 수 없었다.
- 접근 가능한 public PC의 제한된 진단은 `UPNP_IGD_NOT_DISCOVERED`였다.
- UPnP만으로는 UPnP 미지원, CGNAT, 분리 LAN 뒤의 불특정 PC를 public service node로 만들 수 없다.

## 이번에 보완한 안전장치

- canary cleanup은 TCP 52001·52002·52003만 소유 대상으로 취급한다.
- 기존 TCP 5277은 회수 대상에서 제외한다.
- `--revoke-only`는 중단된 실행에서도 false policy와 lease 만료를 끝까지 확인한다.
- 메인 호스트 sponsor mapping은 별도 상태 파일에 기록하고 정확한 포트만 삭제한다.
- 같은 LAN의 peer sponsor는 signed runtime policy, admitted node key, 실제 `/gateway/health` identity, 30분 lease를 모두 만족할 때만 mapping을 시도한다.
- sponsor 상태와 오류는 자격정보 없이 제한된 health 진단으로만 노출한다.

## 다음 필수 단계

불특정 다수 PC를 실제 서비스 노드로 만들려면 inbound port 개방을 전제로 하지 않는 outbound overlay가 필요하다. NAT 뒤 PC가 먼저 여러 public/rendezvous PC에 인증 연결을 만들고, signed service directory가 그 연결을 node identity에 결합해야 한다. 최소 요구사항은 다음과 같다.

1. Ed25519 node-bound outbound session과 짧은 lease
2. 최소 3개 독립 rendezvous/relay discovery 경로
3. 한 relay 상실 시 다른 relay로 재등록
4. RPC·directory·capsule·service shell의 read-only multiplexing
5. 메인 서버 없이 재접속 가능한 peer directory cache
6. replay, impersonation, split-brain, write operation 차단

이 overlay와 실제 outage rehearsal이 통과하기 전에는 `currentContinuity`를 true로 올리지 않는다.

증거: `evidence/finite-upnp-live-canary-result-redacted.json`
