สำหรับบทความนี้ จะมาบอกวิธีการทำให้อุปกรณ์ที่ไม่รองรับ DoH สามารถใช้งาน DNS เสมือนใช้งาน DoH ได้ครับ โดยพระเอกของเราวันนี้ก็คือ Pi-hole นั่นเองครับ

สำหรับใครที่ยังไม่รู้ว่า DoH คืออะไร มีประโยชน์อะไรบ้าง เชิญเสพ Part แรกของบทความซีรี่ย์นี้ครับ

มาทำ DNS-over-HTTPS (DoH) ให้เครื่องภายในบ้าน พร้อม Block โฆษณากวนใจด้วย Pi-hole กัน (Part 1 รู้จัก DNS Server)
Pi-hole 5.0 บน Orange Pi Oneด้วยความที่ใช้ Pi-hole 4 มาหลายเดือนละ อีกทั้งตอนนี้ Pi-hole 5 ออกมาเมื่อไม่กี่วันมานี้ เลยถือโอกาสอัพเกรดซะเลย ซึ่งมันมี Feature หลายอย่างที่ต้องการพอดี เลยถือโอกาสติดตั้ง DNS-over-HTTPS (DoH) ซะเลย เด่วมาเล่าให้ฟังกัน ว่าไอ DoH มันคืออะไร ทำทำไม ทำเพื่ออะไร? DNS คืออะไ…

จริงๆแล้วจะพูดว่าทำให้อุปกรณ์หรือ Software นั้นรองรับ Native DoH เลยก็ไม่ใช่ครับ เราจะอาศัย "การเชื่อใจอุปกรณ์ที่เราติดตั้งขึ้นมาเอง" ในที่นี้ก็คือ Pi-hole ที่เราได้ทำการติดตั้งขึ้นมา เพื่อเป็นตัวกลางในการเชื่อมต่อ ระหว่าง DNS ระบบเดิมกับ DoH ครับ

ตั้งค่า DNS-over-HTTPS (DoH) บน Pi-hole

ตอนนี้เรามี DoH หลายๆค่ายเริ่มปล่อย Public ออกมาแล้ว ไม่ว่าจะเป็น Google DNS (8.8.8.8) หรือจะเป็น Cloudflare DNS (1.1.1.1) ซึ่งเราต้องขอบคุณ Cloudflare ที่ทำการ Implement ตัว DNS Proxy โดยทำการเปลี่ยน DoH กลับมาเป็น DNS ธรรมดา ชื่อว่า Argo Tunnel client หรือ cloudflared

cloudflare/cloudflared
Argo Tunnel client. Contribute to cloudflare/cloudflared development by creating an account on GitHub.

วิธีติดตั้ง cloudflared ค่อนข้างหลากหลาย โดยสามารถดาวน์โหลดมาติดตั้งได้ ตามลิงค์ด้านล่างครับ โดยผมแนะนำให้ติดตั้งไว้ในเครื่องเดียวกับ Pi-hole ไปเลยก็ได้ครับ เนื่องจากพอระบบทำงานจริงๆ ไม่ได้กินทรัพยากรเยอะ

Installation · Cloudflare Argo Tunnel docs
Argo Tunnel exposes applications running on your local web server, on any network with an Internet connection, without adding DNS records or configuring a firewall or router. It just works.

ตั้งค่า Cloudflared ให้ทำงานทุกครั้งที่เริ่มต้นระบบ

หลังจากติดตั้ง cloudflared ลงในเครื่องของเราแล้ว เราต้องทำการออกแรง config มันสักหน่อยครับ เพื่อให้มันเริ่มทำงานตั้งแต่เริ่ม Boot ระบบ โดยผมจะยกตัวอย่างเครื่องที่เป็น Linux นะครับ


ขั้นแรกให้ทำการสร้าง user ที่ชื่อว่า cloudflared ขึ้นมาด้วยคำสั่ง

sudo useradd -s /usr/sbin/nologin -r -M cloudflared

ขั้นต่อไปให้ทำการสร้างไฟล์ configuration ของ cloudflared ขึ้นมาด้วยคำสั่ง

sudo nano /etc/default/cloudflared

ให้คัดลอกข้อความด้านล่างลงไป เพื่อทำการตั้งค่าการทำงานของ cloudflared

# Commandline args for cloudflared, using Cloudflare DNS

CLOUDFLARED_OPTS=--port 5053 --upstream https://1.1.1.1/dns-query --upstream https://1.0.0.1/dns-query

แล้วบันทึกไฟล์ด้วยปุ่ม ctrl + x ตามด้วยกด y แล้วตามด้วย enter


อันนี้สำหรับใครที่อยากใช้ Cloudflare DNS (1.1.1.1) นะครับ อย่างที่บอกนะครับ cloudfared เนี่ย ไม่ได้รองรับแค่ Cloudflare DNS เท่านั้น แต่รองรับ DNS ที่เป็น DoH ทุกตัวเลย ไม่เว้นแต่ Google DNS แต่ Google DNS อาจจะต้องใช้ท่าพิเศษนิดหน่อย เพราะตัว DoH Upstream ของ Google DNS มันเรียกด้วย Domain เป็นค่าเริ่มต้น มันจะมีปัญหาเมื่อเครื่องคอมพิวเตอร์ของเราที่ติดตั้ง cloudflared เอาไว้ ไม่สามารถ Lookup Domain ได้ ทำให้เกิด Error ขึ้น

สำหรับคนที่อยากใช้ Google DNS บน cloudflared นะครับ ให้ทำการแก้ไขไฟล์ /etc/hosts ด้วยคำสั่ง

sudo nano /etc/hosts

หลังจากนั้นให้เพิ่มค่าด้านล่างลงไปในบรรทัดสุดท้ายของไฟล์นี้ครับ

8.8.8.8     dns.google
2001:4860:4860::8888 dns.google

แล้วบันทึกไฟล์ด้วยปุ่ม ctrl + x ตามด้วยกด y แล้วตามด้วย enter

ขั้นต่อไปให้ทำการสร้างไฟล์ configuration ของ cloudflared ขึ้นมาด้วยคำสั่ง

sudo nano /etc/default/cloudflared

ให้คัดลอกข้อความด้านล่างลงไป เพื่อทำการตั้งค่าการทำงานของ cloudflared

# Commandline args for cloudflared, using Cloudflare DNS

CLOUDFLARED_OPTS=--port 5053 --upstream https://dns.google/dns-query

หลังจากนั้นให้ทำการเปลี่ยน Permission ของไฟล์ configuration ที่เราได้ทำการสร้างเอาไว้จากขั้นตอนเมื่อกี้ เพื่อให้ตัว cloudflared สามารถเข้าถึงไฟล์ดังกล่าวได้

sudo chown cloudflared:cloudflared /etc/default/cloudflared
sudo chown cloudflared:cloudflared /usr/local/bin/cloudflared

หลังจากนั้น เราจะทำการสร้าง Script สำหรับสั่งให้ระบบจัดการ service (ในที่นี่เราใช้ systemd เป็นระบบบริการจัดการระบบปฏิบัติการ Linux ซึ่ง Linux Distribution หลายตัว ใช้ตัวนี้) มาจัดการ cloudflared ที่เราได้ติดตั้งเอาไว้ พร้อมสั่งให้เริ่มทำงาน

เราจะทำการสร้างไฟล์จัดการ cloudflared ด้วยการสร้างไฟล์  /etc/systemd/system/cloudflared.service ด้วยคำสั่ง ดังนี้

sudo nano /etc/systemd/system/cloudflared.service

ให้ทำการคัดลอกข้อความด้านล่างลงไปครับ

[Unit]
Description=cloudflared DNS over HTTPS proxy
After=syslog.target network-online.target

[Service]
Type=simple
User=cloudflared
EnvironmentFile=/etc/default/cloudflared
ExecStart=/usr/local/bin/cloudflared proxy-dns $CLOUDFLARED_OPTS
Restart=on-failure
RestartSec=10
KillMode=process

[Install]
WantedBy=multi-user.target

แล้วบันทึกไฟล์ด้วยปุ่ม ctrl + x ตามด้วยกด y แล้วตามด้วย enter

ต่อไปเราจะต้องทำให้ systemd รู้จักกับไฟล์จัดการ cloudflared ที่เราสร้างขึ้นมาด้ายคำสั่ง

sudo systemctl enable cloudflared
sudo systemctl start cloudflared
sudo systemctl status cloudflared

ต่อให้ใช้คำสั่ง dig เพื่อทดสอบการทำงานครับ ถ้าได้ค่าแบบด้านล่าง ถือว่าโอเคละ


ตั้งค่า Pi-hole เพื่อให้ใช้งาน Proxy DNS

หลังจากนั้นเราต้องตั้งค่า Pi-hole ให้มาใช้ DNS ที่เราสร้างขึ้นมา ด้วยการเข้าไปยังเว็บจัดการของ Pi-hole ทำการ Login ให้เรียบร้อย แล้วเข้าไปที่เมนู Setting => DNS => Upstream DNS Server แล้วเปลี่ยนค่าเหมือนในรูป

หลังจากนั้นกดปุ่ม Save ครับ

หลังจากนั้นให้ไปเปลี่ยน DNS บน Router ของคุณครับ ให้แจก DNS เครื่อง Pi-hole แทน DNS ของ ผู้ให้บริการ Internet ซึ่งอันนี้แตกต่างกันตามยี่ห้อ Router ครับ

Ref : https://docs.pi-hole.net/guides/dns-over-https/