프린터 앱이 빈 목록을 보여 주고, 카메라 앱은 기기를 찾지 못했다고 알리며, 동영상 앱의 캐스트 버튼은 포기할 때까지 돌아갑니다. VPN 아이콘은 상태 막대에 있고, 휴대폰은 신호가 가득하며, Safari는 페이지를 문제없이 불러오니 연결에 뭔가 고장 난 것처럼 보이지 않습니다. 그런 다음 앱 자체의 설정을 열어 보면 전환할 항목이 없습니다.

집 네트워크의 라벨 프린터로 저는 정확히 이 벽에 부딪혔습니다: 앱에는 로컬 네트워크 접근 권한이 한 번도 주어지지 않았고, 제가 시험하던 프로필은 192.168.1.0/24로 향하는 모든 패킷을 삼키는 전체 터널이었습니다. 독립된 두 개의 문이 닫혀 있었고, 하나를 열어도 증상은 사라지지 않았습니다.

하나의 앱과 하나의 프린터 사이에 있는 두 개의 문

첫 번째 문은 앱이 아니라 운영체제에 속한 개인정보 보호 결정입니다. iOS는 앱이 로컬 네트워크의 주소로 트래픽을 보낼 수 있는지 정하고, 앱이 처음 시도할 때 사용자에게 묻습니다. 두 번째 문은 라우팅 테이블입니다. 192.168.1.50으로 향하는 패킷은 Wi-Fi를 통해 프린터로 나가거나 터널로 들어가며, 그 선택은 VPN 프로필에 적혀 있습니다.

두 문은 서로 다른 모양으로 실패하며, 바로 그 점이 진단을 가능하게 합니다. 거부된 권한은 앱 자체의 소켓 호출을 죽이므로 앱은 알릴 것이 없고 일반적인 빈 상태로 떨어집니다. 라우팅 문제는 패킷이 휴대폰을 떠나 반대편 어딘가에서 죽었기 때문에 시간 초과처럼 보입니다. 같은 빈 화면, 다른 수리.

VPN을 건드리기 전에 권한 상태를 읽으세요

설정, 그다음 개인정보 보호 및 보안, 그다음 로컬 네트워크를 엽니다. 접근을 요청한 모든 앱이 스위치와 함께 거기에 나타납니다. Apple은 이 화면의 일부를 iOS 14부터 iOS 18까지 옮기고 이름도 바꿨으므로, 항목이 예상한 곳에 없으면 트리를 뒤지지 말고 설정 검색 필드에 로컬 네트워크를 입력하세요.

사람들을 가장 많이 잡는 것은 한 번만 뜨는 요청입니다. iOS는 앱이 처음 로컬 네트워크를 건드릴 때만 묻습니다. 허용 안 함을 누르면 다음 실행에서 요청이 돌아오지 않고, 스위치가 유일한 되돌아가는 길이며 처음에는 꺼져 있습니다. 앱을 다시 설치하면 결정이 초기화되므로, 일부 문제 해결 글에서 재설치가 검색을 고쳤다고 주장합니다. 거부를 지웠기 때문에 실제로 고친 것입니다.

감독되거나 관리되는 iPhone에서는 스위치가 회색으로 표시될 때가 있습니다. MDM이 보내는 개인정보 보호 설정 페이로드는 로컬 네트워크 접근을 미리 정하거나 잠글 수 있고, 잠긴 꺼진 스위치는 수리가 기기 변경이 아니라 정책 변경이라는 뜻입니다. Apple은 이 요청과 앱별 스위치를 여기에 문서화합니다: support.apple.com/en-us/102229.

터널이 실제로 무엇을 라우팅하는지 확인하세요

전체 터널은 0.0.0.0/0을 가져가고 그와 함께 모든 사설 범위를 가져갑니다. 10.x, 172.16.0.0/12, 192.168.x.x로 향하는 패킷은 서버로 가고, 서버는 보통 그것을 버리거나 자기 서브넷으로 변환하므로 권한을 준 뒤에도 프린터에 닿지 않습니다. 분할 터널은 반대로 하지만, 프로필이 나열한 범위에만 해당합니다.

Apple Configurator로 만들거나 .mobileconfig로 배포하는 IKEv2 프로필은 이를 모든 트래픽 보내기 설정과, 분할 시 제외할 로컬 네트워크의 명시적 목록으로 표현합니다. NEPacketTunnelProvider 위에 만든 클라이언트 앱은 같은 결정을 includedRoutes로 표현합니다. 둘 다 상태 막대에서는 보이지 않습니다, 그리고 둘 다 앱이 기대하는 표시를 덮어씁니다.

제가 쓰는 시험은 이렇습니다. VPN이 연결된 상태에서 Safari로 라우터 관리 페이지를 LAN 주소로 엽니다. 공개 사이트는 열리는데 그 페이지가 시간 초과라면 사설 범위가 터널 안에 있습니다. 페이지가 열리면 로컬 트래픽은 아직 Wi-Fi로 나가고 있고 차단은 다른 곳에 있습니다.

증상을 문에 대응시키세요

같은 휴대폰의 두 앱이 서로 다를 수 있는 것은 권한은 앱마다, 경로는 프로필마다 주어지기 때문입니다. 무엇이 실패하는지 먼저 비교하세요: 보통 패턴이 문의 이름을 스스로 말합니다.

What you seeGateNext step
Device list stays empty, Local Network switch is offPermissionEnable the switch, force-quit the app, reopen it
Switch is on, router page times out, public sites loadRoutingExclude the local range in the profile, or move to a split tunnel
Both pass, direct IP works, discovery stays emptyLink-local multicastEnter the device address by hand, or check profile discovery support
Works by IP address, never by name such as printer.localName resolutionFix mDNS reachability or use the numeric address
Everything fails with the VPN off, on hotel Wi-FiClient isolationChange network, do not change permissions

mDNS 행은 주석이 필요합니다. Bonjour와 대부분의 캐스트 프로토콜 검색 트래픽은 링크 로컬 범위로 224.0.0.251과 ff02::fb로 멀티캐스트되고, 라우팅된 터널은 그것을 나르지 않습니다. 그래서 기기는 직접 연결에는 응답하면서도 목록에는 결코 나타나지 않습니다.

아이콘이 아니라 동작을 시험하세요

로컬 네트워크 스위치를 바꾼 뒤 앱 전환기에서 앱을 강제 종료하고 다시 엽니다. 실행 중인 프로세스는 변경 전의 거부 상태를 붙잡을 수 있고, 빈 목록을 계속 돌려주는 앱은 권한이 먹혔든 아니든 똑같아 보입니다. 그다음 기기 목록이 채워지기를 기다리지 말고 테스트 페이지 인쇄나 동영상 시작 같은 구체적인 동작을 하나 실행하세요.

비교하는 동안 VPN 프로필을 고정하세요. 연결을 끊은 뒤에야 검색이 되기 시작한다면 원인은 권한이 아니라 터널임을 배운 것입니다. 시도마다 변수 하나만 바꾸세요, 그러지 않으면 다음 실행은 아무것도 알려 주지 않습니다.

이 순서로 고치세요

아래 순서는 제가 지금 따르는 순서입니다: 다음 시험이 읽히지 않는 반쯤 바뀐 상태로 휴대폰을 남기지 않기 때문입니다.

  1. 앱이 개인정보 보호 및 보안, 로컬 네트워크 아래에 있고 스위치가 켜져 있는지 확인합니다.
  2. 강제 종료하고 앱을 다시 연 뒤 실제 동작을 한 번 다시 시도합니다.
  3. 연결된 상태에서 라우터 페이지를 LAN 주소로 열어 사설 범위가 터널을 지나는지 확인합니다.
  4. 터널을 지난다면 프로필을 편집해 로컬 네트워크를 제외하거나 프로필 소유자에게 요청하세요.
  5. 스위치가 회색이면 기기를 관리 대상으로 보고 요청을 관리자에게 넘기세요.

보통은 그중 하나만 해당합니다. 어느 것도 결과를 바꾸지 않으면 남은 용의자는 네트워크 자체입니다, 예를 들어 액세스 포인트 격리나 Wi-Fi 주소에 묶인 클라이언트 허용 목록이며, 위의 대응 표가 어느 것인지 가리킵니다.

관련 글