ddns-updater icon indicating copy to clipboard operation
ddns-updater copied to clipboard

Provider: Azure

Open danimart1991 opened this issue 4 years ago • 19 comments

  1. What's the feature? Include Azure DNS as provider please

  2. Why do you need this feature? I have a home server with Azure DNS and Azure Domains and would be awesome to have automatic ddns update.

  3. Extra information? Thanks. Many thanks for all.

danimart1991 avatar Oct 10 '20 16:10 danimart1991

Hey danimart1991, thanks for creating the issue.

I digged a bit in Azure's API documentation to update DNS records, particularly here. I just have a questions on some of the required parameters, can you please let me know for each if it's easy to get them and how:

  1. relativeRecordSetName: The name of the record set, relative to the name of the zone
  2. resourceGroupName: The name of the resource group.
  3. subscriptionId: Specifies the Azure subscription ID, which uniquely identifies the Microsoft Azure subscription.
  4. zoneName: The name of the DNS zone (without a terminating dot).

That would help to know if I should search through their API how to obtain these if it's not trivial to have them.

Also for authentication, it seems you only use subscriptionId right?

qdm12 avatar Oct 14 '20 00:10 qdm12

You can try with qmcgaw/ddns-updater:azure using this documentation if you know the 4 parameters mentioned above, to see if it works.

Also, does Azure support wildcard * host for A/AAAA records?

Thanks!

qdm12 avatar Oct 14 '20 01:10 qdm12

Hi @qdm12

Yes. Azure support wilcard *.

I create a first approach in Python + Container in case it works for you. Azure needs a lot of parameters and configuration. Steps to configure Azure to be able to external dynamic dns update:

  • Create Domain
  • Activate Azure DNS Zone for that domain
  • In the Azure Console (inside the portal) run: $ az ad sp create-for-rbac -n "{AnyNameOrUrl}" --scopes /subscriptions/{SUBSCRIPTION_ID}/resourceGroups/{RESOURCE_GROUP}/providers/Microsoft.Network/dnszones/{DNS_ZONE_ID} (This parameters are easily obtainable in the Properties section of Azure DNS)
  • This gives you the rest of the parameters:
Retrying role assignment creation: 1/36
{
  "appId": "{App_Id/Client_Id}",
  "displayName": "{NOTIMPORTANT}",
  "name": "{NOTIMPORTANT}",
  "password": "{APP_PASSWORD}",
  "tenant": "{TENANT_ID}"
}

I use this parameters here: https://github.com/danimart1991/azure-dns-updater/blob/main/azure-dns-updater.py#L21

Best regards and thank you for your work.

danimart1991 avatar Oct 14 '20 07:10 danimart1991

Sorry for the rather long delay, I worked on the implementation again today; I'm just lost on authentication. How do you specify the app_id and app_password? Or do you even need to? From what I've seen in their docs, a PATCH HTTP request like

https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/dnsZones/{zoneName}/{recordType}/{relativeRecordSetName}?api-version=2018-05-01

Does it. Do you know if that's the case perhaps?

qdm12 avatar Dec 13 '20 18:12 qdm12

Hi @qdm12

As I need this DNS Updater, I make my own, but even better if DDNS Updater has Azure too. 🥰

I just update my repository with all the info to obtain the info needed to update a record/s. https://github.com/danimart1991/azure-dns-updater

The az ad sp... command creates a "user" and special authentication for this behavior. I don't know another way to obtain the info you need.

I use the Python lib DnsManagementClient directly, I just need to send the Update command and fill the needed vars. 🤔

danimart1991 avatar Dec 13 '20 18:12 danimart1991

@qdm12 did you try using Azure SDK? the SDK usually is especially useful for the authentication part https://github.com/Azure/azure-sdk-for-go/blob/f111fc2fa3861c5fdced76cae4c9c71821969577/arm/examples/dns/create.go

fredericrous avatar May 18 '21 23:05 fredericrous

Oh they have a Go SDK! Thanks @fredericrous !! 🎉

Yeah I tried quite a bit, but would get lost in the over-complicated requirements from their API docs to be honest. I'll try that right now!

qdm12 avatar May 19 '21 01:05 qdm12

Any news with this? Can I help?

danimart1991 avatar Jul 15 '21 19:07 danimart1991

Hi @danimart1991, I don't think qdm12 has picked this up yet. I don't require a new domain at the moment and don't have one on Azure but feel free to open a PR, we'll review it. Implementing a provider is not that hard, I implemented 3 already and I'm not a Go developer.

fredericrous avatar Jul 18 '21 20:07 fredericrous

Actually Azure has been quite tough. Implementing it dependency-free is a bit of a PITA.

For now I prefer to focus on improving the "vertical aspect" of ddns such as upgrading the UI or better support for ipv6 before doing "horizontal" such as adding more DNS providers.

Although if you can manage to do a PR for Azure without dependency, I'm more than happy to merge it!

qdm12 avatar Jul 19 '21 00:07 qdm12

Thanks for the answer @qdm12

Actually, I don't know Go to be able to add new DNS providers. So sorry.

danimart1991 avatar Jul 19 '21 06:07 danimart1991

Microsoft has got some documentation on the API here: https://learn.microsoft.com/en-us/rest/api/dns/record-sets/create-or-update?tabs=HTTP

JulienFloris avatar Feb 14 '23 16:02 JulienFloris