오늘 신규 설치하며 403 → auth_required로 이어지는 지뢰 2개를 밟아서, 원인과 검증된 해결책을 공유합니다.
1. GUI Tailscale.app의 CLI가 relay PATH에 없음 → whois 실패 → 전부 403
- launchd plist의 PATH는
/usr/local/bin:/opt/homebrew/bin:...인데, GUI(standalone pkg) Tailscale의 CLI는 /Applications/Tailscale.app/Contents/MacOS/Tailscale에만 있고 PATH에 링크되지 않습니다.
- LocalAPI 소켓(
/var/run/tailscaled.socket)도 GUI 배포판은 만들지 않으므로 whois가 CLI 폴백까지 전부 실패 → registerNew가 무조건 403.
- 주의: 단순 심링크는 안 됩니다 — Tailscale 바이너리가 번들 검사에서 크래시합니다 (
Fatal error: The current bundleIdentifier is unknown to the registry). 래퍼 스크립트로 해결했습니다:
printf '#!/bin/sh\nexec /Applications/Tailscale.app/Contents/MacOS/Tailscale "$@"\n' > /opt/homebrew/bin/tailscale
chmod 755 /opt/homebrew/bin/tailscale
- 제안:
runTailscaleWhoisCLI가 /usr/bin/env tailscale 실패 시 /Applications/Tailscale.app/Contents/MacOS/Tailscale 절대경로를 추가 폴백으로 시도하면 GUI 설치 사용자도 바로 동작합니다.
2. cmux 0.64.x의 socket-control-password 경로 이전 미대응 → auth_required
cmuxSocketPassword()가 ~/Library/Application Support/cmux/socket-control-password만 확인하는데, cmux 0.64.x는 ~/.local/state/cmux/socket-control-password에 씁니다.
- 결과: 비밀번호를 못 찾아
socketPassword = nil → 인증 생략 → 모든 RPC가 auth_required. 부수 증상으로 events.stream이 정확히 30초마다 detach/re-attach를 반복합니다 (cmux가 미인증 구독자를 끊는 것으로 보임).
- cmux.sock 경로는 이미 last-socket-path 마커로 최신순 추적하시니, 비밀번호 파일도 같은 순서(
~/.local/state/cmux → 레거시 Application Support)로 확인하면 될 것 같습니다.
- 임시 해결 (검증 완료):
ln -sf ~/.local/state/cmux/socket-control-password "~/Library/Application Support/cmux/socket-control-password"
- 참고: cmux 0.64.17 소켓에서
auth.login JSON-RPC는 정상 동작 확인했습니다 ({"result":{"authenticated":true}}).
두 개 다 적용 후 iPhone 페어링·미러링·알림 정상 동작합니다. 필요하시면 PR로도 올리겠습니다.
오늘 신규 설치하며 403 → auth_required로 이어지는 지뢰 2개를 밟아서, 원인과 검증된 해결책을 공유합니다.
1. GUI Tailscale.app의 CLI가 relay PATH에 없음 → whois 실패 → 전부 403
/usr/local/bin:/opt/homebrew/bin:...인데, GUI(standalone pkg) Tailscale의 CLI는/Applications/Tailscale.app/Contents/MacOS/Tailscale에만 있고 PATH에 링크되지 않습니다./var/run/tailscaled.socket)도 GUI 배포판은 만들지 않으므로whois가 CLI 폴백까지 전부 실패 →registerNew가 무조건 403.Fatal error: The current bundleIdentifier is unknown to the registry). 래퍼 스크립트로 해결했습니다:runTailscaleWhoisCLI가/usr/bin/env tailscale실패 시/Applications/Tailscale.app/Contents/MacOS/Tailscale절대경로를 추가 폴백으로 시도하면 GUI 설치 사용자도 바로 동작합니다.2. cmux 0.64.x의 socket-control-password 경로 이전 미대응 → auth_required
cmuxSocketPassword()가~/Library/Application Support/cmux/socket-control-password만 확인하는데, cmux 0.64.x는~/.local/state/cmux/socket-control-password에 씁니다.socketPassword = nil→ 인증 생략 → 모든 RPC가auth_required. 부수 증상으로 events.stream이 정확히 30초마다 detach/re-attach를 반복합니다 (cmux가 미인증 구독자를 끊는 것으로 보임).~/.local/state/cmux→ 레거시 Application Support)로 확인하면 될 것 같습니다.auth.loginJSON-RPC는 정상 동작 확인했습니다 ({"result":{"authenticated":true}}).두 개 다 적용 후 iPhone 페어링·미러링·알림 정상 동작합니다. 필요하시면 PR로도 올리겠습니다.