Page MenuHomeVyOS Platform

Bonded PPPoE Multiple IPv6 Default Routes Rejected
Open, LowPublicBUG

Description

Scenario:
My ISP provides me with multiple DSL connections that have the same IP blocks routed through them which is downstream load balanced by my ISP and upstream is load balanced by the WAN load balancing

Problem:
When IPv6 is enabled on multiple PPPoE interfaces the default gateway for IPv6 is rejected by Zebra and no IPv6 connectivity is possible.

Bringing down a single PPPoE Interface or removing IPv6 configuration from one results in the route being installed successfully.

Removing wan load balancing configuration has no effect, the IPv6 routes are always rejected.

IPv6 addresses on the interfaces are link local but do have the same gateway as each other. I have also tried the same setup with PD enabled and non link-local addresses assigned to the interfaces.

Config: (Sensitive information [REMOVED])

firewall {
    ipv4 {
        input {
            filter {
                rule 10 {
                    action "jump"
                    inbound-interface {
                        name "pppoe0"
                    }
                    jump-target "WAN_LOCAL"
                }
                rule 20 {
                    action "jump"
                    inbound-interface {
                        name "pppoe1"
                    }
                    jump-target "WAN_LOCAL"
                }
            }
        }
        name WAN_LOCAL {
            default-action "drop"
            rule 10 {
                action "accept"
                state "established"
                state "related"
            }
        }
    }
    ipv6 {
        input {
            filter {
                rule 10 {
                    action "jump"
                    inbound-interface {
                        name "pppoe0"
                    }
                    jump-target "WAN_LOCAL"
                }
                rule 20 {
                    action "jump"
                    inbound-interface {
                        name "pppoe1"
                    }
                    jump-target "WAN_LOCAL"
                }
            }
        }
        name WAN_LOCAL {
            default-action "drop"
            rule 10 {
                action "accept"
                state "established"
                state "related"
            }
            rule 20 {
                action "accept"
                protocol "ipv6-icmp"
            }
            rule 30 {
                action "accept"
                destination {
                    port "546"
                }
                protocol "udp"
                source {
                    port "547"
                }
            }
        }
    }
}
interfaces {
    ethernet eth0 {
        description "WAN"
        offload {
            gro
            gso
            sg
            tso
        }
        vif 201 {
            description "AAISP-1 VLAN"
        }
        vif 202 {
            description "AAISP-2 VLAN"
        }
    }
    ethernet eth1 {
        address "[REMOVED]/64"
        address "[REMOVED]/29"
        description "LAN"
        offload {
            gro
            gso
            sg
            tso
        }
    }
    loopback lo {
    }
    pppoe pppoe0 {
        authentication {
            password "[REMOVED]"
            username "[REMOVED]"
        }
        description "AAISP-1"
        dhcpv6-options
        ip {
            adjust-mss "1452"
        }
        ipv6 {
            address {
                autoconf
            }
            adjust-mss "1432"
        }
        mtu "1492"
        source-interface "eth0.201"
    }
    pppoe pppoe1 {
        authentication {
            password "[REMOVED]"
            username "[REMOVED]"
        }
        description "AAISP-2"
        dhcpv6-options
        ip {
            adjust-mss "1452"
        }
        ipv6 {
            address {
                autoconf
            }
            adjust-mss "1432"
        }
        mtu "1492"
        source-interface "eth0.202"
    }
}
load-balancing {
    wan {
        interface-health pppoe0 {
            nexthop "dhcp"
            test 0 {
                target "8.8.8.8"
            }
        }
        interface-health pppoe1 {
            nexthop "dhcp"
            test 0 {
                target "8.8.4.4"
            }
        }
        rule 1 {
            inbound-interface "eth1"
            interface pppoe0 {
            }
            interface pppoe1 {
            }
            per-packet-balancing
        }
    }
}
service {
    ntp {
        allow-client {
            address "127.0.0.0/8"
            address "169.254.0.0/16"
            address "10.0.0.0/8"
            address "172.16.0.0/12"
            address "192.168.0.0/16"
            address "::1/128"
            address "fe80::/10"
            address "fc00::/7"
        }
        server time1.vyos.net {
        }
        server time2.vyos.net {
        }
        server time3.vyos.net {
        }
    }
    ssh
}
system {
    config-management {
        commit-revisions "100"
    }
    console {
        device ttyS0 {
            speed "115200"
        }
    }
    host-name "router.huskynet"
    login {
        user vyos {
            authentication {
                encrypted-password "[REMOVED]"
                plaintext-password ""
            }
        }
    }
    syslog {
        global {
            facility all {
                level "info"
            }
            facility local7 {
                level "debug"
            }
        }
    }
}

Version:

vyos@router:~$ show version 
Version:          VyOS 1.5-rolling-202409120007
Release train:    current
Release flavor:   generic

Built by:         [email protected]
Built on:         Thu 12 Sep 2024 00:07 UTC
Build UUID:       ab6885a1-1970-4021-a315-dbbce3831676
Build commit ID:  55c17f9283f32d

Architecture:     x86_64
Boot via:         installed image
System type:      bare metal

Hardware vendor:  Dell Inc.
Hardware model:   PowerEdge R210 II
Hardware S/N:     DXGH9X1
Hardware UUID:    4c4c4544-0058-4710-8048-c4c04f395831

Copyright:        VyOS maintainers and contributors

Vtysh:

vyos@router:~$ vtysh

Hello, this is FRRouting (version 9.1.1).
Copyright 1996-2005 Kunihiro Ishiguro, et al.

router# show run
Building configuration...

Current configuration:
!
frr version 9.1.1
frr defaults traditional
hostname router
log syslog
log facility local7
service integrated-vtysh-config
!
ip route 0.0.0.0/0 pppoe0 tag 210 210
ip route 0.0.0.0/0 pppoe1 tag 210 210
ipv6 route ::/0 pppoe0 tag 210 210
ipv6 route ::/0 pppoe1 tag 210 210
ipv6 route [REMOVED]::/56 [REMOVED]::2
!
rpki
exit
!
end

Routes:

vyos@router:~$ show ip route
Codes: K - kernel route, C - connected, S - static, R - RIP,
       O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,
       T - Table, v - VNC, V - VNC-Direct, A - Babel, F - PBR,
       f - OpenFabric,
       > - selected route, * - FIB route, q - queued, r - rejected, b - backup
       t - trapped, o - offload failure

S>* 0.0.0.0/0 [210/0] is directly connected, pppoe0, weight 1, 00:08:38
  *                   is directly connected, pppoe1, weight 1, 00:08:38

vyos@router:~$ show ipv6 route
Codes: K - kernel route, C - connected, S - static, R - RIPng,
       O - OSPFv3, I - IS-IS, B - BGP, N - NHRP, T - Table,
       v - VNC, V - VNC-Direct, A - Babel, F - PBR,
       f - OpenFabric,
       > - selected route, * - FIB route, q - queued, r - rejected, b - backup
       t - trapped, o - offload failure

S>r ::/0 [210/0] is directly connected, pppoe0, weight 1, 00:08:41
  r              is directly connected, pppoe1, weight 1, 00:08:41

Log Output:

Nov 12 13:45:32 router zebra[1492]: [HSYZM-HV7HF] Extended Error: IPv6 routes can not use an IPv4 nexthop
Nov 12 13:45:32 router zebra[1492]: [WVJCK-PPMGD][EC 4043309093] netlink-dp (NS 0) error: Invalid argument, type=RTM_NEWROUTE(24), seq=367, pid=3533212616
Nov 12 13:45:32 router zebra[1492]: [VYKYC-709DP] default(0:254):::/0: Route install failed

Details

Version
1.5-rolling-202409120007
Is it a breaking change?
Unspecified (possibly destroys the router)
Issue type
Bug (incorrect behavior)

Event Timeline

Viacheslav subscribed.

Check please bug report guidelines https://blog.vyos.io/feature-requests-and-bug-reports-guidelines

When you create a bug, the most important thing is that it should be possible to tell if it's fixed.

You should include the following information:

    A sequence of configuration commands or a complete configuration file is required to recreate a setup where the bug occurs. Please avoid partial configs: a sequence of commands is easy to paste into the console, a complete config is easy to load in a VM, and a partial config is neither! At least not until we implement a "merge from the CLI" feature that allows pasting config file chunks into a session.

Check please bug report guidelines https://blog.vyos.io/feature-requests-and-bug-reports-guidelines

When you create a bug, the most important thing is that it should be possible to tell if it's fixed.

You should include the following information:

    A sequence of configuration commands or a complete configuration file is required to recreate a setup where the bug occurs. Please avoid partial configs: a sequence of commands is easy to paste into the console, a complete config is easy to load in a VM, and a partial config is neither! At least not until we implement a "merge from the CLI" feature that allows pasting config file chunks into a session.

Viacheslav,

Many thanks, I have updated the report with a complete config although have removed credentials and IPs