IPv6 BGP nexthop persistently "unreachable" despite full reachability

Environment

  • Router: CCR1072-1G-8S+ (Tile-Gx72, tile architecture)
  • RouterOS: 6.49.20 (long-term)
  • Setup: eBGP IPv4 has been running for years without issue. IPv6 was freshly enabled
    (package ipv6 was disabled, we enabled it + rebooted) to bring up a new eBGP IPv6
    session with an upstream (AS11014) over a dedicated /127 point-to-point subnet on the
    same physical interface already used for the IPv4 session.

Configuration applied

/ipv6 address add address=2800:a10:0:ff:1000::487/127 interface=sfp-sfpplus2-WANxMETRO

/routing filter add action=accept chain=METROTEL-OUT-V6 prefix=2803:9390::/32 prefix-length=32-32
/routing filter add action=discard chain=METROTEL-OUT-V6

/routing bgp network add network=2803:9390::/32 synchronize=no

/routing bgp peer add instance=Publico name=peer-METROTEL-v6 remote-address=2800:a10:0:ff:1000::486 remote-as=11014 address-families=ipv6 out-filter=METROTEL-OUT-V6 ttl=255 hold-time=3m default-originate=never

What's working

  • BGP session establishes fine and stays Established:
6 E ;;; Peering IPv6 Metrotel
    name="peer-METROTEL-v6" instance=Publico remote-address=2800:a10:0:ff:1000::486 remote-as=11014
    address-families=ipv6 default-originate=never ...

Winbox peer status: Prefix Count=1, Updates Sent=1, Updates Received=1, Established.

  • Our own advertised prefix (2803:9390::/32, origin AS273021) is confirmed VISIBLE
    externally (verified via public looking glass, upstream path shows AS11014).

  • Ping to the BGP neighbor's IPv6 address succeeds perfectly:

/ping 2800:a10:0:ff:1000::486 count=5
sent=5 received=5 packet-loss=0% min-rtt=0ms avg-rtt=0ms max-rtt=1ms
  • The connected /127 route is Active and shows as reachable:
/ipv6 route print detail where connect
0 ADC dst-address=2800:a10:0:ff:1000::486/127 gateway=sfp-sfpplus2-WANxMETRO
      gateway-status=sfp-sfpplus2-WANxMETRO reachable distance=0 scope=10
  • IPv6 neighbor entry resolves with a valid MAC (upstream's side is a VRRP virtual MAC,
    00:00:5E:00:01:EE):
/ipv6 neighbor print
0 R address=2800:a10:0:ff:1000::486 interface=sfp-sfpplus2-WANxMETRO
    mac-address=00:00:5E:00:01:EE status="stale"
  • /ipv6 settings print shows forward: yes (global IPv6 forwarding is enabled).

The problem

The default route (::/0) received via this BGP session is permanently NOT active,
with gateway-status ... unreachable, despite everything above:

/ipv6 route print detail where dst-address=::/0
0 Db dst-address=::/0 gateway=2800:a10:0:ff:1000::486
     gateway-status=2800:a10:0:ff:1000::486 unreachable
     distance=20 scope=40 target-scope=10 bgp-as-path="11014" bgp-origin=igp
     received-from=peer-METROTEL-v6

Disabling/re-enabling the BGP peer to force re-negotiation did not change this.

Troubleshooting already attempted (all failed to resolve it)

  1. Manual static route to the same gateway IP, distance=1 (mirroring how the
    existing, working IPv4 default route to this same upstream is configured β€” a plain
    static gateway=<ip> distance=1):
/ipv6 route add dst-address=::/0 gateway=2800:a10:0:ff:1000::486 distance=1

Result: also stays inactive (no "A" flag), same "unreachable" gateway-status.

  1. Explicit scope=0 on a test static route to the same /127 network (to rule out
    any scope/target-scope mismatch, since 0 satisfies any reasonable scope comparison):
    no change β€” BGP route still unreachable.

  2. Explicit target-scope=30 on the static default route (well above the connected
    route's scope=10, to rule out an off-by-one/strict-inequality scope comparison
    issue): route still does NOT show as active.

  3. gateway= instead of gateway= (point-to-point-style gateway,
    bypassing recursive resolution entirely):

/ipv6 route add dst-address=::/0 gateway=sfp-sfpplus2-WANxMETRO distance=1

This DOES show as Active β€” but real traffic through it fails. Pinging an external
IPv6 address (2001:4860:4860::8888) mostly times out, and one reply came back FROM
OUR OWN address as "address unreachable" β€” suggesting the router attempts to resolve
the final destination on-link rather than forwarding via the actual neighbor, which
is the wrong behavior for a shared-media (SFP+/Ethernet) interface, not a true PPP
point-to-point link.

  1. gateway=% syntax: rejected outright by RouterOS β€”
    failure: Invalid route configuration: Invalid gateway configration β€” apparently
    this syntax is only accepted with link-local addresses, not global unicast.

  2. Attempted to flush/refresh the stale IPv6 neighbor cache entry to force it back to
    "reachable": /ipv6 neighbor remove [...] is not accepted in this menu/version
    (syntax error, remove doesn't appear to be a supported action for /ipv6 neighbor
    in 6.49.20).

Question

Why would a BGP-received (and independently, manually-added static) IPv6 default route
whose gateway sits on a directly-connected, actively-pinging, ND-resolved /127 subnet
persistently show gateway-status ... unreachable, when every underlying reachability
signal we can check from the CLI (ping, connected route active+reachable, ND cache
resolved) looks healthy? What's actually being evaluated to produce that "unreachable"
status, and what's the correct/supported way to get this default route to install
active β€” ideally without resorting to the gateway=<interface>-only workaround, which
breaks proper next-hop resolution for real traffic on this Ethernet-type interface?

Happy to provide /export output (secrets masked) or a supout.rif file if useful.

I seem to remember it was a known bug in v6, maybe it never got fixed. You likely need to upgrade to v7.

I've already have similar trouble ; i don't remember exactly the root cause and the solution, but look near IGMP snooping... i need search in my history conf

try /127 => /125
(not /126 for the same reason of not /127)
[remember, is not RouterOS 7, bur RouterOS 6!!!]

Update: you were 100% right β€” changed the peering link from /127 to /125 (keeping the same point-to-point addresses) and the BGP-received default route immediately went from gateway-status unreachable to reachable and active on its own. Confirmed with real traffic (ping to 8.8.8.8-equivalent, 0% loss). No need for the v7 upgrade after all. Thanks a lot for the tip!

"Hi rextended, thanks for the spot-on analysis! You are completely right, this router is still running RouterOS v6. Since changing the mask to /125 requires coordination with my ISP, I'm going to take this opportunity to upgrade the router to RouterOS v7. The new routing engine should fix this nexthop issue natively. I appreciate your help!"