diff --git a/Docs/diagrams/P2PRCRemoteNodes.drawio b/Docs/diagrams/P2PRCRemoteNodes.drawio new file mode 100644 index 0000000..cd57727 --- /dev/null +++ b/Docs/diagrams/P2PRCRemoteNodes.drawio @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Docs/docs.odt b/Docs/docs.odt new file mode 100644 index 0000000..c2aa420 Binary files /dev/null and b/Docs/docs.odt differ diff --git a/Docs/docs.org b/Docs/docs.org index dc66668..86f2b2d 100644 --- a/Docs/docs.org +++ b/Docs/docs.org @@ -1,6 +1,18 @@ -* Chapter 1: Introduction +#+SETUPFILE: https://fniessen.github.io/org-html-themes/org/theme-readtheorg.setup + +#+HTML_HEAD: +#+HTML_HEAD: + + +#+ATTR_HTML: :align right +#+ATTR_ORG: :align center +#+ATTR_ORG: :width +[[../artwork/p2prc-logos/Colored-On-Light-Image.png]] + + +* Introduction :PROPERTIES: -:CUSTOM_ID: chapter-1-introduction +:CUSTOM_ID: chapter1-introduction :END: ** Abstract @@ -191,7 +203,6 @@ GLOBAL OPTIONS: :PROPERTIES: :CUSTOM_ID: start-as-a-server :END: -Do ensure you have Docker installed for this #+begin_example p2prc -s @@ -391,12 +402,23 @@ configuration module. { "ip_address": [ { - "ipv4": "", - "latency": "", - "download": "", - "upload": "" - "port no": "", - } + "Name": "", + "MachineUsername": "", + "IPV4": "", + "IPV6": "", + "Latency": , + "Download": , + "Upload": , + "ServerPort": "", + "BareMetalSSHPort": "", + "NAT": "", + "EscapeImplementation": "", + "ProxyServer": "", + "UnSafeMode": ", + "PublicKey": "", + "CustomInformation": "" + } ] } #+end_src @@ -704,7 +726,7 @@ The Abstractions package consists of black-boxed functions for P2PRC. - =ViewIPTable()=: View the IP table which about nodes in the network. - =UpdateIPTable()=: Force update IP table to learn about new nodes faster. - + * NAT Traversal :PROPERTIES: :CUSTOM_ID: nat-traversal @@ -723,7 +745,7 @@ there are 2 actions performed. The first one is =/FRPPort= to the TURN server to receive a port which is used to generate the external port from the TURN server. The flow below describes the workflow. -*** Client mode +* Client mode :PROPERTIES: :CUSTOM_ID: client-mode :END: @@ -755,3 +777,55 @@ func main() { } } #+end_src + + + + + +* Ideas for future potencial features +Consists of personal loideas for the future of P2PRC. +At moment only has main contributors writiing to this. + +** To support hetrogenous set of Nodes that cannot run P2PRC +This stems from a personal issue I have when doing research +on [[https://github.com/CTSRD-CHERI/cheribsd][CheriBSD]] kernel. For my research I am using the ARM morello +which is a 128bit ARMv8 processor. At the moment Go programs +can cannot compile and run inside the CPU. This means I cannot +run P2PRC at the moment inside the ARM morello to remotely access +it when it's behind NAT using P2PRC. This would indeed be a common +problem when running against various Architectures that do not +support running P2PRC. As you will see soon this also creates +oppurtunity space to scale faster to nodes in a local network +and would introduce a new layer fault tolerance within a local +network nodes. + +*** Assumptions: + - I have a Morello board that cannot run P2PRC + - The Morello has a local IP address (ex: 192.168.0.10) + - I have 2 laptops running P2PRC in that local network. + - This means I have 2 ways to access the Morello board: Which is to SSH + into either 2 laptops and then SSH into 192.168.0.10 to gain access + to the board. Wouldn't it be great to automate this whole layer and + as well look into custom tasks into the hetrogenous hardware. +*** Set of interesting possible: + We build a cool set possibilities before and use this to build up the implementation + plan. + - We can use P2PRC access the morello board remotely in a single command. + - We can use the P2PRC protocol to run servers inside the morello board via traversed + node locally which can access that Node. + - Spin servers on node not running P2PRC using the P2PRC standard abstractions. + - Auto-setup P2PRC nodes with just SSH access via potencially a DSL. + - A neat use case for CHERI for instance would be use the architecture to run light + weight hypervisors. +*** Implementation + - To use implementations similar to [[https://linux.die.net/man/1/socat][socat]] to ensure we can bind address of local + nodes to a node running P2PRC and the node running P2PRC can do a local map port. + - We are working on hardening the implementation of the --mp (Map port) to even + map ports to machines which remotely running P2PRC. This means of instance I + can issue a command to the Morello board without the morello board being in + my local network. + - We would want to implement the exsisting P2PRC public key mechanism as well so that + other nodes can access the Morello board who have permission access. + +#+CAPTION: Implementation idea (To be improved upon) + [[./images/P2PRCRemoteNodes.png]] diff --git a/Docs/images/P2PRCRemoteNodes.png b/Docs/images/P2PRCRemoteNodes.png new file mode 100644 index 0000000..d19e3e6 Binary files /dev/null and b/Docs/images/P2PRCRemoteNodes.png differ diff --git a/Docs/style.css b/Docs/style.css new file mode 100644 index 0000000..8e9554d --- /dev/null +++ b/Docs/style.css @@ -0,0 +1,25 @@ +#table-of-contents h2{ + z-index: 200; + background-color: #b96c29; + text-align: center; + padding: 0.809em; + display: block; + color: #fcfcfc; + font-size: 100%; + margin-bottom: 0.809em; +} + +#search-results li { + background-color: #b96c29; + color: white; + margin-bottom: 5px; + padding: 5px; + border-radius: 4px; + cursor: pointer; + font-size: 14px; +} + +h4,h5,h6{ + color: #b96c29; + font-weight:300; +}