IPv6 connectivity lost after border router restarts

I have two routers in cascade providing IPv6 connectivity to internal networks.

HE.net <---> [border router] <---> [internal router] <---> LAN

My border router is only intended to two purposes, really:

  • connect to ISP via PPPoE
  • connect to HE via 6in4

Everything works just fine until the border router is restarted. After the border router restarts, the internal router can still traceroute6 as usual; IPv6 connectivity looks OK from the internal router perspective. However, workstations in the LAN lose IPv6 connectivity completely.

This behavior would suggest that the issue is on the internal router. However, after several tests, turns out that restarting the LAN interface of the border router "solves" the issue.

After restarting the LAN interface of the border router (not the internal router!), all workstations in the internal LAN regain IPv6 connectivity as usual.

Could anyone hint what could possibly be wrong, please?
Thanks a lot,

This is the border router

/etc/config/network

config dsl 'dsl'
        option annex 'b'
        option line_mode 'vdsl'
        option tone 'a'
        option xfer_mode 'ptm'
        option ds_snr_offset '0'

config interface 'lan'
        option type 'bridge'
        option ifname 'eth0.1'
        option proto 'static'
        option netmask '255.255.255.0'
        option macaddr 'a0:bd:cd:96:1e:49'
        option ipaddr '192.168.0.1'
        list dns '2606:4700:4700::1111'
        list dns '2606:4700:4700::1001'
        option ip6ifaceid '::1'
        option ip6hint '4000'
        option ip6assign '64'
        option force_link '0'

config interface 'wan'
        option proto 'pppoe'
        option ifname 'dsl0.101'
        option username 'dsl00000000@utilitiesuk.vodafone.net'
        option password 'password'
        option ipv6 '0'
        
config interface 'he6'
        option ifname 'pppoe-wan'
        option proto '6in4'
        option username 'username'
        option peeraddr '216.66.88.98'
        option ip6addr '2001:470:cafe:babe::2/64'
        option password 'password'
        option tunnelid '123456'
        list ip6prefix '2001:470:cafe::/48'

config device 'lan_eth0_1_dev'
        option name 'eth0.1'
        option macaddr '34:8a:ae:74:a6:4c'

config device 'wan_dsl0_dev'
        option name 'dsl0'
        option macaddr 'a0:bd:cd:96:1e:4a'

/etc/config/dhcp

config dnsmasq
        option domainneeded '1'
        option localise_queries '1'
        option rebind_protection '1'
        option rebind_localhost '1'
        option local '/lan/'
        option domain 'lan'
        option expandhosts '1'
        option authoritative '1'
        option readethers '1'
        option leasefile '/tmp/dhcp.leases'
        option localservice '1'

config dhcp 'lan'
        option interface 'lan'
        option ndp 'hybrid'
        option ra_management '1'
        option start '2'
        option leasetime '12h'
        option limit '1'
        option ra_default '1'
        list dns '2606:4700:4700::1111'
        list dns '2606:4700:4700::1001'
        list dns '1.1.1.1'
        list dns '1.0.0.1'
        list domain 'example.com'
        option ra 'hybrid'
        option dhcpv6 'hybrid'
        option dynamicdhcp '0'

config dhcp 'wan'
        option interface 'wan'
        option ignore '1'

This is the internal router

/etc/config/network

config interface 'wan'
        option proto 'static'
        option ipaddr '192.168.0.2'
        option netmask '255.255.255.0'
        option gateway '192.168.0.1'
        option force_link '0'
        option delegate '0'
        option device 'wan'
        list dns '1.1.1.1'
        list dns '1.0.0.1'
        list dns_search 'example.com'

config interface 'wan6'
        option proto 'static'
        list ip6addr '2001:470:cafe:4000::2/64'
        option ip6gw '2001:470:cafe:4000::1'
        option ip6prefix '2001:470:cafe:4000::/64'
        option device 'wan'
        option force_link '0'

config interface 'lan'
        option proto 'static'
        option ipaddr '192.168.1.1'
        option netmask '255.255.255.0'
        option metric '100'
        list dns '2606:4700:4700::1111'
        list dns '2606:4700:4700::1001'
        list dns '1.1.1.1'
        list dns '1.0.0.1'
        option stp '1'
        option ip6gw '2001:470:cafe:4000::1'
        list ip6addr '2001:470:cafe:4500::1/64'
        option device 'br-lan'

/etc/config/dhcp

config dnsmasq
        option localise_queries '1'
        option rebind_protection '1'
        option rebind_localhost '1'
        option local '/lan/'
        option expandhosts '1'
        option authoritative '1'
        option leasefile '/tmp/dhcp.leases'
        option domain 'example.com'
        option domainneeded '1'
        list server '1.1.1.1'
        list server '1.0.0.1'
        list server '2606:4700:4700::1111'
        list server '2606:4700:4700::1001'
        option localservice '1'

config dhcp 'wan'
        option interface 'wan'
        option ignore '1'
        option start '100'
        option limit '150'
        option leasetime '12h'
        list ra_flags 'none'

config dhcp 'wan6'
        option interface 'wan6'
        option start '100'
        option limit '150'
        option leasetime '12h'
        option ignore '1'
        option ra 'hybrid'
        list ra_flags 'none'
        option dhcpv6 'hybrid'
        list dns '2606:4700:4700::1111'
        list dns '2606:4700:4700::1001'
        list domain 'example.com'
        option ndp 'hybrid'

config dhcp 'lan'
        option interface 'lan'
        option start '100'
        option limit '150'
        option ra_management '1'
        list dhcp_option '6,192.168.1.1'
        option leasetime '12h'
        option ra 'server'
        option dhcpv6 'server'
        list domain 'example.com'
        option ndp 'hybrid'
        list dns '2001:470:cafe:4500::1'
        list ra_flags 'none'

Check on both routers when the issue happens:

ifstatus wan6

The issue happens everytime I reboot one of the routers.

In general, I reboot the border router mechanically, by pressing a button, when I suspect that the service provided by the ISP is faulty. Then the router first needs to acquire a PPPoE session and then connect to HE via 6in4 driver in order to acquire IPv6 connectivity. This process takes some time and, in a nutshell, I need to remember to restart the LAN interface in order to circumvent IPv6 connectivity problems in my internal network.

Another situation is when I'm playing with new configurations in my internal router. Everytime I reboot it must be necessarily followed by a restart of the LAN interface on the border router, so that both routers renegotiate whatever they need to renegotiate in order to reestablish IPv6 connectivity in my internal network.

In conclusion: whatever router reboots needs to be followed by restarting the LAN interface on the border router.

I've provoked the issue. I've restarted the internal router and grabbed the diagnostics below.

Thanks a lot for your help!

internal router

# ifstatus wan6
{
        "up": true,
        "pending": false,
        "available": true,
        "autostart": true,
        "dynamic": false,
        "uptime": 146,
        "l3_device": "wan",
        "proto": "static",
        "device": "wan",
        "updated": [
                "addresses",
                "routes",
                "prefixes"
        ],
        "metric": 0,
        "dns_metric": 0,
        "delegation": true,
        "ipv4-address": [

        ],
        "ipv6-address": [
                {
                        "address": "2001:470:cafe:4000::2",
                        "mask": 64
                }
        ],
        "ipv6-prefix": [
                {
                        "address": "2001:470:cafe:4000::",
                        "mask": 64,
                        "class": "wan6",
                        "assigned": {

                        }
                }
        ],
        "ipv6-prefix-assignment": [

        ],
        "route": [
                {
                        "target": "::",
                        "mask": 0,
                        "nexthop": "2001:470:cafe:4000::1",
                        "source": "::/0"
                }
        ],
        "dns-server": [

        ],
        "dns-search": [

        ],
        "neighbors": [

        ],
        "inactive": {
                "ipv4-address": [

                ],
                "ipv6-address": [

                ],
                "route": [

                ],
                "dns-server": [

                ],
                "dns-search": [

                ],
                "neighbors": [

                ]
        },
        "data": {

        }
}

border router

# ifstatus he6
{
        "up": true,
        "pending": false,
        "available": true,
        "autostart": true,
        "dynamic": false,
        "uptime": 101045,
        "l3_device": "6in4-he6",
        "proto": "6in4",
        "updated": [
                "addresses",
                "routes",
                "prefixes"
        ],
        "metric": 0,
        "dns_metric": 0,
        "delegation": true,
        "ipv4-address": [

        ],
        "ipv6-address": [
                {
                        "address": "2001:470:cafe:babe::2",
                        "mask": 64
                }
        ],
        "ipv6-prefix": [
                {
                        "address": "2001:470:cafe::",
                        "mask": 48,
                        "class": "he6",
                        "assigned": {
                                "lan": {
                                        "address": "2001:470:cafe:4000::",
                                        "mask": 64
                                }
                        }
                }
        ],
        "ipv6-prefix-assignment": [

        ],
        "route": [
                {
                        "target": "::",
                        "mask": 0,
                        "nexthop": "::",
                        "source": "2001:470:cafe::/48"
                },
                {
                        "target": "::",
                        "mask": 0,
                        "nexthop": "::",
                        "source": "2001:470:cafe:babe::2/64"
                }
        ],
        "dns-server": [

        ],
        "dns-search": [

        ],
        "neighbors": [

        ],
        "inactive": {
                "ipv4-address": [

                ],
                "ipv6-address": [

                ],
                "route": [

                ],
                "dns-server": [

                ],
                "dns-search": [

                ],
                "neighbors": [

                ]
        },
        "data": {

        }
}

and

# ifstatus lan
{
        "up": true,
        "pending": false,
        "available": true,
        "autostart": true,
        "dynamic": false,
        "uptime": 298,
        "l3_device": "br-lan",
        "proto": "static",
        "device": "br-lan",
        "updated": [
                "addresses",
                "routes"
        ],
        "metric": 0,
        "dns_metric": 0,
        "delegation": true,
        "ipv4-address": [
                {
                        "address": "192.168.0.1",
                        "mask": 24
                }
        ],
        "ipv6-address": [

        ],
        "ipv6-prefix": [

        ],
        "ipv6-prefix-assignment": [
                {
                        "address": "2001:470:cafe:4000::",
                        "mask": 64,
                        "local-address": {
                                "address": "2001:470:cafe:4000::1",
                                "mask": 64
                        }
                },
                {
                        "address": "fdae:544d:8794:4000::",
                        "mask": 64,
                        "local-address": {
                                "address": "fdae:544d:8794:4000::1",
                                "mask": 64
                        }
                }
        ],
        "route": [
                {
                        "target": "2001:470:cafe:4100::",
                        "mask": 64,
                        "nexthop": "2001:470:cafe:4000::2",
                        "source": "::/0"
                },
                {
                        "target": "2001:470:cafe:4300::",
                        "mask": 64,
                        "nexthop": "2001:470:cafe:4000::2",
                        "source": "::/0"
                },
                {
                        "target": "2001:470:cafe:4500::",
                        "mask": 64,
                        "nexthop": "2001:470:cafe:4000::2",
                        "source": "::/0"
                }
        ],
        "dns-server": [
                "2606:4700:4700::1111",
                "2606:4700:4700::1001"
        ],
        "dns-search": [

        ],
        "neighbors": [

        ],
        "inactive": {
                "ipv4-address": [

                ],
                "ipv6-address": [

                ],
                "route": [

                ],
                "dns-server": [

                ],
                "dns-search": [

                ],
                "neighbors": [

                ]
        },
        "data": {

        }
}
1 Like

After restarting the LAN interface of the border router, IPv6 connectivity is back.

You can see the diagnostics below.

I've performed a diff between before the restart and after the restart and nothing really relevant was revealed. The only difference are uptimes.

internal router

# ifstatus wan6
{
        "up": true,
        "pending": false,
        "available": true,
        "autostart": true,
        "dynamic": false,
        "uptime": 916,
        "l3_device": "wan",
        "proto": "static",
        "device": "wan",
        "updated": [
                "addresses",
                "routes",
                "prefixes"
        ],
        "metric": 0,
        "dns_metric": 0,
        "delegation": true,
        "ipv4-address": [

        ],
        "ipv6-address": [
                {
                        "address": "2001:470:cafe:4000::2",
                        "mask": 64
                }
        ],
        "ipv6-prefix": [
                {
                        "address": "2001:470:cafe:4000::",
                        "mask": 64,
                        "class": "wan6",
                        "assigned": {

                        }
                }
        ],
        "ipv6-prefix-assignment": [

        ],
        "route": [
                {
                        "target": "::",
                        "mask": 0,
                        "nexthop": "2001:470:cafe:4000::1",
                        "source": "::/0"
                }
        ],
        "dns-server": [

        ],
        "dns-search": [

        ],
        "neighbors": [

        ],
        "inactive": {
                "ipv4-address": [

                ],
                "ipv6-address": [

                ],
                "route": [

                ],
                "dns-server": [

                ],
                "dns-search": [

                ],
                "neighbors": [

                ]
        },
        "data": {

        }
}

border router

# ifstatus he6
{
        "up": true,
        "pending": false,
        "available": true,
        "autostart": true,
        "dynamic": false,
        "uptime": 101758,
        "l3_device": "6in4-he6",
        "proto": "6in4",
        "updated": [
                "addresses",
                "routes",
                "prefixes"
        ],
        "metric": 0,
        "dns_metric": 0,
        "delegation": true,
        "ipv4-address": [

        ],
        "ipv6-address": [
                {
                        "address": "2001:470:cafe:babe::2",
                        "mask": 64
                }
        ],
        "ipv6-prefix": [
                {
                        "address": "2001:470:cafe::",
                        "mask": 48,
                        "class": "he6",
                        "assigned": {
                                "lan": {
                                        "address": "2001:470:cafe:4000::",
                                        "mask": 64
                                }
                        }
                }
        ],
        "ipv6-prefix-assignment": [

        ],
        "route": [
                {
                        "target": "::",
                        "mask": 0,
                        "nexthop": "::",
                        "source": "2001:470:cafe::/48"
                },
                {
                        "target": "::",
                        "mask": 0,
                        "nexthop": "::",
                        "source": "2001:470:cafe:babe::2/64"
                }
        ],
        "dns-server": [

        ],
        "dns-search": [

        ],
        "neighbors": [

        ],
        "inactive": {
                "ipv4-address": [

                ],
                "ipv6-address": [

                ],
                "route": [

                ],
                "dns-server": [

                ],
                "dns-search": [

                ],
                "neighbors": [

                ]
        },
        "data": {

        }
}

and

# ifstatus lan
{
        "up": true,
        "pending": false,
        "available": true,
        "autostart": true,
        "dynamic": false,
        "uptime": 188,
        "l3_device": "br-lan",
        "proto": "static",
        "device": "br-lan",
        "updated": [
                "addresses",
                "routes"
        ],
        "metric": 0,
        "dns_metric": 0,
        "delegation": true,
        "ipv4-address": [
                {
                        "address": "192.168.0.1",
                        "mask": 24
                }
        ],
        "ipv6-address": [

        ],
        "ipv6-prefix": [

        ],
        "ipv6-prefix-assignment": [
                {
                        "address": "2001:470:cafe:4000::",
                        "mask": 64,
                        "local-address": {
                                "address": "2001:470:cafe:4000::1",
                                "mask": 64
                        }
                },
                {
                        "address": "fdae:544d:8794:4000::",
                        "mask": 64,
                        "local-address": {
                                "address": "fdae:544d:8794:4000::1",
                                "mask": 64
                        }
                }
        ],
        "route": [
                {
                        "target": "2001:470:cafe:4100::",
                        "mask": 64,
                        "nexthop": "2001:470:cafe:4000::2",
                        "source": "::/0"
                },
                {
                        "target": "2001:470:cafe:4300::",
                        "mask": 64,
                        "nexthop": "2001:470:cafe:4000::2",
                        "source": "::/0"
                },
                {
                        "target": "2001:470:cafe:4500::",
                        "mask": 64,
                        "nexthop": "2001:470:cafe:4000::2",
                        "source": "::/0"
                }
        ],
        "dns-server": [
                "2606:4700:4700::1111",
                "2606:4700:4700::1001"
        ],
        "dns-search": [

        ],
        "neighbors": [

        ],
        "inactive": {
                "ipv4-address": [

                ],
                "ipv6-address": [

                ],
                "route": [

                ],
                "dns-server": [

                ],
                "dns-search": [

                ],
                "neighbors": [

                ]
        },
        "data": {

        }
}

I think you should do the following:

  • On the upstream router:

    • Set ip6assign=60 for the lan interface.
    • Move dns from the lan interface to he6.
  • On the downstream router:

    • Use the dhcpv6 protocol for wan6.
    • Move dns from the lan interface to wan6.
  • On both routers:

    • Use the server mode for dhcpv6 and ra.
    • Disable ndp.

If you need static prefixes/addresses:

  • Use ip6hint and ip6ifaceid for the routers.
  • Set up static leases for the clients.