라우터 VPN을 켠 뒤 캐스팅이 멈추는 이유
검색은 링크 로컬 멀티캐스트로 이루어지고 TV는 미디어를 직접 받아옵니다. 정책 기본값이 LAN 요청을 가로채 터널로 보낼 수 있습니다.
캐스팅은 라우터 VPN을 켜기 전까지 동작했고 켠 직후 실패하지만, 휴대폰의 일반 브라우징은 여전히 됩니다. 두 사실은 모순이 아닙니다. 캐스팅은 하나의 연결이 아니기 때문입니다. 휴대폰은 로컬 네트워크에서 수신기를 찾아 제어하고, 그다음 수신기가 자기 연결로 미디어를 받아옵니다.
다르게 실패하는 두 경로
제어 경로는 로컬입니다. 휴대폰은 로컬 네트워크에 물어 수신기를 찾고, 알아낸 주소로 제어 연결을 엽니다. 수신기가 목록에 전혀 나타나지 않으면 미디어를 요청하기도 전에 검색 단계가 실패한 것입니다.
미디어 경로는 반드시 로컬이 아닙니다. 많은 수신기가 스트림을 스스로, 자기 연결과 자기 자격 증명으로 받아오므로 휴대폰의 경로가 수신기의 경로를 설명하지 못합니다. 하나의 출구를 쓰는 것처럼 보이는 휴대폰은 TV 트래픽이 어디로 가는지에 대해 아무것도 말해주지 않습니다.
이 분리가 실패를 이상하게 보이게 합니다. 터널은 휴대폰의 라우팅 테이블을 바꾸고 TV의 것은 바꾸지 않았으므로, 쌍의 한쪽에서 나타난 증상은 그쪽에서 추적해야 합니다. 잘못된 기기를 들여다보는 것이 고쳐도 아무 효과가 없어 보이는 흔한 이유입니다.
검색이 먼저 깨지는 이유
검색은 보통 링크 로컬 멀티캐스트로 이루어집니다. mDNS는 224.0.0.251로 UDP 포트 5353에 보내고, SSDP는 239.255.255.250으로 UDP 포트 1900에 보냅니다. 둘 다 설계상 하나의 링크에 한정되므로 라우터는 리피터나 프록시의 도움 없이 세그먼트 사이로 전달하지 않습니다. 라우팅된 VPN은 멀티캐스트 그룹을 확장하지 않고, 정책 경로는 링크를 떠난 적 없는 그룹을 다른 링크에 나타나게 할 수 없습니다.
그래서 첫 실패는 암호화와 무관합니다. 휴대폰의 멀티캐스트는 보낸 인터페이스를 떠나고, 수신기는 그것을 보지 못하는 세그먼트에 있으며, 기기 목록은 비어서 돌아옵니다. 빈 목록은 TV가 인터넷 접속을 잃었다는 증거가 아닙니다.
격리는 VPN 없이도 같은 증상을 만듭니다. 게스트 네트워크와 액세스 포인트의 클라이언트 격리는 기기들이 서로 대화하지 못하게 의도적으로 막고, 격리된 세그먼트 위에 라우터 VPN을 켜도 그 점은 달라지지 않습니다. 터널을 확인하기 전에 격리 설정을 확인하십시오. 더 싼 답이고 더 흔합니다.
세그먼트 배치는 나머지 절반입니다. 두 번째 라우터, 다른 모드의 메시 노드, 다른 NAT 뒤의 유선 세그먼트는 모두 수신기를 휴대폰의 검색 트래픽이 닿지 않는 곳에 둡니다.
정책 기본값이 로컬 요청을 삼킬 수 있는 이유
모든 트래픽을 터널로 보내는 라우터는 터널 인터페이스에 기본 경로를 설치합니다. LAN 프리픽스가 그 정책에서 제외되지 않으면 두 미터 떨어진 기기로 향한 패킷이 이제 기본 경로와 일치하고, 라우터는 제어 요청을 스위치가 아니라 터널로 보냅니다.
| Stage | What carries it | How a router VPN interferes |
|---|---|---|
| Discovery | Link-local multicast on a single segment | Not extended across segments, and not repaired by a route |
| Control connection | Unicast to the receiver address on the LAN | A policy default can capture the LAN destination and tunnel it |
| Media fetch | The receiver's own connection | Unaffected by the phone's route, but affected by the TV's own policy |
| Account authorization | Tokens held by the application | Can fail for reasons unrelated to any route |
규칙 순서가 결과를 결정합니다. 정책 라우팅은 규칙을 우선순위 순으로 평가하므로 로컬 프리픽스 예외는 터널 테이블을 고르는 규칙보다 앞에 있어야 합니다. 터널 규칙 뒤에 예외를 추가하면 효과가 없어서, 올바르게 보이는 구성도 LAN 트래픽을 원격 출구로 보낼 수 있습니다.
수리는 좁습니다. 캐스팅 흐름에 필요한 특정 로컬 목적지만 허용하고 나머지 격리는 그대로 두십시오. 첫 단계로 클라이언트 격리를 없애면 증상은 낫지만 네트워크가 설계상 가진 통제를 버리는 것입니다.
휴대폰에서 한 번만 확인하면 어느 실패인지 판정됩니다. 수신기로 가는 경로가 터널을 가리키면 정책이 문제입니다. LAN을 가리키는데 검색이 여전히 실패하면 멀티캐스트나 격리가 문제이고 경로를 바꿔도 도움이 되지 않습니다.
ip route get 192.168.1.50
ip rule show
avahi-browse -rt _googlecast._tcp국가가 아니라 바뀐 단계를 시험하십시오
기록한 관찰이 반복 실험보다 낫습니다. 수신기가 기기 목록에 나타나는지, 제어 요청이 그곳에 닿는지, 스트림을 고르면 재생이 시작되는지를 적으십시오. 답 하나마다 한 단계가 용의선상에서 빠집니다.
그다음 출구 위치를 바꾸지 말고 각 단계를 직접 시험하십시오. VPN 국가를 바꾸는 것은 미디어 경로를 시험하고 검색과 제어 단계는 건드리지 않으므로, 우연히 도움이 된 것처럼 보이면서 아무것도 가르쳐주지 않을 수 있습니다.
수신기 쪽에서는 그 기기의 경로와 계정 상태를 확인하십시오. TV가 휴대폰과 다른 출구로 미디어를 받아오는 것은 정상 설계이고, 그곳의 실패는 휴대폰 터널이 아니라 수신기의 네트워크 정책에 대한 질문입니다.
어느 단계가 깨졌고 무엇이 그것을 바꿨는지를 한 문장으로 적으십시오. 그 문장은 일주일 국가 바꾸기보다 값어치가 있고 다음 펌웨어 업데이트도 견딥니다.
캐스팅은 터널에 관한 일반 규칙의 좋은 시험 사례입니다. 네트워크에 터널을 추가할 때 첫 질문은 어떤 목적지가 애초에 들어가지 말았어야 하는가이고, 두 번째는 그중 무엇을 정책이 조용히 받아들였는가입니다.