1. A method of routing packets, the method comprising: (a) intercepting, at a data link layer by a filter executing in a kernel space of a client operating in a first network, an outbound network packet transmitted from an application of the client to a server, the server operating in a second network, the filter terminating a first transport layer connection with the application; (b) transmitting , by the filter, the outbound network packet to a port monitored by a client application at an application layer executing in a user space of the client, the client application terminating a second transport layer connection with a gateway and communicating with the gateway via a secure application layer tunnel over the second transport layer connection; (c) receiving, by the gateway, the outbound network packet via the secure application layer tunnel over the second transport layer connection from the client application; (d) forwarding, by the gateway via a third transport layer connection with the server, the outbound network packet to the server; and (e) intercepting at a data link layer by a capture driver executing in the gateway, a second network packet transmitted from the server to the client.