디지털 가든
fake-IP 해협에서 알몸으로 헤엄치는 자: tailscaled의 DialPlan, 꺼진 SNI 후각, 그리고 TUN을 건너는 두 가지 자세
재기동 뒤, Tailscale의 로그인 버튼은 장식이 되었다. 눌러도 응답이 없었고, 오류도, 인증 팝업도 없었다. 이 사건의 완전한 인과 사슬은, fake-IP 해협을 알몸으로 헤엄치는 한 마리의 물고기 이야기다.
하나, 표면의 삼중 확인
단순한 답들이 먼저 치워졌다. Tailscale 서비스는 돌고 있었지만 로그아웃 상태(NoState)였고, 로그인 요청은 초과했다. Ninja의 핵 inet.exe는 돌고 있었고 7897은 정상 대기 중이며, TUN이 지휘봉을 쥐고 있었다. 직결 네트워크는 건강했다(UDP 통과, DERP 로스앤젤레스 150ms). 한 층 더 깊이 들어가니, 모든 어댑터의 DNS가 Ninja TUN에 의해 198.18.0.2로 재기록되어 있었다(fake-ip). controlplane.tailscale.com은 198.18.0.29로 해석되었다. 제교통이 강제로 프록시로 압송되고 있었던 것이다. 기동 시계열의 교착도 정리되었다. Ninja의 TUN이 먼저 DNS와 경로를 빼앗는다 → Tailscale의 기동 시 자동 로그인이 프록시를 거쳐 초과하며 실패한다 → 클라이언트는 로그아웃 상태로 떨어진다. 그리고 로그아웃된 클라이언트는 스스로 재시도하지 않는다. 그리하여 영원히 NoState에 얼어 붙는다. 세 번째 쟁탈전도 기다리고 있었다. Tailscale은 자기 MagicDNS(100.100.100.100)를 어댑터에 다시 쓰려 했고, Ninja가 또 fake-ip로 덮어 썼다. 두 주체가 같은 지면을 두고 다투고 있었던 것이다.
둘, 알몸의 헤엄치는 자: DialPlan과, 닫힌 후각
서비스를 재시작하고, 프록시 환경 변수를 서비스에 적고, 로그를 한 권씩 넘겨도, 등록 요청은 여전히 십 초에 초과했다. 핵심 세부가 표면으로 떠올랐다. tailscaled는 내부에 DialPlan(맨 IP 목록)을 캐시해 두며, 그쪽을 우선하여 직접 다이얼한다. 새로 놓은 프록시 경로를 우회하는 것이다. 대조 실험이 충돌의 기제를 못 박았다. 같은 세그먼트의 192.200.0.103은 일 초에 통했고 192.200.0.115는 십 초 얼었으며, 도메인을 타는 fake-ip는 통했다. tailscaled가 쥔 것은 맨 IP이며(내장 bootstrap DNS가 후방을 지탱해 Ninja의 fake-ip 도메인 사상을 우회한다), 맨 IP 교통이 ninja-tun에 들어서면 sniff: false인 mihomo에게는 도메인이 보이지 않아, IP 규칙으로 맹목적으로 경로를 배정할 수밖에 없다. 바로 막히는 경로에 착지했던 것이다. 이것은 Tailscale이나 Ninja 어느 한쪽의 고장이 아니라, 둘이 겹쳐진 경로 충돌이다.
셋, 수복의 도(道)의 학
즉시 회복은 갑옷을 벗고 건너는 길을 걸었다. TUN을 내린다 → 주인의 정상 DNS를 회복시킨다 → Tailscale을 재시작한다 → 알몸 직결 상태라면 등록이 곧바로 통하고, 브라우저의 한 번 클릭이 승인을 끝낸다. 공존을 위한 삼택은 이렇다. 추천은 tailscale set --accept-dns=false(MagicDNS를 포기하고 Ninja에게 DNS를 독점시키며, 100.x 주소로 기기에 직결한다. 가장 견실하다). 또는 Ninja 설정에 *.tailscale.com, *.ts.net, controlplane.tailscale.com을 직결 규칙으로 더한다(Tailscale 교통을 프록시에 우회시킨다). 또는 Tailscale 서비스에 영구 프록시 설정을 한다.
넷, 두 가지 자세의 지리학
이 사건의 지리학은 독립된 한 페이지에 값한다. 같은 목적지, 해협을 건너는 두 가지 자세, 그리고 전혀 다른 운명. 도메인을 달고 fake-ip 사상을 타는 자(curl)는 순조롭게 통한다. 맨 IP를 직접 다이얼하는 자(tailscaled의 DialPlan)는, 후각이 꺼진 죽은 항로에 부딪힌다. fake-IP 체계의 순진한 가정은 모든 교통이 먼저 도메인을 묻는다는 것이다. 그러나 커널급 수호 프로세스야말로, 도메인을 묻지 않고 IP만 아는 알몸의 헤엄치는 자다. 프록시와 공존해야 하는 네트워크에서, 도메인 체계에 복종하지 않는 모든 프로세스는, 각자 전용의 항로를 필요로 한다.
댓글