odhcpd RA Handling and Missing RA Packets in tcpdump (OpenWrt 24.10.1)
Hi OpenWrt Community,
I’m running OpenWrt 24.10.1 on an aarch64_cortex-a53 device with dnsmasq-full and odhcpd-ipv6only in a dual-stack LAN, which my Android devices rely on for IPv6 connectivity. The setup is stable: dnsmasq-full handles IPv4 DHCP and DNS (ad-blocking via adblock-fast, NXDOMAIN
for doubleclick.net
), and odhcpd manages IPv6 PD (2001:56a:7ec7:3a00::/60
). Clients receive IPv6 addresses via SLAAC, and ping -6 google.com
works, confirming functional IPv6.
My /etc/config/dhcp
is:
config dhcp 'lan'
option interface 'lan'
option start '100'
option limit '150'
option leasetime '12h'
option dhcpv4 'server'
option dhcpv6 'server'
option ra 'server'
option ra_slaac '1'
list ra_flags 'managed-config'
list ra_flags 'other-config'
config odhcpd 'odhcpd'
option maindhcp '0'
option leasefile '/tmp/hosts/odhcpd'
option leasetrigger '/usr/sbin/odhcpd-update'
option loglevel '4'
However, tcpdump -i br-lan -n icmp6 and host ff02::1
shows RS packets but no RA packets over ~25-minute captures. The dnsmasq runtime config (/var/etc/dnsmasq.conf.cfg01411c
) lacks enable-ra
or IPv6 dhcp-range
, despite ra='server'
, so dnsmasq isn’t sending RAs. Since IPv6 works, I believe odhcpd handles RAs for PD, even with maindhcp '0'
. logread -e odhcpd | grep -i ra
is empty, suggesting silent RA sending.
A forum post (March 2022) notes odhcpd’s config is embedded in /etc/config/network
and that preferred_lifetime
doesn’t affect SLAAC RA messages, hinting at rigid RA behavior in SLAAC mode (used here). I want odhcpd to handle RAs, as it’s working fine, and don’t need dnsmasq to send them. I reverted temporary dnsmasq RA changes (e.g., dhcp-option
, ra_mininterval
) to my original config, and IPv6 remains stable. Questions:
- Is it expected for odhcpd to send RAs with
maindhcp '0'
when dnsmasq has ra='server'
? Why might RAs be missing in tcpdump
(sparse sending, timing)?
- Is there a bug in OpenWrt 24.10.1 where
dhcp.lan.ra='server'
fails to generate enable-ra
/dhcp-range
in dnsmasq’s runtime config?
- If dnsmasq RA is intended, how do I configure
enable-ra
and IPv6 dhcp-range
without disrupting odhcpd’s PD?
Can the community confirm odhcpd’s RA role, explain the tcpdump
absence, or clarify SLAAC RA behavior? Logs/configs available.
Thanks!
Can you show
ubus call system board
cat /etc/config/network
from your OpenWrt device.
Hi brada4. Thanks for your quick reply: Below are the requested outputs from my OpenWrt One 24.10.1 device:
root@OpenWrt:~# ubus call system board
{
"kernel": "6.6.86",
"hostname": "OpenWrt",
"system": "ARMv8 Processor rev 4",
"model": "OpenWrt One",
"board_name": "openwrt,one",
"rootfs_type": "squashfs",
"release": {
"distribution": "OpenWrt",
"version": "24.10.1",
"revision": "r28597-0425664679",
"target": "mediatek/filogic",
"description": "OpenWrt 24.10.1 r28597-0425664679",
"builddate": "1744562312"
}
}
root@OpenWrt:~# cat /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 'fdd5:266b:5da7::/48'
option packet_steering '1'
config device
option name 'br-lan'
option type 'bridge'
list ports 'eth1'
config interface 'lan'
option device 'br-lan'
option proto 'static'
option ipaddr '192.168.1.1'
option netmask '255.255.255.0'
option ip6assign '60'
config interface 'wan'
option device 'eth0'
option proto 'dhcp'
config interface 'wan6'
option device 'eth0'
option proto 'dhcpv6'
config interface 'ovpn'
option proto 'none'
option device 'tun0'
root@OpenWrt:~#
For kernel-level RA settings:
root@OpenWrt:/var/etc# cat /proc/sys/net/ipv6/conf/br-lan/forwarding
1
root@OpenWrt:/var/etc#
root@OpenWrt:/var/etc# cat /proc/sys/net/ipv6/conf/br-lan/accept_ra
0
root@OpenWrt:/var/etc#
root@OpenWrt:~# cat /proc/sys/net/ipv6/conf/br-lan/send_redirects
cat: can't open '/proc/sys/net/ipv6/conf/br-lan/send_redirects': No such file or directory
root@OpenWrt:~#
root@OpenWrt:~# sysctl -a | grep br-lan | grep multicast
net.ipv4.conf.br-lan.drop_unicast_in_l2_multicast = 0
sysctl: error reading key 'net.ipv6.conf.all.stable_secret': I/O error
net.ipv6.conf.br-lan.drop_unicast_in_l2_multicast = 0
sysctl: error reading key 'net.ipv6.conf.br-lan.stable_secret': I/O error
sysctl: error reading key 'net.ipv6.conf.default.stable_secret': I/O error
sysctl: error reading key 'net.ipv6.conf.eth0.stable_secret': I/O error
sysctl: error reading key 'net.ipv6.conf.eth1.stable_secret': I/O error
sysctl: error reading key 'net.ipv6.conf.lo.stable_secret': I/O error
sysctl: error reading key 'net.ipv6.conf.phy0-ap0.stable_secret': I/O error
sysctl: error reading key 'net.ipv6.conf.phy1-ap0.stable_secret': I/O error
root@OpenWrt:~#
IPv6 is stable (clients get 2001:56a:7ec7:3a00::/60
via SLAAC, ping -6 google.com
works), so odhcpd is likely sending RAs for PD, despite maindhcp '0'
. The missing send_redirects
and stable_secret
errors suggest kernel or driver quirks on my aarch64_cortex-a53
device—could this hide RAs from tcpdump
? A forum post (March 2022) notes odhcpd’s SLAAC RA parameters (e.g., preferred_lifetime
) are rigid, possibly explaining sparse RAs. I’m happy with odhcpd handling RAs and don’t need dnsmasq to send them. Is ra='server'
failing to generate enable-ra
/dhcp-range
in dnsmasq’s runtime config a bug in 24.10.1?
Thanks for any help/insights!