Você pode resolver isso modificando a rota padrão. Cada rota no Linux tem a opção de especificar o endereço de origem padrão. Se você especificar o endereço xxxx :: 3 em sua rota, então aquele será usado por padrão:
/sbin/ip -6 route del default
/sbin/ip -6 route add default via xxxx::1 src xxxx::3
Se você mostrar a tabela de roteamento, verá o resultado:
/sbin/ip -6 route
default via xxxx::1 dev eth0 src xxxx::222 metric 1024
Uma coisa a observar é que os endereços IPv6 estão em estado de tentativa até que a detecção de endereço duplicado tenha sido executada. O Linux se recusará a usar um endereço provisório como o endereço de origem padrão. Isso significa que você pode precisar adicionar um pequeno sleep
antes de adicionar essa rota, para que o endereço tenha tempo de sair do estado provisório e se tornar utilizável.