ใช้ Cloudflare เป็น DDNS Provider ด้วย ด้วย Docker container
บทความนี้จะมาแนะนำ Image เล็กๆที่ชื่อ Cloudflare DDNS ซึ่งมันจะช่วยให้เราใช้ Cloudflare เป็น DDNS หรือ IP updater สำหรับ Server ของเรา
บทความนี้จะมาแนะนำ Image เล็กๆที่ชื่อ Cloudflare DDNS ซึ่งมันจะช่วยให้เราใช้ Cloudflare เป็น DDNS หรือ IP updater สำหรับ Server ของเรา หลักการง่ายๆ คือทุกครั้งที่ IP มีการอัพเดตใหม่ ตัว service นี้ก็จะสื่อสารกับ Cloudflare ผ่าน API token ข้อดีของมันอีกอย่างคือมันสามารถรันได้บนหลากหลายสถาปัตย์กรรม (multi-arch) ไม่ว่าจะเป็น ตั้งแต่ Linux, Windows, Synology, Mikrotik, หรือ Rasberry Pi
diagram คร่าวๆ ประมาณนี้

สิ่งที่เราต้องใช้ใน Setup นี้คือ
- Host ที่ติดตั้ง Docker แล้วและสามารถออกเน็ตได้
- Domain ของตัวเองซึ่งชี้ Nameserver หรือ manage โดย Cloudflare
- Cloudflare API
โอเค! เรามา Setup กันเลย โดยผมคิดว่าเราน่าจะติดตั้ง Docker บน Server ของเราแล้ว ถ้ายังก็ติดตั้งซะนะครับ Google ได้เลย
ต่อไป ขออธิบายตั้งค่า Image โดยเราต้องการ คำสั่งในการ run image ตัวนี้ก็ง่ายมาก ดังนี้
docker run \
-e API_KEY=xxxxxxx \
-e ZONE=example.com \
oznu/cloudflare-ddnsExample for docker run command of cloudflare-ddns
โดยจากคำสั่งเราจะบอกให้ Docker ทำการรัน image ที่ชื่อ cloudflare-ddns จาก oznu (ขอขอบคุณ oznu มา ณ ที่นี้ด้วยครับ)
ซึ่ง -e จะหมายถึง evironment parameter และคำอธิบายของแต่ละ line คือ
- -e API_KEY=xxxxxxx หมายถึงให้ใช้ API key ดังนี้ (xxxxxxx)
- -e ZONE=example.com ให้อัพเดตไปที่ domain นี้ของเรา example.com
นอกจากนี้ยังมีค่า optional อื่นๆอีกมาก ศึกษาเพิ่มเติมได้ที่ github
เพื่อให้เห็นภาพมากขึ้น ผมมีโจทย์ว่า ผมต้องการอัพเดต IP สำหรับ domain ของผมเอง โดยมีชื่อ utilitee.me
งั้นเราไปเอา API token กันซะก่อน โดยไปที่ https://dash.cloudflare.com/profile/api-tokens หรือ Dashboard > profile > api-tokens
จากนั้น Create token

เลื่อนลงมาล่างสุด เลือก Create Customer Token

ตั้งค่าตามนี้คือ
หัวข้อ permissions:
Zone - Zone Settings - Read
Zone - Zone - Read
Zone - DNS - Edit
หัวข้อ zone resources:
Include - Specific zone - utilitee.me
หรือจริงๆจะเลือก All zone ก็ได้ แต่ผมชอบจำกัดสิทธิ์ให้มากที่สุดเท่าที่จะทำได้ เพื่อความปลอดภัย เช่นถ้าเราเลือก All zone แล้ว API token นี้เกิดหลุดไปถึงผู้ที่ไม่หวังดี เขาอาจจะทำการ Reroute ทุก domain ของเราไปยัง Website อันตรายได้ ไม่ใช่แค่ domain นี้

จากนั้น เลือก Continue to Sumary เราก็จะได้ token มาแบบนี้ ซึ่งห้ามให้ใครรู้เด็ดขาด

สมมุติว่า token ที่ผมได้คือ yExJbZqeWyFyfZwvPBaY ฉะนั้นคำสั่ง docker run ของผมจะเป็นหน้าตาแบบนี้
docker run \
-e API_KEY=yExJbZqeWyFyfZwvPBaY \
-e ZONE=utilitee.me \
oznu/cloudflare-ddnsและเมื่อ execute คำสั่ง หน้าตาจะประมาณนี้

และเมื่อเรา docker ps

ไหนลอง docker logs

จะเห็นได้ว่า service ตัวนี้จะช่วยอัพเดต IP ซึ่งค่า default คือจะเช็คทุก 5 นาที
และเมื่อเราดูใน Cloudflare DNS

เท่านี้เราก็สามารถใช้ Cloudflare as DDNS ได้แล้วครับ