I spent the morning looking at two IPv6 problems in work. In one case, Linux seemed to be looping IPv6 packets back out its 6to4 interface that it should be forwarding to its ethernet interface. After a lot of confusion, I realised it was just a typo on my part - an “fc” should have been an “fd”, so the route was pointing in the wrong direction.
The other problem was that performance over the 6to4 interface seemed to be a bad, even though we had a close 6to4 relay router. It seems that the MTU was set too high - I had tried to set the MTU using Debian’s /etc/network/interfaces “mtu” directive, but that doesn’t seem to work on tunnel interfaces in the version of Debian I’m using. Setting it manually has helped considerably with bulk TCP transfers: I’m now getting about 13Mbps, which is quite reasonable. I guess the bad performance was caused by larger IPv6 packets producing an IPv4 packet that had to be fragmented, and something along the path doesn’t handle IP fragments so well.