NB : I reply here to @Henrik, cause my comment is too long and complex. And, yes, you are right, I use Linux in the present case.
Actually this is great idea ! I have been looking and searching around that since I read your answer.
If I do nothing, the route used the anonymous addresses. So I add a route like you said. But then you should use a lower metric than 256, because otherwise it is still the system's table that get it :
[stephane@Jabberwocky all]$ ip -6 route 2001:...::/64 dev eno1 proto kernel metric 256 expires 3598sec pref medium
So I use your command with a low metric :
[stephane@Jabberwocky all]$ sudo ip -6 route add 2001:...::/64 src 2001:...:fef6:d709 dev eno1 metric 128
But then, I wish to do it large: it should work for my whole /48 (behavior should remain the same as the computer uses a wired or wifi interface to access the net, only the address changes of course). If I set a route for a /48, it will have less priority than the one to /64 (rule of the more specific prefix). So I have to suppress the route to /64 and add a route to /48.
I hope you understand what I write.
(And I still don't see how I am going to make that work practically on the computer: looks like I have to launch a command after network is initiated)