Trên macOS 26, các cấu hình DNS tùy chỉnh như .internal không còn hoạt động
(gist.github.com/adamamyl)- 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 mDNSResponderchỉ 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,.lanvà toà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.comv.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
-
mDNSResponderchặ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ả
tcpdumpcho 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ị
- Mọi ứng dụng dùng
Kiểm thử và quy trình tái hiện
-
Thiết lập
dnsmasqcài qua Homebrew làm bộ phân giải DNS cục bộ, rồi ánh xạ các miền*.internalhoặc*.example-privatetới 127.0.0.1- Chỉ định
nameserver 127.0.0.1trong tệp/etc/resolver/example-private - Lệnh
scutil --dnscho 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-privatethì xuất hiện lỗi “Unknown host”
- Chỉ định
-
dig @127.0.0.1và lệnhhosttrả 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
mDNSResponderchặn truy vấn ở bên trong và không gọi tới unicast DNS
- Điều này là do
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.ukvẫ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
- Các lập trình viên dùng tổ hợp
-
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
- Cách này bỏ qua hoàn toàn
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
digvàhostphản hồi bình thường, cònping·curl·python3 socket.getaddrinfothì 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
Vì việc này mà tôi đã không thể dùng Tailscale MagicDNS suốt mấy ngày nay..
Hy vọng tailscale sẽ giúp né được vấn đề này.
Ý 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
Để 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
Ở 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”
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
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ả
Mong macOS 27 cũng sẽ như vậy (nguồn)
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 không trực tiếp dùng macOS, nhưng về lý thuyết có vẻ làm được
Có lẽ tạm thời đành bó tay vậy
Đâ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
Khi phát triển web cục bộ, tôi dùng
*.localhostMọ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.
*.*.localhostcũng được hỗ trợ, nên giờ có thể sao chép nguyên cấu trúc domain production sang localArchiveBox 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
.localhosthơi dàiTrước đây tôi dùng
.local, nhưng bị xung đột nhiềudev.our-root-domain.comvà ánh xạ nó về 127.0.0.1 trong DNS công khaiTrê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/resolverthự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ẳnThay vào đó, cách chuẩn là dùng trực tiếp
scutilđể lưu cấu hìnhscutilthô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/Xvà 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ị
domainThự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
domainlà 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
Đặc biệt là trên HN thì tôi càng thấy như vậy
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í dụ điển hình là hộp thoại thông báo
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ệ
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
*.localhostmặc định là hoạt độngNgay cả không cần dnsmasq thì vẫn có thể nối nhiều hostname về 127.0.0.1
*.example-privatelà cần thiết để phân biệt nhiều thiết bị bằng IP privateNế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