วิธีการตั้งค่า Pi-hole DNS-over-HTTPS บน Ubuntu Server 24.04

สำหรับ Pi-hole บน Ubuntu Server 24.04 ให้กำหนดเส้นทางการร้องขออัปสตรีมผ่านdnscrypt-proxyและชี้ Pi-hole ไปยังตัวรับฟังภายในเครื่องที่127.0.0.1#5053. การทำเช่นนี้จะเข้ารหัสการรับส่งข้อมูล DNS ระหว่างเซิร์ฟเวอร์ของคุณและตัวแก้ไขอัปสตรีมที่เลือกด้วย DNS-over-HTTPS (DoH) ในขณะที่ Pi-hole ยังคงตอบสนองต่อไคลเอนต์ LAN ของคุณและใช้รายการบล็อกของมัน โดยค่าเริ่มต้น Pi-hole เองไม่ได้ให้บริการการส่งผ่าน DoH ไปยังอัปสตรีม พร็อกซีภายในเครื่องจะเป็นผู้ให้บริการการเชื่อมต่อที่เข้ารหัสนี้

มีรายละเอียดเกี่ยวกับเวอร์ชันปัจจุบันที่ควรทราบก่อน: Cloudflare ได้ลบcloudflared proxy-dnsคำสั่งนี้ออกจากเวอร์ชันใหม่ตั้งแต่วันที่ 2 กุมภาพันธ์ 2026 เป็นต้นไป คู่มือเก่าๆ ที่ติดตั้งคำสั่งนี้อาจใช้ไม่ได้กับcloudflaredเวอร์ชันปัจจุบัน ขั้นตอนด้านล่างนี้ใช้dnscrypt-proxyตามคู่มือ DoH ปัจจุบันของ Pi-hole การตั้งค่านี้เหมาะสมเมื่อ Pi-hole และพร็อกซีทำงานบนโฮสต์ Ubuntu เดียวกัน การตั้งค่า Docker หรือแบบหลายโฮสต์จำเป็นต้องมีการกำหนดที่อยู่ผู้ฟังและกฎไฟร์วอลล์ที่แตกต่างกัน

ระบบนี้ทำอะไรได้บ้าง และทำอะไรไม่ได้บ้าง

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

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

ก่อนที่คุณจะเริ่มต้น

  • ตรวจสอบให้แน่ใจว่าได้ติดตั้งและใช้งาน Pi-hole บน Ubuntu Server 24.04 เรียบร้อยแล้ว คู่มือนี้จะกำหนดค่า Pi-hole ที่มีอยู่แล้ว ไม่ใช่การติดตั้งใหม่
  • ตรวจสอบให้แน่ใจว่าเซิร์ฟเวอร์มีที่อยู่ LAN ที่เสถียร หากที่อยู่เปลี่ยนแปลง ไคลเอ็นต์ DHCP ของเราเตอร์อาจสูญเสียเซิร์ฟเวอร์ DNS ของตนไป
  • ควรมีสิทธิ์เข้าถึงในฐานะผู้ดูแลระบบ และมีวิธีติดต่อกับโฮสต์ Pi-hole ได้หาก DNS หยุดทำงานชั่วคราว หลีกเลี่ยงการเปลี่ยนแปลงนี้จากระยะไกลผ่านการเชื่อมต่อที่ต้องพึ่งพา Pi-hole เดียวกันในการแก้ไขชื่อโดเมน
  • บันทึกการตั้งค่าอัปสตรีมของ Pi-hole ในปัจจุบันไว้ เพื่อให้คุณสามารถกู้คืนการตั้งค่าเหล่านั้นได้ในระหว่างการย้อนกลับ

พร็อกซีจะเชื่อมต่อเฉพาะกับพอร์ต loopback 5053 เท่านั้น โดยปล่อยพอร์ต 53 ไว้สำหรับ Pi-hole วิธีนี้จะช่วยหลีกเลี่ยงการแย่งใช้พอร์ตกับบริการ DNS ของ Pi-hole และตัวแก้ไขชื่อโดเมนในเครื่องของ Ubuntu อย่าปิดใช้งานsystemd-resolvedพอร์ต loopback แยกต่างหากของพร็อกซีเพียงเพื่อให้การออกแบบนี้ใช้งานได้ เพราะพอร์ต loopback ที่แยกต่างหากของพร็อกซีจะช่วยหลีกเลี่ยงความขัดแย้งนั้นได้

1. ติดตั้ง dnscrypt-proxy จากคลังแพ็กเกจของ Ubuntu

เอกสารโครงการ dnscrypt-proxy อธิบายขั้นตอนการติดตั้งแพ็กเกจใน Ubuntu โปรดตรวจสอบให้แน่ใจว่าที่เก็บแพ็กเกจของ Ubuntu ที่คุณกำหนดค่าไว้นั้นมีแพ็กเกจที่เหมาะสมก่อนทำการติดตั้ง:

sudo apt update
apt-cache policy dnscrypt-proxy

หากผลลัพธ์แสดงเวอร์ชันที่เหมาะสม ให้ติดตั้งเวอร์ชันนั้น:

sudo apt install dnscrypt-proxy

หากไม่พบตัวเลือกใดๆ อย่าเพิ่มที่เก็บข้อมูลของบุคคลที่สามที่ไม่เกี่ยวข้องเพียงเพื่อดำเนินการต่อ ใช้วิธีการติดตั้งที่เชื่อมโยงจากคู่มือ Linux อย่างเป็นทางการของโครงการ dnscrypt-proxy ตรวจสอบรุ่นและสถาปัตยกรรม และปรับการตั้งค่าบริการให้เข้ากับการติดตั้งนั้น หน่วยซ็อกเก็ต systemd และเส้นทางการกำหนดค่าด้านล่างนี้ใช้กับการตั้งค่าแพ็กเกจ Ubuntu ที่จัดทำเป็นเอกสารโดย Pi-hole

2. ย้ายตัวรับฟังพร็อกซีไปที่ localhost พอร์ต 5053

Pi-hole ใช้พอร์ต DNS มาตรฐาน 53 อยู่แล้ว กำหนดค่าซ็อกเก็ตของพร็อกซีให้รับฟังทั้ง TCP และ UDP ที่ ซึ่ง127.0.0.1:5053สามารถเข้าถึงได้จากโฮสต์เดียวกันเท่านั้น สร้าง systemd drop-in:

sudo systemctl edit dnscrypt-proxy.socket

ป้อนข้อความเหล่านี้ลงในโปรแกรมแก้ไขและบันทึก:

[Socket]
ListenStream=
ListenDatagram=
ListenStream=127.0.0.1:5053
ListenDatagram=127.0.0.1:5053

บรรทัดว่างListenStream=และListenDatagram=บรรทัดใหม่จะล้างค่าเริ่มต้นของแพ็กเกจก่อนที่จะตั้งค่าที่อยู่ทดแทน อย่าละเว้นบรรทัดเหล่านี้ มิฉะนั้น systemd อาจเก็บพอร์ตเริ่มต้นไว้นอกเหนือจากตัวรับฟังที่กำหนดเอง

3. เลือกตัวแก้ไข DoH

เปิดไฟล์การกำหนดค่าแพ็กเกจ:

sudoedit /etc/dnscrypt-proxy/dnscrypt-proxy.toml

สำหรับการเปิดใช้งานซ็อกเก็ต systemd ให้ใช้รายการผู้ฟังว่างเปล่าในการกำหนดค่าพร็อกซี เลือกชื่อตัวแก้ไขจากรายการตัวแก้ไขสาธารณะที่ลงนามในปัจจุบัน ตัวอย่างเช่น คำสั่งต่อไปนี้เลือกตัวแก้ไข Cloudflare มาตรฐาน คู่มือ Pi-hole ยังแสดงcloudflare-securityตัวอย่างเมื่อต้องการกรองมัลแวร์ที่ตัวแก้ไขต้นทางด้วย:

listen_addresses = []
server_names = ['cloudflare']

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

4. ตั้งค่า Pi-hole ให้ชี้ไปยังพร็อกซีในเครื่อง

ตั้งค่าที่อยู่ DNS ต้นทางของ Pi-hole ให้เป็น Listener ในเครื่อง:

sudo pihole-FTL --config dns.upstreams '["127.0.0.1#5053"]'

คำ#5053ต่อท้ายคือสัญลักษณ์ที่ Pi-hole ใช้แทนพอร์ต DNS ที่ไม่เป็นมาตรฐาน คุณสามารถตรวจสอบได้ในอินเทอร์เฟซผู้ดูแลระบบของ Pi-hole ที่การตั้งค่า > DNSล้างการเลือกอัปสตรีมสาธารณะที่ตั้งไว้ล่วงหน้า และปล่อยให้เซิร์ฟเวอร์แบบกำหนดเอง127.0.0.1#5053เป็นอัปสตรีม การคงตัวเลือกตัวแก้ไขสาธารณะไว้เป็นอัปสตรีมเพิ่มเติมอาจทำให้การสอบถามข้ามพร็อกซีที่เข้ารหัสได้ ดังนั้นให้ลบรายการเหล่านั้นออกหากคุณต้องการให้การสอบถามอัปสตรีมทั้งหมดของ Pi-hole ใช้ DoH

5. รีสตาร์ทบริการและตรวจสอบว่าปัญหาได้รับการแก้ไขแล้วหรือไม่

รีสตาร์ทซ็อกเก็ต บริการพร็อกซี และดีมอน Pi-hole FTL เพื่อให้โหลดการกำหนดค่าใหม่:

sudo systemctl restart dnscrypt-proxy.socket
sudo systemctl restart dnscrypt-proxy.service
sudo systemctl restart pihole-FTL.service

ตรวจสอบสถานะการให้บริการ:

sudo systemctl status dnscrypt-proxy.socket
sudo systemctl status dnscrypt-proxy.service
sudo systemctl status pihole-FTL.service

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

dig @127.0.0.1 -p 5053 example.com

การตอบกลับ DNS แสดงว่าพร็อกซีในพื้นที่ตอบสนองแล้ว จากนั้นทดสอบ Pi-hole บนพอร์ต 53:

dig @127.0.0.1 example.com

ตรวจสอบบันทึกการสอบถามของ Pi-hole หรือแดชบอร์ดเพื่อยืนยันว่าคำขอส่งถึง Pi-hole แล้ว และตรวจสอบบันทึกของพร็อกซีหากการทดสอบล้มเหลว:

sudo journalctl -u dnscrypt-proxy.service -b --no-pager

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

ปัญหาทั่วไปและการฟื้นตัวอย่างปลอดภัย

  • “ที่อยู่ถูกใช้งานอยู่แล้ว”:อาจมีกระบวนการอื่นกำลังใช้งานพอร์ต 5053 อยู่ หรือการตั้งค่าการใช้งานซ็อกเก็ตไม่ได้ถูกโหลด ตรวจสอบตัวรับฟังด้วยคำสั่ง `ls` sudo ss -lntup, ตรวจสอบการเชื่อมต่อด้วยคำสั่ง `ls` systemctl cat dnscrypt-proxy.socket, และยืนยันว่าบรรทัดรีเซ็ตที่ว่างเปล่าอยู่ก่อนรายการ 5053
  • พร็อกซีทำงานอยู่ แต่การค้นหาหมดเวลา:ตรวจสอบการเข้าถึง HTTPS ขาออก ชื่อตัวแก้ไข และบันทึกของพร็อกซี เครือข่ายบางแห่งอาจบล็อกการเชื่อมต่อ DNS ผ่าน HTTPS หรือจำกัดพอร์ต TCP 443
  • การทดสอบพร็อกซีทำงานได้ แต่ Pi-hole ไม่มีการตอบสนองจากเซิร์ฟเวอร์ต้นทาง:ตรวจสอบให้แน่ใจว่า Pi-hole ตั้งค่าถูกต้องแล้ว127.0.0.1#5053จากนั้นรีสตาร์ทpihole-FTLตรวจสอบให้แน่ใจว่าช่องทำเครื่องหมายเซิร์ฟเวอร์ต้นทางมาตรฐานไม่ได้ให้เส้นทางอื่นโดยไม่แจ้งให้ทราบล่วงหน้า
  • Ubuntu เองไม่สามารถแก้ไขชื่อได้หลังจากทำการเปลี่ยนแปลง:การตั้งค่านี้เปลี่ยนอัปสตรีมของ Pi-hole ไม่ใช่ของโฮสต์/etc/resolv.confหลีกเลี่ยงการแทนที่ไฟล์นั้นหรือปิดใช้งาน เพื่อใช้ systemd-resolvedเป็นทางลัดในการแก้ไขปัญหา

สำหรับการย้อนกลับ ให้คืนค่าการตั้งค่า DNS ต้นทางที่คุณบันทึกไว้ใน Pi-hole แล้วรีสตาร์ทpihole-FTLเมื่อ Pi-hole ไม่ชี้ไปยังพร็อกซีอีกต่อไป คุณสามารถปิดใช้งานหรือลบออกได้dnscrypt-proxyโดยใช้ตัวจัดการแพ็กเกจ หากเซิร์ฟเวอร์นี้แก้ไข DNS ของตัวเองผ่าน Pi-hole ด้วย ให้เก็บเส้นทางการกู้คืนในเครื่องไว้ก่อนที่จะเปลี่ยนบริการ

ตัวเลือกใดเหมาะสมกับเครือข่ายของคุณ?

ใช้การตั้งค่าพร็อกซีแบบโฮสต์เดียวนี้เมื่อคุณต้องการการกรอง DNS แบบรวมศูนย์ใน Pi-hole และการรับส่งข้อมูลที่เข้ารหัสจาก Pi-hole ไปยังตัวแก้ไขที่เลือกไว้เพียงตัวเดียว การตรวจสอบทำได้ค่อนข้างง่ายเนื่องจากพร็อกซีมีที่อยู่และพอร์ตภายในเครื่องเพียงที่เดียว หากคุณใช้งาน Pi-hole ใน Docker บนเซิร์ฟเวอร์อื่น หรือข้ามเครือข่ายหลายเครือข่าย คุณอาจต้องใช้ที่อยู่เครือข่ายคอนเทนเนอร์แทน loopback และคุณต้องจำกัดตัวรับฟังพร็อกซีเพื่อไม่ให้เปิดเผยเป็นตัวแก้ไขแบบเปิด หากคุณต้องการการกรองตามนโยบาย การระบุตัวตนต่ออุปกรณ์ หรือ DNS ที่เข้ารหัสสำหรับอุปกรณ์ที่ใช้งานนอกบ้าน ให้กำหนดค่าไคลเอ็นต์เหล่านั้นหรือเกตเวย์ที่จัดการแยกต่างหาก การเชื่อมต่อ DoH ต้นทางของ Pi-hole ไม่ได้เข้ารหัสเส้นทางของไคลเอ็นต์แต่ละรายไปยัง Pi-hole โดยอัตโนมัติ

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

เอกสารอ้างอิงอย่างเป็นทางการ

ฝากความเห็น

Fix Screen Tearing on Intel Graphics in Pardus Linux: A Result-Focused Guide

Fix Screen Tearing on Intel Graphics in Pardus Linux: A Result-Focused Guide

Fix Intel graphics screen tearing in Pardus Linux by checking X11 vs. Wayland, compositor settings, refresh rate, active Xorg driver, and TearFree only when appropriate.

วิธีการตั้งค่าไฟร์วอลล์ SLES 15 ด้วย firewall-cmd

วิธีการตั้งค่าไฟร์วอลล์ SLES 15 ด้วย firewall-cmd

กำหนดค่า firewalld บน SLES 15: ตรวจสอบโซน อนุญาตบริการหรือพอร์ต บันทึกกฎถาวร โหลดใหม่ได้อย่างปลอดภัย และตรวจสอบการเข้าถึง

คู่มือการตั้งค่าการอัปเดต SLES Live Patching: อัปเดตเคอร์เนลโดยไม่ต้องรีบูตเครื่อง

คู่มือการตั้งค่าการอัปเดต SLES Live Patching: อัปเดตเคอร์เนลโดยไม่ต้องรีบูตเครื่อง

เปิดใช้งานการแพตช์เคอร์เนลแบบเรียลไทม์บน SLES 15 SP7 ใช้การแก้ไขที่รองรับโดยไม่ต้องรีบูต ตรวจสอบแพตช์ที่ใช้งานอยู่ และทำความเข้าใจว่าเมื่อใดที่ยังจำเป็นต้องรีสตาร์ทเคอร์เนล

วิธีเปิดใช้งานโหมด FIPS บน SUSE Linux Enterprise Server 15

วิธีเปิดใช้งานโหมด FIPS บน SUSE Linux Enterprise Server 15

เปิดใช้งานโหมด FIPS บน SLES 15 โดยใช้ยูทิลิตี้การตั้งค่าที่ SUSE รองรับ รีบูตอย่างปลอดภัย ตรวจสอบสถานะเคอร์เนลและนโยบายการเข้ารหัส และตรวจสอบขีดจำกัดการรับรอง

วิธีการติดตั้ง Google Chrome บน Gooroom OS โดยไม่ละเมิดนโยบายความปลอดภัย

วิธีการติดตั้ง Google Chrome บน Gooroom OS โดยไม่ละเมิดนโยบายความปลอดภัย

ติดตั้ง Google Chrome บน Gooroom OS อย่างปลอดภัยด้วยแพ็กเกจ .deb อย่างเป็นทางการ, APT, การตรวจสอบนโยบาย, คำแนะนำในการอัปเดต และการแก้ไขสำหรับอุปกรณ์ที่ได้รับการจัดการ

วิธีการส่งออกบันทึกระบบ SLES ไปยังเซิร์ฟเวอร์ Syslog ระยะไกลอย่างปลอดภัย

วิธีการส่งออกบันทึกระบบ SLES ไปยังเซิร์ฟเวอร์ Syslog ระยะไกลอย่างปลอดภัย

ส่งต่อบันทึกระบบ SLES ไปยังเซิร์ฟเวอร์ syslog ระยะไกลอย่างปลอดภัยด้วย rsyslog, ใบรับรอง TLS, การตรวจสอบชื่อคู่ค้า, คิว, การตรวจสอบความถูกต้อง และการทดสอบ

การผสานรวม Active Directory กับ SSSD ใน SLES 15: คู่มือทีละขั้นตอน

การผสานรวม Active Directory กับ SSSD ใน SLES 15: คู่มือทีละขั้นตอน

เชื่อมต่อ SLES 15 เข้ากับ Active Directory ด้วย SSSD โดยใช้ YaST เตรียม DNS และเวลา กำหนดค่าการเข้าสู่ระบบโดเมน ตรวจสอบ Kerberos และเปรียบเทียบ SSSD, Winbind และ realmd

แก้ไขปัญหาไดรเวอร์ Wi-Fi Realtek RTL8821CE บน Pardus Linux

แก้ไขปัญหาไดรเวอร์ Wi-Fi Realtek RTL8821CE บน Pardus Linux

แก้ไขปัญหา Wi-Fi RTL8821CE บน Pardus Linux โดยตรวจสอบไดรเวอร์ rtw88 ในตัว เฟิร์มแวร์ Realtek คำสั่ง rfkill, NetworkManager และตัวเลือกการสำรองข้อมูลที่ปลอดภัย

แก้ไขปัญหา "ความล้มเหลวชั่วคราวในการแก้ไข DNS" ใน Debian 12 ด้วย systemd-resolved

แก้ไขปัญหา "ความล้มเหลวชั่วคราวในการแก้ไข DNS" ใน Debian 12 ด้วย systemd-resolved

วินิจฉัยและแก้ไขปัญหาการแก้ไขชื่อโดเมน (DNS resolution) บน Debian 12 ที่ใช้ systemd-resolved รวมถึง resolv.conf, NetworkManager, networkd, cache และการตรวจสอบความถูกต้อง

วิธีการติดตั้งระบบปฏิบัติการ Pardus Linux ควบคู่กับ Windows 11 อย่างปลอดภัย

วิธีการติดตั้งระบบปฏิบัติการ Pardus Linux ควบคู่กับ Windows 11 อย่างปลอดภัย

ติดตั้ง Pardus 25.2 ควบคู่ไปกับ Windows 11 โดยทำการสำรองข้อมูล ลดขนาดไดรฟ์ Windows บูตจาก USB UEFI และปกป้องพาร์ติชั่น EFI และพาร์ติชั่นกู้คืนที่มีอยู่เดิม