คุณอาจเป็นเจ้าของธุรกิจที่เสนอ Wi-Fi ฟรีให้ลูกค้า; หรือมีกลุ่มเป้าหมายและวางแผนขายการเข้าถึง Wi-Fi network; หรืออยากให้แขกได้รับการเตือนเป็นมิตรเรื่องจรรยาบรรณการใช้ home network? คุณจะเรียนรู้ที่นี่วิธีทำให้ Raspberry Pi กลายเป็น captive portal Wi-Fi access point
ทำไมต้องมี captive portal?
หากเคยพยายามเข้าถึง Wi-Fi network ที่ดูเปิดอยู่ที่คาเฟ่ ร้านอาหาร โรงแรม หรือโรงยิม แต่ถูกทักทายด้วยหน้าจอ login ที่ไม่อนุญาตให้ดำเนินต่อก่อนกรอกข้อมูล (มักเป็น email) คุณคุ้นเคยกับ captive portals แล้ว!
Captive portal คือ webpage ที่เปิดอัตโนมัติในเบราว์เซอร์เริ่มต้นของผู้ใช้ หรือโหลดเมื่อพยายามเข้าชม webpage ผู้ใช้มักต้องทำ action ใดๆ ก่อนจะผ่าน captive portal ได้
แม้ใช้ทั่วไปในธุรกิจ captive portals ยังสามารถเป็นการเพิ่มที่มีประโยชน์สำหรับ home network เช่น สร้าง network แยกสำหรับลูก พร้อม parental controls และ captive portal ที่เตือนเบาๆ ว่าเชื่อมั่นว่าพวกเขาจะใช้เว็บอย่างรับผิดชอบ — เผื่อพวกเขาเก่งเทคโนโลยีพอรู้ว่า VPN ทำงานยังไง
สิ่งที่ต้องการ
เพื่อทำ tutorial นี้ ต้องการ:
- Raspberry Pi ที่รัน Raspberry Pi OS
- Power cable ที่เข้ากับ Pi ของคุณ
- External keyboard และวิธีต่อกับ Pi
- HDMI หรือ micro HDMI cable ขึ้นอยู่กับรุ่น Pi
- External monitor
- Ethernet cable เนื่องจากทำให้ Pi เป็น wireless access point ต้องเชื่อมผ่าน Ethernet ไม่ใช่ Wi-Fi หมายความว่าจะไม่ทำงานกับ Raspberry Pi 2 หรือ Raspberry Pi Zero เพราะขาด Ethernet port หรือ wireless card
เริ่มต้น: อัปเดต Raspberry Pi
ต่อ external keyboard, monitor และ ethernet cable แล้วต่อ Pi เข้า power source บูทเสร็จ เปิด terminal พิมพ์คำสั่งอัปเดต:
sudo apt update && sudo apt -y upgrade
Reboot Pi:
sudo reboot
Reboot เสร็จ ทุกอย่าง up-to-date แล้ว
ตั้งค่า wireless access point สำหรับ Raspberry Pi
มีหลายวิธีทำให้ Pi เป็น access point ใช้ RaspAP ใน tutorial นี้ เพราะ setup ง่าย
ติดตั้ง RaspAP software: เปิด Terminal รัน:
curl -sL https://install.raspap.com | bash
Reboot Pi อีกครั้ง:
reboot
Pi กลับมาทำงานแล้ว Wi-Fi access point จะถูกตั้งค่าด้วย:
- IP address: 10.3.141.1
- Username: admin
- Password: secret
- DHCP range: 10.3.141.50 ถึง 10.3.141.255
- SSID: raspi-webgui
- Wi-Fi Password: ChangeMe
ทดสอบ access point: จับอุปกรณ์ Wi-Fi ใดๆ เช็ค network settings ควรเห็น "raspi-webgui" network ใหม่
เชื่อมต่อ network นี้ จะขอรหัสผ่าน RaspAP default password คือ "ChangeMe" พิมพ์ในกล่อง network config คลิก "Connect" จะเชื่อมต่อกับ Raspberry Pi access point ใหม่!
รักษาความปลอดภัย Wi-Fi access point
ก่อนไปต่อ อัปเดต "ChangeMe" เป็นรหัสผ่านปลอดภัยมากขึ้น ผ่าน RaspAP web interface:
- เปิดเว็บเบราว์เซอร์หากยังไม่ได้เปิด
- ใน address bar ใส่: 10.3.141.1
- เมื่อถาม ใส่ username "admin" และ password "secret" จะเห็น RaspAP web interface หลัก
- ในเมนูซ้าย เลือก "Hotspot -> Security"
- หาส่วน "PSK" ใส่รหัสผ่านที่ต้องการสำหรับ Wi-Fi access point — ให้ปลอดภัย!
- คลิก "Save Settings"
สร้าง captive portal ด้วย Nodogsplash
ตอนนี้ access point ทำงานแล้ว พร้อม secure ด้วย captive portal
Captive portal จะสร้างด้วย Nodogsplash captive portal solution แต่ต้องติดตั้งแพ็กเกจ libmicrohttpd-dev ก่อน เพราะมีโค้ดที่จะใช้ compile Nodogsplash
บน Raspberry Pi รัน:
sudo apt install git libmicrohttpd-dev
ได้ libmicrohttpd-dev แล้ว clone repository ที่มีโค้ด Nodogsplash ทั้งหมด:
cd ~ git clone https://github.com/nodogsplash/nodogsplash.git
Raspbian clone code เสร็จ พร้อม compile และติดตั้ง Nodogsplash software:
cd ~/nodogsplash make sudo make install
Nodogsplash ติดตั้งบน Raspberry Pi แล้ว
ตั้งค่า captive portal
ต่อไป ต้องชี้ Nodogsplash ไปที่ Gateway address ซึ่งคือ router interface ที่เชื่อมต่อ local network RaspAP ใช้ 10.3.141.1 โดยค่าเริ่มต้น จึงต้องแก้ไข Nodogsplash config file ให้ listen บน address นี้
แก้ไข Gateway address: เปิด Nodogsplash config file:
sudo nano /etc/nodogsplash/nodogsplash.conf
เพิ่มข้อมูลต่อไปนี้:
GatewayInterface wlan0 GatewayAddress 10.3.141.1 MaxClients 250 AuthIdleTimeout 480
บันทึกไฟล์: Ctrl+O ตามด้วย Ctrl+X
เริ่ม captive portal:
sudo nodogsplash
Captive portal ทำงานแล้ว ทดสอบโดยเชื่อมต่อ Wi-Fi hotspot
ควรได้รับการต้อนรับจาก Nodogsplash default captive portal
ทำให้ portal ออนไลน์ตลอด
ตรวจสอบ captive portal ทำงานถูกต้องแล้ว ต้องทำให้ Nodogsplash เริ่มอัตโนมัติตอนบูต
ตั้งค่า Nodogsplash เริ่มอัตโนมัติโดยแก้ไขไฟล์ "rc.local" ใน Raspberry Pi Terminal รัน:
sudo nano /etc/rc.local
หาบรรทัด:
exit 0
ด้านบนโดยตรง เพิ่ม:
nodogsplash
บันทึก: Ctrl+O ตามด้วย Ctrl+X
วิธีปรับแต่ง captive portal
ตอนนี้มี Wi-Fi hotspot ที่ป้องกันด้วย captive portal แต่ยังใช้หน้า Nodogsplash default ส่วนสุดท้ายนี้ดูวิธีเข้าถึงโค้ดควบคุมหน้า captive portal และแก้ไขง่ายๆ
ปรับแต่งหน้า Nodogsplash default: เปิดไฟล์ "splash.html"
sudo nano /etc/nodogsplash/htdocs/splash.html
เพิ่มรูปภาพและข้อความ ลบเนื้อหาเดิมได้ ตัวอย่างในรูปข้างล่าง กำลังเปลี่ยนข้อความที่แสดงบน captive portal
พอใจกับการแก้ไข บันทึก: Ctrl+O ตามด้วย Ctrl+X
ลองเชื่อมต่อ Wi-Fi hotspot ใหม่ ควรเห็น captive portal ที่ปรับแต่งใหม่
หมายเหตุ: ขึ้นกับ OS และเบราว์เซอร์ อาจต้อง clear browser cache เพื่อเห็น captive portal ที่อัปเดต
นอกจาก Wi-Fi access point ยังสามารถทำให้ Raspberry Pi เป็น ad-blocker หรือ personal web server ได้
คุณใช้ captive portal ที่สร้างใหม่นี้ทำอะไร? ต้อนรับคนเข้ามา home network, กำหนดกฎพื้นฐาน, หรือเครื่องมือช่วย promote ธุรกิจ? บอกในความคิดเห็นด้านล่าง!