/azure-ddns-docker

Docker image for Dynamic DNS with Azure DNS

Primary LanguageShell

azure-ddns-docker

Lint Code Base Docker Build

Docker image to update Azure DNS records to mimic Dynamic DNS service.

Usage

Service Principal

If you don't have a service principal yet, you may create a new one as we will use it to query and update Azure DNS records.

az ad sp create-for-rbac --name "<APP_ID_URI>" --role "Contributor" --scope "<RESOURCE_ID>"
Parameter Description
APP_ID_URI Service principal's application ID URI
Example: sp://ddns-updater
RESOURCE_ID DNS Zone Resource ID
Example: /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/rg-mygroup/providers/Microsoft.Network/dnszones/mydomain.com

In case you already have one, you may want to add role assignment so it can query and update Azure DNS records.

az role assignment create --assignee "<APP_ID>" --role "Contributor" --scope "<RESOURCE_ID>"
Parameter Description
APP_ID Service principal's application ID URI or ID URI
RESOURCE_ID DNS Zone Resource ID
Example: /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/rg-mygroup/providers/Microsoft.Network/dnszones/mydomain.com

Get Image

Pull Image

docker pull ghcr.io/pacroy/azure-ddns
docker tag ghcr.io/pacroy/azure-ddns azure-ddns

Build Locally

docker build --no-cache -t azure-ddns .

Execute

docker run --interactive --rm \          
    -e CLIENT_ID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" \
    -e CLIENT_SECRET="your-client-secret" \
    -e TENANT_ID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" \
    -e RESOURCE_GROUP="rg-mygroup" \
    -e DNSZONE="mydomain.com" \
    -e RECORD_NAMES="record1 record2" \
    -e UPDATE_IP_CMD="dig +short myotherdomain.com" \
    azure-ddns
Parameter Description
CLIENT_ID AzureAD application ID or ID URI of the service principal
CLIENT_SECRET Secret of service principal
TENANT_ID AzureAD tenant ID
RESOURCE_GROUP Resource group of the DNS zone
DNSZONE DNS zone name
RECORD_NAMES DNS record names, separated by space
UPDATE_IP_CMD Command to get the up-to-date IP
Leave blank use default curl -fsSL ipv4.icanhazip.com to use the external IP of the host
Or set dig +short myotherdomain.com to clone IP from the other domain.