Bug: No-Ip ddnskeys support #394

Open
opened 2025-11-20 04:23:32 -05:00 by saavagebueno · 6 comments
Owner

Originally created by @Knokey on GitHub (May 7, 2024).

TLDR: Name resolution for No-Ip ddnskeys

  1. Is this urgent: No
  2. DNS provider(s) you use: No-Ip
  3. Program version: 2024-05-06T11:16:06.246Z (commit 542e895)
  4. What are you using to run the container: ansible playbook
  5. Extra information

Logs:

2024-05-07T07:26:31Z INFO Settings summary:
├── HTTP client
|   └── Timeout: 10s
├── Update
|   ├── Period: 5m0s
|   └── Cooldown: 5m0s
├── Public IP fetching
|   ├── HTTP enabled: yes
|   ├── HTTP IP providers
|   |   └── all
|   ├── HTTP IPv4 providers
|   |   └── all
|   ├── HTTP IPv6 providers
|   |   └── all
|   ├── DNS enabled: yes
|   ├── DNS timeout: 3s
|   └── DNS over TLS providers
|       └── all
├── Resolver: use Go default resolver
├── Server
|   ├── Listening address: :8000
|   └── Root URL: /
├── Health
|   ├── Server listening address: 127.0.0.1:9999
|   ├── Healthchecks.io base URL: https://xxxx/ping
|   └── Healthchecks.io UUID: xxxx
├── Paths
|   └── Data directory: /updater/data
├── Backup: disabled
└── Logger
    ├── Level: info
    └── Caller: hidden
2024-05-07T07:26:31Z INFO reading JSON config from file /updater/data/config.json
2024-05-07T07:26:31Z INFO Found 2 settings to update records
2024-05-07T07:26:31Z INFO Reading history from database: domain all.ddnskey.com host @ ipv4
2024-05-07T07:26:31Z INFO Reading history from database: domain xxxx host xxxx ipv4
2024-05-07T07:26:31Z INFO [backup] disabled
2024-05-07T07:26:31Z INFO [healthcheck server] listening on 127.0.0.1:9999
2024-05-07T07:26:31Z INFO [http server] listening on :8000
2024-05-07T07:26:31Z INFO obtaining ipv4 address succeeded after 1 failed try
2024/05/07 07:26:34 "GET http://xxxx/ HTTP/1.0" from 172.17.0.1:52862 - 200 2147B in 334.673µs
2024-05-07T07:31:31Z INFO ipv4 address of all.ddnskey.com is 34.198.182.201 and your ipv4 address  is 93.239.x.x
2024-05-07T07:31:31Z INFO Updating record [domain: all.ddnskey.com | host: @ | provider: noip | ip: ipv4] to use 93.239.x.x
2024-05-07T07:41:31Z INFO ipv4 address of all.ddnskey.com is 34.198.182.201 and your ipv4 address  is 93.239.x.x
2024-05-07T07:41:31Z INFO Updating record [domain: all.ddnskey.com | host: @ | provider: noip | ip: ipv4] to use 93.239.x.x

Configuration file

{
    "settings": [
        {
            "provider": "noip",
            "domain": "all.ddnskey.com",
            "host": "@",
            "username": "xxxx",
            "password": "xxxx",
            "ip_version": "ipv4",
            "ipv6_suffix": "",
            "provide_ip": false
        },
        {
            "provider": "cloudflare",
            "zone_identifier": "xxxx",
            "domain": "xxxx",
            "host": "xxxx",
            "ttl": 600,
            "token": "xxxx",
            "ip_version": "ipv4",
            "ipv6_suffix": ""
        }
    ]
}

Host OS: Ubuntu 22.04.4

I encountered the following problem: Updating the ip for No-Ip with ddnskey works, but ddns updater cannot verify the updated ip. The reason is that it tries to match the updated ip against the ip of api domain of no-ip. With a ddnskey from no-ip, all domains need to access the same url (all.ddnskey.com) and no-ip is matching the domain to upgrade via the ddnskey (username).

A solution would be to an extra field for no-ip where the actual domain that will be updated can be defined. Right now, ddns updater does not know for which domain the ip address has been updated.

Output of the health check:

ERROR program is unhealthy: lookup IP addresses do not match: 34.198.182.201 instead of 93.239.x.x for all.ddnskey.com

Docs for ddnskey at no-ip: https://www.noip.com/support/knowledgebase/how-to-setup-and-use-a-ddns-key

Originally created by @Knokey on GitHub (May 7, 2024). **TLDR**: Name resolution for No-Ip ddnskeys 1. Is this urgent: No 2. DNS provider(s) you use: No-Ip 3. Program version: 2024-05-06T11:16:06.246Z (commit 542e895) 4. What are you using to run the container: ansible playbook 5. Extra information Logs: ```log 2024-05-07T07:26:31Z INFO Settings summary: ├── HTTP client | └── Timeout: 10s ├── Update | ├── Period: 5m0s | └── Cooldown: 5m0s ├── Public IP fetching | ├── HTTP enabled: yes | ├── HTTP IP providers | | └── all | ├── HTTP IPv4 providers | | └── all | ├── HTTP IPv6 providers | | └── all | ├── DNS enabled: yes | ├── DNS timeout: 3s | └── DNS over TLS providers | └── all ├── Resolver: use Go default resolver ├── Server | ├── Listening address: :8000 | └── Root URL: / ├── Health | ├── Server listening address: 127.0.0.1:9999 | ├── Healthchecks.io base URL: https://xxxx/ping | └── Healthchecks.io UUID: xxxx ├── Paths | └── Data directory: /updater/data ├── Backup: disabled └── Logger ├── Level: info └── Caller: hidden 2024-05-07T07:26:31Z INFO reading JSON config from file /updater/data/config.json 2024-05-07T07:26:31Z INFO Found 2 settings to update records 2024-05-07T07:26:31Z INFO Reading history from database: domain all.ddnskey.com host @ ipv4 2024-05-07T07:26:31Z INFO Reading history from database: domain xxxx host xxxx ipv4 2024-05-07T07:26:31Z INFO [backup] disabled 2024-05-07T07:26:31Z INFO [healthcheck server] listening on 127.0.0.1:9999 2024-05-07T07:26:31Z INFO [http server] listening on :8000 2024-05-07T07:26:31Z INFO obtaining ipv4 address succeeded after 1 failed try 2024/05/07 07:26:34 "GET http://xxxx/ HTTP/1.0" from 172.17.0.1:52862 - 200 2147B in 334.673µs 2024-05-07T07:31:31Z INFO ipv4 address of all.ddnskey.com is 34.198.182.201 and your ipv4 address is 93.239.x.x 2024-05-07T07:31:31Z INFO Updating record [domain: all.ddnskey.com | host: @ | provider: noip | ip: ipv4] to use 93.239.x.x 2024-05-07T07:41:31Z INFO ipv4 address of all.ddnskey.com is 34.198.182.201 and your ipv4 address is 93.239.x.x 2024-05-07T07:41:31Z INFO Updating record [domain: all.ddnskey.com | host: @ | provider: noip | ip: ipv4] to use 93.239.x.x ``` Configuration file ```json { "settings": [ { "provider": "noip", "domain": "all.ddnskey.com", "host": "@", "username": "xxxx", "password": "xxxx", "ip_version": "ipv4", "ipv6_suffix": "", "provide_ip": false }, { "provider": "cloudflare", "zone_identifier": "xxxx", "domain": "xxxx", "host": "xxxx", "ttl": 600, "token": "xxxx", "ip_version": "ipv4", "ipv6_suffix": "" } ] } ``` Host OS: Ubuntu 22.04.4 I encountered the following problem: Updating the ip for No-Ip with ddnskey works, but ddns updater cannot verify the updated ip. The reason is that it tries to match the updated ip against the ip of api domain of no-ip. With a ddnskey from no-ip, all domains need to access the same url (all.ddnskey.com) and no-ip is matching the domain to upgrade via the ddnskey (username). A solution would be to an extra field for no-ip where the actual domain that will be updated can be defined. Right now, ddns updater does not know for which domain the ip address has been updated. Output of the health check: ```log ERROR program is unhealthy: lookup IP addresses do not match: 34.198.182.201 instead of 93.239.x.x for all.ddnskey.com ``` Docs for ddnskey at no-ip: https://www.noip.com/support/knowledgebase/how-to-setup-and-use-a-ddns-key
Author
Owner

@qdm12 commented on GitHub (May 8, 2024):

Thanks for creating the issue 👍

A solution would be to an extra field for no-ip where the actual domain that will be updated can be defined.

In that case, wouldn't it be simpler to just update each subdomain in a separate setting block, instead of using all.<your-ddnskey>.com? Or is this not possible 🤔 ?

@qdm12 commented on GitHub (May 8, 2024): Thanks for creating the issue 👍 > A solution would be to an extra field for no-ip where the actual domain that will be updated can be defined. In that case, wouldn't it be simpler to just update each subdomain in a separate setting block, instead of using `all.<your-ddnskey>.com`? Or is this not possible 🤔 ?
Author
Owner

@Knokey commented on GitHub (May 8, 2024):

Thanks for the response.

No, I think this is not possible. all.ddnskey.com includes no placeholder. Setting this as your domain is mandatory that no-ip can determine you want to update via a ddnskey.

Excerpt from the no-ip documentation:

The DDNS settings may look different depending on what device is being configured, but the following information will be requested:
DDNS Provider: No-IP
Username: Your DDNS Key Username / Email
Password: Your DDNS Key Password
Hostname/Domain: all.ddnskey.com
Server/Server Address: dynupdate.no-ip.com
Not every device will ask you for a server or server address. The service will still work without issue, if the device does not ask for it.
@Knokey commented on GitHub (May 8, 2024): Thanks for the response. No, I think this is not possible. `all.ddnskey.com` includes no placeholder. Setting this as your domain is mandatory that no-ip can determine you want to update via a ddnskey. Excerpt from the no-ip documentation: ``` The DDNS settings may look different depending on what device is being configured, but the following information will be requested: DDNS Provider: No-IP Username: Your DDNS Key Username / Email Password: Your DDNS Key Password Hostname/Domain: all.ddnskey.com Server/Server Address: dynupdate.no-ip.com Not every device will ask you for a server or server address. The service will still work without issue, if the device does not ask for it. ```
Author
Owner

@Arelius-D commented on GitHub (May 8, 2024):

Is issue in this post somehow related to why Docker gives the status of this container being (unhealthy)?

I'm asking so I don't go ahead and create a issue if the problem is the same

I attached my docker logs .. and docker inspect.. outputs as .txt files here.

docker inspect.txt
docker logs.txt

@Arelius-D commented on GitHub (May 8, 2024): Is issue in this post somehow related to why Docker gives the status of this container being `(unhealthy)`? _I'm asking so I don't go ahead and create a issue if the problem is the same_ I attached my `docker logs ..` and `docker inspect..` outputs as .txt files here. [docker inspect.txt](https://github.com/qdm12/ddns-updater/files/15256239/docker.inspect.txt) [docker logs.txt](https://github.com/qdm12/ddns-updater/files/15256240/docker.logs.txt)
Author
Owner

@Knokey commented on GitHub (May 9, 2024):

I think your health check issue is different from mine. I get a wrong ip reported, because ddns updater cannot know the hostname that is updated and your health check is timed out.

@Knokey commented on GitHub (May 9, 2024): I think your health check issue is different from mine. I get a wrong ip reported, because ddns updater cannot know the hostname that is updated and your health check is timed out.
Author
Owner

@Arelius-D commented on GitHub (May 9, 2024):

I think your health check issue is different from mine. I get a wrong ip reported, because ddns updater cannot know the hostname that is updated and your health check is timed out.

I see, thank you for pointing that out! so I should go ahead and post my problem as a new issue then i suppose Good luck to!

@Arelius-D commented on GitHub (May 9, 2024): > I think your health check issue is different from mine. I get a wrong ip reported, because ddns updater cannot know the hostname that is updated and your health check is timed out. I see, thank you for pointing that out! _so I should go ahead and post my problem as a new issue then i suppose_ Good luck to!
Author
Owner

@king8084 commented on GitHub (Feb 17, 2025):

sad to see this isnt implemented :(

@king8084 commented on GitHub (Feb 17, 2025): sad to see this isnt implemented :(
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/ddns-updater#394