ลองใช้งาน Cloudflare Argo Tunnel

หลังจาก Cloudflare ประกาศให้ใช้งาน Argo Tunnel แบบฟรี! ตอนแรกอ่านข่าวจาก blognone ก็ไม่รู้หรอกว่ามันคืออะไร แต่พอได้อ่านรายละเอียดแบบคร่าวๆ ทำให้เข้าใจได้ว่า มันคือบริการที่จะทำให้ Server ของเราออกสู่อินเทอร์เน็ตได้โดยไม่ต้องมี Public IP
ต้องเล่าย้อนกลับไปก่อนว่า host teeratech นั่นทำงานอยู่บน raspberry pi 4 ซึ่งวางอยู่ที่บ้าน โดยใช้งานผ่าน true internet จากนั้นใช้วิธี forward port router ออกไปเพื่อจะใช้งานกับ cloudflare ซึ่งทำการผูก domain ไว้เรียบร้อยแล้ว

แต่เมื่อมี Argo Tunnel ให้ใช้งานแบบฟรีๆ ก็ไม่รอช้าที่จะเปลี่ยนไปใช้ทันที ซึ่งตอนนี้ตัวเว็บ teetatech ก็ทำงานผ่านทาง Argo Tunnel ซึ่งยังคง run อยู่บน raspberry pi 4 เหมือนเดิม
สิ่งจำเป็นต้องมีก่อนการใช้งาน Argo Tunnel
- Domain ซึ่งเป็นโดเมนที่เปลี่ยน nameservers ไปใช้งาน cloudflare เรียบร้อยแล้ว (รายละเอียด)
- Client หรือ Server สำหรับ Install cloudflared ซึ่งผมจะใช้เป็น raspberry pi 4 (รายละเอียด)
เริ่มขั้นตอนใช้งาน Argo Tunnel
- เริ่มด้วยการ download cloudflared สำหรับ ARM จากนั้น untar แล้วลองเรียกใช้งาน
wget https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-linux-arm.tgz
mkdir argo-tunnel
tar -xvzf cloudflared-stable-linux-arm.tgz -C ./argo-tunnel
cd argo-tunnel
./cloudflared --version
2. หลังจากเรียกใช้งาน ./cloudflared --version จะได้ข้อความกลับมา cloudflared version 2021.4.0 ถือว่า cloudflared พร้อมใช้งานแล้ว

3. ทำการ login เพื่อสร้างไฟล์ cert.pem (รายละเอียด)
./cloudflared tunnel login
4. เมื่อทำการ authenticate cloudflared เรียบร้อยแล้ว จะมีข้อความประมาณนี้
You have successfully logged in.
If you wish to copy your credentials to a server, they have been saved to:
/home/pi/.cloudflared/cert.pem
5. เราต้องทำการสร้าง tunnel name และ UUID ที่เราต้องการ (รายละเอียด)
./cloudflared tunnel create test
6. หลังจากสร้าง tunnel name แล้ว เราสามารถลองเรียกดู tunnel list
./cloudflared tunnel list

7. ต่อไป เราต้องสร้างไฟล์ config.yml เพื่อจะกำหนด traffic ให้กับ tunnel (รายละเอียด)
tunnel: 6ff42ae2-765d-4adf-8112-31c55c1551ef
credentials-file: /home/pi/.cloudflared/6ff42ae2-765d-4adf-8112-31c55c1551ef.json
ingress:
- hostname: test.example.com
service: http://localhost:80
- service: http_status:404
8. จากนั้น ไปที่ Cloudflare DNS เพื่อทำการสร้าง CNAME record โดนตรงส่วนของ Target ให้กำหนด UUID tunnel และตามด้วย .cfargotunnel.com (รายละเอียด)

9. ใกล้ความเป็นจริงแล้ว เพราะนี้คือขั้นตอนสุดท้าย ทำการ run tunnel ตามด้วยชื่อที่เราสร้างไว้ข้างบน (รายละเอียด)
./cloudflared tunnel --config config.yml run test
จบแล้ว! พร้อมสำหรับการออนไลน์ :D