2 คะแนน โดย GN⁺ 2026-03-21 | 3 ความคิดเห็น | แชร์ทาง WhatsApp
  • ใน macOS 26.3.1 การตั้งค่า DNS รายโดเมนผ่าน /etc/resolver/ ถูกทำให้ใช้ไม่ได้กับ TLD ที่ไม่เป็นมาตรฐาน ส่งผลให้สภาพแวดล้อมการพัฒนาแบบโลคัลเดิมใช้งานต่อไม่ได้
  • mDNSResponder จัดการคำขอของ TLD แบบกำหนดเองทั้งหมดด้วย mDNS เท่านั้น และไม่อ้างอิง nameserver แบบ unicast ที่ระบุไว้เลย
  • TLD ที่ไม่มีอยู่ใน IANA root zone จะล้มเหลวทั้งหมด เช่น .internal, .test, .home.arpa, .lan ขณะที่โดเมนมาตรฐาน (google.com เป็นต้น) ยังทำงานตามปกติ
  • วิธีแก้ชั่วคราวเดียวคือเพิ่มรายการเองใน /etc/hosts แต่ ไม่สมจริงสำหรับสภาพแวดล้อมแบบไดนามิก เช่น Docker หรือ Kubernetes
  • เวิร์กโฟลว์ DNS แบบโลคัลที่ชุมชนนักพัฒนา macOS ใช้มายาวนานหยุดทำงานทั้งหมด ส่งผลกระทบในวงกว้างต่อเครื่องมือพัฒนาและฟังก์ชันการทำงานร่วมกับ VPN

ปัญหา DNS regression ที่เกิดขึ้นใน macOS 26

  • ใน macOS 26.3.1 (Darwin 25.3.0, Build 25D771280a) ฟังก์ชันการตั้งค่า DNS รายโดเมนผ่าน /etc/resolver/ เสียหาย

    • ฟังก์ชันที่ทำงานได้ตามปกติถึง macOS 25.x หยุดทำงานหลังอัปเดตเป็นเวอร์ชัน 26
    • แม้จะเป็นฟังก์ชันที่ระบุไว้ในเอกสารทางการของ Apple (man 5 resolver) แต่ก็ไม่ทำงานกับ TLD ที่ไม่เป็นมาตรฐานอีกต่อไป
  • mDNSResponder ดักจับคำขอของ custom TLD ทั้งหมดเป็น mDNS และเพิกเฉยต่อ unicast nameserver ที่กำหนดไว้

    • แอปทั้งหมดที่ใช้ getaddrinfo() (ping, curl, python3 socket) จะขึ้นข้อผิดพลาด “Unknown host”
    • จากผล tcpdump ไม่พบทราฟฟิกไปยัง local DNS (127.0.0.1:53) เลย
    • ในคำสั่ง dns-sd -G v4 จะเห็นการตอบกลับ “No Such Record” และ TTL ที่ยาวผิดปกติ (ประมาณ 108,002 วินาที)

ขั้นตอนการทดสอบและการทำซ้ำปัญหา

  • ตั้งค่า dnsmasq ที่ติดตั้งผ่าน Homebrew เป็น local DNS resolver และแมปโดเมน *.internal หรือ *.example-private ไปที่ 127.0.0.1

    • ระบุ nameserver 127.0.0.1 ในไฟล์ /etc/resolver/example-private
    • คำสั่ง scutil --dns แสดงว่า resolver ดังกล่าวถูกลงทะเบียนอย่างถูกต้อง
    • แต่เมื่อรัน ping probe.example-private จะพบข้อผิดพลาด “Unknown host”
  • dig @127.0.0.1 และคำสั่ง host ตอบกลับได้ตามปกติ แต่แอปที่ใช้ system resolver ล้มเหลวทั้งหมด

    • สาเหตุคือ mDNSResponder บล็อก query ภายใน และไม่เรียกใช้ unicast DNS เลย

รายการ TLD ที่ได้รับผลกระทบ

TLD สถานะ หมายเหตุ
.internal ล้มเหลว special-use TLD ตามร่าง IETF, ทำงานปกติใน macOS 25
.test ล้มเหลว สงวนไว้สำหรับการทดสอบแบบโลคัลตาม RFC 6761 §6.2
.home.arpa ล้มเหลว สงวนไว้สำหรับเครือข่ายในบ้านตาม RFC 8375
.lan ล้มเหลว ไม่เป็นทางการแต่มีการใช้อย่างแพร่หลาย
TLD ที่ไม่ได้จดทะเบียนอื่น ๆ ล้มเหลว TLD ทั้งหมดที่ไม่มีอยู่ใน IANA root zone
  • สำหรับ .test แม้ตาม RFC 6761 จะต้อง ถูก resolve ผ่าน DNS ปกติได้ แต่ macOS 26 กลับจัดการเป็น mDNS-only
  • ในทางกลับกัน โดเมนที่จดทะเบียนกับ IANA เช่น google.com, bbc.co.uk ยังคงทำงานได้ตามเดิม

ผลกระทบต่อสภาพแวดล้อมและเครื่องมือพัฒนา

  • เวิร์กโฟลว์ DNS สำหรับการพัฒนาแบบโลคัลหยุดทำงานทั้งหมด

    • นักพัฒนาที่ใช้ dnsmasq + /etc/resolver/ กับ *.test, *.internal เป็นต้น
    • ฟังก์ชันการ resolve ชื่อคอนเทนเนอร์ ของ Docker Desktop และเครื่องมือประเภทเดียวกัน
    • Vagrant, Tailscale, VPN clients ที่สร้างไฟล์ /etc/resolver/ อัตโนมัติ
    • เครื่องมือพัฒนา Kubernetes แบบโลคัล (minikube, kind, k3d เป็นต้น) สำหรับการ resolve *.cluster.local
  • เนื่องจากระบบยังแสดงการตั้งค่า resolver ว่าปกติใน scutil --dns ผู้ใช้จึงสังเกตปัญหาได้ยาก และไม่มี log หรือข้อความผิดพลาดบ่งชี้ชัดเจน

วิธีแก้ชั่วคราวและข้อจำกัด

  • วิธีเดียวที่ใช้งานได้คือ เพิ่มการแมปโดเมนด้วยตนเองใน /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 — เอกสารกลไก /etc/resolver/ ของ macOS
    • RFC 6761 — นิยามโดเมน special-use เช่น .test, .localhost, .invalid, .example
    • RFC 8375 — นิยามโดเมน home.arpa
    • IETF draft-ietf-dnsop-interneti-mdn — ร่าง special-use domain .internal

3 ความคิดเห็น

 
lidar 2026-03-22

เพราะเรื่องนี้ ผมเลยใช้ Tailscale MagicDNS ไม่ได้มาหลายวันแล้ว..

 
minhoryang 2026-03-21

หวังว่า tailscale จะช่วยหลบเลี่ยงปัญหานี้ได้

 
GN⁺ 2026-03-21
ความเห็นจาก Hacker News
  • ผมเลิกใช้ macOS ก็เพราะ ปัญหาจุกจิกเล็กๆ น้อยๆ (papercuts) แบบนี้แหละ
    การใช้ LLM เขียนบั๊กรายงานก็พอรับได้ถ้ามีการทบทวนก่อน แต่ถ้าปล่อยให้มีข้อผิดพลาดชัดๆ อย่าง “ใช้ได้บน macOS 25” หลุดไปตรงๆ ความน่าเชื่อถือก็ลดลง
    ถ้ารายงานแบบนี้เพิ่มขึ้นเรื่อยๆ สุดท้ายคนก็คงโยน รายงานที่ AI เขียน ทิ้งไปเลยเพราะภาระในการตรวจสอบ

    • ผมคิดว่าการใช้ AI สร้างคอนเทนต์โดย ไม่ระบุให้ชัดว่าใช้ AI เป็นเรื่องที่ยอมรับไม่ได้เด็ดขาด
      การให้ AI เขียนข้อความในนามของผมมันเป็น การเสียมารยาท ที่ให้ความรู้สึกว่า “เวลาของฉันมีค่ากว่าเวลาของคุณ”
      ถ้าการเปิดเผยต่อสาธารณะว่าใช้ AI ทำให้คุณลำบากใจ นั่นก็ควรเป็นสัญญาณให้กลับไปคิดใหม่ว่ากำลังใช้มันไปเพื่ออะไร
    • ทุก OS ก็มีปัญหาจุกจิกแบบนี้ทั้งนั้น
      จะยกตัวอย่างที่น่าปวดหัวพอๆ กันจาก Linux หรือ Windows ก็ได้ สุดท้ายมันก็เป็นเรื่องของ “จะเลือกพิษแบบไหน”
    • ปัญหาแบบนี้เป็นธรรมเนียมของ Apple มาหลายสิบปีแล้ว
      Microsoft ขึ้นชื่อเรื่อง รักษาความเข้ากันได้ย้อนหลัง ส่วน Apple ขึ้นชื่อเรื่อง กล้าทำให้ของเดิมพัง
      ทุกวันนี้ Microsoft ก็ไม่ได้อนุรักษ์นิยมเหมือนเมื่อก่อนแล้ว ส่วน Apple กลับดูเสถียรกว่าในอดีตเสียอีก
    • ไหนๆ Apple ก็มีชื่อเสียงมานานแล้วว่าเป็นบริษัทที่ ไม่ค่อยอ่านรายงาน อยู่ดี ดังนั้นถึงจะทิ้งรายงานจาก LLM ไปก็คงไม่ได้ต่างอะไรนัก
    • ผมเจอปัญหาจุกจิกแบบนี้มาทุก OS แต่กับ Linux การ rollback ทำได้ง่าย
      อย่าง NixOS แค่เลือกเวอร์ชันก่อนหน้าจากเมนูบูตก็ย้อนทั้งระบบกลับไปได้
      บนโน้ตบุ๊กผมใช้ macOS แต่เวลาทำงานจริงส่วนใหญ่ก็ทำอยู่ใน Linux container
  • macOS 26 เป็นเวอร์ชันที่ ทำลายความเข้ากันได้มากที่สุดเท่าที่เคยมีมา
    มีการเปลี่ยนแปลงโดยตั้งใจหลายอย่างจนทำให้การพัฒนาแอปยากมาก
    ตัวอย่างเช่นแอป Lunar ไม่สามารถตั้งค่า SDR nits ตามต้องการได้อีกแล้ว ทำให้การควบคุมความสว่างใช้งานไม่ได้ และ
    แอป YellowDot ก็ถูกบล็อกไม่ให้ปรับความสว่างของไฟแสดงสถานะไมโครโฟนจนใช้งานไม่ได้
    นอกจากนี้ยังมี บั๊กอีกหลายอย่าง เช่นปัญหา mouse event ในหน้าต่างที่ไม่มี title, การใช้ gamma table ไม่ได้,
    และปัญหาที่แอปอย่าง Clop สูญเสีย path ของไฟล์ต้นฉบับขณะลากไฟล์

    • มีข่าวลือว่า iOS 27 จะเป็น เวอร์ชันเน้นเสถียรภาพสไตล์ Snow Leopard
      หวังว่า macOS 27 จะเป็นแบบนั้นด้วย (ที่มา)
    • ในฐานะคนที่ทำเพลงเป็นงานอดิเรก ไฟแสดงสถานะไมโครโฟน นี่ทั้งไม่จำเป็นและน่ารำคาญมาก
      ปรัชญาของ macOS มันทั้ง ดื้อและยัดเยียดฝ่ายเดียว จนน่าอึดอัด
    • ผมคิดว่าปัญหา YellowDot อาจเลี่ยงได้ด้วยการใช้ LUT แมปสีของจุดบันทึกเป็นสีดำ
      ผมไม่ได้ใช้ macOS โดยตรง แต่ในทางทฤษฎีมันน่าจะพอทำได้
    • ที่แท้เหตุผลที่ M1 ทำได้ถึง 1600 nits แต่ M5 ขึ้นไปเกิน 600 nits ไม่ได้ก็เพราะเรื่องนี้นี่เอง
      คงต้องทำใจไปก่อนสักพัก
    • การจำกัดความสว่างของจุดไมค์มีเป้าหมายเพื่อ ปกป้องความเป็นส่วนตัว
      เป็นมาตรการเพื่อไม่ให้มัลแวร์ซ่อนการเข้าถึงกล้องและไมโครโฟนได้
      อีกอย่าง การจำกัดความสว่าง SDR ก็อาจเป็นความตั้งใจเพื่อป้องกันปัญหาแบตเตอรี่ของ จอ OLED ที่กำลังจะตามมาในอนาคตด้วย
  • ผมยังคงรอวันที่ Apple แยกฮาร์ดแวร์ออกจากซอฟต์แวร์
    ผมอยากได้ Apple Silicon แต่ไม่ชอบ OS ของพวกเขา
    ถ้าผมรัน kernel กับโมดูลของตัวเองไม่ได้ มันก็ ไม่ใช่อุปกรณ์ของผม
    โน้ตบุ๊กอีกเครื่องข้างๆ ผมบูตด้วย coreboot ซึ่งมันสะท้อนปรัชญาของผม

    • บน Mac ก็รัน kernel เองได้ไม่ใช่หรือ? ปัญหาคือเรื่อง การรองรับไดรเวอร์ มากกว่าหรือเปล่า?
    • macOS อาจไม่สมบูรณ์แบบ แต่การเรียกมันว่า “น่ากลัวสุดๆ” ทั้งระบบก็ดูเป็น การประเมินที่เกินจริง
    • ผมเองก็ไม่ได้เกลียด macOS นะ แค่การฟันธงว่ามัน “น่ากลัว” มันฟังไม่ค่อยน่าเชื่อถือ
  • เวลาพัฒนาเว็บแบบโลคัล ผมใช้ *.localhost
    เบราว์เซอร์สมัยใหม่ทั้งหมดจะ ตีความเป็น 127.0.0.1 อัตโนมัติ จึงไม่ต้องตั้งค่า DNS หรือแก้ hosts
    แต่จะไม่ครอบคลุมโปรแกรมนอกเบราว์เซอร์อย่าง python, wget เป็นต้น

    • *.*.localhost ก็รองรับด้วย ทำให้ตอนนี้สามารถ จำลองโครงสร้างโดเมนของโปรดักชันบนเครื่องโลคัลได้ตรงๆ
      ArchiveBox ใช้ความสามารถนี้เพื่อแยกโดเมนตามแต่ละ snapshot และ ลดความเสี่ยงด้านความปลอดภัย
    • บน Tahoe มันทำงานได้ดีกับ python และ wget ด้วย
    • ผมลองทดสอบบน Chrome แล้ว คิดว่าใน Safari ก็น่าจะทำงานเหมือนกัน
    • ผมก็ใช้วิธีนี้เหมือนกัน แค่รู้สึกว่า .localhost มันยาวไปหน่อย
      เมื่อก่อนเคยใช้ .local แต่ชนกันบ่อยมาก
    • เราใช้ dev.our-root-domain.com โดย แมปจาก public DNS ไปที่ 127.0.0.1
  • ผมใช้การตั้งค่าที่ ให้บริการ local TLD หลายตัว บนเครื่อง Yosemite รุ่นเก่ามานานแล้ว
    วิธี /etc/resolver นั้นจริงๆ ถูกประกาศว่า กำลังจะเลิกใช้ มาตั้งแต่ราวปี 2014 และครั้งนี้ก็ดูเหมือนจะถูกถอดออกไปอย่างสมบูรณ์แล้ว
    ทางที่ถูกต้องคือใช้ scutil โดยตรงเพื่อบันทึกการตั้งค่าแทน

    • แต่ใช้ scutil อย่างเดียวก็ยังไม่พอ
      การ query บางอย่างใน macOS ยังผ่าน mDNSResponder ซึ่งจะเพิกเฉยหรือเขียนทับการตั้งค่านี้อยู่
      สุดท้ายแล้วใช้ unbound หรือ dnsmasq กลับง่ายกว่า
  • ผมเองก็ใช้หลาย TLD ด้วยชุด /etc/resolver/X + dnsmasq และไม่มีปัญหาอะไร
    ในไฟล์คอนฟิกผมใส่คำสั่ง domain ไว้เสมอ
    ในทางปฏิบัติแทบทุกครั้งก็ต้องมีค่านี้อยู่แล้ว
    บางที เพิ่มรายการ domain เข้าไปแล้วอาจแก้ปัญหาได้

  • ผมใช้ Linux เป็นหลัก แต่ไม่ค่อยเข้าใจว่าทำไมหลายคนถึงบอกว่า ดีไซน์ของ macOS แย่
    ถ้ามองแค่ UX แล้ว macOS ให้ความรู้สึก ขัดเกลามาดีทีเดียว
    ธีมยอดนิยมหลายตัวของ Gnome ก็ล้วนเลียนแบบสไตล์ macOS กันทั้งนั้น

    • บนอินเทอร์เน็ตมักมี อคติที่คนไม่พอใจมากๆ จะเด่นกว่า
      โดยเฉพาะบน HN ผมยิ่งคิดว่าเป็นแบบนั้น
    • เวอร์ชัน Tahoe โดยรวมก็ดีใช้ได้
      การปรับขอบหน้าต่างอาจไม่สะดวก แต่ภาพรวมยังน่าพอใจ
      สุดท้ายทุก OS ก็มีบั๊กทั้งนั้น
    • วัฒนธรรม feature creep ของ Apple ทำให้ UX เปลี่ยนไปแบบไม่จำเป็นบ่อยมาก
      ตัวอย่างชัดๆ ก็คือกล่องโต้ตอบการแจ้งเตือน
    • ผมเองก็คิดว่าสุนทรียะของ macOS ดี
      เพียงแต่เสียดายที่ ปรับแต่งได้น้อย
      การโหยหา UI เก่าๆ แบบ Windows 98 อาจเป็นเรื่องของช่องว่างระหว่างวัยก็ได้
    • โดยรวมแล้วผมชอบ UX
      วิธีสลับเข้าโหมดเต็มจอนั้นแปลกดีแต่พอชินแล้วก็สะดวก
      แค่ ไม่มี window tiling แล้วลำบาก
      ถึงอย่างนั้นผมก็ยังชอบ Linux มากกว่า แม้เรื่อง suspend กับการจัดการพลังงานจะมีปัญหามา 8 ปีแล้วก็ตาม
  • เมื่อก่อน Apple เคยบล็อก self-signed certificate บน iOS จนการพัฒนา HTTPS แบบโลคัลแทบเป็นไปไม่ได้
    ยากจะเข้าใจว่าทำไมถึงไปยุ่งกับเรื่องแบบนั้น

  • ผมชอบ macOS
    มันมี zsh ติดตั้งมาให้เป็นค่าเริ่มต้น และทำให้ผมทำแทบทุกอย่างที่เคยทำบน Linux ได้บนคอมพิวเตอร์ส่วนตัวด้วย

  • *.localhost ใช้งานได้อยู่แล้วโดยปริยาย
    แม้ไม่มี dnsmasq ก็เชื่อมหลาย hostname เข้ากับ 127.0.0.1 ได้

    • แต่ถ้าต้องแมป private IP ภายในไปยังที่อยู่อื่น วิธีนี้ก็ยังไม่พอ
    • โดเมนอย่าง *.example-private ยังจำเป็นสำหรับแยกหลายอุปกรณ์ด้วย private IP
      ถ้าจะใช้แค่ localhost อย่างเดียวก็ใช้ 127.0.0.1 ไปตรงๆ ก็พอ
      ส่วนตัวผมใช้ *mDNS แบบ .local เพื่ออาศัยการตั้งค่าอัตโนมัติบนพื้นฐาน DHCP