A method for establishing a peer-to-peer communication session between a first computing device on a first network and a second computing device on a second network, the first network disconnected from and not routable to the second network, the method comprising the steps of: (a) establishing, by the first computing device, a first tunneling session with a third computing device, and establishing, by the second computing device, a second tunneling session with the third computing device; (b) initiating, by the first computing device, a communication session to the second computing device via the third computing device; (c) receiving, by a server, via the first tunneling session with the third computing device a signal to establish the communication session; (d) communicating, by the server, to the first computing device, a first network address comprising a network address of the second computing device on a private network associated with the second tunneling session; (e) communicating, by the first computing device, a request to initiate a connection with the second computing device using the first network address; (f) intercepting, by the third computing device, the request, determining whether the first and second computing devices (102a-b) are closer to each other than via the third computing device, and providing, based on a determination that the first and second computing devices (102a-b) are closer to each other than via the third computing device, the first computing device a second network address for the second computing device, the second network address comprising a public network address associated with the second computing device; and (g) communicating, by the third computing device, a request to the second computing device to allow the direct connection from the first computing device using the second network address. (a) establishing, by the first computing device, a first tunneling session with a third computing device, and establishing, by the second computing device, a second tunneling session with the third computing device; (b) initiating, by the first computing device, a communication session to the second computing device via the third computing device; (c) receiving, by a server, via the first tunneling session with the third computing device a signal to establish the communication session; (d) communicating, by the server, to the first computing device, a first network address comprising a network address of the second computing device on a private network associated with the second tunneling session; (e) communicating, by the first computing device, a request to initiate a connection with the second computing device using the first network address; (f) intercepting, by the third computing device, the request, determining whether the first and second computing devices (102a-b) are closer to each other than via the third computing device, and providing, based on a determination that the first and second computing devices (102a-b) are closer to each other than via the third computing device, the first computing device a second network address for the second computing device, the second network address comprising a public network address associated with the second computing device; and (g) communicating, by the third computing device, a request to the second computing device to allow the direct connection from the first computing device using the second network address.