I figured I would share my experiences with setting up he.net on a server that is hosted (ie: a VPS from 1and1).
You can follow the usual instructions in the pinned topic on this board, but that only works to set up the router subnet. The hosted server usually only comes with one interface and that interface has the public IP address. To get the routed subnet to respond (for example, to do rDNS) you need to create a fake ethernet device and then enable ipv6 forwarding.
My server has Centos, so setting up the forwarding was easy:
There is no special configuration in the sit1 tunnel, so create a new dummy tunnel: /etc/sysconfig/network-scripts/ifcfg-dummy0
Either reboot or run ifup sit1 && ifup dummy0, then check the route table:
ip -f inet6 route | egrep "sit|dummy" | grep -v fe80::
and you'll see your new routed network appear:
2001:470:routerIPv6network::/64 via :: dev sit1 metric 256 expires 21333565sec mtu 1480 advmss 1420 hoplimit 4294967295
2001:470:routedIPv6network::/64 dev dummy0 metric 256 expires 21333564sec mtu 1500 advmss 1440 hoplimit 4294967295
default dev sit1 metric 1 expires 21333565sec mtu 1480 advmss 1420 hoplimit 4294967295
Then test to see if you can ping from your new routed subnet:
ping6 ipv6.google.com -I 2001:470:routedIPv6network::1
PING ipv6.google.com(iw-in-x6a.1e100.net) from 2001:470:routedIPv6network::1 : 56 data bytes
64 bytes from iw-in-x6a.1e100.net: icmp_seq=0 ttl=56 time=76.1 ms
64 bytes from iw-in-x6a.1e100.net: icmp_seq=1 ttl=56 time=76.3 ms
64 bytes from iw-in-x6a.1e100.net: icmp_seq=2 ttl=56 time=76.4 ms
--- ipv6.google.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2009ms
rtt min/avg/max/mdev = 76.111/76.304/76.469/0.269 ms, pipe 2
Hope this helped! Maybe he.net will offer single-endpoint tunnels in the future with rDNS capability, but for now this is how I have to do it to get rDNS to work.