IPv6 Setup Weirdness

UPDATE

These are the settings that worked for me for Spectrum.

/ipv6 settings should be default. That means that accept-router-advertisements should be set to yes-if-forwarding-disabled.

/ipv6 dhcp-client
add add-default-route=yes interface=ether1 pool-name=ipv6 prefix-hint=::/56 \
    request=prefix use-peer-dns=no



/ipv6 nd
set [ find default=yes ] interface=BR1

Replace BR1 with whatever your Bridge is called.

UPDATE

Okay, I have a bunch of questions and every time I think I have figured something out, something else is weird.

I am setting up IPv6 on my network, since I recently discovered that Spectrum offers this where I am. I have read a BUNCH of forum posts. I am putting the work in to try and understand what I am doing and what should be happening.

I basically followed this guide and I stopped.

  1. The weird thing is I am getting a random Dynamic Global address on only one of my VLANs and I have no idea why. I get link-local addresses on each of my interfaces. And a single DG address on a VLAN.

Other questions I have, every post I have seen says to setup the IPv6 client like

/ipv6 dhcp-client add interface=ether1 request=prefix pool-name=ipv6 use-peer-dns=no
  1. Am I just not supposed to get an address an IPv6 address on ether1? Because I don’t unless I request it.

Also, as I understand it, I should get a default route from my ISP using the RA. I do not. I have to check

add-default-route=yes

in order for that to generate.

  1. Is there something else I should be doing? I have ZERO firewall rules so far cause I’m just trying to get it to work.

ipv6 config included.
ipv6.rsc (425 Bytes)

basically followed this guide and I stopped.

I just get a blank wiki page here.

add-default-route=yes

You probably dont want this. You will get a route by listening to RAs on your WAN interface. This command just sets a default route pointing to the DHCP server.

Also not sure about your neighbor discovery

/ipv6 nd
set [ find default=yes ] interface=BR1

You will need ND active on your WAN interface to get a default route.

Here are some basic commands to see how your IPv6 is working

# basic ipv6
/ipv6/settings/print

# check address assignments
/ipv6/address print
/ipv6/dhcp-client/ print
/ipv6/pool print

# see if ND is working on WAN
/ipv6/neighbor/print where interface=ether1
/ipv6/nd/prefix print

# see if default route is there
/ipv6/route/print

I fixed the link for the guide I used.

/ipv6/settings/print
                    disable-ipv6: no                        
                         forward: yes                       
           multipath-hash-policy: l3                        
                accept-redirects: yes-if-forwarding-disabled
    accept-router-advertisements: yes                       
      disable-link-local-address: no                        
  stale-neighbor-detect-interval: 30                        
          stale-neighbor-timeout: 60                        
            min-neighbor-entries: 4096                      
       soft-max-neighbor-entries: 8192                      
            max-neighbor-entries: 16384                     
                 allow-fast-path: yes                       
           ipv6-fast-path-active: yes                       
          ipv6-fast-path-packets: 0                         
            ipv6-fast-path-bytes: 0                         
           ipv6-fasttrack-active: no                        
          ipv6-fasttrack-packets: 0                         
            ipv6-fasttrack-bytes: 0



/ipv6/address print
Flags: D - DYNAMIC; G - GLOBAL, L - LINK-LOCAL
Columns: ADDRESS, FROM-POOL, INTERFACE, ADVERTISE
#    ADDRESS                                     FROM-POOL  INTERFACE  ADVERTISE
0  G 2603:7080:953d:1000::1/64                   ipv6       BR1        yes      
1 D  ::1/128                                                lo         no       
2 DL fe80::f61e:57ff:fe82:e0ae/64                           MAIN       no       
3 DL fe80::f61e:57ff:fe82:e0ae/64                           BASE_MGMT  no       
4 DL fe80::f61e:57ff:fe82:e0ae/64                           IOT        no       
5 DL fe80::f61e:57ff:fe82:e0ae/64                           BR1        no       
6 DL fe80::f61e:57ff:fe82:e0ae/64                           GUEST      no       
7 DL fe80::f61e:57ff:fe82:e0ad/64                           ether1     no       
8 DG fdec:9b34:23e9:5e54:f61e:57ff:fe82:e0ae/64             IOT        no



/ipv6/dhcp-client/ print
Columns: INTERFACE, STATUS, REQUEST, PREFIX
# INTERFACE  STATUS  REQUEST  PREFIX                           
0 ether1     bound   prefix   2603:7080:953d:1000::/56, 6d44m5s



/ipv6/pool print
Flags: D - DYNAMIC
Columns: NAME, PREFIX, PREFIX-LENGTH, EXPIRES-AFTER
#   NAME  PREFIX                    PREFIX-LENGTH  EXPIRES-AFTER
0 D ipv6  2603:7080:953d:1000::/56             64  6d43m39s



/ipv6/neighbor/print where interface=ether1
Flags: X - disabled, D - dynamic; R - router 
 0 DR address=fe80::201:5cff:fe8a:4a46 interface=ether1 
      mac-address=00:01:5C:8A:4A:46 status="reachable"



/ipv6/nd/prefix print
Flags: X - disabled, I - invalid; D - dynamic 
 0  D prefix=2603:7080:953d:1000::/64 6to4-interface=none interface=BR1 
      on-link=yes autonomous=yes valid-lifetime=4w2d preferred-lifetime=1w



/ipv6/route/print
Flags: D - DYNAMIC; A - ACTIVE; c - CONNECT, d - DHCP
Columns: DST-ADDRESS, GATEWAY, DISTANCE
    DST-ADDRESS               GATEWAY    DISTANCE
DAd 2603:7080:953d:1000::/56                    1
DAc 2603:7080:953d:1000::/64  BR1               0
DAc fdec:9b34:23e9:5e54::/64  IOT               0
DAc fe80::/64                 BASE_MGMT         0
DAc fe80::/64                 BR1               0
DAc fe80::/64                 GUEST             0
DAc fe80::/64                 IOT               0
DAc fe80::/64                 MAIN              0
DAc fe80::/64                 ether1            0
DAc ::1/128                   lo                0

Everything seems fine except you are not picking up a default route on ether1. This is odd because you can see that the neighbor on ether1 is announcing it is a router. Let me dig around.

Thank you.

I appreciate everyone on this forum. You guys are amazing.

Just a note. When the “accept router advertisement” setting is changed, it only takes effect after a reboot. (Newer versions have a warning about this.)

Yes, try a reboot first!

The only difference I see between your setup and mine is in the ND configuration.

Mine has

/ipv6/nd add interface=ether1 other-configuration=yes

“other-configuration” is not well defined. From IPv6 Neighbor Discovery:

other-configuration (yes | no; Default: no)
The flag indicates whether hosts should use stateful autoconfiguration to obtain additional information (excluding addresses).

GIve it a try. Your will probably have to reboot.

That’s just for emitted RAs. BTW he’s already running a DHCP client, which is what “should use state autoconfiguration” refers to.

Interesting. Any other reason you can think of that they are seeing router advertisements but not adding them into the route table?

Note:
I removed the

other-configuration=yes

, rebooted and I came back up with a default route. Guess it was not necessary.

Need to see /ipv6/nd/print detail.

‘detail’ doesnt seem to add any more information to this print

I tried both with reboots after changing.

With

/ipv6/nd add interface=ether1 other-configuration=yes



/ipv6/route/print    
Flags: D - DYNAMIC; A - ACTIVE; c - CONNECT, d - DHCP
Columns: DST-ADDRESS, GATEWAY, DISTANCE
    DST-ADDRESS               GATEWAY    DISTANCE
DAd 2603:7080:953d:1000::/56                    1
DAc 2603:7080:953d:1000::/64  BR1               0
DAc fdec:9b34:23e9:5e54::/64  IOT               0
DAc fe80::/64                 MAIN              0
DAc fe80::/64                 BR1               0
DAc fe80::/64                 BASE_MGMT         0
DAc fe80::/64                 IOT               0
DAc fe80::/64                 GUEST             0
DAc fe80::/64                 ether1            0
DAc ::1/128                   lo                0

Without other-configuration

/ipv6/route/print
Flags: D - DYNAMIC; A - ACTIVE; c - CONNECT, d - DHCP
Columns: DST-ADDRESS, GATEWAY, DISTANCE
    DST-ADDRESS               GATEWAY    DISTANCE
DAd 2603:7080:953d:1000::/56                    1
DAc 2603:7080:953d:1000::/64  BR1               0
DAc fdec:9b34:23e9:5e54::/64  IOT               0
DAc fe80::/64                 MAIN              0
DAc fe80::/64                 GUEST             0
DAc fe80::/64                 BASE_MGMT         0
DAc fe80::/64                 BR1               0
DAc fe80::/64                 IOT               0
DAc fe80::/64                 ether1            0
DAc ::1/128                   lo                0



/ipv6/nd/print detail
Flags: X - disabled, I - invalid; * - default 
 0  * interface=BR1 ra-interval=3m20s-10m ra-delay=3s mtu=unspecified 
      reachable-time=unspecified retransmit-interval=unspecified ra-lifetime=30m 
      ra-preference=medium hop-limit=unspecified advertise-mac-address=yes 
      advertise-dns=yes managed-address-configuration=no other-configuration=no 

 1    interface=ether1 ra-interval=3m20s-10m ra-delay=3s mtu=unspecified 
      reachable-time=unspecified retransmit-interval=unspecified ra-lifetime=30m 
      ra-preference=medium hop-limit=unspecified advertise-mac-address=yes 
      advertise-dns=yes managed-address-configuration=no other-configuration=no

Does

/ipv6/neighbor/print detail where interface=ether1

still show your neighbor as a router?

At this point you could try setting

add-default-route=yes

on the DHCPv6 client.

This did not work for me with Xfinity because they started using DHCPv6 Relays that cant act as default routers, but it may work for you.

Note:
Guess you may have to turn off ND on the interface also

/ipv6/neighbor/print detail where interface=ether1
Flags: X - disabled, D - dynamic; R - router 
 0 DR address=fe80::201:5cff:fe8a:4a46 interface=ether1 
      mac-address=00:01:5C:8A:4A:46 status="stale"

After adding add-default-route=yes

/ipv6/route/print                                 
Flags: D - DYNAMIC; A - ACTIVE; c - CONNECT, d - DHCP
Columns: DST-ADDRESS, GATEWAY, DISTANCE
    DST-ADDRESS               GATEWAY                          DISTANCE
DAd ::/0                      fe80::201:5cff:fe8a:4a46%ether1         1
DAd 2603:7080:953d:1000::/56                                          1
DAc 2603:7080:953d:1000::/64  BR1                                     0
DAc fdec:9b34:23e9:5e54::/64  IOT                                     0
DAc fe80::/64                 MAIN                                    0
DAc fe80::/64                 GUEST                                   0
DAc fe80::/64                 BASE_MGMT                               0
DAc fe80::/64                 BR1                                     0
DAc fe80::/64                 IOT                                     0
DAc fe80::/64                 ether1                                  0
DAc ::1/128                   lo                                      0

And ping

/tool/ping 2606:4700:4700::1111
  SEQ HOST                                     SIZE TTL TIME       STATUS         
    0 2606:4700:4700::1111                       56  56 28ms700us  echo reply     
    1 2606:4700:4700::1111                       56  56 27ms910us  echo reply     
    2 2606:4700:4700::1111                       56  56 31ms145us  echo reply     
    3 2606:4700:4700::1111                       56  56 32ms776us  echo reply     
    sent=4 received=4 packet-loss=0% min-rtt=27ms910us avg-rtt=30ms132us 
   max-rtt=32ms776us

So adding default route does work for me. I guess that’s just how Spectrum does it or a weird combination of what my ISP is doing and what Mikrotik has going on.

Assuming that is the state things SHOULD be, regardless of how we got here, I just have two more questions.

  1. Should I be getting an IPv6 address on my client? All of the forum posts I’ve read left out requesting an address and just requested a client. And I don’t know why, none of them explained.

  2. Any ideas why I am getting a random address on the IOT interface?

You could log the RAs you receive. Maybe your provider doesn’t send any?

For an internal host I’m logging

 2025-03-27 19:53:03 radvd,debug received Router Advertisement on vlan100-local from fe80::dc2c:6eff:fe48:9517
 2025-03-27 19:53:03 radvd,debug   mtu 1480
 2025-03-27 19:53:03 radvd,debug   DNS server #1 2001:470:2014:1000::1 valid: 1800
 2025-03-27 19:53:03 radvd,debug   prefix: 2001:470:2014:1000::/64 valid: 2592000 preferred: 604800

And the default is set correctly.

Good, it sounds like we’ve learned something about Spectrum.

  1. Should I be getting an IPv6 address on my client? All of the forum posts I’ve read left out requesting an address and just requested a client. And I don’t know why, none of them explained.

Not sure what you mean here. Do you mean “request an IPv6 address for interface ether1”? No, you dont need one.

  1. Any ideas why I am getting a random address on the IOT interface?

That looks like a locally assigned address for some reason. Are you trying to assign it from your pool? If so show us

/ipv6/address> export

and maybe

/ipv6/address print detail

Just to add some detail as to why you dont need to request an IPv6 address for ether1, it already has one. (Almost) all interfaces with IPv6 enabled generate a “link local” address (starting with fe80) that can be used to communicate with IPv6 devices on their local network.

If you look at the default route

DST-ADDRESS               GATEWAY                          DISTANCE
DAd ::/0                      fe80::201:5cff:fe8a:4a46%ether1

The router uses the link local address of the ISP router along with your routers interface physical name to send traffic out to the internet. The ISP router will have a similar route back to your assigned addresses.

For the ether1 IP address, I am only familiar with IPv4. Where you have your LAN addresses assigned by your router to your devices but then you have your WAN address assigned by your ISP to your router. So I am guessing IPv6 doesn’t work the same way.

radvd log

received Router Advertisement on ether1 from fe80::201:5cff:fe8a:4a46
neighbor fe80::201:5cff:fe8a:4a46 on interface ether1 uses managed address configuration
neighbor fe80::201:5cff:fe8a:4a46 on interface ether1 uses other stateful configuration

And I haven’t assigned any addresses like that. That showed up as soon as I setup IPv6 along with the link-local addresses that are generated. That’s why I’m so confused.

/ipv6/address> export
# 2025-03-27 16:20:15 by RouterOS 7.18.2
# software id = T8PN-YYG2
#
# model = RB5009UG+S+
# serial number = HHD0A51AM0X
/ipv6 address
add address=::1 from-pool=ipv6 interface=BR1



/ipv6/address print detail
Flags: X - disabled, I - invalid; D - dynamic; G - global, L - link-local; 
S - slave; d - deprecated 
 0   G   address=2603:7080:953d:1000::1/64 from-pool=ipv6 interface=BR1 
         actual-interface=BR1 eui-64=no advertise=yes no-dad=no 
         auto-link-local=yes 

 1  D    address=::1/128 from-pool="" interface=lo actual-interface=lo eui-64=no 
         advertise=no no-dad=no auto-link-local=yes 

 2  DL   address=fe80::f61e:57ff:fe82:e0ae/64 from-pool="" interface=BASE_MGMT 
         actual-interface=BASE_MGMT eui-64=no advertise=no no-dad=no 
         auto-link-local=yes 

 3  DL   address=fe80::f61e:57ff:fe82:e0ae/64 from-pool="" interface=GUEST 
         actual-interface=GUEST eui-64=no advertise=no no-dad=no 
         auto-link-local=yes 

 4  DL   address=fe80::f61e:57ff:fe82:e0ae/64 from-pool="" interface=MAIN 
         actual-interface=MAIN eui-64=no advertise=no no-dad=no 
         auto-link-local=yes 

 5  DL   address=fe80::f61e:57ff:fe82:e0ae/64 from-pool="" interface=BR1 
         actual-interface=BR1 eui-64=no advertise=no no-dad=no 
         auto-link-local=yes 

 6  DL   address=fe80::f61e:57ff:fe82:e0ae/64 from-pool="" interface=IOT 
         actual-interface=IOT eui-64=no advertise=no no-dad=no 
         auto-link-local=yes 

 7  DL   address=fe80::f61e:57ff:fe82:e0ad/64 from-pool="" interface=ether1 
         actual-interface=ether1 eui-64=no advertise=no no-dad=no 
         auto-link-local=yes 

 8  DG   address=fdec:9b34:23e9:5e54:f61e:57ff:fe82:e0ae/64 from-pool="" 
         interface=IOT actual-interface=IOT eui-64=no advertise=no no-dad=no 
         auto-link-local=yes valid=7m51s 

 9  DG d address=2603:7080:953d:1099:f61e:57ff:fe82:e0ae/64 from-pool="" 
         interface=GUEST actual-interface=GUEST eui-64=no advertise=no no-dad=no 
         auto-link-local=yes valid=4w1d23h59m1s