Google Public DNS มี DoH API 2 แบบที่แตกต่างกันที่ปลายทางเหล่านี้
หน้าภาพรวมของการส่งที่มีความปลอดภัยมีตัวอย่างบรรทัดคำสั่ง curl
สำหรับการใช้ API ทั้ง 2 อย่าง รวมถึงรายละเอียดของ TLS และฟีเจอร์อื่นๆ ที่ใช้กับทั้ง DNS ผ่าน TLS (DoT) และ DoH
นอกจากนี้ DoH ยังรองรับบริการ Google Public DNS64 แบบ IPv6 เท่านั้นด้วย
DNS สาธารณะของ Google ไม่รองรับ URL http:
ที่ไม่ปลอดภัยสำหรับการเรียก API
เมธอด HTTP
- GET
- การใช้เมธอด GET จะช่วยลดเวลาในการตอบสนองได้ เนื่องจากวิธีการดังกล่าวมีการแคชไว้อย่างมีประสิทธิภาพมากกว่า
คำขอ RFC 8484 GET ต้องมีพารามิเตอร์การค้นหา
?dns=
ที่มีข้อความ DNS ที่เข้ารหัส Base64Url เมธอด GET เป็นวิธีเดียวที่รองรับสำหรับ JSON API - POST
- เมธอด POST จะรองรับเฉพาะ RFC 8484 API เท่านั้น และใช้ข้อความ DNS แบบไบนารีที่มีแอปพลิเคชัน Content-Type/dns-message ในเนื้อหาคำขอและในการตอบกลับ HTTP ของ DoH
- HEAD
- ไม่รองรับ HEAD ในขณะนี้ และแสดงข้อผิดพลาด 400 Bad Request
วิธีการอื่นๆ จะแสดงข้อผิดพลาด 501 Not Implemented
รหัสสถานะ HTTP
Google Public DNS DoH แสดงรหัสสถานะ HTTP ต่อไปนี้
Success
- 200 OK
- การแยกวิเคราะห์และการติดต่อสื่อสาร HTTP กับรีโซลเวอร์ DNS สำเร็จแล้ว และเนื้อหาการตอบสนองเป็นการตอบสนอง DNS ในการเข้ารหัสแบบไบนารีหรือ JSON ขึ้นอยู่กับปลายทางการค้นหา ยอมรับส่วนหัว และพารามิเตอร์ GET
การเปลี่ยนเส้นทาง
- 301 ย้ายถาวร
- ไคลเอ็นต์ควรลองอีกครั้งที่ URL ที่ให้ไว้ในส่วนหัว
Location:
หากการค้นหาเดิมเป็นคำขอ POST ไคลเอ็นต์ควรลองอีกครั้งโดยใช้ GET ต่อเมื่อ URL ใหม่ระบุอาร์กิวเมนต์พารามิเตอร์dns
GET หรือไม่เช่นนั้น ไคลเอ็นต์ควรลองใช้ POST อีกครั้ง
ในอนาคตอาจมีการใช้รหัสอื่นๆ เช่น 302 Found, 307 Temporary Redirect หรือ 308 Permanent Redirect และลูกค้า DoH ควรจัดการโค้ดทั้ง 4 รหัส
คุณควรแคชการตอบกลับด้วยรหัส 301 และ 308 แบบถาวรไว้อย่างไม่มีกำหนด และหากทำได้ ผู้ใช้อาจได้รับแจ้งให้อัปเดตการกำหนดค่าเดิมโดยใช้ URL ใหม่
คำขอ POST ที่ได้รับการตอบกลับแบบ 307 หรือ 308 ควรดำเนินการซ้ำด้วย POST เสมอ
ข้อผิดพลาด
การตอบกลับข้อผิดพลาดจะมีคำอธิบายสถานะ HTTP อยู่ในเนื้อหาโดยใช้ HTML หรือข้อความธรรมดา
- 400 คำขอไม่ถูกต้อง
- เกิดปัญหาในการแยกวิเคราะห์พารามิเตอร์ GET หรือข้อความคำขอ DNS ที่ไม่ถูกต้อง สำหรับพารามิเตอร์ GET ที่ไม่ถูกต้อง เนื้อหา HTTP ควรอธิบายข้อผิดพลาดดังกล่าว ข้อความ DNS ที่ไม่ถูกต้องส่วนใหญ่จะได้รับค่า 200 OK ที่มี FORMERR โดยระบบจะแสดงผลข้อผิดพลาด HTTP สำหรับข้อความที่อ่านไม่ออกที่ไม่มีส่วนคำถาม แฟล็กคิวอาร์ที่ระบุการตอบกลับ หรือการผสมแฟล็กอื่นๆ ที่ไม่มีความหมายและมีข้อผิดพลาดการแยกวิเคราะห์ DNS แบบไบนารี
- 413 เพย์โหลดมีขนาดใหญ่เกินไป
- เนื้อหาของคำขอ RFC 8484 POST เกินขนาดสูงสุด 512 ไบต์
- 414 URI ยาวเกินไป
- ส่วนหัวของการค้นหา GET มีขนาดใหญ่เกินไปหรือพารามิเตอร์
dns
มีข้อความ DNS ที่เข้ารหัสแบบ Base64Url ซึ่งเกินขนาดข้อความสูงสุด 512 ไบต์ - 415 ไม่รองรับประเภทสื่อ
- เนื้อหา POST ไม่มีส่วนหัว Content-Type
application/dns-message
- 429 มีคำขอมากเกินไป
- ลูกค้าส่งคำขอมากเกินไปภายในระยะเวลาที่กำหนด ไคลเอ็นต์ควรหยุดส่งคำขอจนกว่าจะถึงเวลาที่ระบุไว้ในส่วนหัว Retry-After (เวลาสัมพัทธ์เป็นวินาที)
- 500 ข้อผิดพลาดภายในเซิร์ฟเวอร์
- ข้อผิดพลาด DoH ภายในของ DNS สาธารณะของ Google
- 501 ไม่มีการใช้งาน
- มีเพียงเมธอด GET และ POST เท่านั้น ส่วนเมธอดอื่นๆ จะได้รับข้อผิดพลาดนี้
- 502 เกตเวย์ไม่ถูกต้อง
- บริการ DoH ติดต่อรีโซลเวอร์ DNS สาธารณะของ Google ไม่ได้
ในกรณีของการตอบกลับ 502 แม้ว่าการลองใช้ที่อยู่ DNS สาธารณะของ Google อื่นอาจช่วยได้ แต่การตอบกลับสำรองที่มีประสิทธิภาพมากกว่าคือลองใช้บริการ DoH อื่นหรือเปลี่ยนไปใช้ UDP หรือ TCP DNS แบบดั้งเดิมที่ 8.8.8.8
ประโยชน์ของ DoH
การใช้ HTTPS ไม่ใช่แค่การเข้ารหัส TLS เท่านั้น มีประโยชน์ในทางปฏิบัติบางประการ ดังนี้
- HTTPS API ที่มีให้บริการในวงกว้างและรองรับการใช้งานเป็นอย่างดีช่วยลดความซับซ้อนในการใช้งานทั้ง DNS สาธารณะของ Google เองและผู้มีโอกาสเป็นลูกค้า
- บริการ HTTPS ทำให้เว็บแอปสามารถเข้าถึงระเบียน DNS ทุกประเภท โดยหลีกเลี่ยงข้อจำกัดของเบราว์เซอร์และ OS DNS API ที่มีอยู่ ซึ่งโดยทั่วไปรองรับเฉพาะการค้นหาโฮสต์ไปยังที่อยู่เท่านั้น
- ไคลเอ็นต์ที่ใช้การรองรับ HTTPS แบบ QUIC UDP จะหลีกเลี่ยงปัญหาต่างๆ เช่น การบล็อกบรรทัดแรกที่อาจเกิดขึ้นเมื่อใช้การส่ง TCP
แนวทางปฏิบัติแนะนำด้านความเป็นส่วนตัวสําหรับ DoH
นักพัฒนาแอปพลิเคชัน DoH ควรพิจารณาแนวทางปฏิบัติแนะนำด้านความเป็นส่วนตัวตามที่ระบุไว้ใน RFC 8484 และขยายด้านล่าง
จำกัดการใช้ส่วนหัว HTTP
ส่วนหัว HTTP เปิดเผยข้อมูลเกี่ยวกับการใช้งาน DoH ของไคลเอ็นต์ และสามารถใช้เพื่อลบข้อมูลระบุตัวบุคคลของไคลเอ็นต์ ส่วนหัว เช่น Cookie, User-Agent และ Receive-Language เป็นผู้กระทำผิดที่ร้ายแรงที่สุด แต่แม้แต่ชุดส่วนหัวที่ส่ง ก็อาจเปิดเผยได้ เพื่อลดความเสี่ยงนี้ ให้ส่งเฉพาะส่วนหัว HTTP ที่จำเป็นสำหรับ DoH: Host, Content-Type (สำหรับ POST) และส่งให้ "อยู่ในกลุ่ม" หากจำเป็น ควรรวม User-Agent ไว้ในเวอร์ชันพัฒนาหรือการทดสอบ
ใช้ตัวเลือกระยะห่างจากขอบของ EDNS
ทำตามคำแนะนำใน RFC 8467 สำหรับการใช้ตัวเลือกการเว้นระยะห่างของ EDNS เพื่อเพิ่มการค้นหา DoH ตามความยาวทั่วไปสัก 2-3 ช่วงเพื่อป้องกันการวิเคราะห์การเข้าชม การใช้ระยะห่างจากขอบของ HTTP/2 ก็สามารถทำได้เช่นกัน แต่ต่างจากระยะห่างจากขอบของ EDNS ตรงที่จะไม่ทำให้เกิดระยะห่างจากขอบในการตอบสนองจากเซิร์ฟเวอร์ DoH
ใช้ RFC 8484 POST เฉพาะสำหรับแอปพลิเคชันหรือโหมดเบราว์เซอร์ที่มีความละเอียดอ่อนด้านความเป็นส่วนตัวเท่านั้น
การใช้ POST สำหรับการค้นหา DoH จะลดความสามารถในการแคชของคำตอบและเพิ่มเวลาในการตอบสนองของ DNS จึงไม่แนะนำโดยทั่วไป อย่างไรก็ตาม การลดการแคชอาจเหมาะสำหรับแอปพลิเคชันที่คำนึงถึงความเป็นส่วนตัว และอาจป้องกันการโจมตีจากเวลาของเว็บแอปที่พยายามระบุโดเมนที่ผู้ใช้เข้าชมเมื่อเร็วๆ นี้
ปัญหา
หากต้องการรายงานข้อบกพร่องหรือขอฟีเจอร์ใหม่ โปรดเปิดปัญหาสำหรับ DoH