It is impossible to set up a peer-to-peer connection between two devices on symmetric NAT, often used by mobile carriers (or at least it was last time I looked into doing so a few years ago). A STUN server can be used to initiate between other forms of NAT, and TURN can act as a passive full-time intermediary, but there's no way to avoid some sort of central server in many cases.