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