Hi everyone,
I’m encountering a strange issue with IPv6 Router Advertisements on my MikroTik RB5009UPr+S+ running RouterOS v7.18.2 and hoping for some insights on whether this might be a bug or a subtle misconfiguration I’m missing. I’ve hidden my IPv6 prefix with YOUR_DELEGATED_PREFIX_BASE for privacy reasons. Also, excuse the formatting. I’m used to markdown.
Setup Overview:
- ISP Router: Fritz!Box (
rt1) providing internet access and a delegated IPv6 prefix via DHCPv6-PD (e.g.,[YOUR_DELEGATED_PREFIX_BASE]::/60). - MikroTik Router (
rt2): RB5009UPr+S+ (ROS v7.18.2). Connected to the Fritz!Box via a bridge interface (bridge). Acts as the internal router/switch. - Configuration:
rt2obtains a prefix fromrt1using/ipv6 dhcp-clienton thebridgeinterface (request=prefix pool-name=fritz!box).rt2has a bridge (bridge) withvlan-filtering=yes.- Several VLAN interfaces are configured on the
bridgefor different segments (e.g.,vlan11for k8s control plane,vlan12for data,vlan13for network). - A separate
wireguardinterface exists. - Specific /64 subnets from the delegated prefix are assigned to each VLAN interface and the WireGuard interface using
/ipv6 address(e.g.,[YOUR_DELEGATED_PREFIX_BASE]:fc::/64for vlan11,...:fd::/64for vlan12, etc.). /ipv6 nd prefixis configured (dynamically,Dflag) to advertise the correct /64 prefix on its corresponding interface./ipv6 ndinterface settings forvlan11,vlan12,vlan13havera-lifetime=noneset to preventrt2from being a default router on these segments.
- Clients: Talos Linux nodes connected to
rt2via trunk ports carrying the necessary VLANs (e.g., VLAN 11, VLAN 12). These nodes use SLAAC to configure IPv6 addresses based on received RAs.
The Problem:
Clients (Talos nodes) are incorrectly configuring multiple global IPv6 addresses via SLAAC on their VLAN sub-interfaces. Specifically:
- The interface for VLAN 11 (
end0.11) gets an address from its correct prefix ([YOUR_DELEGATED_PREFIX_BASE]:fc::/64) AND an address from the WireGuard prefix ([YOUR_DELEGATED_PREFIX_BASE]:ff::/64). - The interface for VLAN 12 (
end0.12) gets an address from its correct prefix ([YOUR_DELEGATED_PREFIX_BASE]:fd::/64) AND an address from the VLAN 11 prefix ([YOUR_DELEGATED_PREFIX_BASE]:fc::/64).
This results in duplicate on-link routes on the clients for the incorrectly assigned prefixes.
Evidence:
1. MikroTik Configuration (Looks Correct):
/ipv6 address print detailshows each prefix (:fc:,:fd:,:fe:,:ff:) assigned correctly and uniquely tovlan11,vlan12,vlan13,wireguardrespectively, withadvertise=yes./ipv6 nd prefix print detailshows each prefix listed correctly for advertisement only on its intended interface./ipv6 nd print detail(interface settings) showsra-lifetime=nonecorrectly set on VLANs.
MikroTik rt2 (ROS 7.18.2) Config Snippets:
# /ipv6 address print detail (Global Addresses Only)
Flags: G - global
0 G address=[YOUR_DELEGATED_PREFIX_BASE]:fd::1/64 interface=vlan12 advertise=yes
1 G address=[YOUR_DELEGATED_PREFIX_BASE]:fe::1/64 interface=vlan13 advertise=yes
2 G address=[YOUR_DELEGATED_PREFIX_BASE]:ff::1/64 interface=wireguard advertise=yes
9 G address=[YOUR_DELEGATED_PREFIX_BASE]:fc::1/64 interface=vlan11 advertise=yes
# /ipv6 nd prefix print detail
Flags: D - dynamic
0 D prefix=[YOUR_DELEGATED_PREFIX_BASE]:fc::/64 interface=vlan11 on-link=yes autonomous=yes ...
1 D prefix=[YOUR_DELEGATED_PREFIX_BASE]:fd::/64 interface=vlan12 on-link=yes autonomous=yes ...
2 D prefix=[YOUR_DELEGATED_PREFIX_BASE]:fe::/64 interface=vlan13 on-link=yes autonomous=yes ...
3 D prefix=[YOUR_DELEGATED_PREFIX_BASE]:ff::/64 interface=wireguard on-link=yes autonomous=yes ...
# /ipv6 nd print detail (Interface Settings Only)
Flags: * - default
0 * interface=all ra-lifetime=30m ... advertise-dns=yes ...
1 interface=vlan11 ra-lifetime=none advertise-dns=yes ...
2 interface=vlan12 ra-lifetime=none advertise-dns=yes ...
3 interface=vlan13 ra-lifetime=none advertise-dns=yes ...
# /interface bridge print detail where name=bridge
Flags: X - disabled, R - running
0 R name="bridge" mtu=auto actual-mtu=1500 l2mtu=10218 ... admin-mac=[RT2_MAC_ADDRESS] ... vlan-filtering=yes ... pvid=10 ... protocol-mode=mstp ...
# /interface vlan print detail where interface=bridge (Excerpt)
Flags: X - disabled, R - running; S - slave
...
name="vlan11" mtu=1500 l2mtu=10214 mac-address=[RT2_MAC_ADDRESS] arp=enabled vlan-id=11 interface=bridge ...
name="vlan12" mtu=1500 l2mtu=10214 mac-address=[RT2_MAC_ADDRESS] arp=enabled vlan-id=12 interface=bridge ...
name="vlan13" mtu=1500 l2mtu=10214 mac-address=[RT2_MAC_ADDRESS] arp=enabled vlan-id=13 interface=bridge ...
# /ipv6 dhcp-client print detail
Flags: D - dynamic, X - disabled, I - invalid
0 D interface=bridge pool-name="fritz!box" prefix-hint=::/60 request=prefix use-peer-dns=yes pool-prefix-length=64 dhcp-options=hostname,clientid add-default-route=yes use-interface-duid=no client-duid="...." status=bound
2. Client State (Incorrect):
Talos Client (talos-lhi-31e) Output Snippets:
# ip -brief -6 a l up (Excerpt)
end0.11@end0 UP [YOUR_DELEGATED_PREFIX_BASE]:ff:[EUI64_INTERFACE_ID]/64 [YOUR_DELEGATED_PREFIX_BASE]:fc:[EUI64_INTERFACE_ID]/64 fe80::[EUI64_INTERFACE_ID]/64
end0.12@end0 UP [YOUR_DELEGATED_PREFIX_BASE]:fc:[EUI64_INTERFACE_ID]/64 [YOUR_DELEGATED_PREFIX_BASE]:fd:[EUI64_INTERFACE_ID]/64 fe80::[EUI64_INTERFACE_ID]/64
# ip -6 -brief route (Excerpt)
[YOUR_DELEGATED_PREFIX_BASE]:fc::/64 dev end0.12 proto kernel metric 256 expires ... pref medium
[YOUR_DELEGATED_PREFIX_BASE]:fc::/64 dev end0.11 proto kernel metric 256 expires ... pref medium
[YOUR_DELEGATED_PREFIX_BASE]:fd::/64 dev end0.12 proto kernel metric 256 expires ... pref medium
[YOUR_DELEGATED_PREFIX_BASE]:ff::/64 dev end0.11 proto kernel metric 256 expires ... pref medium
3. Packet Capture (tcpdump on Client - The Proof):
Running tcpdump -i end0.11 -n 'icmp6 and ip6[40] == 134' -vv on the Talos node clearly shows Router Advertisement packets originating from rt2 (source fe80::[RT2_LINK_LOCAL_SUFFIX]) that contain TWO prefix info option entries: one for the correct :fc::/64 and one for the incorrect :ff::/64. This proves rt2 is sending incorrectly formed RA packets, despite its configuration appearing correct.
tcpdump on Talos end0.11 (Excerpt showing relevant RA):
# tcpdump -i end0.11 -n 'icmp6 and ip6[40] == 134' -vv
... IP6 (...) fe80::[RT2_LINK_LOCAL_SUFFIX] > ff02::1: ... ICMP6, router advertisement ...
source link-address option (1), length 8 (1): [RT2_MAC_ADDRESS]
rdnss option (25), length 40 (5): lifetime ...s, addr: [YOUR_DELEGATED_PREFIX_BASE]:1:[FRITZBOX_INTERFACE_ID] addr: [ULA_PREFIX]:0:[FRITZBOX_INTERFACE_ID]
prefix info option (3), length 32 (4): [YOUR_DELEGATED_PREFIX_BASE]:fc::/64, Flags [onlink, auto], ... [b]# CORRECT for vlan11[/b]
prefix info option (3), length 32 (4): [YOUR_DELEGATED_PREFIX_BASE]:ff::/64, Flags [onlink, auto], ... [b]# INCORRECT for vlan11 (belongs to wireguard)[/b]
...
Troubleshooting Steps Taken:
- Confirmed basic IPv6 connectivity works fine (clients can ping external IPv6 hosts).
- Verified
/ipv6 address,/ipv6 nd prefix, and/ipv6 ndsettings onrt2multiple times – they appear logically correct. - Rebooted client nodes – the incorrect addresses/routes are re-learned via SLAAC from the faulty RAs.
- Checked client (Talos) configuration – no relevant static IPv6 addresses configured. Issue stems from SLAAC.
- Confirmed DAD is not relevant here (issue is multiple prefixes on one interface, not duplicate IPs).
- Confirmed
ra-lifetime=noneworks correctly for suppressing default routes fromrt2.
Question:
Given that the MikroTik configuration (/ipv6 address, /ipv6 nd prefix) looks correct, but the actual RA packets being sent (verified by tcpdump) contain prefixes belonging to other interfaces, is this likely:
- A bug in RouterOS 7.18.2’s RA daemon, possibly related to interaction between DHCPv6-PD, VLANs on bridges, and prefix advertising?
- A subtle misconfiguration in my bridge, VLAN, or DHCPv6-PD setup that I’m overlooking, which could cause the RA daemon to bundle prefixes incorrectly?
Has anyone encountered similar behavior? Are there known issues or workarounds for RouterOS 7.18.x in this area?
Thanks in advance for any insights or suggestions!
