This IPv6 multi-subnet Linux based router runs Ubuntu Server 12.04 in a VirtualBox virtual machine. Setup is simply a matter of setting IPv6 forwarding, net.ipv6.conf.all.forwarding=1 in the sysctl.conf file and setting static addresses on the interfaces.
The bind9 and squid3 packages are installed to support domain name service forwarding and http proxying for the DMZ nodes which have no internet access.
Lastly, the main router needs some static routes since the local network addresses need to be specified and I didn't subnet the router interfaces for the tier 1 LAN.
Squid cache proxy needs a few tweaks to enable ACLs for the new subnets. The private block is already included so I added the tier 1 block in the ACLs: acl localnet src fd00::/7 2001:470:f379:31::/64.
NTP is not used here but other virtual machines may need time synchronization so plan for it if your clock drifts while running in the virtual machine. You would set your NTP host to the corresponding router's tier network address.
I wanted to build an IPv6 only environment, but Ubuntu's repository's doesn't always respond with a quad A records (AAAA) so I have to enable IPv4 on eth0 (dhclient eth0) so the proxy on the router can reach IPv4 sites for updates. This series of articles is configured for IPv6 only and the firewall script removes the IPv4 interface when run.
The router software was installed with the Basic Server option menu choice in the Ubuntu server config screen. The unique local addresses are not pseudorandom, as the RFC 4193 calls for.