Do'h! A ordem dos comandos é importante .
O motivo pelo qual o comando ip -6 route add default via 2001:470:xxxx:xxx::1 dev he-ipv6 table he-ipv6
não funcionou foi que a rota foi definida na tabela main
.
Mas como o comando flush inicial remove a tabela principal, você deve adicioná-lo novamente antes de executar o comando ip route default
.
O script correto é, portanto:
# Reset IPv6 routing table.
ip -6 rule flush
# Add default IPv6 rules again - since they gets deleted by the initial rule flush command.
ip -6 rule add priority 32766 from all table main
# Reset Tunnelbroker routing table (table name: "he-ipv6").
ip -6 route flush table he-ipv6
# Add routeable VPN subnets to Tunnelbroker routing table
ip -6 rule add from 2001:DB8:CAFE::/48 table he-ipv6
# Remember to add a rule that if no machine does not respond to a
# packet address in my /48, then we should return unreachable.
# Else the package will be forwarded by default out through the
# Hurricane Electric connection.
#(From the Internet)
ip -6 route add unreachable 2001:DB8:CAFE::/48
#(From my /48 subnet)
ip -6 route add unreachable 2001:DB8:CAFE::/48 table mynet6
# Any traffic that originates from VPN has to be forwarded via Tunnelbroker routing table
# using the tunnelbroker link (link name: he-ipv6).
ip -6 route add default via 2001:470:xxxx:xxx::1 dev he-ipv6 table he-ipv6
Vou deixar a pergunta e resposta aqui, já que eu não sou o único a tentar roteamento IPv6 baseado na fonte.
A informação mais recente que encontrei sobre o assunto foi de 2010.