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

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

หลังจาก Cloudflare ประกาศให้ใช้งาน Argo Tunnel แบบฟรี! ตอนแรกอ่านข่าวจาก blognone ก็ไม่รู้หรอกว่ามันคืออะไร แต่พอได้อ่านรายละเอียดแบบคร่าวๆ ทำให้เข้าใจได้ว่า มันคือบริการที่จะทำให้ Server ของเราออกสู่อินเทอร์เน็ตได้โดยไม่ต้องมี Public IP

ต้องเล่าย้อนกลับไปก่อนว่า host teeratech นั่นทำงานอยู่บน raspberry pi 4 ซึ่งวางอยู่ที่บ้าน โดยใช้งานผ่าน true internet จากนั้นใช้วิธี forward port router ออกไปเพื่อจะใช้งานกับ cloudflare ซึ่งทำการผูก domain ไว้เรียบร้อยแล้ว

teetech version เก่า

แต่เมื่อมี Argo Tunnel ให้ใช้งานแบบฟรีๆ ก็ไม่รอช้าที่จะเปลี่ยนไปใช้ทันที ซึ่งตอนนี้ตัวเว็บ teetatech ก็ทำงานผ่านทาง Argo Tunnel ซึ่งยังคง run อยู่บน raspberry pi 4 เหมือนเดิม

สิ่งจำเป็นต้องมีก่อนการใช้งาน Argo Tunnel

  • Domain ซึ่งเป็นโดเมนที่เปลี่ยน nameservers ไปใช้งาน cloudflare เรียบร้อยแล้ว (รายละเอียด)
  • Client หรือ Server สำหรับ Install cloudflared ซึ่งผมจะใช้เป็น raspberry pi 4 (รายละเอียด)

เริ่มขั้นตอนใช้งาน Argo Tunnel

  1. เริ่มด้วยการ 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  พร้อมใช้งานแล้ว

คำสั่ง ./cloudflared --version

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
คำสั่ง ./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
ตัวอย่าง config.yml

8. จากนั้น ไปที่ Cloudflare DNS เพื่อทำการสร้าง CNAME record โดนตรงส่วนของ Target ให้กำหนด UUID tunnel และตามด้วย .cfargotunnel.com (รายละเอียด)

วิธีสร้าง CNAME

9. ใกล้ความเป็นจริงแล้ว เพราะนี้คือขั้นตอนสุดท้าย ทำการ run tunnel ตามด้วยชื่อที่เราสร้างไว้ข้างบน (รายละเอียด)

./cloudflared tunnel --config config.yml run test

จบแล้ว! พร้อมสำหรับการออนไลน์ :D