When I run a (custom dev and test network) parity node on my mac from the command line, it starts up and displays my enode as
enode://c2f9c6a...email@example.com:99999 where the IP address is my router assigned ip
This means that although I can connect to the bootnode peers which have been set up (I have a remote one on a VPS), and the bootnode peers record that my node is connected, no other remote nodes are able to connect to me using the enode URL that my node has.
For example, when other remote colleagues start their nodes, they also can connect to the bootnode, but are not able to discover my node nor am I able to discover them as they are also behind routers and they have the same issue. Therefore this is not a peer-to-peer network, it is centralised around the bootnode as node discovery appears not to be working.
So my question is actually two related questions, "How to get my enode URL to use/show external IP, and how can I be discoverable?", and if that is not possible then "how is peer-to-peer achieved on the public ethereum chain and can I apply it to my custom chain?".