I tried to implement UDP hole punching algorithm for my application. When both peers contacted the server revealing their public IP the 3G cellular NAT assigned constant external port for the same internal UDP port,however, the 3G cellular NAT changed the internal->external port mapping depending on destination.
Hence, for example, if C is the static IP server A->C was mapped to port 1234 whereas A->B was mapped to port 5678. This way UDP hole punching failed.
As those cellular NATs use CGN, there is no UPnP/NAT-PMP support. I have read about PCP for CGN with functionality similar to these, however, I didn't find any protocol information on PCP.
Does anybody know if there is a way to overcome this destination-variable port mapping issue?
Either by port forwarding(like PCP) or traversal(PREFFERED).
One last thing. There are proofs of concept like skype, viber and MOST IMPORTANTLY torrent downloaders like those that depend on vuze-core(frostwire) that work on android over 3G and other cellular networks. So they obviously must have found a solution for that...
Thanks in advance!