# macOS 26에서 .internal 등 커스텀 DNS 설정이 작동하지 않음

> Clean Markdown view of GeekNews topic #27683. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=27683](https://news.hada.io/topic?id=27683)
- GeekNews Markdown: [https://news.hada.io/topic/27683.md](https://news.hada.io/topic/27683.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2026-03-21T02:33:58+09:00
- Updated: 2026-03-21T02:33:58+09:00
- Original source: [gist.github.com/adamamyl](https://gist.github.com/adamamyl/81b78eced40feae50eae7c4f3bec1f5a)
- Points: 2
- Comments: 3

## Topic Body

- macOS 26.3.1에서 **`/etc/resolver/` 기반 도메인별 DNS 설정이 비표준 TLD에 대해 무효화됨**, 기존 로컬 개발 환경이 중단되는 문제 발생  
- **`mDNSResponder`가 커스텀 TLD 요청을 mDNS로만 처리**하며, 지정된 유니캐스트 네임서버를 전혀 참조하지 않음  
- `.internal`, `.test`, `.home.arpa`, `.lan` 등 **IANA 루트존에 없는 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.1`** 및 **`host` 명령**은 정상 응답을 반환하지만, 시스템 리졸버를 사용하는 앱은 모두 실패  
  - 이는 `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.uk` 등 **IANA 등록 도메인**은 기존대로 정상 동작  

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

- **로컬 개발용 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에서 수신  
- `dig` 및 `host` 명령은 정상 응답, `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` 특수용 도메인 초안

## Comments



### Comment 53523

- Author: lidar
- Created: 2026-03-22T02:51:37+09:00
- Points: 1

이것 때문에 테일스케일 MagicDNS를 며칠동안 못쓰고 있습니다..

### Comment 53491

- Author: minhoryang
- Created: 2026-03-21T11:16:50+09:00
- Points: 1

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

### Comment 53470

- Author: neo
- Created: 2026-03-21T02:33:58+09:00
- Points: 1

###### [Hacker News 의견들](https://news.ycombinator.com/item?id=47440759) 
- 이런 **사소한 문제들(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](https://lunar.fyi/#xdr) 앱은 SDR 니트 수치를 임의로 설정할 수 없게 되어 밝기 제어가 막혔고,  
  [YellowDot](https://github.com/FuzzyIdeas/YellowDot/issues/18) 앱은 마이크 표시등 밝기 조절이 막혀 쓸 수 없게 됨  
  또, 타이틀 없는 창의 마우스 이벤트 문제, 감마 테이블 적용 불가,  
  [Clop](https://lowtechguys.com/clop) 같은 앱에서 드래그 시 원본 파일 경로를 잃는 문제 등 **여러 버그**가 있음
  - iOS 27이 **Snow Leopard 스타일의 안정화 버전**이 될 거란 루머가 있음  
    macOS 27도 그렇게 되길 바람 ([출처](https://www.macrumors.com/2026/03/15/ios-27-will-reportedly-be-like-mac-os-x-snow-leopard/))
  - 음악 제작을 취미로 하는 입장에서 **마이크 표시등**은 정말 불필요하고 거슬림  
    macOS의 철학이 너무 **고집스럽고 일방적**이라 답답함
  - [YellowDot](https://github.com/FuzzyIdeas/YellowDot/issues/18) 문제는 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 기반 자동 설정을 활용함
