Tailscale direct vs relay inconsistent

Tailscale version Windows 1.36.1 Linux 1.36.1 iOS 1.36.0
Your operating system & version Windows 11 Linux DietPI iOS

I am trying to connect three of my devices a raspberry pi running dietpi, my windows laptop and my iPhone.

My raspberry pi is under a CGNAT and in a remote location.

I have tried opening ports in my current location, allowed 41641 in windows firewall but nothing guarantees a direct connection. Its very random. I know a direct connection is possible since it does connect directly when it wishes to do so.

Even when its connected directly, I disconnect and reconnect there is a 50% chance it will connect through a relay.

My other two devices are not under NAT and I can open ports but its still not consistent. When tailscale connects directly speeds are very high but not so when connected through relay. If someone knows why I’m not able to consistently get a direct connection I would be grateful.