Download, install, burn the iso then configure pfsense here : http://www.pfsense.org/index.php?option=com_content&task=view&id=58&Itemid=46

Run over to http://tunnelbroker.net/, click register at the bottom and once you're verfied setup an IPv6 tunnel. Once this is done print out the details page then continue on.

Login to pfsense via the console or ssh (if enabled) of pfsense and hit option 8 for the shell. Then create the following 2 scripts


# cd /usr/local/etc/rc.d/
# touch config-ipv6.sh
# chmod 755 config-ipv6.sh
# vi config-ipv6.sh



# Start Script
#

#!/bin/sh

IFOUT="gif0"
IFIN=""
WANIP=""

IPv6Router=""
IPv6Server=""
IPv6Client=""

IPv4Server=""
IPv4Client=""

####### Configure the stuff

# Configure the interfaces
ifconfig $IFIN inet6 $IPv6Router prefixlen 64

ifconfig $IFOUT create
ifconfig $IFOUT tunnel $IPv4Client $IPv4Server
ifconfig $IFOUT inet6 $IPv6Client $IPv6Server prefixlen 128
ifconfig $IFOUT up

route add -inet6 default fe80::%$IFOUT
route add -inet6 default $IPv6Server

# Configure IPv6 forwarding
sysctl net.inet6.ip6.forwarding=1

/usr/sbin/rtadvd -d -D -c /etc/rtadvd.conf $IFIN

cat /tmp/rules.debug | sed "/User-defined rules follow/{
p;s/.*/\
pass in quick on $IFIN inet6 from any to any\\
pass out quick on $IFIN inet6 from any to any\\
pass out quick on $IFOUT inet6 from any to any\\
pass quick proto ipv6-icmp from any to any\\
/;}" > /tmp/rules.config-ipv6.txt

# Read the new PF configuration file
pfctl -f /tmp/rules.config-ipv6.txt
pfctl -d; pfctl -e

#
# End Script
#

Leave IFOUT as it is. Don't touch it
IFIN is your LAN adapter
WANIP is your WAN IP

IPv6Router is your Routed 64 ending with a 1
IPv6Server is your Server IPv6 address
IPv6Client is your Client IPv6 address

IPv4Server is the Server IPv4 address
IPv4Client is your WAN IP

There are no other changes to be made

# cd /etc/
# vi /etc/rtadvd.conf

#
# Start Script
#

IFIN:\
:addrs#1:addr="*":prefixlen#64:tc=ether:

#
# End Script

IFIN is your LAN adapter
* is your Routed 64 address

Reboot and your pfsense will start handing out ip addresses. Try to ping google using 'ping6 ipv6.google.com'.

The only issue I have with this is sometimes the tunnel times out and you have to run the script manually. It's a pita but it still workisn. I would put this script in crontab and run it just before the start of the business day just to make sure the tunnel is up or run something like irssi on ipv6. The freenode IPv6 server is ipv6.chat.freenode.net