Pi-hole ไม่ใช่เรื่องใหม่ แต่เป็นอะไรที่มีมาร่วม 4 ปีแล้ว (เปิดตัวครั้งแรก 15 มิถุนายน 2558) มันเป็นโครงการสร้าง DNS Server ทางเลือก เพื่อเข้ามาช่วยบล็อกพวกโฆษณากวนใจและพวก Tracker ต่างๆ ที่เข้ามาล่วงละเมิดความเป็นส่วนตัวของผู้ใช้งานอินเทอร์เน็ตทั้งหลาย โดยพัฒนาอยู่บนระบบปฏิบัติการ Linux และก็ตามชื่อของมัน หลายๆ คนรัน Pi-hole บนเครื่องคอมพิวเตอร์จิ๋วที่เรียกว่า Rasberry Pi แต่ในความเป็นจริงแล้ว เพราะว่ามันรันบน Linux นั่นหมายความว่าผู้ใช้งาน QNAP NAS ก็สามารถรัน Pi-hole ได้เช่นกัน โดยผ่าน ContainerStation นั่นเอง และในบล็อกตอนนี้ ผมก็เลยขอถือโอกาส เขียนถึงวิธีการติดตั้ง Pi-hole บน QNAP NAS ให้พร้อมใช้งานแบบง่ายๆ สำหรับผู้ใช้งานมือใหม่ตามบ้านนะครับ
บอกตรงๆ ว่า ขั้นตอนการติดตั้ง Pi-hole บน QNAP NAS นี่ไม่ยุ่งยากอะไรนัก ลำดับขั้นตอนก็มีแค่ ติดตั้งแอป ContainerStation บน QNAP NAS จากนั้นก็สร้าง LXC (Linux Container) ขึ้นมา เพื่อนำมาใช้ติดตั้ง Pi-hole แล้วก็ปิดท้ายด้วยการติดตั้ง Pi-hole นั่นแหละ … เทียบๆ แล้วก็คือ เหมือนกับ ซื้อคอมพิวเตอร์มาเครื่องนึง จากนั้นก็ติดตั้งระบบปฏิบัติการ และลงโปรแกรม นั่นเอง
แต่ในทางปฏิบัติ มันก็มีการตั้งค่า มีการใช้ Command line ซึ่งหลายๆ คนที่ไม่คุ้นชินกับเรื่องเทคโนโลยี ก็จะเริ่มรู้สึกว่ามันยุ่งยากจัง ไหนจะมีปัญหาเล็กๆ น้อยๆ ที่คนที่เขียนวิธีติดตั้ง (เป็นภาษาอังกฤษ) ไม่ได้เอ่ยถึงอีก
ผมเลยขอถือโอกาสเขียนเป็นภาษาไทยให้ได้อ่านกัน
ติดตั้ง LXC บน ContainerStation
อันดับแรกเลย ตัว Pi-hole ไม่มีเวอร์ชันสำหรับ QNAP NAS โดยตรงนะครับ อย่างที่บอก มันรันบนระบบปฏิบัติการ Linux ฉะนั้นที่เราต้องทำ คือ เราต้องติดตั้ง LXC (Linux Container) บน QNAP NAS ก่อน (จริงๆ มันมีอีกวิธีคือ ดาวน์โหลดเวอร์ชันที่เป็น Docker มาติดตั้งเลยก็ได้ แต่ผมลองพยายามทำแล้ว มันไม่ประสบผลสำเร็จอะ ไม่รู้ทำไม) ซึ่งเราจะต้องติดตั้งบน ContainerStation ถ้าใครยังไม่มี ดาวน์โหลดได้จาก AppCenter ฮะ

พอเปิดใช้ ContainerStation ครั้งแรก มันก็จะให้เราเลือกว่าจะสร้าง Shared folder สำหรับเก็บพวกข้อมูลของ Container/Docker ไว้ที่ไหน ค่าเริ่มต้นคือ /Container ครับ เราจะเปลี่ยนเป็นอะไรก็ตามสะดวก เมื่อโอเคแล้ว คลิก Start Now > ได้เลย

เราจะเห็นหน้าจอ ContainerStation ตามรูปด้านบนครับ ขั้นตอนถัดมาก็คือ คลิกที่ปุ่ม Create ตรงแถบด้านซ้ายมือครับ จากนั้นก็ค้นหาแพ็กเกจชื่อ LXC ซึ่งเราก็จะได้มา 4 ตัวเลือก คือ Debian, Fedora และ Ubuntu ทั้งเวอร์ชัน 16.04 และ 18.04 ซึ่งสำหรับบทความนี้ ผมขอใช้ Ubuntu 18.04 ครับ แค่คลิก Install แล้วก็รอครับ จะเลือก LXC ตัวอื่นก็ได้ แต่ไปอ่าน Supported Operating System ของ Pi-hole.net ก่อนนะครับ

ขั้นตอนต่อไปก็คือการกำหนดชื่อของมัน จะตั้งชื่ออะไรก็ได้ฮะ แค่ให้เรารู้ว่าเจ้านี่คือ Pi-hole ก็แล้วกัน เลือกเป็น Auto start เอาไว้ เพราะเราอยากให้เจ้านี่เปิดทุกครั้งที่เราเปิด QNAP NAS และ ContainerStation แน่นอน ส่วน CPU Limit กำหนดไว้ซัก 20% และ Memory Limit กำหนดไว้ซัก 1024MB ก็น่าจะพอ สำหรับการใช้งานตามบ้าน แต่ถ้าใครจะใช้ใช้ออฟฟิศ ก็พิจารณาตามจำนวนผู้ใช้งานตามความสมควร คือ ลองหมั่นมาดูที่ Dashboard บ่อยๆ ว่าเจ้า Linux Container นี่ CPU กับ Memory โดนกินไปกี่เปอร์เซ็นต์ เวลามีคนใช้กันเยอะๆ ก็ปรับเพิ่มตามความจำเป็น

ถัดมาคือการตั้งค่าขั้นสูง คลิกตรง Advanced Settings แล้วเลือกที่หัวข้อ Network ครับ เลือก Network Mode เป็น Bridge แล้วเลือก Use Interface เป็นอันที่ต่อออกอินเทอร์เน็ตได้นะ เลือกเป็น Use static IP ด้วย แล้วกำหนด IP Address เป็นเลขที่เรามั่นใจว่าจะไม่มีคนอื่นใช้

ที่เราต้องใช้ Static IP นี่ก็เพราะว่า เราจะต้องใช้เจ้านี่เป็น DNS ของอุปกรณ์ต่างๆ ในระบบ ฉะนั้นเราจะต้องกำหนด IP Address เป๊ะๆ ลงไปครับ จะให้มันเปลี่ยนไปเปลี่ยนมาด้วย DHCP Server ไม่ได้ เดี๋ยววุ่นเลย เมื่อตั้งค่าทุกอย่างเรียบร้อยแล้ว คลิกปุ่ม Create เพื่อเริ่มการสร้าง Linux Container นี้ แล้วเราก็รอ

เมื่อสร้างเสร็จเรียบร้อยแล้ว ตัว Linux Container จะแสดงขึ้นมาบนหน้าจอ Dashboard ครับ แค่นี้เราก็มี Linux server เตรียมพร้อมสำหรับการลง Pi-hole แล้ว
ถึงเวลาติดตั้ง Pi-hole
ตัว Linux Container มันคือระบบปฏิบัติการ Linux ที่ตัดเอาฟีเจอร์ต่างๆ ออกไปให้มากที่สุด เพื่อให้มันเบา กินทรัพยากรน้อย ฉะนั้นเมื่อเราติดตั้งเสร็จแล้ว เราก็จะต้องสั่งงานมันผ่าน Console นั้นครับ วิธีการเข้าถึง Console ก็คือ มาที่หน้า Dashboard ของ ContainerStation แล้วคลิกที่ชื่อของ Linux Container
จากนั้น ตรงด้านข้างของคำว่า Console ที่มีสัญลักษณ์เป็นลูกศรที่ชี้ไปสองด้าน เหมือนกับจะบอกว่า ขยายหน้าจอ คลิกตรงนั้น มันจะเปิดหน้าต่างเบราวเซอร์ใหม่ขึ้นมา เพื่อจะได้พื้นที่แสดงผลเต็มๆ ฮะ เพราะในขั้นตอนการติดตั้ง Pi-hole นี่มันจะต้องใช้พื้นที่การแสดงผลเยอะๆ

ก่อนอื่น เราต้องตั้งรหัสผ่านของ Linux Container ใหม่ก่อน เพราะรหัสผ่าน Default ของตัว LXC Ubuntu ที่ดาวน์โหลดมาคือ ubuntu เราต้องพิมพ์ passwd แล้วกด Enter เพื่อเริ่มการตั้งรหัสใหม่ ก่อนอื่นก็ใส่รหัส Default ลงไปก่อน จากนั้นกรอกรหัสผ่านใหม่ของเราเข้าไปสองหน พอมันขึ้นว่า passwd: password updated successfully ก็เป็นอันเรียบร้อย
ขั้นตอนถัดมาคือการติดตั้ง CURL เพราะเราจะต้องใช้คำสั่งนี้ในการดาวน์โหลด Pi-hole มาติดตั้ง พิมพ์ไปตามนี้เลยฮะ
sudo apt-get update
sudo apt-get install curl
พอรันคำสั่งแล้ว มันจะมีการถามรหัสผ่านของ Admin ที่เราได้ตั้งไว้ ก็พิมพ์ไปแล้วกด Enter จากนั้นมันก็จะขึ้นข้อความรัวๆ มา แล้วก็จะถามว่า Do you want to continue? [Y/n] เราก็พิมพ์ y แล้วกด Enter ไป จากนั้นก็รอจนมันติดตั้งเสร็จ

ติดตั้ง CURL เสร็จแล้ว ทีนี้เราก็ใช้คำสั่งนี่ในการดาวน์โหลด Pi-hole มาติดตั้งได้เลย พิมพ์ตามนี้เลยครับ
sudo curl -sSL https://install.pi-hole.net | bash

เมื่อดาวน์โหลดมาเสร็จเรียบร้อยแล้ว มันก็จะเริ่มการติดตั้งให้โดยอัตโนมัติเลย ทีนี้ก็ทำตามขั้นตอนต่อไปนี้เลยนะครับ
- กด Enter เพื่อตอบ OK
- กด Enter เพื่อตอบ OK อีกที
- ถัดมาก็กด Enter เพื่อตอบ OK อีกทีครับ (ตรงนี้เขาถามเราว่า เราได้ตั้ง Static IP ให้หรือยัง ซึ่งแน่นอนว่าเราได้ทำแล้วเนอะ ตอนสร้าง Container)

- ถัดมาคือหน้าจอให้เลือก Upstream DNS Provider ตรงนี้มันคือ DNS ที่ Pi-hole จะใช้ เราจะเลือกเป็น Google หรือ OpenDNS ก็ได้ หรืออื่นๆ ก็ได้ หรือเราจะกำหนดเป็นของเราเองก็ได้ เลือกเป็น Custom ในกรณีนี้ ผมเลือกเป็น Custom ซึ่งผมเลือกเป็น IP ของ Router กับ CloudFlare (IP ของ CloudFlare DNS คือ 1.1.1.1) เป็น DNS1 และ DNS2 ตามลำดับ (คั่นด้วยเครื่องหมาย , นะครับ)

- ถัดมาคือการเลือกบริการ Ads blocker ครับ พูดง่ายๆ คือ ฐานข้อมูลที่จะบอกว่าเว็บไหนเป็นโฆษณา อันนี้ไม่ต้องสนใจครับ ค่า Default คือ ใช้บริการของทุกที่ เราก็เลือกทั้งหมดนั่นแหละ กด Enter ไป

- ถัดมา คือเลือก Protocols ครับ ค่า Default คือเลือกทั้งสองอัน ซึ่งเราก็ไม่ต้องไปแก้ไขอะไร กด Enter ไปเลย
- หน้าจอถัดมาจะเป็นการยืนยันเรื่อง Static IP Address ครับ ถ้าเราทำตามขั้นตอนที่พูดถึงไปก่อนหน้าแล้ว มันก็ควรจะแสดงข้อมูล Static IP Address ที่เราตั้งเอาไว้ ดังนั้นแค่กด Enter ผ่านไปได้เลย
- หน้าจอถัดมาเป็นหน้าจอเตือนเรื่อง Conflict IP Address ไม่ต้องคิดอะไรมาก กด Enter ไปต่อได้เลย

- ถัดมา มันจะถามว่า Do you wish to install the web admin interface? หรือก็คือ อยากบริหารจัดการผ่านเว็บไหม? ที่มันแนะนำคือ On ก็ตามนั้นเลย กด Enter ไปโลด
- และหน้าจอถัดมามันก็จะถามว่าจะติดตั้ง Web server ไหม แน่นอนว่าเราต้องเลือก On กด Enter ไปเลยครับ
- ถัดมามันถามว่าเราจะเก็บ Log ไหม ค่า Default คือ On ก็ตามนั้นครับ เก็บเหอะ Log น่ะ มันมีประโยชน์เวลาที่เราจะดูว่าเกิดปัญหาอะไรมา กด Enter ไป

- คำถามถัดมาเป็นเรื่องของความเป็นส่วนตัว (Privacy) ว่าจะแสดงข้อมูลอะไรยังไง เนื่องจากเราจะทำใช้เองคนเดียว ผมก็เลยเลือก Show everything ไปเลยจ้า

เมื่อจบตรงนี้แล้ว ที่เหลือก็คือการรอการติดตั้งและตั้งค่าต่างๆ ให้เรียบร้อย แต่จากประสบการณ์ในการติดตั้งของผม และจากที่เห็นในหลายๆ เว็บบอร์ดเมืองนอก มันอาจจะมีปัญหากับแพ็กเกจ resolveconf อันเกิดมาจากการที่ติดตั้งแพ็กเกจบางอย่างก่อนหน้าไม่เรียบร้อย ซึ่งจะส่งผลให้การติดตั้ง Pi-hole ค้างอยู่ที่ 79% ครับ ถ้าเจอแบบนี้ เราต้องไปที่หน้าจอ Dashboard ของตัว ContainerStaion จากนั้น คลิกไปที่ Linux Container แล้ว Stop ก่อน จากนั้น Start ใหม่
จากนั้น ที่ Console ให้รันคำสั่งนี้
sudo apt-get install resolvconf
พอกด Enter แล้ว ผลที่ได้มันควรจะขึ้น Error แล้วให้เราพิมพ์ Command ถัดไป คือ
sudo dpkg --configure -a
จากนั้น พอโดนถามว่าจะตอบว่าอะไร ให้ตอบ N ไป
เสร็จแล้วพิมพ์คำสั่ง
sudo curl -sSL https://install.pi-hole.net | bash
จากนั้นการติดตั้งทุกอย่างควรจะกลับมาเรียบร้อย ดำเนินการต่อไปได้จนจบ

เมื่อติดตั้งเสร็จแล้ว มันจะแสดงข้อมูลการติดตั้งเสร็จ มันจะบอกว่า Log ถูกเก็บไว้ไหน และตัว Web interface เข้าถึงได้ผ่าน URL อะไร แล้วก็บอกรหัสผ่านเริ่มต้นของ Admin ไว้ให้ด้วย อย่าลืมจดไว้นะ แล้วกด Enter เพื่อ OK ไปต่อ

แค่นี้ก็เรียบร้อยแล้ว เรายังสามารถเข้ามาปรับตั้งค่าอะไรหลายๆ อย่างได้จากที่หน้า Web admin interface ของ Pi-hole ครับ คำแนะนำคือไปเปลี่ยนรหัสผ่านของ Admin ก่อนนะครับ แต่ไม่สามารถทำผ่าน Web admin inteface ได้ (ฮา) มันต้องไปที่ Console ของ Linux Container แล้วพิมพ์คำสั่ง
pihole -a -p
จากนั้นก็พิมพ์รหัสผ่านที่ต้องการจะเปลี่ยนไปสองรอบ แค่นี้ก็เปลี่ยนรหัสผ่านได้เรียบร้อยแล้ว
การใช้งาน Pi-hole แบบคร่าวๆ
หน้าที่และการทำงานของ Pi-hole ก็คือการเป็น DNS Server ครับ โดยมันจะทำหน้าที่กรองพวกโฆษณาออกไปโดยอ้างอิงจาก Blocklist ที่เราใส่เข้าไปในระบบ โดยเริ่มแรกมันจะมี Domains on Blocklist อยู่ราวๆ แสนนึง
เราจะต้องเซ็ตค่า DNS ของอุปกรณ์ของเราให้ชี้ไปที่ IP Address ของ Pi-hole ที่เราตั้งไว้ครับ เราจะทำเป็นรายอุปกรณ์ก็ได้ แต่มันก็จะยุ่งยาก โดยเฉพาะถ้าเกิดว่าเรามีอุปกรณ์หลายชิ้น วิธีที่สะดวกสุดคือ ไปตั้งที่ตัว Router ของเรา ให้มันเลือกใช้ DNS1 เป็น IP Address ของ Pi-hole ของเรา แล้วใช้ DNS2 เป็นของ ISP ก็ได้ หรือจะใช้ของ Google, CloudFlare หรือที่ไหนๆ อีกก็ได้ เผื่อไว้ในกรณีที่ Pi-hole เราเกิดล่มขึ้นมา เน็ตทั้งบ้านจะได้ไม่ล่มฮะ

แน่นอนว่ารายชื่อบล็อกแค่แสนกว่ามันย่อมบล็อกพวกโฆษณาได้ไม่หมดแหงๆ ฉะนั้น แนะนำเช่นกันว่าให้ไปหาเพิ่ม ค้น Google ด้วยคำว่า Pi-hole blocklist ก็ได้ มีคนมาช่วยแชร์กันเยอะ อย่างผมนี่เพิ่มไปจนมี Domains in blocklist เกือบสองล้านแล้ว (ฮา) แต่การเพิ่มเราก็ต้องระวังนะครับ เพราะถ้ามันบล็อกโหดไป อาจทำให้การแสดงผลหน้าเว็บมีปัญหา หรือเข้าชมเว็บไม่ได้เลย
ถามว่า Pi-hole ได้ผลมากน้อยแค่ไหน? ก็พอสมควรล่ะครับ ผมลองเปิดเว็บไซต์ข่าวอย่าง ผู้จัดการออนไลน์ ที่เวลาอ่านข่าวแล้วเราจะเห็นโฆษณาเยอะแยะมาก ทั้งป๊อบอัพ ทั้งที่มันเป็นพวกฟีดที่ทำตัวเหมือนเป็น บทความหรือข่าวที่น่าสนใจ พวกนี้หายเกลี้ยงไปเลยครับ (แต่ผมต้องเพิ่มรายชื่อใน Blocklist ไปเยอะๆ ก่อนนะ)

ทีนี้ผมลองปิด WiFi แล้วมาใช้อินเทอร์เน็ตผ่านมือถือ ที่ไม่ได้ใช้บริการของ Pi-hole เลย เปิดหน้าเว็บเดิมเลยครับ ผลคือ โฆษณากลับมาเพียบเลยฮะ

ลองไปดูพวกเว็บไซต์ดูหนัง ดูซีรี่ย์ออนไลน์เถื่อน ที่ปกติโฆษณาป๊อบอัพเด้งเพียบดู พบว่าโฆษณาหายไปราวๆ 60% ได้ ส่วนพวกที่เด้งๆ ขึ้นมา ถ้าเราก็อปปี้ URL มันทัน ก็เอาไปเพิ่มในรายชื่อ Blacklist ของเราเองได้ครับ

การเพิ่มจำนวนโดเมนโฆษณาที่เราจะบล็อก มีสองวิธี คือ ไปที่ Blacklist แล้วเพิ่มโดเมนเข้าไป ซึ่งทำได้ทั้งแบบ Exact (บล็อกเฉพาะโดเมนนี้เป๊ะๆ) กับ Regex & Wildcard (บล็อกแบบกวาด เอาทุกโดเมนที่เข้าเงื่อนไข) กับ การไปที่ Settings > Blocklist แล้วเอารายชื่อที่เขาแชร์ๆ กันผ่านอินเทอร์เน็ตมาเพิ่มเข้าไป แบบนี้สะดวกกว่า เพราะมันได้รายชื่อจำนวนมากในคราวเดียว

คำถามสุดท้าย ที่จริงๆ แล้วก็มีคนทดสอบให้ดูกันแล้ว นั่นก็คือ แล้วถ้าเราเอาพวก Rasberry Pi หรือ Linux Container ที่สเปกต่ำเตี้ยขนาดนี้มาเป็น DNS Server เน็ตมันจะหน่วงไหม? คำตอบที่ผมได้คือ ไม่หน่วงนะ เน็ตไฟเบอร์ทรูของผม 100Mbps/100Mbps ก็ Ping อยู่ที่ 4ms เท่านั้นเอง ถือว่าโอเคอยู่นา แต่ถ้าใครจะเอา Pi-hole ไปใช้ที่ออฟฟิศ จำนวน User เยอะๆ อาจจะต้องเพิ่มสเปกของ Linux Container หน่อย แล้วก็อย่าลืมใช้ LAN ความเร็วสูงสุดเท่าที่จะทำได้ด้วยนะ เช่น 1Gbps ไปเลย ไม่งั้น คอขวดมันจะอยู่ที่การวิ่งมาที่ Pi-hole นี่ครับ