Thanapon Tapala

Backend Developer

Embedded Developer

Smart Farmer

Maker

Thanapon Tapala

Backend Developer

Embedded Developer

Smart Farmer

Maker

Blog Post

ลองทำ DDNS บน Cloudflare DNS ง่ายๆ

January 11, 2025 Design, Docker, RaspberryPi
ลองทำ DDNS บน Cloudflare DNS ง่ายๆ

เชื่อว่าหลายๆคนคงจะมีปัญหาในการจัดการ IP กันไม่น้อยแน่ๆ เพราะแต่ก่อนเวลาถ้าเราจะทำการ Forward port เราก็แค่ไป Config ที่ Router แล้วก็เข้าผ่าน Public IP ที่ทาง ISP เช่น AIS, True ให้มาก็จบ แต่หลังๆเหมือนพวก ISP มันก็จะมีการทำ NAT นั้นนี้บลาๆๆๆ ทำให้ตอนที่เราจะใช้ Public IP ก็จะใช้ไม่ได้ละจะต้องไปทำ DDNS ผ่าน ISP อื่นๆ ซึ่งก็อาจจะตอบโจทย์บางคนละกันครับ ส่วนผมขอ Host เองดีกว่า 5555 แต่มันก็ยังคงมีประเด็นเรื่อง Public IP เหมือนกัน แล้วเราจะทำยังไงดีนะ

แค่จ่ายก็จบ!

ใช่ครับของ ISP ที่ผมใช้เองที่บ้านตอนนี้จะเป็น AIS ซึ่งจากที่โทรคุยกับทาง Call center ถ้าเกิดว่าเราอยากได้ Public IP ของเรานั้น อาจจะต้องจ่ายเงินเพิ่มไงหล่ะ ประมาณเดือนละ 100 นี้หล่ะถ้าผมจำไม่ผิดนะ 🥹 หรือไม่ก็ไปใช้ DNS ที่เขา Provide ให้ซึ่งจะเป็น https://www.thddns.net/login

แต่ประเด็นต่อมาถ้าได้ Public IP แล้วก็จบใช่ไหมล่ะ แต่ไอ้เจ้า IP เนี้ย มันชอบเปลี่ยนไปเรื่อยๆแล้วแต่ว่า ISP จะแจกเป็น IP อะไรให้เรา ช่างแ_่งงงงงงงง!!!!!

สุดท้ายเลยเป็นที่มา ตูไม่จำไอพีมันละ จำ Domain ง่ายกว่าเยอะ

DDNS คืออะไรนะ

DDNS (Dynamic Domain Name System) คือระบบที่ช่วยอัปเดตที่อยู่ IP ของโดเมนโดยอัตโนมัติเมื่อ IP มีการเปลี่ยนแปลง เหมาะสำหรับเครือข่ายที่ใช้ IP แบบ Dynamic ทำให้สามารถเข้าถึงอุปกรณ์หรือบริการภายในเครือข่าย เช่น กล้องวงจรปิดหรือเซิร์ฟเวอร์ จากภายนอกได้โดยไม่ต้องใช้ IP คงที่ ช่วยลดความยุ่งยากในการจัดการและประหยัดค่าใช้จ่ายในการใช้งาน IP แบบ Static

การใช้ Cloudflare เป็นผู้ให้บริการ Dynamic DNS (DDNS) ช่วยให้คุณสามารถอัปเดตที่อยู่ IP ของโดเมนหรือซับโดเมนของคุณโดยอัตโนมัติเมื่อที่อยู่ IP ของคุณเปลี่ยนแปลง ซึ่งมีประโยชน์อย่างยิ่งสำหรับการเข้าถึงอุปกรณ์หรือเซิร์ฟเวอร์ภายในเครือข่ายที่มีที่อยู่ IP ไม่คงที่

พระเอกของเราคือ oznu/docker-cloudflare-ddns

โปรเจกต์ `docker-cloudflare-ddns` โดยผู้ใช้ GitHub ชื่อ oznu เป็นอิมเมจ Docker ขนาดเล็กที่ช่วยให้ใช้ Cloudflare เป็นผู้ให้บริการ DDNS ได้

– รองรับสถาปัตยกรรมหลายแบบ เช่น amd64, ARM, และ ARM64

– ทำงานบนอุปกรณ์ต่าง ๆ รวมถึง Raspberry Pi

– ใช้งานง่ายด้วยการตั้งค่าผ่าน environment variables

วิธีการใช้งาน

1. ติดตั้ง Docker: ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้ง Docker บนระบบของคุณแล้ว

2. สร้างโทเค็น API ของ Cloudflare:

   – เข้าสู่ระบบ Cloudflare

   – ไปที่หน้าโปรไฟล์และเลือก “API Tokens”

   – สร้างโทเค็นใหม่โดยให้สิทธิ์ดังนี้:

  • Permission: Zone > DNS > Edit
  • Zone Resources: Include > Specific zone > {เลือก Domain ของเรา}

   – คัดลอกโทเค็นที่สร้างขึ้นเพื่อใช้ในขั้นตอนถัดไป

3. รันคอนเทนเนอร์ Docker โลดดด…

   ใช้คำสั่งต่อไปนี้เพื่อรันคอนเทนเนอร์:

docker run \
  -e API_KEY=xxxxxxx \
  -e ZONE=example.com \
  -e SUBDOMAIN=subdomain \
  --restart=always \
  oznu/cloudflare-ddns

คำอธิบายพารามิเตอร์:

   – `API_KEY`: โทเค็น API ของ Cloudflare ที่คุณสร้างขึ้น

   – `ZONE`: โดเมนหลักของคุณ (เช่น example.com)

   – `SUBDOMAIN`: ซับโดเมนที่คุณต้องการอัปเดต (เช่น home สำหรับ home.example.com)

   – `–restart=always`: ทำให้คอนเทนเนอร์รีสตาร์ทอัตโนมัติเมื่อระบบรีบูต

การตั้งค่าเพิ่มเติม:

– `PROXIED`: ตั้งค่าเป็น `true` หากต้องการให้ทราฟฟิกผ่าน Cloudflare CDN (ค่าเริ่มต้นคือ `false`)

– `RRTYPE`: ตั้งค่าเป็น `AAAA` หากต้องการอัปเดตเรคคอร์ด IPv6 (ค่าเริ่มต้นคือ `A` สำหรับ IPv4)

– `CRON`: กำหนดความถี่ในการอัปเดต (ค่าเริ่มต้นคือทุก 5 นาที)

หลังจากตั้งค่าเสร็จแล้วก็รอดูผลและทดสอบกันดูวววว

อันดับแรกต้อง Forward port จาก Router ลงมาที่เครื่อง Server ที่บ้านกันก่อน ซึ่งขอไม่ลงรายละเอียดนะคับบ

ตัวอย่างนี้ผมจะให้เข้ามาที่ Domain thanapon.info วิ่งเข้าไปหาเครื่อง 192.168.1.200 Port 443 ซึ่งเป็น HTTPS นะครับ

ลองเช็ค nslookup ดูว่าหาเจอไหมน้าาา

อ๋าาาา เจอแล้วทีนี้ลองเอา IP ที่ resolved มาไปหาดูหน่อยสิเป็น IP ของใคร?

ปรากฎว่าเป็น IP ของ Cloudflare เลยนี้น่าา ทำไมเป็นแบบนั้นนะ

เพราะว่าตอนที่เรา Config ตัว Cloudflare ไว้มันเป็นแบบ Proxy นะสิซึ่งข้อดีคือมันจะทำให้ แฮกเกอร์ที่ต้องการจะโจมตีเครื่อง Server ของเรานั้นมองไม่เป็น IP จริงๆ ซึ่งก็อาจจะลดความเสี่ยงที่จะเกิดการโจมตีได้ในระดับหนึ่งไงหล่ะ แต่ก็ยังมีปัญหาอยู่เหมือนกันเพราะจากที่อ่านดูเหมือน Proxy นั้นจะรองรับแค่ Web traffic ซึ่งจะเป็น HTTP/HTTPS เท่านั้นด้วย ถ้าเกิดว่าใครอยากจะให้รองรับ Protocol อื่นๆเช่น MQTT บลาๆๆ งี้ก็จะต้องปิด Proxy ด้วยนะ ใช้แค่ DNS Only ก็พอเด้อ

การใช้ `docker-cloudflare-ddns` ช่วยให้คุณสามารถอัปเดตที่อยู่ IP ของซับโดเมนใน Cloudflare โดยอัตโนมัติผ่าน Docker ควรตรวจสอบการตั้งค่าและความปลอดภัยก่อนนำไปใช้งานจริง หรือหากใครมีวิธีการง่ายๆกว่านี้ ใช้ Resource ไม่เยอะมาแนะนำกันได้นะครับ

วันนี้ขอบคุณและสวัสดีปีใหม่ครับบ 🎉 🎉 🎉 🎉

Network ports

https://developers.cloudflare.com/fundamentals/reference/network-ports

oznu/docker-cloudflare-ddns

https://github.com/oznu/docker-cloudflare-ddns

Taggs: