I finally have an ISP that offers IPv6, however their ONT router does not have bridge mode, so I'm stuck with double NAT on IPv4, and a SLAAC-configured interface on IPv6. I was hoping to be able to use IPv6 internally with NPT, but it is not working. Here is my config:
# Using a temp bridge to not announce the address to the LAN just yet.
/ipv6 address
add address=3000::100 interface=Temp_bridge
# Config from daryllswer and others.
/ipv6 firewall mangle
add action=snpt chain=postrouting comment="NPTv6 (Internal>External)" src-address=3000::/64 src-prefix=3000::/64 dst-prefix=2607::/64
add action=dnpt chain=prerouting comment="NPTv6 (External>Internal)" dst-address=2607::/64 src-prefix=2607::/64 dst-prefix=3000::/64
Using torch, I can see that the 3000 address is being correctly converted into 2607::100 (and the rule counter is going up), but when the packets return it seems the ISP router is trying to do a Neighbor Discovery on the "fake" address, and my router is not responding to the ND. So it doesn't send the packet to the router, and the dnpt rule is never used since the counter doesn't move. These are the two lines I see on torch:
From: 2001::ping
To: 2607::100
From: fe80:upstream
To: ff02::1:ff00:100
Any hints on what I'm missing? Thank you.