openwrt / openwrt/packages

DDNS update reports success ("nochg"/"good") but the DNS record for the bare domain is not updated on the authoritative server.

Open
#28,884 3 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug
Dominant language
Makefile
Stars
4.6k
Forks
4k
Avg merge
3d 12h
Merged PRs (30d)
134

Description

Package Name

ddns-scripts

Maintainer

@feckert

OpenWrt Version

OpenWrt 19.07-SNAPSHOT

OpenWrt Target/Subtarget

OpenWrt 19.07-SNAPSHOT

Steps to Reproduce

To reproduce

  1. Configure DDNS on OpenWrt with:
    service: no-ip.com
    domain: pr60xddnsnoip.net (bare domain)
  2. Trigger update via:
    /usr/lib/ddns/dynamic_dns_updater.sh
  3. Observe DDNS log:
    Response: nochg <current_ip>

Actual behaviour
Even after successful DDNS update, querying authoritative DNS:
dig @ns1.no-ip.com pr60xddnsnoip.net Returns old IP (8.8.8.8)

Expected behaviour
After successful DDNS update, authoritative DNS should return updated public IP.

Additional info

  • DDNS update URL used: https://dynupdate.no-ip.com/nic/update
  • Manual curl test: curl "https://user:pass@dynupdate.noip.com/nic/update?hostname=pr60xddnsnoip.net&myip=127.0.0.1"Response: nochg 127.0.0.1
  • Network: WAN dynamic IP

Question

  • Does OpenWrt DDNS support updating bare domains (@) with No-IP and we have similar issue with the easyDNS also?
  • Or is this a provider limitation where only subdomains are supported?

Logs
123822 : ************ ************** ************** ************** 123822 note : PID '6188' started at 2026-03-12 12:38 123822 : ddns version : 2.8.2-2026.03.02.1772459543-56ffef36 123822 : uci configuration: ddns.df4cc69e_9bd2_49b3_a2a3_b219274647fa.check_interval='10' ddns.df4cc69e_9bd2_49b3_a2a3_b219274647fa.check_unit='minutes' ddns.df4cc69e_9bd2_49b3_a2a3_b219274647fa.ddns_status='2' ddns.df4cc69e_9bd2_49b3_a2a3_b219274647fa.domain='pr60xddnsnoip.net' ddns.df4cc69e_9bd2_49b3_a2a3_b219274647fa.enabled='1' ddns.df4cc69e_9bd2_49b3_a2a3_b219274647fa.interface='wan' ddns.df4cc69e_9bd2_49b3_a2a3_b219274647fa.ip_source='web' ddns.df4cc69e_9bd2_49b3_a2a3_b219274647fa.ip_url='https://ipv4.wtfismyip.com/text' ddns.df4cc69e_9bd2_49b3_a2a3_b219274647fa.lookup_host='pr60xddnsnoip.net' ddns.df4cc69e_9bd2_49b3_a2a3_b219274647fa.password='11yBupEeiypu' ddns.df4cc69e_9bd2_49b3_a2a3_b219274647fa.profile_name='Test1' ddns.df4cc69e_9bd2_49b3_a2a3_b219274647fa.service_name='http://no-ip.com ' ddns.df4cc69e_9bd2_49b3_a2a3_b219274647fa.use_https='1' ddns.df4cc69e_9bd2_49b3_a2a3_b219274647fa.use_syslog='1' ddns.df4cc69e_9bd2_49b3_a2a3_b219274647fa.username='he2jkzt@ddnskey.com' ddns.df4cc69e_9bd2_49b3_a2a3_b219274647fa=service 123822 : verbose mode : 2 - run once, NO retry on error 123822 : check interval: 600 seconds 123822 : force interval: 259200 seconds 123822 : retry interval: 60 seconds 123822 : retry max count : 0 times 123822 : 'SIGTERM' was send to old process 123822 : last update: 2026-03-12 12:38 123822 : Detect registered/public IP 123822 : #> /usr/bin/nslookup pr60xddnsnoip.net >/var/run/ddns/df4cc69e_9bd2_49b3_a2a3_b219274647fa.dat 2>/var/run/ddns/df4cc69e_9bd2_49b3_a2a3_b219274647fa.err 123822 : Registered IP '8.8.8.8' detected 123822 info : Starting main loop at 2026-03-12 12:38 123822 : Detect current IP on 'web' 123822 : #> /usr/sbin/mwan3 use wan /usr/bin/curl -RsS -o /var/run/ddns/df4cc69e_9bd2_49b3_a2a3_b219274647fa.dat --stderr /var/run/ddns/df4cc69e_9bd2_49b3_a2a3_b219274647fa.err 'https://ipv4.wtfismyip.com/text' Running '/usr/bin/curl -RsS -o /var/run/ddns/df4cc69e_9bd2_49b3_a2a3_b219274647fa.dat --stderr /var/run/ddns/df4cc69e_9bd2_49b3_a2a3_b219274647fa.err https://ipv4.wtfismyip.com/text' with DEVICE=eth0 SRCIP=192.168.1.157 FWMARK=0x3f00 FAMILY=ipv4 123823 : Current IP '122.184.118.114' detected on web at 'https://ipv4.wtfismyip.com/text' 123823 : Update needed - L: '122.184.118.114' <> R: '8.8.8.8' 123823 : parsing script '/usr/lib/ddns/update_no-ip_com.sh' 123823 : sending dummy IP to 'http://no-ip.com ' 123823 : #> /usr/sbin/mwan3 use wan /usr/bin/curl -RsS -o /var/run/ddns/df4cc69e_9bd2_49b3_a2a3_b219274647fa.dat --stderr /var/run/ddns/df4cc69e_9bd2_49b3_a2a3_b219274647fa.err 'https://he2jkzt%40ddnskey.com:11yBupEeiypu@dynupdate.noip.com/nic/update?hostname=pr60xddnsnoip.net&myip=127.0.0.1' Running '/usr/bin/curl -RsS -o /var/run/ddns/df4cc69e_9bd2_49b3_a2a3_b219274647fa.dat --stderr /var/run/ddns/df4cc69e_9bd2_49b3_a2a3_b219274647fa.err https://he2jkzt%40ddnskey.com:11yBupEeiypu@dynupdate.noip.com/nic/update?hostname=pr60xddnsnoip.net&myip=127.0.0.1' with DEVICE=eth0 SRCIP=192.168.1.157 FWMARK=0x3f00 FAMILY=ipv4 123824 : 'http://no-ip.com ' answered: nochg 127.0.0.1 123825 : sending real IP to 'http://no-ip.com ' 123825 : #> /usr/sbin/mwan3 use wan /usr/bin/curl -RsS -o /var/run/ddns/df4cc69e_9bd2_49b3_a2a3_b219274647fa.dat --stderr /var/run/ddns/df4cc69e_9bd2_49b3_a2a3_b219274647fa.err 'https://he2jkzt%40ddnskey.com:11yBupEeiypu@dynupdate.noip.com/nic/update?hostname=pr60xddnsnoip.net&myip=122.184.118.114' Running '/usr/bin/curl -RsS -o /var/run/ddns/df4cc69e_9bd2_49b3_a2a3_b219274647fa.dat --stderr /var/run/ddns/df4cc69e_9bd2_49b3_a2a3_b219274647fa.err https://he2jkzt%40ddnskey.com:11yBupEeiypu@dynupdate.noip.com/nic/update?hostname=pr60xddnsnoip.net&myip=122.184.118.114' with DEVICE=eth0 SRCIP=192.168.1.157 FWMARK=0x3f00 FAMILY=ipv4 123826 : 'http://no-ip.com ' answered: nochg 122.184.118.114 123826 info : Update successful - IP '122.184.118.114' send 123826 : Waiting 600 seconds (Check Interval)

Actual Behaviour

Even after successful DDNS update, querying authoritative DNS:
dig @ns1.no-ip.com pr60xddnsnoip.net

Returns old IP (8.8.8.8)

Confirmation Checklist

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with /usr/lib/ddns/dynamic_dns_updater.sh and /usr/lib/ddns/update_no-ip_com.sh, then reproduce the request with curl and verify the result using dig against the authoritative server. Compare the provider's handling of the bare domain, the dummy-IP response, and the real-IP response. Done means establishing whether the update script or No-IP's bare-domain support is responsible and documenting or correcting the behavior accordingly.

Written by the indexing model from the issue text.

Assessment

Tech stack
shell
Domain
networking
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.