IPv6 routing

Hi everyone.
Although I’m feeling comfortable configuring pretty much anything on a mikrotik using IPv4, I’ve never used IPv6 and have no knowledge of it.

So recently I was tasked with deploying some VPSes at a random hosting provider. There are some VPSes with services on it and a gateway VPS with RouterOS CHR to handle network stuff.
Turned out that hosting also provides a /112 IPv6 subnet and team decided that we can try and make our services reachable using IPv6 (for experimental reasons). I failed to implement that and I’m not even sure if it’s possible with our setup so figured I better ask more qualified people out there.

So here’s a primitive description of the map of our infrastructure. (IPs are not real ofc)

Provider GW (2001:db8::f/112)
CHR GW#1 (2001:db8::/112)
One local network right behind CHR GW#1
One tunnel from CHR GW#1 to CHR GW#2
One local network behind CHR GW#2

Both local networks have a couple of servers that we want to make accessible via IPv6. (not more that 4-5 servers altogether)

So basically, if that would be IPv4, I could just configure routes to my local networks and NAT outside connections at CHR GW#1, but there’s no NAT for IPv6 so I’m completely lost here.

I would appreciate if someone can say if that’s possible at all using RouterOS, and if it is, could point me to some reading material or explain how this can be achieved.
Thank you.

You can assign /128 address from /112 subnet on the server and route to to destination using link-local gateways

I actually tried that.
So as I said, lets say Provider GW has 2001:db8::f/112, CHR#1 has 2001:db8::1/112 (on external interface). So if I assign 2001:db8::2/112 to a server on a local network behind CHR#1 and route it using local-links the routing works fine. But when I try to ping 2001:db8::f/112 (Provider GW) packets do not return.

If I get it right Provider GW doesn’t know that 2001:db8::2/128 is behind the gateway 2001:db8::1/112 and is trying to send reply to 2001:db8::2/112 directly and it’s not existent at Provider GW’s scope.

That is what i figured because it wasn’t working. Am I just wrong and that was some kind of configuration error? Should it work that way?