Getting a static private IP address is entirely between the RPi and its router.
For example, you could configure the router to identify the RPi by MAC address (after ensuring any MAC address randomization features on the RPi OS are switched off... usually wired connections don't randomize MAC addresses by default, but WiFi connections might) and always assign it a particular private IP.
Or if your router provides a particular private subnet (e.g. 192.168.1.0/24 i.e. usable addresses 192.168.1.1 ... 192.168.1.254) but only uses DHCP on some subset of them (e.g. DHCP offers from 192.168.1.10 to 192.168.1.127) then you could just pick one address from outside the DHCP range but within the subnet (say, 192.168.1.200) and just configure it to the RPi as a static IP address.
The rest of your question is basically asking for general home networking advice, nothing specific to Unix or Linux. Strictly speaking, that is off topic for Unix&Linux.SE. But I'll say this:
- You don't need anything specific on the outbound
ssh
connection side.
- You need the internet provider on the inbound
ssh
connection side to be not using Carrier-grade NAT (CGNAT) and not firewalling all inbound connections.
- Getting a really static IP tends to have a cost, and is not always possible for home consumer internet connections. But you don't really need a static public IP for the router at the inbound SSH connection side, but a known public IP. If the public IP is non-static (as usual for consumer-grade internet connections), using a dynamic DNS service to assign a static DNS name for it is usually cheaper than getting a static IP address, and then you'll be able to connect by DNS name, even if the IP address will vary. You might even find a free dynamic DNS service for your region sometimes.
- On the side of the inbound SSH connection, the router needs a port forwarding configured: from the internet-side of the router, a TCP port of your choice needs to be forwarded to the static private IP of the destination RPi.