Okay, so, there were A LOT of different answers for this thing. Someone had the same problem as me.
Here's what i tried already from all these existing answers:
- disabling DAD and enabling nonlocal bind:
sysctl net.ipv6.conf.eth0.dad_transmits=0
sysctl net.ipv6.ip_nonlocal_bind=1
- then i tried doing the things from here:
ndppd
# (warning) Low prefix length (64 <= 120) when using 'static' method
# it's running in a seperate screen btw, i didn't terminate it
ip add add local 2a09:7c40:0:f::/64 dev lo
ignored the route command, because i already had it configured
ignored the sysctl, because i already had it enabled
curl --interface 2a09:7c40:0:f::2145 https://api64.ipify.org/
the curl command didnt work, it timeouted
had the same ip assigned to loopback and ens3, so i tried removing it from ens3:
ip addr del 2a09:7c40:0:f::/64 dev ens3
curl --interface 2a09:7c40:0:f::2145 https://api64.ipify.org/
the curl command still didnt work, it timeouted
Maybe the curl --interface option is not working well with nonlocal binds, so I tried doing the same previous commands, but I replaced curl with freebind:
freebind -r 2a09:7c40:0:f::/64 -- wget -qO- ipv6.wtfismyip.com/text
And it also didn't work, just like everything before.
There's a workaround for this problem for anyone who is tired of this, you can just add an address everytime you need it, like here:
ip -6 address add 2a09:7c40:0:f::2145/64 dev ens3
curl --interface 2a09:7c40:0:f::2145 https://api64.ipify.org/
ip -6 address del 2a09:7c40:0:f::2145/64 dev ens3
But that workaround doesn't work well for big amount of IPs used at once.
So, the question is: how do I make this thing finally work?
Edit: here's the output of ip -6 route
root@ghp:~# ip -6 route
::1 dev lo proto kernel metric 256 pref medium
2a09:7c40:0:f::/64 dev lo proto kernel metric 256 pref medium
fe80::/64 dev ens3 proto kernel metric 256 pref medium
default via 2a09:7c40::1 dev ens3 metric 1024 onlink pref medium
with lo interface set in routing table, it fails with no route to host,
with ens3 interface set, it just timeouts