So I wanna set up a Bitcoin full node and actually share blocks and transactions, not just leech off others. Problem is, I'm behind a NAT and can't do port forwarding. I can use a VPN, but it only lets me use non-standard ports. If I run my node on a non-standard port, will other nodes still reach me?
Yeah, that should work. Bitcoin Core doesn’t just randomly ping IP addresses on the default port. It gets info about your node from other nodes you connect to, so your port should be included in that. Also, consider spinning up your own VPN on a VPS for more control.
When you first connect to Bitcoin's P2P network, you get IP addresses from DNS seeds and connect using the default port. But later, peers advertise their IP and port with the addr message. If you’re listening on a different port, your node will still broadcast that port.
Just so you know, your node can still upload blocks and TX data even if it can't accept incoming connections. But yeah, you'd usually end up sharing less data like that. And honestly, ports below 1024 are considered standard by most people.
The default port is just that default. For other nodes to find yours, it connects to them and shares its address and port. I have multiple nodes on my local network with non-default ports, and external nodes can connect to them just fine.