2P by GN⁺ 17시간전 | ★ favorite | 댓글 2개
  • macOS 26.3.1에서 /etc/resolver/ 기반 도메인별 DNS 설정이 비표준 TLD에 대해 무효화됨, 기존 로컬 개발 환경이 중단되는 문제 발생
  • mDNSResponder가 커스텀 TLD 요청을 mDNS로만 처리하며, 지정된 유니캐스트 네임서버를 전혀 참조하지 않음
  • .internal, .test, .home.arpa, .lanIANA 루트존에 없는 TLD 전반이 실패하며, 표준 도메인(google.com 등)은 정상 작동
  • 유일한 임시 해결책은 /etc/hosts에 수동 등록하는 방식이지만, 동적 환경(Docker, Kubernetes 등) 에서는 비현실적임
  • macOS 개발자 커뮤니티에서 오랫동안 사용해온 로컬 DNS 워크플로 전체가 중단되어, 개발 도구 및 VPN 통합 기능에 광범위한 영향 발생

macOS 26에서 발생한 DNS 회귀 문제

  • macOS 26.3.1(Darwin 25.3.0, Build 25D771280a)에서 /etc/resolver/를 통한 도메인별 DNS 설정 기능이 손상됨

    • macOS 25.x까지 정상 작동하던 기능이 26 버전 업데이트 후 중단됨
    • Apple의 공식 문서(man 5 resolver)에 명시된 기능임에도 불구하고, 비표준 TLD에서 더 이상 동작하지 않음
  • mDNSResponder가 모든 커스텀 TLD 요청을 mDNS로 가로채며, 지정된 유니캐스트 네임서버를 무시함

    • getaddrinfo()를 사용하는 모든 애플리케이션(ping, curl, python3 socket)에서 “Unknown host” 오류 발생
    • tcpdump 결과, 로컬 DNS(127.0.0.1:53)로의 트래픽이 전혀 발생하지 않음
    • dns-sd -G v4 명령에서는 “No Such Record” 응답과 비정상적으로 긴 TTL(약 108,002초)이 표시됨

테스트 및 재현 절차

  • Homebrew로 설치한 dnsmasq를 로컬 DNS 리졸버로 설정하고, *.internal 또는 *.example-private 도메인을 127.0.0.1로 매핑

    • /etc/resolver/example-private 파일에 nameserver 127.0.0.1 지정
    • scutil --dns 명령에서는 해당 리졸버가 정상 등록된 것으로 표시됨
    • 그러나 ping probe.example-private 실행 시 “Unknown host” 오류 발생
  • dig @127.0.0.1host 명령은 정상 응답을 반환하지만, 시스템 리졸버를 사용하는 앱은 모두 실패

    • 이는 mDNSResponder가 내부적으로 쿼리를 차단하고, 유니캐스트 DNS를 호출하지 않기 때문임

영향을 받는 TLD 목록

TLD 상태 비고
.internal 실패 IETF 초안의 특수용 TLD, macOS 25에서는 정상
.test 실패 RFC 6761 §6.2에 따라 로컬 테스트용으로 예약됨
.home.arpa 실패 RFC 8375에 따라 가정용 네트워크용으로 예약됨
.lan 실패 비공식적이지만 널리 사용됨
기타 비등록 TLD 실패 IANA 루트존에 없는 모든 TLD
  • .test의 경우 RFC 6761에 명시된 대로 정상 DNS를 통해 해석되어야 함에도 불구하고, macOS 26은 이를 mDNS 전용으로 처리함
  • 반면, google.com, bbc.co.ukIANA 등록 도메인은 기존대로 정상 동작

개발 환경 및 도구에 미치는 영향

  • 로컬 개발용 DNS 워크플로 전체가 중단

    • dnsmasq + /etc/resolver/ 조합으로 *.test, *.internal 등을 사용하는 개발자
    • Docker Desktop 및 유사 도구의 컨테이너 이름 해석 기능
    • /etc/resolver/ 파일을 자동 생성하는 Vagrant, Tailscale, VPN 클라이언트
    • Kubernetes 로컬 개발 도구(minikube, kind, k3d 등)의 *.cluster.local 해석
  • 시스템은 scutil --dns에서 리졸버 구성이 정상으로 표시되므로, 사용자는 문제를 인지하기 어렵고 로그나 오류 메시지도 없음

임시 해결책 및 한계

  • 유일하게 동작하는 방법은 /etc/hosts에 수동으로 도메인 매핑을 추가하는 것
    • 이 방식은 mDNSResponder를 완전히 우회함
    • 그러나 Docker나 동적 DNS 환경에서는 비현실적이며, 변경 시마다 sudo 권한이 필요함

기술 사양 및 검증 환경

  • macOS 26.3.1 (Build 25D771280a), Apple Silicon(arm64)
  • dnsmasq는 Homebrew를 통해 설치되어 127.0.0.1:53에서 수신
  • dighost 명령은 정상 응답, ping·curl·python3 socket.getaddrinfo는 실패
  • 관련 문서 및 표준:
    • man 5 resolver — macOS의 /etc/resolver/ 메커니즘 문서
    • RFC 6761 — .test, .localhost, .invalid, .example 등 특수용 도메인 정의
    • RFC 8375 — home.arpa 도메인 정의
    • IETF draft-ietf-dnsop-interneti-mdn — .internal 특수용 도메인 초안

tailscale이 이 문제를 회피해주기를 기대하겠습니다.

Hacker News 의견들
  • 이런 사소한 문제들(papercuts) 때문에 macOS를 떠났음
    LLM으로 버그 리포트를 작성하는 건 검토가 전제된다면 괜찮지만, “macOS 25에서 작동했다” 같은 명백한 오류가 그대로 들어가면 신뢰가 떨어짐
    이런 리포트가 늘어나면, 검증 부담 때문에 사람들이 AI가 쓴 리포트를 그냥 버리게 될 것 같음

    • AI가 만든 콘텐츠임을 명시하지 않는 사용은 절대 용납할 수 없다고 생각함
      AI가 내 이름으로 글을 쓰게 하는 건 “내 시간은 네 시간보다 소중하다”는 인상을 주는 무례한 행위
      만약 공개적으로 AI 사용을 밝히면 곤란한 상황이라면, 그 자체로 그 사용 목적을 다시 생각해봐야 함
    • 모든 OS에는 이런 사소한 문제들이 있음
      Linux나 Windows에서도 똑같이 고통스러운 사례를 쓸 수 있음. 결국 “어떤 독을 고를지” 의 문제임
    • 이런 문제는 수십 년째 이어져 온 Apple의 전통임
      Microsoft는 하위 호환성 유지, Apple은 기존 기능을 과감히 깨는 것으로 유명했음
      요즘은 Microsoft도 예전만큼 보수적이지 않고, Apple은 오히려 예전보다 안정적으로 변한 느낌임
    • 어차피 Apple은 예전부터 리포트를 잘 안 읽는 회사로 유명하니, LLM 리포트를 버린다고 해도 달라질 건 없을 듯함
    • 나는 모든 OS에서 이런 사소한 문제를 겪었지만, Linux에서는 롤백이 쉬움
      NixOS처럼 부팅 메뉴에서 이전 버전을 선택하면 시스템 전체가 되돌아감
      노트북에서는 macOS를 쓰지만, 실제 작업은 대부분 Linux 컨테이너 안에서 함
  • macOS 26은 지금까지 중 가장 호환성이 깨지는 버전
    여러 의도적 변경으로 앱 개발이 매우 힘들어졌음
    예를 들어 Lunar 앱은 SDR 니트 수치를 임의로 설정할 수 없게 되어 밝기 제어가 막혔고,
    YellowDot 앱은 마이크 표시등 밝기 조절이 막혀 쓸 수 없게 됨
    또, 타이틀 없는 창의 마우스 이벤트 문제, 감마 테이블 적용 불가,
    Clop 같은 앱에서 드래그 시 원본 파일 경로를 잃는 문제 등 여러 버그가 있음

    • iOS 27이 Snow Leopard 스타일의 안정화 버전이 될 거란 루머가 있음
      macOS 27도 그렇게 되길 바람 (출처)
    • 음악 제작을 취미로 하는 입장에서 마이크 표시등은 정말 불필요하고 거슬림
      macOS의 철학이 너무 고집스럽고 일방적이라 답답함
    • YellowDot 문제는 LUT을 이용해 녹화 점 색상을 검은색으로 매핑하는 식으로 우회할 수도 있지 않을까 생각함
      macOS를 직접 쓰진 않지만 이론상 가능해 보임
    • M1에서는 1600니트까지 잘 됐는데 M5에서는 600니트 이상 안 되는 이유가 이거였군요
      당분간은 그냥 포기해야 할 듯함
    • 마이크 점 밝기 제한은 프라이버시 보호 목적
      악성코드가 카메라·마이크 접근을 숨기지 못하게 하려는 조치임
      또, SDR 밝기 제한은 곧 나올 OLED 디스플레이의 배터리 이슈를 미리 방지하려는 의도일 수도 있음
  • Apple이 하드웨어와 소프트웨어로 분리되는 날을 여전히 기다리고 있음
    Apple Silicon은 원하지만, 그들의 OS는 싫음
    내 커널과 모듈을 직접 실행할 수 없다면 그건 내 장비가 아님
    옆의 노트북은 coreboot로 부팅되는데, 그게 내 철학을 보여줌

    • Mac에서도 커널을 직접 돌릴 수 있지 않음? 문제는 드라이버 지원 아닌가?
    • macOS가 완벽하진 않지만, 전체를 “끔찍하다”고 부르는 건 과장된 평가라고 생각함
    • 나도 macOS가 싫진 않음. 다만 “끔찍하다”고 단정하는 건 설득력이 떨어짐
  • 나는 로컬 웹 개발 시 *.localhost를 사용함
    모든 현대 브라우저가 이를 자동으로 127.0.0.1로 해석하므로 DNS 설정이나 hosts 수정이 필요 없음
    다만 브라우저 외의 프로그램(python, wget 등)에는 적용되지 않음

    • *.*.localhost도 지원돼서, 이제 프로덕션 도메인 구조를 그대로 로컬에 복제할 수 있음
      ArchiveBox는 이 기능으로 스냅샷별 도메인 격리를 구현해 보안 위험을 줄였음
    • Tahoe에서는 python이나 wget에서도 잘 작동함
    • Chrome에서 테스트했는데 Safari에서도 동일하게 동작할 듯함
    • 나도 이 방식을 쓰고 있음. 다만 .localhost가 좀 길어서 아쉬움
      예전엔 .local을 썼는데 충돌이 많았음
    • 우리는 dev.our-root-domain.com공용 DNS에서 127.0.0.1로 매핑해 사용함
  • 오래된 Yosemite 머신에서 여러 로컬 TLD를 제공하는 설정을 써왔음
    /etc/resolver 방식은 이미 2014년쯤부터 폐기 예정이었는데, 이번에 완전히 제거된 듯함
    대신 scutil을 직접 써서 설정을 저장하는 게 정석임

    • 하지만 scutil만으로는 부족함
      일부 macOS 조회는 여전히 mDNSResponder를 통해 이 설정을 무시하거나 덮어씀
      그래서 결국 unbound나 dnsmasq를 쓰는 게 더 단순함
  • 나도 /etc/resolver/X와 dnsmasq 조합으로 여러 TLD를 쓰고 있는데 문제 없음
    설정 파일엔 항상 domain 지시어를 포함시킴
    실제로는 거의 항상 이 설정이 필요했음
    아마 domain 항목을 추가하면 문제 해결될 수도 있음

  • 나는 주로 Linux를 쓰지만, 사람들이 왜 macOS의 디자인이 나쁘다고 하는지 잘 모르겠음
    UX만 보면 macOS는 꽤 정제된 느낌이었음
    Gnome 테마 중 인기 있는 것들도 대부분 macOS 스타일을 모방함

    • 온라인에서는 불만이 큰 사람들만 눈에 띄는 편향이 있음
      특히 HN에서는 더 그렇다고 생각함
    • Tahoe 버전도 대부분 괜찮았음
      창 모서리 조절이 불편하긴 하지만, 전체적으로는 만족스러움
      결국 모든 OS엔 버그가 있음
    • Apple의 기능 추가 문화(feature creep) 때문에 UX가 매번 불필요하게 바뀌는 경우가 많음
      예를 들어 알림 대화상자가 대표적임
    • 나도 macOS의 미적 감각은 좋다고 생각함
      다만 커스터마이징 부족이 아쉬움
      Windows 98 같은 옛 UI를 그리워하는 건 세대 차이일지도 모름
    • 전체적으로 UX는 마음에 듦
      전체화면 전환 방식은 독특하지만 익숙해지면 편함
      다만 윈도우 타일링 부재는 불편함
      그래도 여전히 Linux를 선호함. suspend나 전원 관리가 8년째 문제이긴 하지만
  • 예전에 Apple이 iOS에서 자체 서명 인증서를 막아버려 로컬 HTTPS 개발이 거의 불가능해졌던 적이 있음
    왜 이런 부분을 건드렸는지 이해하기 어려움

  • 나는 macOS를 좋아함
    기본으로 zsh이 탑재되어 있고, Linux에서 하던 거의 모든 일을 개인용 컴퓨터에서도 할 수 있음

  • *.localhost는 기본적으로 작동함
    dnsmasq 없이도 여러 호스트명을 127.0.0.1로 연결할 수 있음

    • 하지만 내부 사설 IP를 다른 주소로 매핑해야 할 때는 이 방식이 부족함
    • *.example-private 같은 도메인은 여러 기기를 사설 IP로 구분하기 위해 필요함
      단순히 로컬호스트만 쓰려면 그냥 127.0.0.1을 쓰면 됨
      개인적으로는 mDNS의 *.local을 써서 DHCP 기반 자동 설정을 활용함