ทุกครั้งที่คุณเปิดเว็บ อุปกรณ์ของคุณจะถามรีโซลเวอร์เพื่อแปลงชื่อโดเมนให้เป็นหมายเลข IP คำถามนั้นคือบันทึกแบบข้อความล้วนที่บอกว่าคุณกำลังจะไปไหน และโดยค่าเริ่มต้นมันจะวิ่งไปหารีโซลเวอร์ตัวที่เครือข่ายยัดมาให้คุณ ซึ่งตามปกติก็คือของผู้ให้บริการอินเทอร์เน็ตนั่นเอง

DNS leak คือตอนที่คำขอเหล่านั้นวิ่งไปที่ที่คุณไม่ได้ตั้งใจ กรณีที่เจอบ่อยคืออุปกรณ์ที่ตั้งค่าให้ใช้รีโซลเวอร์ส่วนตัวหรือรีโซลเวอร์ที่เข้ารหัสไว้ แต่ด้วยเหตุผลเชิงโครงสร้างข้อใดข้อหนึ่ง มันก็ยังส่งคำขอบางส่วนหรือทั้งหมดไปหา ISP อยู่ดี ไม่มีอะไรพังให้เห็น นั่นแหละคือเหตุผลที่การรั่วแบบนี้อยู่ได้เป็นปี ๆ โดยไม่มีใครสังเกต

DNS เปิดเผยอะไรออกไปบ้าง?

ชื่อโดเมน เวลาที่ถาม และต้นทางของคำถาม ซึ่งมากพอจะประกอบกลับเป็นเซสชันการท่องเว็บได้ทั้งเซสชัน

DNS แบบดั้งเดิมวิ่งโดยไม่เข้ารหัสผ่านพอร์ต 53 ใครก็ตามที่อยู่ระหว่างคุณกับรีโซลเวอร์อ่านคำขอได้ และตัวรีโซลเวอร์เองก็เห็นทุกคำขอโดยผูกไว้กับการเชื่อมต่อของคุณ มันไม่เห็นว่าคุณเปิดหน้าไหน แต่ชื่อโดเมนต่างหากที่มักเป็นส่วนที่อ่อนไหว

การเข้ารหัสเปลี่ยนว่าใครเป็นคนถือบันทึกนี้ ไม่ได้เปลี่ยนว่าบันทึกนี้มีอยู่หรือไม่

ช่องทางรับส่ง เข้ารหัสไหม ใครเห็นคำขอ
DNS ธรรมดา (พอร์ต 53) ไม่ เครือข่ายของคุณ ISP ของคุณ และรีโซลเวอร์
DNS over TLS (DoT, พอร์ต 853) ใช่ รีโซลเวอร์ที่คุณเลือก
DNS over HTTPS (DoH, พอร์ต 443) ใช่ รีโซลเวอร์ที่คุณเลือก และเครือข่ายแยกมันออกจากทราฟฟิกเว็บทั่วไปได้ยากกว่า
DNSSEC ไม่ — มันทำหน้าที่ยืนยันความถูกต้อง เหมือน DNS ธรรมดา มันพิสูจน์ว่าคำตอบเป็นของจริง ไม่ได้ซ่อนคำตอบ

DNSSEC คือรายการที่คนเข้าใจผิดกันมากที่สุด มันเซ็นกำกับคำตอบเพื่อไม่ให้ปลอมได้ แต่ไม่ได้ให้ความลับใด ๆ ทั้งสิ้น

การรั่วเกิดขึ้นได้อย่างไร?

สาเหตุเชิงโครงสร้างหกข้อครอบคลุมเกือบทั้งหมด

สาเหตุ กลไก
การแยกเส้นทาง ทราฟฟิกบางส่วนวิ่งผ่านอุโมงค์ แต่ DNS วิ่งออกอินเทอร์เฟซหลัก
ไม่รองรับ IPv6 อุโมงค์รับแต่ IPv4 คำขอ IPv6 จึงไปตามเส้นทางของ ISP
ระบบปฏิบัติการถามขนานกัน Windows ถามทุกอินเทอร์เฟซพร้อมกันแล้วเอาคำตอบที่มาถึงก่อน
DoH ระดับเบราว์เซอร์ เบราว์เซอร์แปลงชื่อเองแยกจากค่าของระบบ ซึ่งเกิดผลได้ทั้งสองทิศทาง
เราเตอร์บังคับทับ เราเตอร์ยัดรีโซลเวอร์ของตัวเองผ่าน DHCP หรือดักพอร์ต 53
หน้าล็อกอินของเครือข่ายสาธารณะ เครือข่ายโรงแรมหรือสนามบินดัก DNS เพื่อบังคับให้เข้าหน้าล็อกอินของตัวเอง

กรณีเบราว์เซอร์ควรพูดให้ชัด เพราะมันคมทั้งสองด้าน เบราว์เซอร์ที่มีค่า DoH ของตัวเองอาจข้ามรีโซลเวอร์ของระบบที่คุณตั้งมาอย่างดี และในทางกลับกัน เบราว์เซอร์ที่ตั้งไว้ถูกต้องก็อาจบังหน้าไว้ว่าทุกอย่างที่อยู่นอกเบราว์เซอร์นั้นยังรั่วอยู่ การตรวจอย่างหนึ่งแล้วเหมาเอาว่าอีกอย่างก็ต้องเป็นแบบเดียวกัน คือความผิดพลาดที่พบบ่อยที่สุดในการทดสอบ

ตรวจสอบอย่างไร?

ตรวจแยกทีละชั้น เพราะแต่ละชั้นให้คำตอบไม่ตรงกันได้

ระบบปฏิบัติการ — ดูว่ามีรีโซลเวอร์ตัวไหนตั้งไว้บ้าง:

ระบบ คำสั่ง
macOS scutil --dns | grep nameserver
Windows Get-DnsClientServerAddress
Linux (systemd-resolved) resolvectl status
Linux (ทั่วไป) cat /etc/resolv.conf

ดูว่ารีโซลเวอร์ตัวไหนตอบจริง เพราะค่าที่ตั้งไว้กับพฤติกรรมจริงเป็นคนละเรื่องกัน

dig +short whoami.akamai.net จะคืนหมายเลข IP ของรีโซลเวอร์ที่ทำการแปลงชื่อแทนคุณจริง ๆ เอาไปเทียบกับรีโซลเวอร์ที่คุณคาดว่าจะเป็น

ระดับเบราว์เซอร์: เปิดหน้าตั้งค่า secure DNS ของเบราว์เซอร์แล้วดูว่ามันเปิดอยู่ไหมและเลือกผู้ให้บริการรายใดไว้ จากนั้นเปิดหน้าทดสอบ DNS leak ในเบราว์เซอร์นั้น ถ้าหน้านั้นรายงานรีโซลเวอร์คนละตัวกับที่คุณตรวจผ่านบรรทัดคำสั่ง แสดงว่าเบราว์เซอร์แปลงชื่อเองแยกต่างหาก

IPv6: ตรวจซ้ำอีกรอบด้วยคำขอแบบ IPv6 เท่านั้น อุโมงค์ที่รับแต่ IPv4 คือสาเหตุอันดับหนึ่งของการรั่วแบบบางส่วน

อ่านผลลัพธ์อย่างไร?

เทียบว่าใครเป็นเจ้าของรีโซลเวอร์ตัวนั้นกับสิ่งที่คุณคาดไว้ ไม่ใช่เทียบกับรายชื่อหมายเลข "ที่ดี"

สิ่งที่เห็น การตีความ
รีโซลเวอร์เป็นของ ISP ของคุณ ทั้งที่คุณตั้งตัวอื่นไว้ รั่ว
มีรีโซลเวอร์หลายตัว และหนึ่งในนั้นเป็นของ ISP รั่วบางส่วน คำขอถูกแบ่งกันไป
IPv4 ขึ้นรีโซลเวอร์ที่คาดไว้ แต่ IPv6 ขึ้นเป็น ISP IPv6 รั่ว
เบราว์เซอร์กับระบบรายงานรีโซลเวอร์คนละตัว ไม่จำเป็นต้องรั่ว แต่มีสองเส้นทางที่ต้องตรวจแยกกัน
รีโซลเวอร์อยู่ในประเทศที่ไม่คาดคิด ส่วนใหญ่ปกติ รีโซลเวอร์แบบ anycast ตอบจากจุดที่ใกล้ที่สุด
รีโซลเวอร์เป็นหมายเลขส่วนตัวของเราเตอร์ สรุปไม่ได้ เพราะเราเตอร์ส่งต่อขึ้นไปข้างบน ต้องไปดูค่าที่ตั้งในเราเตอร์เอง

แถวสุดท้ายคือแถวที่ดักคนใช้เน็ตบ้านไว้เยอะ ผลที่ขึ้นว่า 192.168.1.1 บอกคุณแค่ว่าเราเตอร์เป็นคนตอบ ส่วนเราเตอร์ส่งต่อไปที่ไหนเป็นอีกคำถามหนึ่ง ซึ่งต้องไปหาคำตอบในหน้าตั้งค่า WAN หรือ DNS ของเราเตอร์

การแก้เรื่องนี้มีขีดจำกัดแค่ไหน?

การแก้ DNS leak เปลี่ยนแค่ว่าใครได้รู้ว่าคุณค้นหาโดเมนไหน มันไม่ได้ทำให้การเข้าเว็บนั้นเป็นความลับ และการพูดเกินจริงเรื่องนี้คือวิธีหลักที่หัวข้อนี้ถูกนำเสนอผิด

หลังแปลงชื่อเสร็จ อุปกรณ์ของคุณจะเปิดการเชื่อมต่อไปยังหมายเลข IP นั้น ใครก็ตามที่เฝ้าดูอยู่บนเส้นทางย่อมเห็นหมายเลขปลายทาง และในการเชื่อมต่อ TLS ส่วนใหญ่ ชื่อเซิร์ฟเวอร์จะถูกส่งแบบไม่เข้ารหัสในขั้นตอน handshake เว้นแต่ทั้งสองฝั่งจะใช้ Encrypted Client Hello สัญญาณทั้งสองอย่างนี้ระบุตัวเว็บได้เองโดยไม่ต้องพึ่ง DNS

สรุปแบบซื่อตรงจึงแคบแต่เป็นจริง คือ DNS ที่เข้ารหัสไปยังรีโซลเวอร์ที่คุณเลือกเองจะดึงรายชื่อโดเมนทุกเว็บที่คุณเข้าแบบข้อความล้วนออกไปจากเครือข่ายในบ้านและจากบันทึกของ ISP แล้วโอนรายชื่อนั้นไปให้ผู้ดูแลรีโซลเวอร์แทน มันย้ายความไว้วางใจ ไม่ได้กำจัดมันทิ้ง ซึ่งทำให้คำถามที่สำคัญจริง ๆ กลายเป็นว่าใครเป็นคนรันรีโซลเวอร์ตัวนั้น และเขาเก็บบันทึกอะไรไว้บ้าง

คำถามที่เกี่ยวข้อง