You don't want to use just the Link Local addresses, but you would like to know how to add and remove your own IPv6 addresses, and you want to experiment with Unique Local Unicast addresses, so you can test routing.
The ip command is the tool for this job. Use these commands to set some Unique Local Unicast addresses on two connected PCs:
root@xena:~# ip -6 addr add FC01::1/64 dev eth0
root@stinkpad:~# ip -6 addr add FC01::2/64 dev eth0
Now, you can ping6 each other:
root@xena:~# ping6 FC01::2
PING FC01::2(fc01::2) 56 data bytes 64 bytes from fc01::2: icmp_seq=1 ttl=64 time=7.33 msroot@stinkpad:~# ping6 FC01::1 $ ping6 FC01::1
PING FC01::3(fc01::1) 56 data bytes 64 bytes from fc01::1: icmp_seq=1 ttl=64 time=6.06 ms
And each host can ping6 its own shiny new address. You don't need to specify the interface when you're pinging Unique Local Unicast addresses like you do for Link Local addresses.
These addresses are removed when you reboot, or you can use ip:
# ip -6 addr del FC01::1/64 dev eth0
This is purely a technical exercise, and not useful for production systems. Unique Local Unicast addresses are supposed to be globally unique. How to achieve this without using a central registry? RFC 4193 "Unique Local IPv6 Unicast Addresses" offers some suggestions for methods for generating unique addresses, but they're intended for programmers to create nice address-generating utilities, not network administrators.
What you can do with this is simply increment the Interface ID portion of the address as you assign Unique Local Unicast addresses to additional hosts and use these for testing routing, name services, and other basic network functions.
Why bother with these, when you'll be able to get more global unicast addresses from your service provider than you'll ever be able to use? Because:
They are independent of any service provider, so you can be just as arbitrary as you want.
They have a well-known prefix to allow for easy filtering at border routers.
If they accidentally leak outside your network, they shouldn't conflict with any other addresses.
The simple examples in this recipe demonstrate some shortcuts for expressing IPv6 addresses. FC01::1 is shorthand for FC01:0000:0000:0000:0000:0000:0000:0001. The required structure of the address looks like this:
| 7 bits |1| 40 bits | 16 bits | 64 bits | +--------+-+------------+-----------+----------------------------+ | Prefix |L| Global ID | Subnet ID | Interface ID | +--------+-+------------+-----------+----------------------------+
IPv6 allows you to collapse quads full of zeros. FC01::1 could also be written as FC01:0:0:0:0:0:0:1. We'll discuss this more in Recipe 15.7.