มาทำ DNS-over-HTTPS (DoH) ให้เครื่องภายในบ้าน พร้อม Block โฆษณากวนใจด้วย Pi-hole กัน (Part 3 ทำให้อุปกรณ์ที่ไม่รองรับ DoH สามารถใช้งาน DNS บน DoH ได้)
สำหรับบทความนี้ จะมาบอกวิธีการทำให้อุปกรณ์ที่ไม่รองรับ DoH สามารถใช้งาน DNS เสมือนใช้งาน DoH ได้ครับ โดยพระเอกของเราวันนี้ก็คือ Pi-hole นั่นเองครับ
สำหรับใครที่ยังไม่รู้ว่า DoH คืออะไร มีประโยชน์อะไรบ้าง เชิญเสพ Part แรกของบทความซีรี่ย์นี้ครับ
จริงๆแล้วจะพูดว่าทำให้อุปกรณ์หรือ 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
วิธีติดตั้ง cloudflared
ค่อนข้างหลากหลาย โดยสามารถดาวน์โหลดมาติดตั้งได้ ตามลิงค์ด้านล่างครับ โดยผมแนะนำให้ติดตั้งไว้ในเครื่องเดียวกับ Pi-hole ไปเลยก็ได้ครับ เนื่องจากพอระบบทำงานจริงๆ ไม่ได้กินทรัพยากรเยอะ
ตั้งค่า 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 ครับ