@UAV Pilot,
I think that your first question contains some errors (however I catch the general meaning).
When a device is on Internet, it has a public IP. This IP could be dynamic or static.
Typically your everyday devices are not on Internet but are somehow firewalled/NATted/Routed. So there is no way (affordable, secure) to reach your device from Internet. But, if your device asks for a page to the Internet, then the "hole-punching" magic occurs behid the scenes and a path between a server and your device is created.
It hasalready implemented in how the Internet works. The only condition is that at least one of the two is publicly accessible from Internet.
Now we want to go BLOS via 4G with a Drone and a GCS. This is the main topic of UAV Matrix, and our (Volta's) main focus. There could be N way to implement this; from a weak one to a very robust one. 4G carriers providers have very very (very) tricky policies in assigning IPs and sometimes bandwith. Unless you don't have full control of carrier's behaviour, let's hypotize some scenarios.
If your GCS has a public IP it's enough. It's enough, YES! Every device of the world can "ping" your GCS and receive back a response. As you choose to use a 4G WiFi router - and I don't know why - you should remember that any wifi client is behind your own router, so you must specify in your router configuration some port forwarding. Alternatively you can create a DMZ. The "first to talk" is always the Drone, which calls the public IP of the GCS and the full-duplex link is established.
Also gStreamer works well. BUT - in the case you want to SSH into the Drone you can't, simply because is not reachable. But, dont frainted me, this could be both bad then good. A non-reachable drone is a basic and robust way to protect it from externel attacks - being on Internet is not always good. If also your drone has a public IP, it is not bad, you don't add anything to the system, except that both the GCS and the Drone could be "first-to-talk" (= or the drone calls the GCS, or viceversa, the GCS calls the drone). There is a surplus of options (I believe) which only increments leaks. Finally let's assume that you have at least one public IP, but it's not static. It's dynamic = changes over time.
This is extremely dangerous for the communication Drone-GCS because a sudden change (e.g.: happens also in hangover from a cell to another) the IP could suddenly change. A simple way is to use a Dynamic IP service, like NO-IP. But, remember that the change is not instantaneous. It could take some time, and - expecially for UAV - in that time something bad could happen totally outside your control. The most robust option is to use a VPN or a service that transparently manage mavlink/gstreamer flows for you. In saying this, it could seem that I'm a little bit in a conflict of interest (as Volta Web Service is designed for this) - but this is a real problem that exists, - and we solved it as-a-service. However you can implement your own VPN, in this way you don't need any public-IP nor static IP. OpenVPN is a good starting point.
Best, S.