BT IPv6 September 2017

This is an update to: BT Broadband with native IPv6

Around four months after setting up native IPv6 with BT, I restarted my router for the first time and noticed a distinct lack of IPv6 connectivity. There were no global IPv6 addresses assigned at all.

This is what I could see looking in the log:

File extract: /var/log/syslog
dhcpcd[2593]: bt: unsupported interface family 00
dhcpcd[2593]: bt: cannot assign multiple prefixes with a SLA of 0
dhcpcd[2593]: bt: DHCPv6 server does not support OPTION_PD_EXCLUDE

I have no idea what the first log message means.

Multiple prefixes

The second log message was due to me trying to assign prefixes to both my bt (sla_id 0) and lan (sla_id 1) interfaces with the following.

File extract: /etc/dhcpcd.conf
# Configure IPv6 on bt and accept router solicitations
interface bt
    ipv6only
    ipv6rs
    # Delegate prefixes to bt and lan interfaces
    ia_pd 1 bt/0 lan/1

I read the manpage for dhcpcd5 and noticed that …sla_id can be 0 only if the Delegated Prefix is assigned to one interface.So when assigning multiple prefixes I would have to start from sla_id 1 instead.

OPTION_PD_EXCLUDE

The manpage was helpful with the third log message too: you cannot assign a prefix to the requesting interface unless the DHCPv6 server supports RFC6603 Prefix Exclude Option. BT either doesn’t support this option or it no longer does. So I can’t assign a prefix to my bt interface.

Revised configuration

This is the revised configuration that I tried.

File: /etc/dhcpcd.conf
hostname
duid
option rapid_commit
option domain_name_servers, domain_name, domain_search, host_name
option classless_static_routes
option ntp_servers
require dhcp_server_identifier
nohook lookup-hostname

# Globally disabling router solicitation as requesting
# prefix delegation
noipv6rs

# Only try to configure these interfaces
allowinterfaces bt lan

# Only configure IPv6 on lan interface: internal IPv4 is static
interface lan
    ipv6only

# Configure IPv6 on bt and accept router solicitations
interface bt
    ipv6only
    ipv6rs
    # Request a prefix for lan. Using sla_id 0 resulted in the full /56
    # being assigned to lan, whereas sla_id 1 results in a /64.
    ia_pd 1 lan/1

No default route

I now had prefix delegation working again and a global /64 prefix assigned to my lan but I still couldn’t ping over IPv6.

# ping6 allysmith.uk
connect: Network is unreachable

I checked to see what the default route was and discovered that there was no default route through bt.

# ip -6 route show
2a00:23c4:1004:1a01::/64 dev lan  proto kernel  metric 203 
fe80::/64 dev lan  proto kernel  metric 256 
fe80::/64 dev wan  proto kernel  metric 256 
fe80::/10 dev bt  metric 1 
fe80::/10 dev bt  proto kernel  metric 256

Adding this route manually worked; I couldn’t understand why it wasn't picking the route up through router advertisements. Then I remembered that there was a bug/feature, in Debian at least, that IPv6 disables router advertisements when you have forwarding set. I had written the following script to deal with this but forgot to update it when I renamed interface ppp0 to bt.

File: /etc/ppp/ipv6-up.d/bt_accept_ra
#!/bin/bash

# Accept IPv6 Router Advertisements on bt even when IPv6 forwarding is enabled
if [ "$PPP_IFACE" = "bt" ]; then
    logger IPv6 interface up on bt, changing to accept_ra=2
    echo 2 > /proc/sys/net/ipv6/conf/"$PPP_IFACE"/accept_ra
fi

Result

This is the result after a restart. My external interface bt has a link-local IPv6 address, which is all BT assign. I have requested a prefix from BT (/56) and assigned a /64 to my lan interface.

# ifconfig
bt: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1500
        inet 86.128.143.254  netmask 255.255.255.255  destination 172.16.19.19
        inet6 fe80::ac70:b56f:6e12:2994  prefixlen 10  scopeid 0x20<link>
        ppp  txqueuelen 3  (Point-to-Point Protocol)
        RX packets 125  bytes 25669 (25.0 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 159  bytes 18100 (17.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lan: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.16.0.1  netmask 255.255.255.0  broadcast 172.16.0.255
        inet6 fe80::224:8cff:fe48:6ce4  prefixlen 64  scopeid 0x20<link>
        inet6 2a00:23c4:1004:1a01::1  prefixlen 64  scopeid 0x0<global>
        ether 00:24:8c:48:6c:e4  txqueuelen 1000  (Ethernet)
        RX packets 206  bytes 39567 (38.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 142  bytes 40483 (39.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 0  (Local Loopback)
        RX packets 114  bytes 9656 (9.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 114  bytes 9656 (9.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wan: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1508
        inet6 fe80::8616:f9ff:fe05:bf61  prefixlen 64  scopeid 0x20<link>
        ether 84:16:f9:05:bf:61  txqueuelen 1000  (Ethernet)
        RX packets 136  bytes 29251 (28.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 179  bytes 23379 (22.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

The default route has been provided through router advertisements. The additional unreachable route on lo has been created by dhcpcd5 (as sla_id 0) for the remaining prefixes in my /56 that I haven’t assigned: any traffic to them would be rejected locally and not passed upstream through bt.

# ip -6 route show
2a00:23c4:1004:1a01::/64 dev lan  proto kernel  metric 203 
unreachable 2a00:23c4:1004:1a00::/56 dev lo  metric 1024  error -101
fe80::/64 dev lan  proto kernel  metric 256 
fe80::/64 dev wan  proto kernel  metric 256 
fe80::/10 dev bt  metric 1 
fe80::/10 dev bt  proto kernel  metric 256 
default via fe80::223:3eff:fe8c:b250 dev bt  proto ra  metric 1024  expires 4336sec hoplimit 64

Comments

Your email address will not be published. I need it to send you a verification link. It will also be sent to Gravatar to check if you have one.

Will Cooke

Thanks for this info, it's saved me a lot of faffing about.

A question, no matter what I try I still get fragmentation on packets above 1492. Has something changed inside BT recently which stops 1500 byte packets from working again? Can you confirm that pinging with larger packets is working?

e.g. https://github.com/8none1/multipathrouting/blob/master/ping_mtu_test.sh

(I'm doing load balancing over to PPPoE circuits, so that might have something to do with it)

Lukasz Turowski

Hi! I was thinking about creating an alias interface for ipv6 only like ppp0:0 and leave sla_id 0 as before ia_pd 1 ppp0:0/0 lan/1. What do you think?

Will Cooke

Just over a year later, and I've got this working now. It turns out that the version of pppoe I was using didn't support baby jumbo frames. I moved to a Ubiquiti EdgeRouter X and it all just worked out the box.