From 18db95d0e95cf52496537e63f4c7aed1dbffa0a7 Mon Sep 17 00:00:00 2001 From: Joseph Henry Date: Tue, 27 Oct 2015 17:38:56 -0700 Subject: [PATCH] Updated README.md --- netcon/README.md | 96 +++++++++++++++++++++++++++++++++++++ netcon/libintercept.so.1.0 | Bin 53904 -> 55752 bytes 2 files changed, 96 insertions(+) diff --git a/netcon/README.md b/netcon/README.md index b0c8ebbe8..5936d24a4 100644 --- a/netcon/README.md +++ b/netcon/README.md @@ -1,3 +1,97 @@ +ZeroTier Network Containers 'service' and 'intercept' +====== +ZeroTier Network Containers is a blisteringly-fast and easy-to-use networking integration for Docker containers. + + +### Functional Overview: + +This system exists as a dynamically-linked library, and a stand-alone background service. + +The intercept is compiled as a shared library and installed in some user-accessible directory. When you want to intercept +a user application you dynamically link the shared library to the application during runtime. When the application starts, the +intercept's global constructor is called which sets up a hidden pipe which is used to communicate remote procedure calls (RPC) to the host Netcon service running in the background. + +When an RPC for a socket() is received by the Netcon service from the harnessed application, the Netcon service will ask the lwIP stack for a new PCB structure (used to represent a connection), if the system permits its allocation, it will be passed to Netcon where a PCB/socket table entry will be created. The table is used for mapping [callbacks from lwIP] and [RPCs from the intercept] to the correct connections. + +Upon the first call to a intercept-overriden system call, a Unix-domain socket is opened between the Netcon service and the application's intercept. This socket provides us the ability to pass file descriptors of newly-created socketpairs to the intercept (used as the read/write buffer). More specifically, after the socketpair creation, one end is kept in a table entry in Netcon and one end is sent to the intercept. + +### Reading and Writing from application +When the application reads or writes data to a socket, the intercept will override the call and read/write from one end of the socketpair created for that specific connection. The Netcon service is continually polling the file descriptors for the opposite end of the socketpair. When an available event is detected (such as the presence of data on the buffer), Netcon will consult the routing table and determine which PCB should receive this new data. A call is then made to lwIP's tcp_write(). + +### How Netcon receives data +When data is received by lwIP, a callback in the Netcon service is called which then consults the internal routing table and maps the data to the correct socketpair. From here, it's up to the harnessed application to either poll() the opposite end of the socketpair, or read from it. No notification is sent to the intercept. + + + +### Building from Source (and Installing) + +Build library: + + make lib + +Build service: + + make service + +Build test applications (linked with library): + + make tests + +Install: + + make install + + + +### Running + +To start a service and automatically intercept an application: + + ./service my_app + +Alternatively, to intercept a specific application (requires an already running service): + + intercept ./my_app + +To start the Network Containers service: + + ./service + +To monitor lwIP network I/O: + + tcpdump -l -n -i tap0 + +Show what dynamic libraries are set for inclusion: + + intercept show + +Start example server (with harness): + + intercept ./test_tx.o + +Start example client (with intercept) to communicate with server: + + intercept ./test_rx.o 127.0.0.1 + + + +### Testing + +To run a simple RX/TX test: + + make service + make lib + make install + make tests + + ./service + ./multitransfer.sh + + + + +### Compatibility + Network Containers have been tested with the following: sshd [ WORKS as of 20151022] Long ~15-20s delay for client during connect @@ -29,6 +123,8 @@ To Test: +### Extended Version Notes + 20151027 Added Redis-server support Notes: - Added extra logic to detect socket re-issuing and consequent service-side double mapping. diff --git a/netcon/libintercept.so.1.0 b/netcon/libintercept.so.1.0 index 356514297b308d9052d02c2b50701ad6fdc75ddf..b5caf7254debeb5fc5853755b3675f4bd32b4968 100755 GIT binary patch literal 55752 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 N9D~qdXyp&O`vJTd#{2*P