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
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.