First-pass specification of TCP-application tunneling
capabilities of Kaboodle, using VNC as an example application.
Comments/corrections/feedback welcome!

OVERVIEW
========

        In addition to being able to encrypt VNC traffic, Kaboodle must
be able to act as a gateway for VNC connections. The network topology can
be represented as follows:

LAN-1: PC1 (Kaboodle + VNC Client) <=> PC2 (Kaboodle VPN endpoint)

LAN-2: PC3 (Kaboodle VPN endpoint) <=> PC4 (No Kaboodle)

        In the above, presume that PC2 and PC3 are endpoints in a VPN
connection using Kaboodle's existing VPN capabilities. Also presume that
a VNC server is installed on every machine. Lastly, presume that a VNC
client is installed only on PC1.

USER INTERFACE
==============

        In all cases, the user experience is the same. Via the Kaboodle
GUI, the user opens the Property Panel of the target device, selects
the VNC Property Tab in that PropPanel, and clicks the Connect button.
At no time is the user ever prompted for an IP address.

PC1 to PC1
==========

        A user on PC1 can, via the Kaboodle GUI, initiate a VNC connection
to either PC2, PC3 or PC4. But the GUI should prevent users from
initiating a VNC connection back to their own machine; ie, PC1 to PC1
should not be allowed via the Kaboodle GUI. Ideally, the Connect button
in the VNC PropertyTab should be simply "greyed out" in this same
machine case.

PC1 to PC2 (same LAN)
=====================

        If the user on PC1 is connecting to the VNC server on PC2,
which is on the same LAN as PC1, the connection process is as follows.
If the VNC server on PC2 is running under Kaboodle control (ie, it
is not started until Kaboodle tells it), then when the Kaboodle user
activates a connection in the VNC PropPanel, Kaboodle on PC1 signals
Kaboodle on PC2 with a VNC connection initiation request, so that
Kaboodle on PC2 can initiate PC2's VNC server. Once started, Kaboodle
on PC2 reports to Kaboodle on PC1 what port the VNC server is listening
to on PC2.
        If the VNC server on PC2 is not running under Kaboodle control,
of if PC2 is not running Kaboodle at all, then Kaboodle on PC1 will
initiate a VNC connection to the VNC server port number that's already
indicated in the Kaboodle GUI. Please note that other portions of
the Kaboodle code already auto-detect this VNC port number. It is
also a user-configurable port-number, via the existing work being
done to the VNC PropertyTab part of the GUI.

        In either case, once PC2 is ready, Kaboodle on PC1 then
initiates the VNC client directing it to a.b.c.d:xyz, where "a.b.c.d"
is the IP address of PC2 on LAN-1, and "xyz" is the port number
obtained by one of the two methods described above. After the VNC
client connects to the server, the remainder of the VNC session TCP
data flow is independent of Kaboodle.

        An enhancement for the future is to secure the intra-LAN
traffic by encrypting it with the shared Kaboodle key. In this case,
Kaboodle on PC1 binds a port on its local interface, and then
initiates PC1's VNC client to connect to this port. Data received at
that port is received by Kaboodle on PC1, encrypted with the shared
Kaboodle key, and then directed to Kaboodle on PC2. Kaboodle on PC2
decrypts this data, and then directs it to PC2's loopback interface
and so into the VNC server on PC2. Again, this same-LAN enhancement
is for the future.

PC1 to PC3 (different LANs)
===========================

        If the user on PC1 is connecting to a VNC server on PC3, which
is on the remote LAN, the connection process is as follows. When the
Kaboodle user on PC1 activates a connection in the VNC PropPanel,
Kaboodle on PC1 signals Kaboodle on PC2 about an VNC connection
initiation request intended for PC3. Since Kaboodle on PC2 is the VPN
endpoint for LAN-1, it is its job to broker these requests on behalf
of PC-1. Thusly, using the existing VPN control channel between PC2 and
PC3, Kaboodle on PC2 signals Kaboodle on PC3 of this VNC connection
initiation. Kaboodle on PC2 and PC3 then establish a connection using
their existing VNC tunneling capabilities (in the future's "steel tube"
implementation, this step is unnecessary, as all tunnel data and VPN
control data will be multiplexed within a single TCP connection between
the VPN endpoints).
        Additionally, PC2 binds a TCP port, and then uses Kaboodle-to-
Kaboodle signaling to tell Kaboodle on PC1 what this TCP port number
is. Lastly, Kaboodle on PC1 initiates the VNC client on PC1, directing
it to a.b.c.d:xyz, where "a.b.c.d" is the IP address of PC2 on LAN-1 and
"xyz" is this port number. Kaboodle on PC2 treats all data arriving at
this port number from PC1 as VNC data intended for PC3. Kaboodle on PC2
collects this data, encrypts it using the VNC tunnel key, and the
directs it into the tunnel to PC3.
        Kaboodle on PC3 extracts the data from the tunnel, decrypts it,
and directs the TCP data to the VNC sever on its loopback interface.
Kaboodle on PC3 handles the initiation of PC3's VNC server in the same
manner as described in the PC1-to-PC2 case above.

PC1 to PC4 (different LANs)
===========================

        This is the most difficult scenario.

        If the user on PC1 is connecting to a VNC server on PC4, which
is on the remote LAN but is *not* running Kaboodle, the connection
process is as follows. When the Kaboodle user on PC1 activates a
connection in the VNC PropPanel, all details about the interaction
between PC1, PC2 and PC3 are the same as in the above PC1-to-PC3 case.

        However, when the TCP data arrives out of the VNC tunnel into
Kaboodle on PC3, it is that Kaboodle's task to transmit that data to
VNC server port on PC4. Importantly, PC3 must establish its own TCP
connection with PC4, as all TCP replies from PC4 must be received
by Kaboodle on PC3 and then put back into the tunnel back to PC2,
and so back to PC1.

        Note that the VNC tunnel between PC2 and PC3 MUST be capable
of carrying multiple VNC sessions simultaneously. For example, a user
on PC1 MUST be able to create one VNC connection to PC3 and then,
simultaneously, create a VNC connection to PC4. It is required that
these two (or more) independent VNC sessions share a single VNC tunnel
TCP connection. This "multiplexing" will require some mechanism by
which data in the tunnel is accompanied with some addressing as well
as some content typing, so that the receiving device knows what is
to be done with the data. These addressing and content-typing
mechanisms must be built to accommodate at least 16 content-types (one
of which is VNC, another HTTP, another Kaboodle VPN Control, and the
remainder undefined) and at least 4 delivery priorities (which will
be used by some future enhancement).

<END>














_______________________________________________
Kaboodle-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/kaboodle-devel

Reply via email to