เชื่อมระบบภายใน ง่ายๆ ด้วย Node-RED และ Cloudflare Tunnel

สวัสดีครับ

โปรแกรมเมอร์อย่างพวกเรานะครับ หลายๆทีเราก็มีระบบที่ทำไว้รันในเครื่อง หรือในเครือข่ายภายในของเรา เช่น พวก Node-RED ที่เราเอาไว้ทำ Automation เล็กๆ หรือระบบหลังบ้านอื่นๆนะครับ

แต่บางทีก็มีเหตุผลที่เราอยากให้ระบบพวกนี้ สามารถเข้าถึงได้จากภายนอกใช่ไหมครับ? ไม่ว่าจะจากลูกค้า จากทีมงานที่ทำงานนอกสถานที่ หรือแค่เพื่อนๆที่อยากลองเล่นดู

ปัญหาคือ การจะเปิด Port ใน Firewall หรือตั้งค่า VPN มันก็วุ่นวายใช่ไหมครับ? ผมมีทางออกง่ายๆ มาแนะนำครับ นั่นคือ Cloudflare Tunnel นะครับ

Cloudflare Tunnel จะช่วยให้เราเชื่อมต่อระบบภายในของเราออกไปข้างนอกได้อย่างปลอดภัย โดยที่เราไม่ต้องเปิด Port อะไรเลย เป็นการเชื่อมออกไปครับ ทำให้พวก Hacker เข้ามาได้ยากขึ้นเยอะเลย

มาดูกันเลยครับว่าทำยังไงบ้าง

ขั้นแรก ติดตั้ง Cloudflare Tunnel (cloudflared)

เราต้องติดตั้งโปรแกรม cloudflared ก่อนนะครับ ลองดูตามระบบปฏิบัติการของเพื่อนๆได้เลย

# สำหรับ Linux (Debian/Ubuntu) นะครับ
curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 -o cloudflared
chmod +x cloudflared
sudo mv cloudflared /usr/local/bin/

# สำหรับ Windows (PowerShell) ก็ประมาณนี้นะครับ
# Invoke-WebRequest -Uri https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-windows-amd64.exe -OutFile cloudflared.exe

# จากนั้น Login เข้า Cloudflare นะครับ
cloudflared tunnel login

# แล้วก็สร้าง Tunnel ใหม่ ให้ชื่อว่า 'my-node-red-tunnel' นะครับ
cloudflared tunnel create my-node-red-tunnel

เมื่อสร้าง Tunnel เสร็จแล้ว เราจะได้ไฟล์ JSON ที่มี UUID ของ Tunnel เราเก็บไว้ในโฟลเดอร์ .cloudflared นะครับ

ขั้นที่สอง ตั้งค่า Tunnel ให้ Node-RED ของเรา

เราจะสร้างไฟล์ config.yml เพื่อบอก Cloudflare Tunnel ว่าให้เชื่อมโดเมนอะไร ไปที่ Node-RED ของเราที่รันอยู่พอร์ตไหนนะครับ

# config.yml
tunnel: my-node-red-tunnel
credentials-file: /root/.cloudflared/UUID.json # เปลี่ยน UUID ให้ตรงกับของเพื่อนๆนะครับ

ingress:
  - hostname: node-red.cii3.net # สมมุติว่าเราใช้โดเมนย่อยนี้ใน Cloudflare นะครับ
    service: http://localhost:1880 # Node-RED ปกติจะรันที่พอร์ต 1880 นะครับ
  - service: http_status:404 # กฎสุดท้าย ถ้าไม่มีอะไรตรง ให้ตอบ 404 นะครับ

จากนั้น เราก็แค่เพิ่ม DNS Record ใน Cloudflare Dashboard ของโดเมน cii3.net นะครับ ให้ชี้ไปที่ Tunnel ของเรา โดยใช้ประเภท CNAME และค่าเป็น UUID.cfargotunnel.com นะครับ

ขั้นที่สาม รัน Tunnel และเข้าถึง Node-RED ของเรา

ตอนนี้ก็ถึงเวลาเปิด Tunnel แล้วครับ

# รัน Tunnel ของเรานะครับ
cloudflared tunnel run my-node-red-tunnel

# ส่วน Node-RED ก็รันตามปกติเลยครับ
# node-red

เท่านี้ เพื่อนๆก็สามารถเข้าถึง Node-RED ของเราได้จาก https://node-red.cii3.net แล้วนะครับ โดยไม่ต้องเปิด Port อะไรเลย

เรื่องความปลอดภัย (Best Practice)

สำหรับเรื่องความปลอดภัยนะครับ เพื่อนๆสามารถเพิ่ม Cloudflare Access เข้าไปได้เลย คือกำหนดว่าใครจะเข้าถึงได้บ้าง อันนี้จำเป็นมากนะครับ ถ้าเป็นระบบจริงจัง

ไปที่ Cloudflare Dashboard > Access > Applications นะครับ แล้วก็สร้าง Policy สำหรับโดเมนที่เราใช้

เลือกได้ว่าจะให้ใครเข้าได้บ้าง เช่น ต้องเป็นอีเมลล์จากโดเมนที่เราอนุญาต หรือ ใช้ Identity Provider อื่นๆได้เลยครับ

แบบนี้ไม่ต้องห่วงเรื่อง Security Log ด้วยครับ เพราะ Cloudflare จัดการให้หมดเลย ผมว่าอันนี้ดีมากๆเลยครับ

อยากให้ Node-RED คุยกับระบบอื่น?

ถ้าเพื่อนๆ อยากให้ Node-RED คุยกับระบบอื่น หรือรับข้อมูลจากอุปกรณ์ IoT นะครับ ลองดูพวก Message Broker อย่าง MQTT หรือ Kafka นะครับ จะช่วยให้ระบบเรายืดหยุ่นขึ้นเยอะเลยครับ เป็น Best Practice ในการเชื่อมต่อระบบให้คุยกันได้ง่ายๆเลยนะ

หวังว่าบทความนี้จะเป็นประโยชน์กับเพื่อนๆนะครับ ลองเอาไปปรับใช้กับระบบของตัวเองดูได้เลยครับ

อ้างอิง: - Cloudflare Tunnel Documentation - Node-RED Official Website - MQTT Protocol

Read more

Google ส่ง Gemini ลง Mac แบบ Native พร้อมตัวช่วย AI สุดล้ำ ยกระดับงานเดสก์ท็อป

Google ส่ง Gemini ลง Mac แบบ Native พร้อมตัวช่วย AI สุดล้ำ ยกระดับงานเดสก์ท็อป

Google เปิดตัว Gemini เวอร์ชัน Native บน Mac พร้อมฟีเจอร์ AI ล้ำสมัย ช่วยเพิ่มประสิทธิภาพการทำงาน ปลดล็อกความคิดสร้างสรรค์ และเชื่อมต่อข้อมูลส่วนตัวได้อย่างชาญฉลาด

By ทีมงาน devdog
เจาะลึก UEFA Champions League: สุดยอดความตื่นเต้นที่แฟนบอลทั่วโลกรอคอย

เจาะลึก UEFA Champions League: สุดยอดความตื่นเต้นที่แฟนบอลทั่วโลกรอคอย

เจาะลึก UEFA Champions League การแข่งขันระดับโลกที่แฟนบอลรอคอย พร้อมติดตามข่าวสารรอบโลกและการถ่ายทอดสดสุดพิเศษ ไม่พลาดทุกความมันส์!

By ทีมงาน devdog
Google อัปเกรด Chrome ครั้งใหญ่ เพิ่มฟีเจอร์ "Skills" ให้ AI จำคำสั่งโปรดของคุณ

Google อัปเกรด Chrome ครั้งใหญ่ เพิ่มฟีเจอร์ "Skills" ให้ AI จำคำสั่งโปรดของคุณ

อัปเกรด Chrome ด้วยฟีเจอร์ Skills ใหม่ ให้ AI จดจำและเรียกใช้คำสั่งโปรดของคุณได้ทันที ไม่ต้องพิมพ์ซ้ำ พร้อมเชื่อมต่อ Gemini ทั่วระบบ

By ทีมงาน devdog
CARTIER Santos-Dumont โฉมใหม่: เมื่อออบซิเดียนผสานตำนานนักบิน สู่ความงามเหนือกาลเวลา

CARTIER Santos-Dumont โฉมใหม่: เมื่อออบซิเดียนผสานตำนานนักบิน สู่ความงามเหนือกาลเวลา

คาร์เทียร์เปิดตัว Santos-Dumont หน้าปัดออบซิเดียน หินภูเขาไฟธรรมชาติผสานดีไซน์นักบินระดับตำนาน สะท้อนงานฝีมือร่วมสมัยและความหรูหรา

By ทีมงาน devdog