2 điểm bởi GN⁺ 2026-03-21 | 3 bình luận | Chia sẻ qua WhatsApp
  • Trên macOS 26.3.1, cấu hình DNS theo từng miền dựa trên /etc/resolver/ bị vô hiệu hóa đối với các TLD không chuẩn, khiến các môi trường phát triển cục bộ hiện có bị gián đoạn
  • mDNSResponder chỉ xử lý các yêu cầu tới TLD tùy chỉnh bằng mDNS và hoàn toàn không tham chiếu tới nameserver unicast đã chỉ định
  • Các TLD như .internal, .test, .home.arpa, .lantoàn bộ TLD không có trong root zone của IANA đều thất bại, trong khi các miền chuẩn (google.com v.v.) vẫn hoạt động bình thường
  • Cách khắc phục tạm thời duy nhất là khai báo thủ công trong /etc/hosts, nhưng điều này không thực tế trong các môi trường động (Docker, Kubernetes, v.v.)
  • Toàn bộ quy trình làm việc DNS cục bộ vốn được cộng đồng lập trình viên macOS sử dụng từ lâu đã bị gián đoạn, gây ảnh hưởng trên diện rộng tới công cụ phát triển và các tính năng tích hợp VPN

Lỗi hồi quy DNS xảy ra trên macOS 26

  • Trên macOS 26.3.1 (Darwin 25.3.0, Build 25D771280a), chức năng cấu hình DNS theo từng miền thông qua /etc/resolver/ đã bị hỏng

    • Tính năng này vẫn hoạt động bình thường đến macOS 25.x nhưng đã ngừng hoạt động sau khi nâng cấp lên phiên bản 26
    • Dù đây là tính năng được nêu rõ trong tài liệu chính thức của Apple (man 5 resolver), nó không còn hoạt động với các TLD không chuẩn
  • mDNSResponder chặn tất cả các yêu cầu tới TLD tùy chỉnh bằng mDNS, bỏ qua nameserver unicast đã chỉ định

    • Mọi ứng dụng dùng getaddrinfo() (ping, curl, python3 socket) đều báo lỗi “Unknown host”
    • Kết quả tcpdump cho thấy hoàn toàn không có lưu lượng nào tới DNS cục bộ (127.0.0.1:53)
    • Trong lệnh dns-sd -G v4, phản hồi “No Such Record” cùng TTL dài bất thường (khoảng 108.002 giây) được hiển thị

Kiểm thử và quy trình tái hiện

  • Thiết lập dnsmasq cài qua Homebrew làm bộ phân giải DNS cục bộ, rồi ánh xạ các miền *.internal hoặc *.example-private tới 127.0.0.1

    • Chỉ định nameserver 127.0.0.1 trong tệp /etc/resolver/example-private
    • Lệnh scutil --dns cho thấy bộ phân giải này đã được đăng ký bình thường
    • Tuy nhiên, khi chạy ping probe.example-private thì xuất hiện lỗi “Unknown host”
  • dig @127.0.0.1 và lệnh host trả về phản hồi bình thường, nhưng mọi ứng dụng sử dụng system resolver đều thất bại

    • Điều này là do mDNSResponder chặn truy vấn ở bên trong và không gọi tới unicast DNS

Danh sách TLD bị ảnh hưởng

TLD Trạng thái Ghi chú
.internal Thất bại TLD dùng cho mục đích đặc biệt trong bản nháp IETF, hoạt động bình thường trên macOS 25
.test Thất bại Được dành riêng cho kiểm thử cục bộ theo RFC 6761 §6.2
.home.arpa Thất bại Được dành riêng cho mạng gia đình theo RFC 8375
.lan Thất bại Không chính thức nhưng được sử dụng rộng rãi
Các TLD chưa đăng ký khác Thất bại Mọi TLD không có trong root zone của IANA
  • Với .test, dù theo RFC 6761 nó phải được phân giải qua DNS thông thường, macOS 26 lại xử lý nó như miền chỉ dành cho mDNS
  • Trong khi đó, các miền đã đăng ký với IANA như google.com, bbc.co.uk vẫn hoạt động bình thường như trước

Ảnh hưởng tới môi trường và công cụ phát triển

  • Toàn bộ quy trình làm việc DNS cho phát triển cục bộ bị gián đoạn

    • Các lập trình viên dùng tổ hợp dnsmasq + /etc/resolver/ với *.test, *.internal, v.v.
    • Tính năng phân giải tên container của Docker Desktop và các công cụ tương tự
    • Vagrant, Tailscale, VPN client tự động tạo tệp /etc/resolver/
    • Các công cụ phát triển Kubernetes cục bộ (minikube, kind, k3d, v.v.) dùng để phân giải *.cluster.local
  • Vì hệ thống vẫn hiển thị cấu hình resolver là bình thường trong scutil --dns, người dùng rất khó nhận ra vấn đề và cũng không có log hay thông báo lỗi

Cách khắc phục tạm thời và giới hạn

  • Cách duy nhất đang hoạt động là thêm ánh xạ miền thủ công vào /etc/hosts
    • Cách này bỏ qua hoàn toàn mDNSResponder
    • Tuy nhiên, nó không thực tế trong Docker hoặc các môi trường DNS động, và mỗi lần thay đổi đều cần quyền sudo

Thông số kỹ thuật và môi trường xác minh

  • macOS 26.3.1 (Build 25D771280a), Apple Silicon (arm64)
  • dnsmasq được cài qua Homebrew và lắng nghe trên 127.0.0.1:53
  • Lệnh dighost phản hồi bình thường, còn ping·curl·python3 socket.getaddrinfo thì thất bại
  • Tài liệu và tiêu chuẩn liên quan:
    • man 5 resolver — tài liệu về cơ chế /etc/resolver/ của macOS
    • RFC 6761 — định nghĩa các miền dùng cho mục đích đặc biệt như .test, .localhost, .invalid, .example
    • RFC 8375 — định nghĩa miền home.arpa
    • IETF draft-ietf-dnsop-interneti-mdn — bản nháp về miền dùng cho mục đích đặc biệt .internal

3 bình luận

 
lidar 2026-03-22

Vì việc này mà tôi đã không thể dùng Tailscale MagicDNS suốt mấy ngày nay..

 
minhoryang 2026-03-21

Hy vọng tailscale sẽ giúp né được vấn đề này.

 
GN⁺ 2026-03-21
Ý kiến trên Hacker News
  • Tôi đã rời bỏ macOS vì những phiền toái nhỏ nhặt (papercuts) như thế này
    Việc dùng LLM để viết báo cáo lỗi thì không sao nếu có khâu rà soát, nhưng nếu những lỗi hiển nhiên như “trên macOS 25 thì vẫn hoạt động” bị giữ nguyên thì độ tin cậy sẽ giảm đi
    Nếu kiểu báo cáo này ngày càng nhiều, mọi người có lẽ sẽ просто vứt luôn các báo cáo do AI viết vì gánh nặng kiểm chứng

    • Tôi nghĩ việc không nói rõ đó là nội dung do AI tạo ra là điều tuyệt đối không thể chấp nhận
      Để AI viết bài dưới tên mình là một hành vi bất lịch sự, tạo cảm giác như “thời gian của tôi quý hơn thời gian của bạn”
      Nếu bạn ở trong tình huống khó mà công khai việc dùng AI, thì bản thân điều đó đã cho thấy cần phải suy nghĩ lại về mục đích sử dụng
    • OS nào cũng có những phiền toái nhỏ kiểu này
      Ở Linux hay Windows cũng có thể kể ra những trường hợp đau đầu y hệt. Cuối cùng vẫn là chuyện “chọn loại độc nào để uống”
    • Đây là truyền thống của Apple đã kéo dài hàng chục năm
      Microsoft nổi tiếng vì duy trì khả năng tương thích ngược, còn Apple thì nổi tiếng vì mạnh tay phá vỡ các tính năng cũ
      Dạo này Microsoft cũng không còn bảo thủ như trước, còn Apple thì lại có cảm giác ổn định hơn ngày xưa
    • Dù sao thì Apple từ lâu đã nổi tiếng là công ty không đọc kỹ báo cáo, nên kể cả có bỏ các báo cáo do LLM tạo ra thì chắc cũng chẳng khác gì
    • Tôi đã gặp những phiền toái nhỏ kiểu này trên mọi OS, nhưng trên Linux thì rollback dễ hơn
      Với NixOS chẳng hạn, chỉ cần chọn phiên bản trước trong menu khởi động là toàn bộ hệ thống quay lại trạng thái cũ
      Trên laptop tôi dùng macOS, nhưng phần lớn công việc thực tế đều làm trong container Linux
  • macOS 26 là phiên bản phá vỡ tương thích nhiều nhất từ trước đến nay
    Nhiều thay đổi có chủ đích đã khiến việc phát triển ứng dụng trở nên rất khó khăn
    Ví dụ, ứng dụng Lunar không còn có thể đặt tùy ý giá trị nit SDR nên bị chặn điều khiển độ sáng,
    còn ứng dụng YellowDot thì không thể chỉnh độ sáng đèn báo microphone nên thành ra không dùng được
    Ngoài ra còn có nhiều lỗi khác như vấn đề sự kiện chuột với cửa sổ không có tiêu đề, không thể áp dụng bảng gamma,
    hay việc các ứng dụng như Clop làm mất đường dẫn tệp gốc khi kéo thả

    • Có tin đồn iOS 27 sẽ là bản ổn định hóa kiểu Snow Leopard
      Mong macOS 27 cũng sẽ như vậy (nguồn)
    • Với tư cách là người làm nhạc như một sở thích, đèn báo microphone thực sự vừa thừa vừa khó chịu
      Triết lý của macOS quá cứng nhắc và áp đặt một chiều, khiến tôi rất bức bối
    • Tôi nghĩ vấn đề của YellowDot có thể lách bằng cách dùng LUT để ánh xạ màu chấm ghi hình sang màu đen
      Tôi không trực tiếp dùng macOS, nhưng về lý thuyết có vẻ làm được
    • Hóa ra đây là lý do trên M1 vẫn lên được 1600 nit còn M5 thì không vượt quá 600 nit
      Có lẽ tạm thời đành bó tay vậy
    • Việc giới hạn độ sáng của chấm microphone là để bảo vệ quyền riêng tư
      Đây là biện pháp để phần mềm độc hại không thể che giấu việc truy cập camera và microphone
      Ngoài ra, giới hạn độ sáng SDR cũng có thể nhằm ngăn trước vấn đề pin trên màn hình OLED sắp ra mắt
  • Tôi vẫn đang chờ ngày Apple tách riêng phần cứng và phần mềm
    Tôi muốn Apple Silicon, nhưng không thích OS của họ
    Nếu tôi không thể tự chạy kernel và module của mình thì đó không phải thiết bị của tôi
    Chiếc laptop bên cạnh đang boot bằng coreboot, điều đó thể hiện triết lý của tôi

    • Trên Mac chẳng phải vẫn có thể tự chạy kernel sao? Vấn đề là hỗ trợ driver chứ?
    • macOS không hoàn hảo, nhưng gọi cả hệ thống là “kinh khủng” thì tôi nghĩ là đánh giá quá lời
    • Tôi cũng không ghét macOS. Chỉ là khẳng định nó “kinh khủng” thì nghe không thuyết phục lắm
  • Khi phát triển web cục bộ, tôi dùng *.localhost
    Mọi trình duyệt hiện đại đều tự động phân giải nó thành 127.0.0.1, nên không cần cấu hình DNS hay sửa hosts
    Tuy nhiên điều này không áp dụng cho các chương trình ngoài trình duyệt như python, wget, v.v.

    • *.*.localhost cũng được hỗ trợ, nên giờ có thể sao chép nguyên cấu trúc domain production sang local
      ArchiveBox dùng tính năng này để triển khai cách ly domain theo từng snapshot, nhờ đó giảm rủi ro bảo mật
    • Trên Tahoe thì python hay wget cũng hoạt động tốt
    • Tôi đã thử trên Chrome, chắc trên Safari cũng hoạt động tương tự
    • Tôi cũng dùng cách này. Chỉ tiếc là .localhost hơi dài
      Trước đây tôi dùng .local, nhưng bị xung đột nhiều
    • Chúng tôi dùng dev.our-root-domain.cománh xạ nó về 127.0.0.1 trong DNS công khai
  • Trên một máy Yosemite cũ, tôi đã dùng cấu hình cung cấp nhiều TLD cục bộ từ lâu
    Cách dùng /etc/resolver thực ra đã bị đánh dấu sắp bị loại bỏ từ khoảng năm 2014, và lần này có vẻ đã bị gỡ hẳn
    Thay vào đó, cách chuẩn là dùng trực tiếp scutil để lưu cấu hình

    • Nhưng chỉ scutil thôi vẫn chưa đủ
      Một số truy vấn của macOS vẫn đi qua mDNSResponder và bỏ qua hoặc ghi đè cấu hình này
      Vì vậy cuối cùng dùng unbound hoặc dnsmasq lại đơn giản hơn
  • Tôi cũng đang dùng kết hợp /etc/resolver/X và dnsmasq cho nhiều TLD mà không gặp vấn đề gì
    Trong tệp cấu hình tôi luôn thêm chỉ thị domain
    Thực tế thì gần như lúc nào cấu hình này cũng cần
    Có lẽ thêm mục domain là có thể giải quyết vấn đề

  • Tôi chủ yếu dùng Linux, nhưng không hiểu vì sao mọi người lại nói thiết kế của macOS tệ
    Xét riêng về UX thì macOS cho cảm giác khá trau chuốt
    Phần lớn các theme Gnome được ưa chuộng cũng đều mô phỏng phong cách của macOS

    • Trên mạng có thiên kiến khiến chỉ những người bất mãn nhất mới dễ được chú ý
      Đặc biệt là trên HN thì tôi càng thấy như vậy
    • Bản Tahoe nhìn chung cũng ổn
      Việc chỉnh góc cửa sổ hơi bất tiện, nhưng tổng thể thì tôi hài lòng
      Suy cho cùng OS nào cũng có bug
    • Vì văn hóa feature creep của Apple mà UX thường bị thay đổi một cách không cần thiết
      Ví dụ điển hình là hộp thoại thông báo
    • Tôi cũng nghĩ cảm quan thẩm mỹ của macOS là tốt
      Chỉ là hơi tiếc vì thiếu khả năng tùy biến
      Việc nhớ nhung UI cũ kiểu Windows 98 có khi chỉ là khác biệt thế hệ
    • Tổng thể thì tôi thích UX của nó
      Cách chuyển sang toàn màn hình có hơi đặc biệt nhưng quen rồi thì tiện
      Chỉ là thiếu window tiling thì bất tiện
      Dù vậy tôi vẫn thích Linux hơn. Suspend hay quản lý điện năng thì 8 năm nay vẫn còn là vấn đề
  • Trước đây Apple từng chặn chứng chỉ tự ký trên iOS, khiến việc phát triển HTTPS cục bộ gần như không thể làm được
    Thật khó hiểu tại sao họ lại động vào những chỗ như thế

  • Tôi thích macOS
    Nó đi kèm sẵn zsh, và hầu như mọi thứ tôi làm trên Linux cũng đều có thể làm trên máy tính cá nhân của mình

  • *.localhost mặc định là hoạt động
    Ngay cả không cần dnsmasq thì vẫn có thể nối nhiều hostname về 127.0.0.1

    • Nhưng khi cần ánh xạ IP private nội bộ sang địa chỉ khác thì cách này là không đủ
    • Các domain như *.example-private là cần thiết để phân biệt nhiều thiết bị bằng IP private
      Nếu chỉ muốn dùng localhost thì cứ dùng thẳng 127.0.0.1 là được
      Cá nhân tôi thì dùng mDNS *.local để tận dụng cấu hình tự động dựa trên DHCP