Giving employees of an ISP home connectivity to IPv6 is very important.
6in4 is symmetrical, so you set up the tunnel in the same way on both ends (forming a virtual 'cable' between them). Routing is then done as usual: the 'customer' end uses the tunnel as default gateway, and the 'server' routes the prefixes down the corresponding tunnel. That last bit might require some (manual or automatic) re-distribution of routes.
On Cisco IOS redistribute static
in your routing protocol config is an easy way to do this, but you might want to filter the re-distribution. I usually redistribute 'customer' routes in BGP. It keeps the IGP (like ISIS or OSPF) cleaner, which will help convergence speed of your core after a link flap or failure. And BGP offers much better filtering options. For example by attaching communities to redistributed routes.
To expand a bit on the answer given by petrus. I'll give the Cisco notation, but this will work in other operating systems in about the same way.
You can have numbered and unnumbered links. Numbered links might make debugging easier, but it makes your addressing plan a bit more complex. In both cases you will have to delegate a bit of address space to the user. The addresses on the link are only used on the link, and the user probably needs to have addresses for networks behind the link as well. So route a /56
or a /48
down the link.
Let's start with an unnumbered link. Create the link with ipv6 enable
to create link-local addresses on the link. Something like this on the 'server' side:
interface Tunnel1
description 6in4 to <client-1>
no ip address
ipv6 enable
tunnel source <local ipv4>
tunnel destination <client-1 ipv4 addr>
tunnel mode ipv6ip
interface Tunnel2
description 6in4 to <client-2>
no ip address
ipv6 enable
tunnel source <local ipv4>
tunnel destination <client-2 ipv4 addr>
tunnel mode ipv6ip
ipv6 route 2001:db8:a001::/48 Tunnel 1
ipv6 route 2001:db8:a002::/48 Tunnel 2
router bgp 65530
address-family ipv6
redistribute static
And on the 'client' side:
interface Tunnel1
description 6in4 to <server>
no ip address
ipv6 enable
tunnel source <client-1 ipv4>
tunnel destination <server ipv4 addr>
tunnel mode ipv6ip
interface FastEthernet0/0
ipv6 address 2001:db8:a001:1::1/64
ipv6 route ::/0 Tunnel 1
And now exactly the same with numbered links. The benefit is that you can more easily ping the other endpoint of the tunnel. Something like this on the 'server' side:
interface Tunnel1
description 6in4 to <client-1>
no ip address
ipv6 address 2001:db8:0:a001::1/64
tunnel source <local ipv4>
tunnel destination <client-1 ipv4 addr>
tunnel mode ipv6ip
interface Tunnel2
description 6in4 to <client-2>
no ip address
ipv6 address 2001:db8:0:a002::1/64
tunnel source <local ipv4>
tunnel destination <client-2 ipv4 addr>
tunnel mode ipv6ip
ipv6 route 2001:db8:a001::/48 2001:db8:0:a001::2
ipv6 route 2001:db8:a002::/48 2001:db8:0:a002::2
router bgp 65530
address-family ipv6
redistribute static
redistribute connected
And on the 'client' side:
interface Tunnel1
description 6in4 to <server>
no ip address
ipv6 address 2001:db8:0:a001::2/64
tunnel source <client-1 ipv4>
tunnel destination <server ipv4 addr>
tunnel mode ipv6ip
interface FastEthernet0/0
ipv6 address 2001:db8:a001:1::1/64
ipv6 route ::/0 2001:db8:0:a001::1
I choose 2001:db8:0:a001::/64
for the point-to-point link related to delegation 2001:db8:a001::/48
for convenience. You can choose any prefix you like, but keeping things recognisable with an address space as large as IPv6 can help...