Eine TCP-Verbindung in eine andere TCP-Verbindung zu kapseln ist generell eine sehr schlechte Idee.
Grundsätzlich stellt TCP als verbindungsorientiertes Protokoll alles zur Verfügung, um dafür zu sorgen, daß eine Verbindung auch bei schlechter Leitungsqualität funktioniert. Dazu werden z.B. Pakete neu angefordert, wenn diese nicht in einer bestimmten Zeit ankommen etc. Wird TCP nun nicht direkt auf einem physikalischen Netzwerk betrieben, sondern auf einem anderen verbindungsorientierten Protokoll, so addieren sich die Timeout- und Retry- Zeiten dieser beiden Netzwerkschichten.
Als Basis für IP-Verbindungen sollte also immer ein paketorientiertes Protokoll verwendet werden. So kann ein VPN z.B. über GRE oder UDP verwirklicht werden. VPNs z.B. über HTTP (welches ja auf TCP basiert) sind zwar ein netter Hack, aber in der Praxis nicht zu gebrauchen.
Gut erklärt ist das übrigens auf http://sites.inka.de/sites/bigred/devel/tcp-tcp.html