[Solved] DuckDNS IPv6 not updating properly on PPPoE setup

I've tried everything, from manual configuration in the LUCI interface to multiple config files and all I get is "No Data" or the previous IPv6 address assigned to me.

Here are the relevant contents of my /etc/config/ddns

config ddns 'global'
	option ddns_dateformat '%F %R'
	option ddns_loglines '250'
	option ddns_rundir '/var/run/ddns'
	option ddns_logdir '/var/log/ddns'
	option use_curl '1'

config service 'duckdns'
	option enabled '1'
	option lookup_host 'REDACTED_USER.duckdns.org'
	option use_ipv6 '0'
	option service_name 'duckdns.org'
	option domain 'REDACTED_USER.duckdns.org'
	option username 'REDACTED_USER'
	option password 'REDACTED'
	option use_https '1'
	option ip_source 'network'
	option ip_network 'wan'
	option interface 'wan'
	option use_syslog '2'
	option check_interval '10'
	option check_unit 'minutes'
	option force_interval '24'
	option force_unit 'hours'

config service 'duckdnsv6'
	option enabled '1'
	option update_url 'http://www.duckdns.org/update?domains=[USERNAME]&token=[PASSWORD]&ip=[IP]'
	option lookup_host 'REDACTED_USER.duckdns.org'
	option use_ipv6 '1'
	option domain 'REDACTED_USER.duckdns.org'
	option username 'REDACTED_USER'
	option password 'REDACTED'
	option use_https '1'
	option ip_source 'network'
	option ip_network 'wan6'
	option interface 'wan6'
	option use_syslog '2'
	option check_interval '10'
	option check_unit 'minutes'
	option force_interval '72'
	option force_unit 'hours'

config service 'DuckDNS_ipv6'
	option enabled '1'
	option lookup_host 'REDACTED_USER.duckdns.org'
	option username 'REDACTED_USER'
	option domain 'REDACTED_USER.duckdns.org'
	option password 'REDACTED'
	option use_ipv6 '1'
	option ip_source 'network'
	option ip_network 'wan6'
	option interface 'wan6'
	option check_interval '1'
	option check_unit 'hours'
	option update_url 'https://www.duckdns.org/update?domains=[USERNAME]&token=[PASSWORD]&ipv6=[IP]'
	option use_https '1'
	option use_syslog '2'

The IPv4 configuration was made using the GUI and works, the IPv6 configurations were made based on the DuckDNS site install guide for openwrt and the openwrt wiki respectively, after the GUI config failed.

Could the problem be that I have to manually update the subdomain IPv6 on the web for the update to work even though I have "network" configured as the "ip_source"?

By now I assume that either something is fishy with my ISP, openwrt hates me or my hardware hates me.

1 Like

Replace these 2 entries with one regular config (not custom). Show DDNS client log if the problem persists.

1 Like

I'm only including the final log, since there are a lot of them and mostly identical, barring the date and time. If more entries are required I'll edit the reply to include them. I've also tried using the 'wan' interface and the global settings to use curl instead of wget.

ddns.duckdnsv6.check_interval='50'
ddns.duckdnsv6.check_unit='minutes'
ddns.duckdnsv6.domain='REDACTED_USER.duckdns.org'
ddns.duckdnsv6.enabled='1'
ddns.duckdnsv6.force_interval='72'
ddns.duckdnsv6.force_unit='hours'
ddns.duckdnsv6.interface='wan6'
ddns.duckdnsv6.ip_network='wan6'
ddns.duckdnsv6.ip_source='network'
ddns.duckdnsv6.lookup_host='REDACTED_USER.duckdns.org'
ddns.duckdnsv6.password='***PW***'
ddns.duckdnsv6.service_name='duckdns.org'
ddns.duckdnsv6.use_https='1'
ddns.duckdnsv6.use_ipv6='1'
ddns.duckdnsv6.use_syslog='2'
ddns.duckdnsv6.username='REDACTED_USER'
ddns.duckdnsv6=service
 164326       : verbose mode  : 0 - run normal, NO console output
 164326       : check interval: 3000 seconds
 164327       : force interval: 259200 seconds
 164327       : retry interval: 60 seconds
 164327       : retry max count : 0 times
 164327       : No old process
 164327       : last update: never
 164327       : Detect registered/public IP
 164327       : #> /usr/bin/host -t AAAA REDACTED_USER.duckdns.org  >/var/run/ddns/duckdnsv6.dat 2>/var/run/ddns/duckdnsv6.err
 164337       : Registered IP 'REDACTED' detected
 164337  info : Starting main loop at 2025-03-03 16:43
 164338       : Detect current IP on 'network'
 164338 ERROR : Can not detect current IP using network_get_ipaddr6 'wan6' - Error: '1' - TERMINATE
 164338  WARN : PID '10322' exit WITH ERROR '1' at 2025-03-03 16:43

Also here's my network configuration, since that might also be responsible. I'm still uncertain what I should do with 'wan6'. For the moment I have it as an alias to the virtual dynamic interface 'wan_6', created by the 'wan' PPPoE interface.

/etc/config/network

config interface 'loopback'
	option device 'lo'
	option proto 'static'
	option ipaddr '127.0.0.1'
	option netmask '255.0.0.0'

config globals 'globals'
	option ula_prefix 'REDACTED'
	option packet_steering '1'

config device
	option name 'br-lan'
	option type 'bridge'
	list ports 'lan1'
	list ports 'lan2'
	list ports 'lan3'

config interface 'lan'
	option device 'br-lan'
	option proto 'static'
	option ipaddr '192.168.50.1'
	option netmask '255.255.255.0'
	option ip6assign '60'

config interface 'wan'
	option device 'wan'
	option proto 'pppoe'
	option username 'REDACTED'
	option password 'REDACTED'
	option ipv6 'auto'
	option peerdns '0'
	list dns '1.1.1.1'
	list dns '1.0.0.1'

config interface 'wan6'
	option device '@wan_6'
	option proto 'dhcpv6'
	option peerdns '0'
	list dns '2606:4700:4700::1111'
	list dns '2606:4700:4700::1001'
	option reqaddress 'try'
	option reqprefix 'auto'
	option norelease '1'

That tells you that wan6 is not the right interface.
You can switch from "Network" to "Interface", ip -o addr show | grep inet6 will help you to find what name should be used there.

Normally it should be '@wan'
I don't have any router with PPPoE these days and not even sure this interface is needed at all.

Part of why I think my less than ideal setup is interfering.

The 'wan_6' interface is automatically created after configuring the 'wan' interface and is a virtual dynamic interface, meaning I can't edit it at all. It also displays the IPv6 address of the router, as well as the IPv6-PD. Hence why I changed the 'wan6' (no underscore) interface to be an alias of 'wan_6', instead of the default DHCPv6 client.

I don't think that is needed. I would delete wan6 completely and select wan_6 as a Network for DDNS.

I was uncertain I should, since it mentions 'no interfaces attached' in the GUI, but after setting it up it suddenly started showing me the my IPv6 before the last reboot of the router and the time of the next update (which not even the IPv4 interface does).

Unfortunately a reload led to an error (XHR request time out), so the IP still isn't correct... Here is the log.

ddns.duckdnsv6.check_interval='10'
ddns.duckdnsv6.check_unit='minutes'
ddns.duckdnsv6.domain='REDACTED_USER.duckdns.org'
ddns.duckdnsv6.enabled='1'
ddns.duckdnsv6.force_interval='72'
ddns.duckdnsv6.force_unit='hours'
ddns.duckdnsv6.interface='wan_6'
ddns.duckdnsv6.ip_network='wan_6'
ddns.duckdnsv6.ip_source='network'
ddns.duckdnsv6.lookup_host='REDACTED_USER.duckdns.org'
ddns.duckdnsv6.password='REDACTED'
ddns.duckdnsv6.update_url='http://www.duckdns.org/update?domains=[USERNAME]&token=[PASSWORD]&ip=[IP]'
ddns.duckdnsv6.use_https='1'
ddns.duckdnsv6.use_ipv6='1'
ddns.duckdnsv6.use_syslog='2'
ddns.duckdnsv6.username='REDACTED_USER'
ddns.duckdnsv6=service
 180414       : verbose mode  : 0 - run normal, NO console output
 180414       : check interval: 600 seconds
 180414       : force interval: 259200 seconds
 180414       : retry interval: 60 seconds
 180414       : retry max count : 0 times
 180415       : No old process
 180415       : last update: 2025-03-03 18:00
 180415       : Detect registered/public IP
 180415       : #> /usr/bin/host -t AAAA REDACTED_USER.duckdns.org  >/var/run/ddns/duckdnsv6.dat 2>/var/run/ddns/duckdnsv6.err
 180420 ERROR : BIND host error: '1'
 180420       : 
 180420       : Detect registered/public IP
 180420       : #> /usr/bin/host -t AAAA REDACTED_USER.duckdns.org  >/var/run/ddns/duckdnsv6.dat 2>/var/run/ddns/duckdnsv6.err
 180421 ERROR : BIND host error: '1'
 180421       : 
 180421  WARN : Get registered/public IP for 'REDACTED_USER.duckdns.org' failed - retry 1/0 in 60 seconds
 180521       : #> /usr/bin/host -t AAAA REDACTED_USER.duckdns.org  >/var/run/ddns/duckdnsv6.dat 2>/var/run/ddns/duckdnsv6.err
 180521 ERROR : BIND host error: '1'
 180521       : 
 180521  WARN : Get registered/public IP for 'REDACTED_USER.duckdns.org' failed - retry 2/0 in 60 seconds

You have a custom configuration (again) that you don't need.
"XHR request time out" can be safely ignored.

Kept everything default this time and the error is as follows:

/var/log/ddns/DuckDNSv6.log

 184509       : Update needed - L: 'REDACTE_CURRENT_IP' <> R: 'REDACTED_OLD_IP'
 184509       : Force communication via IP 'REDACTED_CURRENT_IP'
 184509       : #> /usr/bin/wget --hsts-file=/tmp/.wget-hsts -nv -t 1 -O /var/run/ddns/DuckDNSv6.dat -o /var/run/ddns/DuckDNSv6.err --bind-address=REDACTED_CURRENT_ADDRESS --no-proxy 'https://www.duckdns.org/update?domains=REDACTED_USER.duckdns.org&token=***PW***&ipv6=REDACTED_CURRENT_IP'
 184515 ERROR : GNU Wget Error: '4'
 184515       : wget: unable to resolve host address 'www.duckdns.org'
 184515  WARN : Transfer failed - retry 1/0 in 60 seconds

Install curl (and enable it in DDNS Global section) and try again.
See "GNU Wget Error: '4' failed: Address family not supported by protocol" when using ddns-scripts for ipv6 - #11 by AndrewZ
In either case I suggest to find an alternative to DuckDNS.

It would probably be for the best. I had disabled curl because of the following error appearing:

 185522       : Detect registered/public IP
 185522       : #> /usr/bin/host -t AAAA REDACTED_USER.duckdns.org  >/var/run/ddns/DuckDNSv6.dat 2>/var/run/ddns/DuckDNSv6.err
 185522 ERROR : BIND host error: '1'
 185522       : 
 185522  WARN : Get registered/public IP for 'REDACTED_USER.duckdns.org' failed - retry 1/0 in 60 seconds

Install hostip or drill or another similar tool and the script will use it instead of host. With drill you can use TCP as a transport for DNS requests.

But also see my comment at the very end:

Today while testing I noticed the same timeouts again.

Thanks for the help. I'll probably look for an alternative to DuckDNS, but for now it seems to work. The last problem seems to have been with my certificate for https. I generated it again and now everything works. For all I know it could've been the initial problem as well.

I'm not sure how long it'll work for, since looking at the config file the 'option cacert' doesn't exist, but it might still be alright, since it's in the default location.

You don't need to generate certificates.
The option to use is cacert '/etc/ssl/certs/ca-certificates.crt'

1 Like