I wrote a while back about issues with IPv6 on Linux. It turns out that most of the pain occurs for two reasons:
Linux doesn't accept router advertisements by default. If you configure your router to tell everyone on the network that it has a nonstandard MTU, Linux will ignore the advertisements.
Linux will act upon any Packet Too Large messages it receives
and in fact will create a temporary route (visible from the
ip route command) that has the correct reduced MTU but, for
whatever reason, most programs won't use the new route without
a restart. That is, if my mail client hangs due to a
Packet Too Large message, it won't be able to send any mail
until I restart the program.
The first point can be addressed by adding the following to /etc/sysctl.conf:
net.ipv6.conf.default.accept_ra=1 net.ipv6.conf.default.accept_ra_mtu=1
Usually, net.ipv6.conf.default.accept_ra_mtu is already set to 1, but
it's worth being explicit about it.
I also add net.ipv6.conf.default.autoconf=0 because I statically
assign addresses.
The second point can be addressed by restarting the program, as sad as that is.