Since we had to learn several IPv6 Lessons the hard way, we're trying to document them so you don't have to.
Don't use LinkLocal addresses for anything, they have a specific purpose (auto configuration etc), and using them for general connectivity will lead to nightmares.
We tried to use LinkLocal addresses for BGP peering. This was a mistake too. Because BGP didn't know which interface the connections originated on, it would always set the next-hop to the LinkLocal address at the far end, even for routers on the same physical network.1?
Perhaps LinkLocal addresses will work on PointToPoint links, but I suspect even then don't bother, save yourself some headaches, avoid LinkLocal addresses. You have 65536 subnets in your SiteLocal address range, use them and save everyone from the nightmares.
For more discussiong on this see LinkLocal.
If a machine has forwarding enabled then it won't auto configure itself. A machine which runs services should be statically allocated an address and shouldn't autoconf itself (but it will unless it's got forwarding enabled etc). So, set up RouterAdvertisements on your network, but then don't use them. :)
Many devices are either too dumb, or don't trust IPv6 traffic and will drop it. Pull out your IPv6 over IPv4 tunnels to bridge these irritating points.
From NZ the closest IPv6 "peering" point is in America, and well, latency sucks. If I ping6 someone on the same ISP as me, their RTT can exceed 3,000ms! This will improve as more people get IPv6 connectivity and more peering points appear, but it's no wonder that noone uses IPv6 when it's significantly slower and less reliable than IPv4 because it has to travel both ways across the pacific.
The MetaNet is ameliorating2? this by doing peering inside NewZealand between interested parties on an experimental basis. If you're interested in doing experimental IPv6 peering with in NewZealand please contact <my firstname> at <the first word of MetaNet> . <the second word of MetaNet> . nz -- PerryLorier
6to4 also helps significantly here.
Internal machines upon getting a router advertisement under linux add a default gateway to a router. All fine and well, until you realise that IPv6 doesn't use default routers and you needed a route to 2000::/3 instead. Sigh.
I recently set-up IPv6 again on my linux box. My linux box would happily talk to the outside world using IPv6 but my internal network machines couldn't. Took me a while to realise that I had configured radvd to use eth0 and also had given my first IPv6 address (::1) to eth0. Change these both to eth2 (which faces my internal network) and everything works fine.