[solved] IPv6 not working properly on v7.23

IPv6 it is working intermittently or not at all. I presume the routes are the problem.

/ipv6/route/print
Flags: D - DYNAMIC; A - ACTIVE; c - CONNECT, d - DHCP, v - VPN, g - SLAAC; + - ECMP
Columns: DST-ADDRESS, GATEWAY, ROUTING-TABLE, DISTANCE
DST-ADDRESS GATEWAY ROUTING-TABLE DISTANCE
D v ::/0 pppoe-digi main 1
DAg+ ::/0 fe80::7a9a:18ff:fee0:4a89%VLAN78_MGMT main 0
DAg+ ::/0 fe80::f61e:57ff:fe84:ae76%VLAN78_MGMT main 0
DAc ::1/128 lo main 0
DAd 2a02:...:b600::/56 main 1
DAc 2a02:...:b600::/64 bridge main 0
DAc 2a02:...:b601::/64 VLAN80_HOME main 0
DAc 2a02:...:b602::/64 wireguard-server main 0
DAc 2a02:...:b604::/64 VLAN78_MGMT main 0
DAc 2a02:...::/64 bridge main 0
DAc 2a02:.../128 pppoe-digi main 0
DAc fe80::/64 eth2-WAN main 0
DAc fe80::/64 bridge main 0
DAc fe80::/64 pppoe-digi main 0
DAc fe80::/64 wireguard-server main 0
DAc fe80::/64 VLAN78_MGMT main 0
DAc fe80::/64 VLAN80_HOME main 0
DAc fe80::/64 VLAN79_GUEST main 0

The problem is that the correct rule (first one) is inactive (blue in Winbox)
D v ::/0 pppoe-digi main 1

With Disable Link Local Address is disabled in IPv6 Settings ping form router to ipv6.google.com is working as fe80::7a9a:18ff:fee0:4a89%VLAN78_MGMT routes are no longer present, but, off course, the internal equipment does not get a public IPv6 anymore.
I seen in the Routeros 7.23 topic some complaint about ping on IPv6.

/ipv6 address
add comment="Bridge IPv6 Address" from-pool=ipv6pool interface=bridge
add address=0:0:0:4:: comment="VLAN78 IPv6 Address" from-pool=ipv6pool interface=VLAN78_MGMT
add address=0:0:0:1:: comment="VLAN80 IPv6 Address" from-pool=ipv6pool from-pool-policy=strict interface=VLAN80_HOME
add address=0:0:0:2:: comment="Wireguard IPv6 Address" from-pool=ipv6pool interface=wireguard-server
add address=0:0:0:5:: comment="Veth IPv6 Address" from-pool=ipv6pool interface=veth-nginx

/ipv6 dhcp-client
add accept-prefix-without-address=no allow-reconfigure=yes comment="pppoe DHCP Client" interface=pppoe-digi pool-name=ipv6pool pool-prefix-length=64 \
    request=address,prefix use-peer-dns=no

/ipv6 dhcp-server
add address-pool=ipv6pool comment="Bridge IPv6 DHCP Sever" interface=bridge name=DHCPv6_bridge prefix-pool=ipv6pool
add address-pool=ipv6pool comment="Wireguard IPv6 DHCP Sever" interface=wireguard-server name=DHCPv6_wireguard prefix-pool=ipv6pool
add address-pool=ipv6pool comment="Home VLAN" interface=VLAN80_HOME name=VLAN80 prefix-pool=ipv6pool use-reconfigure=yes
add address-pool=ipv6pool comment="Management VLAN" insert-queue-before=bottom interface=VLAN78_MGMT name=VLAN78 prefix-pool=ipv6pool use-reconfigure=yes

/ipv6 nd
set [ find default=yes ] advertise-dns=yes advertise-mac-address=no hop-limit=64 interface=pppoe-digi
add advertise-dns=yes interface=bridge
add advertise-dns=yes advertise-mac-address=no interface=VLAN80_HOME
add advertise-dns=yes advertise-mac-address=no interface=VLAN78_MGMT

/ipv6 settings
set accept-router-advertisements=yes

/ipv6/settings/print  
                     disable-ipv6: no                        
                          forward: yes                       
            multipath-hash-policy: l3                        
                 accept-redirects: yes-if-forwarding-disabled
     accept-router-advertisements: yes                       
  accept-router-advertisements-on: all                       
       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: no                        
           ipv6-fast-path-packets: 0                         
             ipv6-fast-path-bytes: 0                         
            ipv6-fasttrack-active: yes                       
           ipv6-fasttrack-packets: 0                         
             ipv6-fasttrack-bytes: 0

No rules on ipv6 neighbour/pool/route.

Thank you!

If your WAN is provided via PPPoE, then there is no reason to enable "Accept Router Advertisements" in the IPv6 settings. Change that setting back to the default value:

/ipv6 settings
set accept-router-advertisements=yes-if-forwarding-disabled

Still, it appears that you have some other device(s) located in the VLAN78_MGMT annoucing themselves as router. Which will compete with the router itself. It's best two find out which those two devices are and disable Router Advertisement on them if they are no proper routers. Just like you don't want the same layer 2 network having multiple IPv4 DHCP servers active at the same time, you also don't want multiple devices sending out Router Advertisements messages at the same time on the same L2.

One has MAC address 78:9A:18:E0:4A:89 and one has F4:1E:57:84:AE:76 (both are MikroTik devices). Do not enable the advertise flag on those devices under their /ipv6 address assignment.

Some ISPs does RA over PPPoE, and even provide an address (actually a prefix) from another prefix pool. Though in that case, you should limit SLAAC interfaces instead of accepting from all.

That RA is useless for announcing the route, because PPPoE is a point-to-point interface (with only two ends). Even if the RA sent over PPPoE says the router is at fe80::dead:beef for example, then the PPPoE client has only one possible next hop for its route (which is the PPPoE interface itself). It has absolutely no way of to do "I want to send this packet to 2001:4860:4860::8888 using fe80::dead:beef as the gateway / the next hop".

Also, if DHCPv6 is used (to get the prefix) then the received prefix from RA is also unimportant, your router will use addresses assigned from the DHCPv6 pool on any of its interface for communication to the outside internet.

Actually not, in normal configuration, prefix from DHCPv6 pool is assigned on the bridge, and there's no global unicast address on the PPPoE interface. If SLAAC is enabled, then the PPPoE interface has its own address, and the router will use it for output connections, sometimes it's useful. I agree that in most cases it's not, but YMMV.

If your router is routing, then it'll have at least one IPv6 per its L3 interface (e.g. bridge ... or per VLAN interface ... or per physical port if used off bridge). And any of those IPv6 addresses is valid for communication with any of IPv6 hosts (either on LAN or WAN). Yes, it is custonary to use address, assigned to interface leading in "right direction". But when that interface is addressless (as it's most often in case with point-to-point interfaces), router will select some of its addresses (and, again, it doesn't matter which one).
And this is (with nany more words) what @CGGXANNX said by your router will use addresses assigned from the DHCPv6 pool on any of its interface ...

I have an IPv4 setup consisting of multiple IPIP links in a star-shape. None of those links have dedicated IP addresses assigned, rather they have pref-src set (to IP addresses of the most prominent LAN interface) just to see some sensible IP address in traceroute outputs. Without setting pref-src router might select an unsuitable address, possibly WAN IP address (for which remote router uses default route rather than "through VPN tunnel") or another LAN address which is not in the routing table of remote router.

With accept-router-advertisements=yes-if-forwarding-disabled the IPv6 routing table is good.

/tool/ping count=2 address=ipv6.google.com
  SEQ HOST                                     SIZE TTL TIME       STATUS                                                                                  
    0 2a00:1450:400d:811::200e                   56 118 20ms830us  echo reply                                                                              
    1 2a00:1450:400d:811::200e                   56 118 20ms879us  echo reply                                                                              
    sent=2 received=2 packet-loss=0% min-rtt=20ms830us avg-rtt=20ms854us max-rtt=20ms879us

But from any PC Windows/Linux, no success:

ping ipv6.google.com

Pinging ipv6.l.google.com [2a00:1450:400d:811::200e] with 32 bytes of data:
Request timed out.
Request timed out.
Request timed out.
Request timed out.

Ping statistics for 2a00:1450:400d:811::200e:
    Packets: Sent = 4, Received = 0, Lost = 4 (100% loss)

The IPv6 firewall have only default rules. Tried with all rules disabled, to be sure.

Few dozen seconds later:

ping ipv6.google.com

Pinging ipv6.l.google.com [2a00:1450:400d:811::200e] with 32 bytes of data:
Reply from 2a00:1450:400d:811::200e: time=15ms
Reply from 2a00:1450:400d:811::200e: time=15ms
Reply from 2a00:1450:400d:811::200e: time=15ms
Reply from 2a00:1450:400d:811::200e: time=15ms

Ping statistics for 2a00:1450:400d:811::200e:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 15ms, Maximum = 15ms, Average = 15ms

C:\Users\Costel>tracert -6 ipv6.google.com

Tracing route to ipv6.l.google.com [2a00:1450:400d:811::200e]
over a maximum of 30 hops:

  1    <1 ms    <1 ms    <1 ms  2a02:2f0c:c309:c104::
  2     4 ms     4 ms     3 ms  2a02:2f0c:c3ff:ff00::2
  3     3 ms     3 ms     3 ms  2a02:2f0c:c3ff:ff01::1
  4     *        *        *     Request timed out.
  5    13 ms    13 ms    13 ms  2a02:2f00:8700::10e
  6     *        *        *     Request timed out.
  7    15 ms    16 ms    16 ms  2001:4860:1:1::17ba
  8    15 ms    14 ms    14 ms  2001:4860:0:1::7687
  9    16 ms    16 ms    16 ms  2001:4860:0:1::59fb
 10    15 ms    15 ms    15 ms  lcbuda-ap-in-x0e.1e100.net [2a00:1450:400d:811::200e]

Trace complete.

I think my ISP is also involved in the problems. As, I said: IPv6 it is working intermittently or not at all
Wait to see what happens in the next days.

Thank you for your time!

It will be used if you accept RA on the PPPoE interface, and the advertised address is unicast as you wrote, but for almost all ISP configurations that use PPPoE and provide DHCPv6, it's not necessary to turn on "Accept RA" on the PPPoE interface because:

  • Default route is already provided by PPPoE.

  • Prefix and / or address provided by DHCPv6 are routed to you already and:

    • If you requested address (via DHCPv6), then that address is installed on the PPPoE interface
    • If you only requested a prefix, then you'd most probably use a part of that on some of the router's interface(s), a bridge or some VLAN interfaces for example. In that case the router will use one of those assigned addresses for outgoing connection, because the PPPoE interface only has a link local (fe80::) address and that will not be used for non-link-local communication.

In my previous post I explicitly wrote:

I won't argue in the case where you completely ignore DHCPv6, if DHCPv6 is not used then of course you need to accept RA to get the non-link-local address.

My routers that run PPPoE clients all have accept RA disabled (either completely or on that PPPoE interface), and on most of them the router will pick the address I assigned to a WireGuard interface as outgoing IPv6 address for its outgoing connections.

Did you also resolve the issue that there are two other devices in the same layer 2 segment also announcing themselves as router? Because if you have 3 devices sending RA messages at the same time then the other clients will have their default gateway jumping around (depending on which one was the last one to claim to be the router, assuming they set the same RA Preference).

With accept-router-advertisements=yes-if-forwarding-disabled your router is no longer affected by the rogue RA sources, but all your other PCs / laptops / phones in the same layer 2 segment are still affected, until you are able to disable sending RA on those two MikroTik devices (disable the advertise flag on the /ipv6 address entries on those devices, also if possible, explicitly create IPv6 -> ND entries for the interfaces (not using the all one) with RA Lifetime cleared).

I believe so. There no other default route than pppoe one:

/ipv6/route/print 
Flags: D - DYNAMIC; A - ACTIVE; c - CONNECT, d - DHCP, v - VPN
Columns: DST-ADDRESS, GATEWAY, ROUTING-TABLE, DISTANCE
    DST-ADDRESS                         GATEWAY           ROUTING-TABLE  DISTANCE
DAv ::/0                                pppoe-digi        main                  1
DAc ::1/128                             lo                main                  0
DAd 2a02:2f0c:c309:c100::/56                              main                  1
DAc 2a02:2f0c:c309:c100::/64            bridge            main                  0
DAc 2a02:2f0c:c309:c101::/64            VLAN80_HOME       main                  0
DAc 2a02:2f0c:c309:c102::/64            wireguard-server  main                  0
DAc 2a02:2f0c:c309:c104::/64            VLAN78_MGMT       main                  0
DAc 2a02:2f0c:c309:c105::/64            bridge            main                  0
DAc 2a02:2f0c:c3ff:ffff::4f77:d4aa/128  pppoe-digi        main                  0
DAc fe80::/64                           eth2-WAN          main                  0
DAc fe80::/64                           bridge            main                  0
DAc fe80::/64                           pppoe-digi        main                  0
DAc fe80::/64                           wireguard-server  main                  0
DAc fe80::/64                           VLAN78_MGMT       main                  0
DAc fe80::/64                           VLAN80_HOME       main                  0
DAc fe80::/64                           VLAN79_GUEST      main                  0

Disabled IPv6 on secondary Mikrotik devices (hAPax2 and CRS304) with same result - intermittent IPv6 connectivity.

On hAP ax2:

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

/ipv6 address
add address=fe80::2:ccc/128 advertise=no comment="Manual bridge adrress" interface=bridge

/ipv6 nd
set [ find default=yes ] advertise-dns=yes
add advertise-mac-address=no interface=bridge ra-lifetime=none

and similar on CRS304. Don't need public IPv6 address on those devices.

Should be fine on my side ?

You won't see the bad routes anymore on the main router because you've turn off accept-router-advertisements on it.

You'll need to check on one of the client devices (like a PC) and see which address that device picks as default gateway when it has no internet connection.

Use ipconfig for Windows, ip -6 route for Linux, netstat -rn -f inet6 on macOS, and look for the link-local fe80:: address used as gateway address. You have to make sure that address is always the one of the main router. If not, then extract the MAC address from the address to find the device.

Highly unlikely.
It's just a config problem on your devices.

Oh, I think the difference is that my ISP doesn't assign address over DHCPv6, only prefix. And they do SLAAC.

I encountered the same problem. I was able to obtain the IPv6 RA and address normally through PPPoE, and the devices on the LAN port could also obtain the IPv6 address normally. However, data forwarding was ineffective. I couldn't ping any IPv6 addresses, and I couldn't access IPv6 websites. The problem was resolved after reverting to version 7.22.3.

That's another problem, already fixed in 7.24beta1, I think MikroTik will provide a fix for 7.23 series soon. SUP-215939

Ah. If the ISPs want to give their customer a prefix larger than /64 then they need DHCPv6. It's a bummer that there are still ISPs that are stingy :frowning:, and their customers have to use NAT when they need multiple subnets.

Did you try to just set up a DHCPv6 client instance and leave it active? Who knows, one day your ISP might suddenly enable DHCPv6.

If your other mikrotik devices (e.g. hAP ax2) are not acting as routers but rather as L2 devices (AP and/or switch), then set this to no ...

That's why I asked here. It worked flawless, previously, until 7.23

Will wait for 7.23.x and hope.

ISP - Digi already give me /56 prefix via DHCPv6.

Did it, but no change.

Let's see want a newer RouterOS version will bring.

Thank you all for your support!

Fix your configs.
There's nothing in 7.23 that prevents IPv6 from working with that ISP.

Export full sanitized configs from all your devices, and show them here in proper tags
"```routeros"

your config here

"```"

(copy paste the above, remove "").

Maybe I didn't make it clear.

My ISP gives /56 on DHCPv6 IA-PD, nothing (address not available) on DHCPv6 IA-NA, and a /64 prefix on RA SLAAC. So while my PPPoE interface itself won't get an address over DHCPv6, disabling SLAAC won't break anything, but enabling it will give the interface an address from a totally different BGP prefix pool, which is useful sometimes.