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 b0c8ebbe..5936d24a 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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óOf;yH*N-8OTVMPLMNNpbmHgI`|a{pCPyebxGw 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