Repository นี้สร้างขึ้นเพื่อเป็นข้อมูลเกี่ยวกับการทำ DDNS โดยใช้ Azure DNS Service โดยปกติแล้ว Azure DNS ไม่ได้มีฟังก์ชั่นรองรับการทำ Dynamic DNS แต่ทาง Microsft Azure ได้ออกตัว Azure SDK ที่ทำให้เราสามารถแก้ไข Service ต่างๆของ Azure ได้ เช่น
1. Azure SDK for GO | https://github.com/Azure/azure-sdk-for-go
2. Azure SDK for Python | https://github.com/Azure/azure-sdk-for-python
หากเรารู้หลักการทำงานของพวก DDNS Service และรู้วิธีที่ Router สื่อสารกับ API ของ DDNS เราก็สามารถสร้าง DDNS Server ขึ้นมาเองได้ :)
1. Azure SDK for GO | https://github.com/Azure/azure-sdk-for-go
2. Azure SDK for Python | https://github.com/Azure/azure-sdk-for-python
หากเรารู้หลักการทำงานของพวก DDNS Service และรู้วิธีที่ Router สื่อสารกับ API ของ DDNS เราก็สามารถสร้าง DDNS Server ขึ้นมาเองได้ :)
การจัดการทุกอย่างเกี่ยวกับตัว Azure จะทำผ่าน Azure Cloud Portal
Create Azure DNS Zone
1. สร้าง DNS Zone ไปที่เมนู "Home -> Create a resource -> Create a resource -> DNS Zone" แล้วกดปุ่ม Create
2. กรอกรายละเอียด เลือก Subscription, Resource group (ถ้าไม่มีให้กดสร้างใหม่) ตรงช่อง Name คือชื่อ DNS Zone ของเรา เช่น thmddns.net | hostname ประกอบด้วย {recordname}.{zonename} เช่น test.thmddns.net เมื่อเสร็จแล้วกด "Review + Create"
- เราจะได้ข้อมูลบางอย่างในหน้า DNS Zone (Overview) เพื่อนำไปใส่ในไฟล์ config.yaml (ตัวอย่าง configexample.yaml) เช่น
3.1. [subscription-id] Subscription ID
3.2. [resource-group] ชื่อ Resource group
3.3. [zonename] มาจาก DNS Zone ที่เรากำหนดไว้ ดูตรงซ้ายบน
Create Service Principal (Azure Active Directory)
ลิงค์เพิ่มเติม: https://learn.microsoft.com/en-us/azure/active-directory/develop/howto-create-service-principal-portal1. ไปที่ Azure Active Directory -> App registrations -> New Registration เพื่อสร้าง Service Principal ขึ้นมา
2. เมื่อสร้างเสร็จแล้วให้ไปที่ DNS Zone ของเราเพื่อกำหนดสิทธิ์ให้ SP ที่สร้างขึ้นมาเป็น "DNS Zone Contributor"
3. เราจะได้ข้อมูลบางอย่างในหน้า Service Principal (Overview) มาเพื่อนำไปใส่ในไฟล์ config.yaml (ตัวอย่าง configexample.yaml) เช่น
3.1. [tenant-id] Directory (tenant) ID
3.2. [client-id] Application Client ID
3.3. [client-secret] Client Secrets ซึ่งสามารถ Generate ได้จากเมนู Certificates & Secret
Trying to Run Server or Client to Update DNS
1. ไฟล์ YAML Config ของ Server จะเหลือในส่วนของ Username, Password เราสามารถตั้งเองได้ เป็น BasicAuth ที่ Router ใช้ในการส่งข้อมูลมาหาตัว Server
2. เปิดตัว Server
2.1. azure-ddns-server (go run main.go)
2.2. azure-ddns-server-python (pip install ให้เรียบร้อย และ python main.py หรือ uvicorn main:app --reload)
3. ทดสอบการอัพเดท DNS Record ใน ตั้งค่า DDNS Configuration ใน Router เช่น (3BB, AIS) หรือลองใช้โฟล์เดอร์ azure-ddns-client (ต้องใส่ข้อมูลใน config.yaml ก่อน)