Browse Source

About and Architecture completed for docs

afeiszli 4 years ago
parent
commit
e964480184
37 changed files with 796 additions and 853 deletions
  1. BIN
      docs/_build/doctrees/about.doctree
  2. BIN
      docs/_build/doctrees/api.doctree
  3. BIN
      docs/_build/doctrees/architecture.doctree
  4. BIN
      docs/_build/doctrees/conduct.doctree
  5. BIN
      docs/_build/doctrees/environment.pickle
  6. BIN
      docs/_build/doctrees/index.doctree
  7. BIN
      docs/_build/html/_images/mesh-diagram.png
  8. BIN
      docs/_build/html/_images/mesh.png
  9. BIN
      docs/_build/html/_images/nm-diagram.jpg
  10. 32 18
      docs/_build/html/_sources/about.rst.txt
  11. 1 1
      docs/_build/html/_sources/api.rst.txt
  12. 136 12
      docs/_build/html/_sources/architecture.rst.txt
  13. 3 6
      docs/_build/html/_sources/conduct.rst.txt
  14. 1 1
      docs/_build/html/_sources/index.rst.txt
  15. 53 94
      docs/_build/html/about.html
  16. 17 3
      docs/_build/html/api.html
  17. 143 87
      docs/_build/html/architecture.html
  18. 21 70
      docs/_build/html/client-installation.html
  19. 26 82
      docs/_build/html/conduct.html
  20. 21 70
      docs/_build/html/contribute.html
  21. 17 3
      docs/_build/html/genindex.html
  22. 23 7
      docs/_build/html/index.html
  23. 21 70
      docs/_build/html/license.html
  24. 21 70
      docs/_build/html/quick-start.html
  25. 17 3
      docs/_build/html/search.html
  26. 0 0
      docs/_build/html/searchindex.js
  27. 21 70
      docs/_build/html/server-installation.html
  28. 24 73
      docs/_build/html/support.html
  29. 24 73
      docs/_build/html/usage.html
  30. 32 18
      docs/about.rst
  31. 1 1
      docs/api.rst
  32. 136 12
      docs/architecture.rst
  33. 3 6
      docs/conduct.rst
  34. 1 2
      docs/conf.py
  35. 1 1
      docs/index.rst
  36. BIN
      docs/mesh.png
  37. BIN
      docs/nm-diagram.jpg

BIN
docs/_build/doctrees/about.doctree


BIN
docs/_build/doctrees/api.doctree


BIN
docs/_build/doctrees/architecture.doctree


BIN
docs/_build/doctrees/conduct.doctree


BIN
docs/_build/doctrees/environment.pickle


BIN
docs/_build/doctrees/index.doctree


BIN
docs/_build/html/_images/mesh-diagram.png


BIN
docs/_build/html/_images/mesh.png


BIN
docs/_build/html/_images/nm-diagram.jpg


+ 32 - 18
docs/_build/html/_sources/about.rst.txt

@@ -2,31 +2,45 @@
 About
 ===============
 
-Confused about what Netmaker is? That's ok, you're in the right place. Networking is hard, and you're not alone, but Netmaker is here to make your network nightmare into a dreamy breeze.
+What is Netmaker?
+==================
 
-Introduction
-===============
+Netmaker is a tool for creating and managing virtual overlay networks. If you have at least two machines with internet access which you need to connect with a secure tunnel, Netmaker is for you. If you have thousands of servers spread across multiple locations, data centers, or clouds, Netmaker is also for you. Netmaker connects machines securely, wherever they are.
 
-Netmaker is a tool for creating and managing virtual overlay networks. If you have servers spread across multiple locations, data centers, or clouds, this platform will make life easier. 
+.. image:: mesh-diagram.png
+   :width: 50%
+   :alt: WireGuard Mesh
+   :align: center
 
-Netmaker takes all those machines and puts them into a single, secure, flat network so that they can all talk to each other easily and securely. It's like a VPC but of arbitrary computers. From the machine's perspective, they're in the same room with their buddy machines, even if they're spread all over the world.
+Netmaker takes those machines and creates a flat network so that they can all talk to each other easily and securely. 
+If you're familiar with AWS, it's like a VPC but made up of arbitrary computers. From the machine's perspective, all these other machines are in the same neighborhood, even if they're spread all over the world.
 
-Netmaker is similar to Tailscale, ZeroTier, or Nebula. What makes Netmaker different is its speed and flexibility. NNetmaker is faster because it uses kernel WireGuard. It's more dynamic because the server and agents are fully configurable, and let you do all sorts on things to meet special use cases.
+Netmaker has many similarities to Tailscale, ZeroTier, and Nebula. What makes Netmaker different is its speed and flexibility. Netmaker is faster because it uses kernel WireGuard. It is more dynamic because the server and agents are fully configurable, which lets you handle all sorts of different use cases.
 
 How Does Netmaker Work?
 =======================
 
-Netmaker is two things: The admin panel/server, and the netclient. You interact with the admin panel, creating networks and managing machines/access. The server just holds onto configurations that will be loaded by the machines. The machines use the netclient to retrieve the configs and set WireGuard, a special encrypted tunneling tool. These configs tell each machine how to reach each of the other machines.
+Netmaker relies on WireGuard to create tunnels between machines. At its core, Netmaker is managing WireGuard across machines to create sensible networks. Technically, Netmaker is two things:
+
+- the admin server, called Netmaker
+- the agent, called Netclient
+
+As the network manager, you interact with the server to create and manage networks and devices. The server holds configurations for these networks and devices, which are retrieved by the netclients (agent). 
+
+The netclient is installed on any machine you would like to add to a given network, whether that machine is a VM, Server, or IoT device. The netclient reaches out to the server, and the server tells it how it should configure the network. By doing this across many machines simultaneously, we create a dynamic, fully configurable virtual networks.
+
+The Netmaker server does not typically route traffic. Otherwise, this would be a hub-and-spoke model, which is very slow. Instead, Netmaker just tells the machines on the network how they can reach each other directly. This is called a *full mesh* network and is much faster. Even if the server goes down, as long as none of the existing machines change substantially, your network will still run just fine.
+
+Use Cases for Netmaker
+=============================
 
-Traffic is only routed through the main server if you want it to. The server can crash and everything will run fine until machine configs change (you just wont be able to add/remove/update machines from the network).
+There are many use cases for Netmaker. In fact, you could probably be using it right now. This list is not all-encompassing, but provides a sample of how you might want to use Netmaker. Guided setup for many of these use cases can be found in the :doc:`Using Netmaker <./usage>` documentation. 
 
-Use Cases
-=========
- 1. Create a flat, secure network between multiple/hybrid cloud environments
- 2. Integrate central and edge services
- 3. Provide access to IoT devices, remote locations, or client sites.
- 3. Secure a home or office network while providing remote connectivity
- 4. Manage cryptocurrency proof-of-stake machines
- 6. Provide an additional layer of security on an existing network
- 7. Encrypt Kubernetes inter-node communications
- 8. Secure site-to-site connections
+ 0. Automate creation of a WireGuard mesh network
+ 1. Create a flat, secure network between cloud environments and data centers
+ 2. Provide secure access to IoT devices, remote servers, and client sites.
+ 3. Secure a home or office network
+ 4. Add a layer of encryption to an existing network 
+ 5. Secure site-to-site connections
+ 6. Manage cryptocurrency proof-of-stake machines 
+ 7. Create a dynamic and secure Kubernetes underlay network

+ 1 - 1
docs/_build/html/_sources/api.rst.txt

@@ -131,7 +131,7 @@ Nodes API Call Examples
 Users API
 -----------------------
   
-**Note:** Only able to create Admin user at this time. The "user" is only used by the [user interface](https://github.com/gravitl/netmaker-ui) to authenticate the  single  admin user.
+**Note:** Only able to create Admin user at this time. The "user" is only used by the `user interface <https://github.com/gravitl/netmaker-ui>`_ to authenticate the  single  admin user.
 
 **Get User:** `/api/users/{username}`, `GET`  
   

+ 136 - 12
docs/_build/html/_sources/architecture.rst.txt

@@ -2,32 +2,153 @@
 Architecture
 ===============
 
+.. image:: nm-diagram.jpg
+   :width: 45%
+   :alt: Netmaker Architecture Diagram
+   :align: center
+    
+
+*Pictured Above: A diagram of Netmaker's Architecture.*
+
 
 Core Concepts
 ==============
 
+Familiarity with several core concepts will help when you encounter them later on in the documentation.
+
 WireGuard
 ----------
 
+WireGuard is a relatively new but very important technology which was recently added to the Linux kernel. WireGuard creates very fast but simple encrypted tunnels between devices. From the `WireGuard <https://www.wireguard.com/>`_ website, "it might be regarded as the most secure, easiest to use, and simplest VPN solution in the industry."
+
+Previous solutions like OpenVPN and IPSec are considerably more heavy and complex, while being less performant. All existing VPN tunnelling solutions will cause a significant increase in your network latency. WireGuard is the first to achieve near over-the-line network speeds, meaning you see no signigifant performance impact.  With the release of WireGuard, there is little reason to use any other existing tunnel encryption technology.
+
+Mesh Network
+-------------
+
+When we refer to a mesh network in these documents we are typically referring to a "full mesh."
+
+.. image:: mesh.png
+   :width: 33%
+   :alt: Full Mesh Network Diagram
+   :align: center
+
+
+A full `mesh network <https://www.bbc.co.uk/bitesize/guides/zr3yb82/revision/2>`_ exists where each machine is able to directly talk to every other machine on the network. For example, on your home network, behind your router, all the computers are likely given private addresses and can reach each other directly.
+
+This is in contrast to a hub-and-spoke network, where each machine must first pass its traffic through a relay server before it can reach other machines.
+
+In certain situations you may either want or need a *partial mesh* network, where only some devices can reach each other directly, and other devices must route their traffic through a relay/gateway. Netmaker can use this model in some use cases where it makes sense.
+
+Mesh networks are generally faster than other topologies, but are also more complicated to set up. WireGuard on its own gives you the means to create encrypted tunnels between devices, but it does not provide a method for setting up a full network. This is where Netmaker comes in.
+
 Netmaker
+---------
+
+Netmaker is a platform built off of WireGuard which enables users to create mesh networks between their devices. Netmaker can create both full and partial mesh networks depending on the use case.
+
+When we refer to Netmaker in aggregate, we are typically referring to Netmaker and the netclient, as well as other supporting services such as CoreDNS, MongoDB, and UI webserver.
+
+From an end user perspective, they typically interact with the Netmaker UI, or even just run the install script for the netclient on their devices. The other components run in the background invisibly. 
+
+Netmaker does a lot of work to set configurations for you, so that you don't have to. This includes things like WireGuard ports, endpoints, public IPs, keys, and peers. Netmaker works to abstract away as much of the network management as possible, so that you can just click to create a network, and click to add a machine to a network. That said, every machine (node) is different, and may require special configuration. That is why, while Netmaker sets practical default settings, everything within Netmaker is fully configurable.
+
+Node
+------
+
+A machine in a Netmaker network, which is managed by the Netclient, is referred to as a Node, as you will see in the UI. A Node can be a VM, a bare metal server, a desktop computer, an IoT device, or any other number of internet-connected machines on which the netclient is installed. A node is simply an endpoint in the network, which can send traffic to all the other nodes, and recieve traffic from all of the other nodes.
+
+SystemD
+-------
+
+SystemD is a system service manager for a wide array of Linux operating systems. Not all Linux distributions have adopted systemd, but, for better or worse, it has become a fairly common standard in the Linux world. That said, any non-Linux operating system will not have systemd, and many Linux/Unix distributionshave alternative system service managers.
+
+Netmaker's netclient, the agent which controls networking on all nodes, relies heavily on systemd as of version 0.3. This reliance is being reduced but is currently a core dependency, causing most of the limitations and incompatibilities. As Netmaker evolves, systemd will become just one of the possible service management options, allowing the netclient to be run on a wider array of devices.
+
+
+Components
+===========
+
+Netmaker consists of several core components, which are explained in high-level technical detail below.
+
+Netmaker Server
+------------------
+
+The Netmaker server is, at its core, a golang binary. Source code can be found `on GitHub <https://github.com/gravitl/netmaker>`_. The binary, by itself can be compiled for most systems. If you need to run the Netmaker server on a particular system, it likely can be made to work. In typical deployments, it is run as a Docker container. It can also be run as a systemd service as outlined in the non-docker install guide.
+
+The Netmaker server acts as an API to the front end, and as a GRPC server to the machines in the network. GRPC is much faster and more efficient than standard API calls, which increases the speed of transactions. For this reason, the Netmaker server exposes two ports: The default for the API is 8081, and the default for GRPC is 50051. Either the API or the GRPC server can be disabled on any given Netmaker instance can be disabled, allowing you to deploy two different servers for managing the API (which is largely for the admin's use) and GRPC (which is largely for the nodes' use).
+
+Most server settings are configurable via a config file, or by environment variables (which take precedence). If the server finds neither of these, it sets sensible defaults, including things like the server's reachable IP, ports, and which "modes" to run in.
+
+These modes include client mode and dns mode. Either of these can be disabled but are enabled by default. Client mode allows you to treat the Netmaker host machine (operating system) as a network Node, installing the netclient and controlling the host network. DNS mode has the server write config settings for CoreDNS, a separate component and nameserver, which picks up the config settings to manage node DNS.
+
+The Netmaker server interacts with (as of v0.3) a MongoDB instance, which holds information about nodes, networks, users, and other important data. This data is configuration data. For the most part, Netmaker serves configuration data to Nodes, telling them how they should configure themselves. The Netclient is the agent that actually does that configuration.
+
+
+Netclient
+----------------
+
+The netclient is, at its core, a golang binary. Source code can be found in the netclient folder of the Netmaker `GitHub Repository <https://github.com/gravitl/netmaker/tree/master/netclient>`_. The binary, by itself, can be compiled for most systems. However, this binary is designed to manage a certain number of Operating Systems. As of version 0.3, it requires systemd in order to manage the host system appropriately. It may be installable, and it may even make the machine a part of the mesh network, but it will not function in entirely (see Compatible Systems for more info) without systemd.
+
+The netclient is installed via a simple bash script, which pulls the latest binary and runs install command.
+
+The install command registers the machine with the Netmaker server using sensible defaults, which can be overridden with a config file or environment variables. Assuming the netclient has a valid key (or the network allows manual node signup), it will be registered in the Netmaker network, which will return configuration details about how to set up the local network. 
+
+The netclient then sets itself up in systemd, and configures WireGuard. At this point it should be part of the network.
+
+On a periodic basis (systemd timer), the netclient performs a "check in." It will authenticate with the server, and check to see if anything has changed in the network. It will also post changes about its own local configuration if there. If there has been a change, the server will return new configurations and the netclient will reconfigure the network.
+
+The check in process is what allows Netmaker to create dynamic mesh networks. As nodes are added to, removed from, and modified on the network, other nodes are notified, and make appropriate changes.
+
+
+MongoDB
 --------
 
+As of v0.3, Netmaker uses MongoDB as its database, and interacts with a MongoDB instance to store and retrieve information about nodes, networks, and users. Netmaker is rapidly evolving, and MongoDB provides a flexible database structure that accelerates development. However, MongoDB is also the heaviest component of Netmaker (high cpu/memory consumption), and is set to be replaced by a lighter-weight, SQL-based database in the future.
+
 Netmaker UI
-------------
+---------------
+
+The Netmaker UI is a ReactJS-based static website which can be run on top of standard webservers such as Apache and Nginx. Source code can be found `here <https://github.com/gravitl/netmaker-ui>`_. In a typical configuration, the Netmaker UI is run on Nginx as a Docker container.
+
+Netmaker can be used in its entirety without the UI, but the UI makes things a lot easier for most users. It has a sensible flow and layout for managing Networks, Nodes, Access Keys, and DNS.
 
-Netclient
----------
 
 CoreDNS
 --------
 
-SystemD
--------
+v0.3 introduced the concept of private DNS management for nodes. This requires a nameserver, and CoreDNS is the chosen nameserver. CoreDNS is lightweight and extensible. CoreDNS loads dns settings from a simple file, managed by Netmaker, and serves out DNS info for managed nodes. DNS can be tricky, and DNS management is currently only supported on a small set of devices, specifically those running systemd-resolved. However, the Netmaker CoreDNS instance can be added manually as a nameserver to other devices. DNS mode can also be turned off.
+
+Worth considering is that CoreDNS requires port 53 on the Netmaker host system, which may cause conflicts depending on your operating system. This is explained in the :doc:`Server Installation <./server-installation>` guide.
+
+
+Technical Process
+====================
 
-Compatible Systems
-==================
+Below is a high level, step-by-step overview of the flow of communications within Netmaker (assuming Netmaker has already been installed):
 
-To manage a server automatically, Netmaker requires **systemd-based linux.** Compatible systems include:
+1. Admin creates a new network with a subnet, for instance 10.10.10.0/24
+2. Admin creates an access key for signing up new nodes
+3. Both of the above requests are routed to the server via an API call from the front end
+4. Admin runs the netclient install script on any given node (machine).
+5. Netclient decodes key, which contains the GRPC server location and port
+6. Netclient retrieves/sets local information, including open ports for WireGuard, public IP, and generating key pairs for peers
+7. Netclient reaches out to GRPC server with this information, authenticating via access key.
+8. Netmaker server verifies information and creates the node, setting default values for any missing information. 
+9. Timestamp is set for the network (see #16). 
+10. Netmaker returns settings as response to netclient. Some settings may be added or modified based on the network.
+11. Netclient recieves response. If successful, it takes any additional info returned from Netmaker and configures the local system/WireGuard
+12. Netclient sends another request to Netmaker's GRPC server, this time to retrieve the peers list (all other clients in the network).
+13. Netmaker sends back peers list, including current known configurations of all nodes in network.
+14. Netclient configures WireGuard with this information. At this point, the node is fully configured as a part of the network and should be able to reach the other nodes via private address.
+15. Netclient begins daemon (system timer) to run check in's with the server. It awaits changes, reporting local changes, and retrieving changes from any other nodes in the network.
+16. Other netclients on the network, upon checking in with the Netmaker server, will see that the timestamp has updated, and they will retrieve a new peers list, completing the update cycle.
+
+
+Compatible Systems for Netclient
+==================================
+
+To manage a node automatically, the Netmaker client (netclient) requires **systemd-based linux.** Compatible systems include:
         - Fedora
         - Ubuntu
         - Debian
@@ -39,14 +160,17 @@ To manage a server automatically, Netmaker requires **systemd-based linux.** Com
         - CentOS
         - CoreOS
       
-To manage DNS (optional), the server must have systemd-resolved. Systems that have this enabled include:
+To manage DNS (optional), the node must have systemd-resolved. Systems that have this enabled include:
         - Arch
         - Debian
         - Ubuntu
         - SUSE
 
-
-In future releases, we will support other platforms such as Windows, MacOS, iOS, Android, and more. 
-
 Limitations
 ===========
+
+Install limitations mostly include platform-specific limitations, such as needing systemd or systemd-resolved (see above). In addition the Netmaker platform has some additional limitations:
+
+- **Double NAT**: Netmaker is currently unable to route traffic for devices behind a "double NAT".
+- **CGNAT**: Netmaker is currently unable to route traffic for for devices behind a "carrier-grade NAT".
+- **Windows/iPhone/Android**: To reiterate the systemd limitation, Netmaker is not currently configured to support "end user" devices such as Windows desktops and phones generally. In v0.4, Netmaker will introduce external device gateways to allow this traffic (and many other sorts of devices).

+ 3 - 6
docs/_build/html/_sources/conduct.rst.txt

@@ -26,14 +26,11 @@ include:
 
 Examples of unacceptable behavior by participants include:
 
-* The use of sexualized language or imagery and unwelcome sexual attention or
-advances
+* The use of sexualized language or imagery and unwelcome sexual attention or advances
 * Trolling, insulting/derogatory comments, and personal or political attacks
 * Public or private harassment
-* Publishing others' private information, such as a physical or electronic
-  address, without explicit permission
-* Other conduct which could reasonably be considered inappropriate in a
-  professional setting
+* Publishing others' private information, such as a physical or electronic address, without explicit permission
+* Other conduct which could reasonably be considered inappropriate in a professional setting
 
 Our Responsibilities
 ====================

+ 1 - 1
docs/_build/html/_sources/index.rst.txt

@@ -21,7 +21,7 @@ Welcome to the Netmaker Documentation
 
 Netmaker is a platform for creating and managing fast, secure, and dynamic virtual overlay networks using WireGuard.
 
-This documentation covers Netmaker's installation, usage, troubleshooting, and customization, as well as reference documents for the API, UI and Agent configuration. All of the `source code <https://github.com/gravitl/netmaker>`_ for Netmaker is on GitHub.
+This documentation covers Netmaker's :doc:`installation <./server-installation>`, :doc:`usage <./usage>`, :doc:`troubleshooting <./support>`, and customization, as well as reference documents for the :doc:`API <./api>`, UI and Agent configuration. All of the `source code <https://github.com/gravitl/netmaker>`_ for Netmaker is on GitHub.
 
 :raw-html:`<br />`
 

+ 53 - 94
docs/_build/html/about.html

@@ -57,7 +57,7 @@
     <link rel="index" title="Index" href="genindex.html" />
     <link rel="search" title="Search" href="search.html" />
     <link rel="next" title="Architecture" href="architecture.html" />
-    <link rel="prev" title="" href="index.html" />
+    <link rel="prev" title="Welcome to the Netmaker Documentation" href="index.html" />
   
    
 
@@ -220,11 +220,11 @@
   <ul class="md-nav__list" data-md-scrollfix="">
         <li class="md-nav__item"><a href="#about--page-root" class="md-nav__link">About</a><nav class="md-nav">
               <ul class="md-nav__list">
-        <li class="md-nav__item"><a href="#introduction" class="md-nav__link">Introduction</a>
+        <li class="md-nav__item"><a href="#what-is-netmaker" class="md-nav__link">What is Netmaker?</a>
         </li>
         <li class="md-nav__item"><a href="#how-does-netmaker-work" class="md-nav__link">How Does Netmaker Work?</a>
         </li>
-        <li class="md-nav__item"><a href="#use-cases" class="md-nav__link">Use Cases</a>
+        <li class="md-nav__item"><a href="#use-cases-for-netmaker" class="md-nav__link">Use Cases for Netmaker</a>
         </li></ul>
             </nav>
         </li>
@@ -234,7 +234,7 @@
     <li class="md-nav__item">
     
     
-      <a href="#introduction" class="md-nav__link">Introduction</a>
+      <a href="#what-is-netmaker" class="md-nav__link">What is Netmaker?</a>
       
     
     </li>
@@ -248,7 +248,7 @@
     <li class="md-nav__item">
     
     
-      <a href="#use-cases" class="md-nav__link">Use Cases</a>
+      <a href="#use-cases-for-netmaker" class="md-nav__link">Use Cases for Netmaker</a>
       
     
     </li></ul>
@@ -265,6 +265,20 @@
       <a href="architecture.html#core-concepts" class="md-nav__link">Core Concepts</a>
       
     
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="architecture.html#components" class="md-nav__link">Components</a>
+      
+    
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="architecture.html#technical-process" class="md-nav__link">Technical Process</a>
+      
+    
     </li>
     <li class="md-nav__item">
     
@@ -404,96 +418,33 @@
     <li class="md-nav__item">
     
     
-      <a href="api.html" class="md-nav__link">API Usage</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#authentication" class="md-nav__link">Authentication</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#format-of-calls-for-curl" class="md-nav__link">Format of Calls for Curl</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#api-documentation" class="md-nav__link">API Documentation</a>
+      <a href="api.html" class="md-nav__link">API Reference</a>
       <ul class="md-nav__list"> 
     <li class="md-nav__item">
     
     
-      <a href="api.html#networks-api" class="md-nav__link">Networks API</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#networks-api-call-examples" class="md-nav__link">Networks API Call Examples</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#access-keys-api" class="md-nav__link">Access Keys API</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#access-keys-api-call-examples" class="md-nav__link">Access Keys API Call Examples</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#nodes-api" class="md-nav__link">Nodes API</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#nodes-api-call-examples" class="md-nav__link">Nodes API Call Examples</a>
+      <a href="api.html#api-usage" class="md-nav__link">API Usage</a>
       
     
     </li>
     <li class="md-nav__item">
     
     
-      <a href="api.html#users-api" class="md-nav__link">Users API</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#users-api-calls-examples" class="md-nav__link">Users API Calls Examples</a>
+      <a href="api.html#authentication" class="md-nav__link">Authentication</a>
       
     
     </li>
     <li class="md-nav__item">
     
     
-      <a href="api.html#server-management-api" class="md-nav__link">Server Management API</a>
+      <a href="api.html#format-of-calls-for-curl" class="md-nav__link">Format of Calls for Curl</a>
       
     
     </li>
     <li class="md-nav__item">
     
     
-      <a href="api.html#file-server-api" class="md-nav__link">File Server API</a>
+      <a href="api.html#api-documentation" class="md-nav__link">API Documentation</a>
       
     
     </li></ul>
@@ -627,11 +578,11 @@
   <ul class="md-nav__list" data-md-scrollfix="">
         <li class="md-nav__item"><a href="#about--page-root" class="md-nav__link">About</a><nav class="md-nav">
               <ul class="md-nav__list">
-        <li class="md-nav__item"><a href="#introduction" class="md-nav__link">Introduction</a>
+        <li class="md-nav__item"><a href="#what-is-netmaker" class="md-nav__link">What is Netmaker?</a>
         </li>
         <li class="md-nav__item"><a href="#how-does-netmaker-work" class="md-nav__link">How Does Netmaker Work?</a>
         </li>
-        <li class="md-nav__item"><a href="#use-cases" class="md-nav__link">Use Cases</a>
+        <li class="md-nav__item"><a href="#use-cases-for-netmaker" class="md-nav__link">Use Cases for Netmaker</a>
         </li></ul>
             </nav>
         </li>
@@ -646,31 +597,39 @@
             
   
 <h1 id="about--page-root">About<a class="headerlink" href="#about--page-root" title="Permalink to this headline">¶</a></h1>
-<p>Confused about what Netmaker is? That’s ok, you’re in the right place. Networking is hard, and you’re not alone, but Netmaker is here to make your network nightmare into a dreamy breeze.</p>
 
-<h2 id="introduction">Introduction<a class="headerlink" href="#introduction" title="Permalink to this headline">¶</a></h2>
-<p>Netmaker is a tool for creating and managing virtual overlay networks. If you have servers spread across multiple locations, data centers, or clouds, this platform will make life easier.</p>
-<p>Netmaker takes all those machines and puts them into a single, secure, flat network so that they can all talk to each other easily and securely. It’s like a VPC but of arbitrary computers. From the machine’s perspective, they’re in the same room with their buddy machines, even if they’re spread all over the world.</p>
-<p>Netmaker is similar to Tailscale, ZeroTier, or Nebula. What makes Netmaker different is its speed and flexibility. NNetmaker is faster because it uses kernel WireGuard. It’s more dynamic because the server and agents are fully configurable, and let you do all sorts on things to meet special use cases.</p>
+<h2 id="what-is-netmaker">What is Netmaker?<a class="headerlink" href="#what-is-netmaker" title="Permalink to this headline">¶</a></h2>
+<p>Netmaker is a tool for creating and managing virtual overlay networks. If you have at least two machines with internet access which you need to connect with a secure tunnel, Netmaker is for you. If you have thousands of servers spread across multiple locations, data centers, or clouds, Netmaker is also for you. Netmaker connects machines securely, wherever they are.</p>
+<a class="reference internal image-reference" href="_images/mesh-diagram.png"><img alt="WireGuard Mesh" class="align-center" src="_images/mesh-diagram.png" style="width: 50%;"/></a>
+<p>Netmaker takes those machines and creates a flat network so that they can all talk to each other easily and securely.
+If you’re familiar with AWS, it’s like a VPC but made up of arbitrary computers. From the machine’s perspective, all these other machines are in the same neighborhood, even if they’re spread all over the world.</p>
+<p>Netmaker has many similarities to Tailscale, ZeroTier, and Nebula. What makes Netmaker different is its speed and flexibility. Netmaker is faster because it uses kernel WireGuard. It is more dynamic because the server and agents are fully configurable, which lets you handle all sorts of different use cases.</p>
 
 
 <h2 id="how-does-netmaker-work">How Does Netmaker Work?<a class="headerlink" href="#how-does-netmaker-work" title="Permalink to this headline">¶</a></h2>
-<p>Netmaker is two things: The admin panel/server, and the netclient. You interact with the admin panel, creating networks and managing machines/access. The server just holds onto configurations that will be loaded by the machines. The machines use the netclient to retrieve the configs and set WireGuard, a special encrypted tunneling tool. These configs tell each machine how to reach each of the other machines.</p>
-<p>Traffic is only routed through the main server if you want it to. The server can crash and everything will run fine until machine configs change (you just wont be able to add/remove/update machines from the network).</p>
+<p>Netmaker relies on WireGuard to create tunnels between machines. At its core, Netmaker is managing WireGuard across machines to create sensible networks. Technically, Netmaker is two things:</p>
+<ul class="simple">
+<li><p>the admin server, called Netmaker</p></li>
+<li><p>the agent, called Netclient</p></li>
+</ul>
+<p>As the network manager, you interact with the server to create and manage networks and devices. The server holds configurations for these networks and devices, which are retrieved by the netclients (agent).</p>
+<p>The netclient is installed on any machine you would like to add to a given network, whether that machine is a VM, Server, or IoT device. The netclient reaches out to the server, and the server tells it how it should configure the network. By doing this across many machines simultaneously, we create a dynamic, fully configurable virtual networks.</p>
+<p>The Netmaker server does not typically route traffic. Otherwise, this would be a hub-and-spoke model, which is very slow. Instead, Netmaker just tells the machines on the network how they can reach each other directly. This is called a <em>full mesh</em> network and is much faster. Even if the server goes down, as long as none of the existing machines change substantially, your network will still run just fine.</p>
 
 
-<h2 id="use-cases">Use Cases<a class="headerlink" href="#use-cases" title="Permalink to this headline">¶</a></h2>
+<h2 id="use-cases-for-netmaker">Use Cases for Netmaker<a class="headerlink" href="#use-cases-for-netmaker" title="Permalink to this headline">¶</a></h2>
+<p>There are many use cases for Netmaker. In fact, you could probably be using it right now. This list is not all-encompassing, but provides a sample of how you might want to use Netmaker. Guided setup for many of these use cases can be found in the <a class="reference internal" href="usage.html"><span class="doc">Using Netmaker</span></a> documentation.</p>
 <blockquote>
-<div><ol class="arabic simple">
-<li><p>Create a flat, secure network between multiple/hybrid cloud environments</p></li>
-<li><p>Integrate central and edge services</p></li>
+<div><ol class="arabic simple" start="0">
+<li><p>Automate creation of a WireGuard mesh network</p></li>
+<li><p>Create a flat, secure network between cloud environments and data centers</p></li>
+<li><p>Provide secure access to IoT devices, remote servers, and client sites.</p></li>
+<li><p>Secure a home or office network</p></li>
+<li><p>Add a layer of encryption to an existing network</p></li>
+<li><p>Secure site-to-site connections</p></li>
+<li><p>Manage cryptocurrency proof-of-stake machines</p></li>
+<li><p>Create a dynamic and secure Kubernetes underlay network</p></li>
 </ol>
-<p>3. Provide access to IoT devices, remote locations, or client sites.
-3. Secure a home or office network while providing remote connectivity
-4. Manage cryptocurrency proof-of-stake machines
-6. Provide an additional layer of security on an existing network
-7. Encrypt Kubernetes inter-node communications
-8. Secure site-to-site connections</p>
 </div></blockquote>
 
 
@@ -685,7 +644,7 @@
     <div class="md-footer-nav">
       <nav class="md-footer-nav__inner md-grid">
           
-            <a href="index.html" title=""
+            <a href="index.html" title="Welcome to the Netmaker Documentation"
                class="md-flex md-footer-nav__link md-footer-nav__link--prev"
                rel="prev">
               <div class="md-flex__cell md-flex__cell--shrink">
@@ -694,7 +653,7 @@
               <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
                 <span class="md-flex__ellipsis">
                   <span
-                      class="md-footer-nav__direction"> Previous </span> <span class="raw-html"><br /></span> </span>
+                      class="md-footer-nav__direction"> Previous </span> Welcome to the Netmaker Documentation </span>
               </div>
             </a>
           

+ 17 - 3
docs/_build/html/api.html

@@ -214,7 +214,7 @@
     <li class="md-nav__item">
     
     
-      <a href="about.html#introduction" class="md-nav__link">Introduction</a>
+      <a href="about.html#what-is-netmaker" class="md-nav__link">What is Netmaker?</a>
       
     
     </li>
@@ -228,7 +228,7 @@
     <li class="md-nav__item">
     
     
-      <a href="about.html#use-cases" class="md-nav__link">Use Cases</a>
+      <a href="about.html#use-cases-for-netmaker" class="md-nav__link">Use Cases for Netmaker</a>
       
     
     </li></ul>
@@ -245,6 +245,20 @@
       <a href="architecture.html#core-concepts" class="md-nav__link">Core Concepts</a>
       
     
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="architecture.html#components" class="md-nav__link">Components</a>
+      
+    
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="architecture.html#technical-process" class="md-nav__link">Technical Process</a>
+      
+    
     </li>
     <li class="md-nav__item">
     
@@ -708,7 +722,7 @@
 
 
 <h3 id="users-api">Users API<a class="headerlink" href="#users-api" title="Permalink to this headline">¶</a></h3>
-<p><strong>Note:</strong> Only able to create Admin user at this time. The “user” is only used by the [user interface](<a class="reference external" href="https://github.com/gravitl/netmaker-ui">https://github.com/gravitl/netmaker-ui</a>) to authenticate the  single  admin user.</p>
+<p><strong>Note:</strong> Only able to create Admin user at this time. The “user” is only used by the <a class="reference external" href="https://github.com/gravitl/netmaker-ui">user interface</a> to authenticate the  single  admin user.</p>
 <p><strong>Get User:</strong> <cite>/api/users/{username}</cite>, <cite>GET</cite></p>
 <p><strong>Update User:</strong> <cite>/api/users/{username}</cite>, <cite>PUT</cite></p>
 <p><strong>Delete User:</strong> <cite>/api/users/{username}</cite>, <cite>DELETE</cite></p>

+ 143 - 87
docs/_build/html/architecture.html

@@ -214,7 +214,7 @@
     <li class="md-nav__item">
     
     
-      <a href="about.html#introduction" class="md-nav__link">Introduction</a>
+      <a href="about.html#what-is-netmaker" class="md-nav__link">What is Netmaker?</a>
       
     
     </li>
@@ -228,7 +228,7 @@
     <li class="md-nav__item">
     
     
-      <a href="about.html#use-cases" class="md-nav__link">Use Cases</a>
+      <a href="about.html#use-cases-for-netmaker" class="md-nav__link">Use Cases for Netmaker</a>
       
     
     </li></ul>
@@ -252,19 +252,33 @@
               <ul class="md-nav__list">
         <li class="md-nav__item"><a href="#wireguard" class="md-nav__link">WireGuard</a>
         </li>
+        <li class="md-nav__item"><a href="#mesh-network" class="md-nav__link">Mesh Network</a>
+        </li>
         <li class="md-nav__item"><a href="#netmaker" class="md-nav__link">Netmaker</a>
         </li>
-        <li class="md-nav__item"><a href="#netmaker-ui" class="md-nav__link">Netmaker UI</a>
+        <li class="md-nav__item"><a href="#node" class="md-nav__link">Node</a>
+        </li>
+        <li class="md-nav__item"><a href="#systemd" class="md-nav__link">SystemD</a>
+        </li></ul>
+            </nav>
+        </li>
+        <li class="md-nav__item"><a href="#components" class="md-nav__link">Components</a><nav class="md-nav">
+              <ul class="md-nav__list">
+        <li class="md-nav__item"><a href="#netmaker-server" class="md-nav__link">Netmaker Server</a>
         </li>
         <li class="md-nav__item"><a href="#netclient" class="md-nav__link">Netclient</a>
         </li>
-        <li class="md-nav__item"><a href="#coredns" class="md-nav__link">CoreDNS</a>
+        <li class="md-nav__item"><a href="#mongodb" class="md-nav__link">MongoDB</a>
         </li>
-        <li class="md-nav__item"><a href="#systemd" class="md-nav__link">SystemD</a>
+        <li class="md-nav__item"><a href="#netmaker-ui" class="md-nav__link">Netmaker UI</a>
+        </li>
+        <li class="md-nav__item"><a href="#coredns" class="md-nav__link">CoreDNS</a>
         </li></ul>
             </nav>
         </li>
-        <li class="md-nav__item"><a href="#compatible-systems" class="md-nav__link">Compatible Systems</a>
+        <li class="md-nav__item"><a href="#technical-process" class="md-nav__link">Technical Process</a>
+        </li>
+        <li class="md-nav__item"><a href="#compatible-systems-for-netclient" class="md-nav__link">Compatible Systems for Netclient</a>
         </li>
         <li class="md-nav__item"><a href="#limitations" class="md-nav__link">Limitations</a>
         </li></ul>
@@ -283,7 +297,21 @@
     <li class="md-nav__item">
     
     
-      <a href="#compatible-systems" class="md-nav__link">Compatible Systems</a>
+      <a href="#components" class="md-nav__link">Components</a>
+      
+    
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="#technical-process" class="md-nav__link">Technical Process</a>
+      
+    
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="#compatible-systems-for-netclient" class="md-nav__link">Compatible Systems for Netclient</a>
       
     
     </li>
@@ -418,96 +446,33 @@
     <li class="md-nav__item">
     
     
-      <a href="api.html" class="md-nav__link">API Usage</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#authentication" class="md-nav__link">Authentication</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#format-of-calls-for-curl" class="md-nav__link">Format of Calls for Curl</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#api-documentation" class="md-nav__link">API Documentation</a>
+      <a href="api.html" class="md-nav__link">API Reference</a>
       <ul class="md-nav__list"> 
     <li class="md-nav__item">
     
     
-      <a href="api.html#networks-api" class="md-nav__link">Networks API</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#networks-api-call-examples" class="md-nav__link">Networks API Call Examples</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#access-keys-api" class="md-nav__link">Access Keys API</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#access-keys-api-call-examples" class="md-nav__link">Access Keys API Call Examples</a>
+      <a href="api.html#api-usage" class="md-nav__link">API Usage</a>
       
     
     </li>
     <li class="md-nav__item">
     
     
-      <a href="api.html#nodes-api" class="md-nav__link">Nodes API</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#nodes-api-call-examples" class="md-nav__link">Nodes API Call Examples</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#users-api" class="md-nav__link">Users API</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#users-api-calls-examples" class="md-nav__link">Users API Calls Examples</a>
+      <a href="api.html#authentication" class="md-nav__link">Authentication</a>
       
     
     </li>
     <li class="md-nav__item">
     
     
-      <a href="api.html#server-management-api" class="md-nav__link">Server Management API</a>
+      <a href="api.html#format-of-calls-for-curl" class="md-nav__link">Format of Calls for Curl</a>
       
     
     </li>
     <li class="md-nav__item">
     
     
-      <a href="api.html#file-server-api" class="md-nav__link">File Server API</a>
+      <a href="api.html#api-documentation" class="md-nav__link">API Documentation</a>
       
     
     </li></ul>
@@ -645,19 +610,33 @@
               <ul class="md-nav__list">
         <li class="md-nav__item"><a href="#wireguard" class="md-nav__link">WireGuard</a>
         </li>
+        <li class="md-nav__item"><a href="#mesh-network" class="md-nav__link">Mesh Network</a>
+        </li>
         <li class="md-nav__item"><a href="#netmaker" class="md-nav__link">Netmaker</a>
         </li>
-        <li class="md-nav__item"><a href="#netmaker-ui" class="md-nav__link">Netmaker UI</a>
+        <li class="md-nav__item"><a href="#node" class="md-nav__link">Node</a>
+        </li>
+        <li class="md-nav__item"><a href="#systemd" class="md-nav__link">SystemD</a>
+        </li></ul>
+            </nav>
+        </li>
+        <li class="md-nav__item"><a href="#components" class="md-nav__link">Components</a><nav class="md-nav">
+              <ul class="md-nav__list">
+        <li class="md-nav__item"><a href="#netmaker-server" class="md-nav__link">Netmaker Server</a>
         </li>
         <li class="md-nav__item"><a href="#netclient" class="md-nav__link">Netclient</a>
         </li>
-        <li class="md-nav__item"><a href="#coredns" class="md-nav__link">CoreDNS</a>
+        <li class="md-nav__item"><a href="#mongodb" class="md-nav__link">MongoDB</a>
         </li>
-        <li class="md-nav__item"><a href="#systemd" class="md-nav__link">SystemD</a>
+        <li class="md-nav__item"><a href="#netmaker-ui" class="md-nav__link">Netmaker UI</a>
+        </li>
+        <li class="md-nav__item"><a href="#coredns" class="md-nav__link">CoreDNS</a>
         </li></ul>
             </nav>
         </li>
-        <li class="md-nav__item"><a href="#compatible-systems" class="md-nav__link">Compatible Systems</a>
+        <li class="md-nav__item"><a href="#technical-process" class="md-nav__link">Technical Process</a>
+        </li>
+        <li class="md-nav__item"><a href="#compatible-systems-for-netclient" class="md-nav__link">Compatible Systems for Netclient</a>
         </li>
         <li class="md-nav__item"><a href="#limitations" class="md-nav__link">Limitations</a>
         </li></ul>
@@ -674,31 +653,103 @@
             
   
 <h1 id="architecture--page-root">Architecture<a class="headerlink" href="#architecture--page-root" title="Permalink to this headline">¶</a></h1>
+<a class="reference internal image-reference" href="_images/nm-diagram.jpg"><img alt="Netmaker Architecture Diagram" class="align-center" src="_images/nm-diagram.jpg" style="width: 45%;"/></a>
+<p><em>Pictured Above: A diagram of Netmaker’s Architecture.</em></p>
 
 <h2 id="core-concepts">Core Concepts<a class="headerlink" href="#core-concepts" title="Permalink to this headline">¶</a></h2>
+<p>Familiarity with several core concepts will help when you encounter them later on in the documentation.</p>
 
 <h3 id="wireguard">WireGuard<a class="headerlink" href="#wireguard" title="Permalink to this headline">¶</a></h3>
+<p>WireGuard is a relatively new but very important technology which was recently added to the Linux kernel. WireGuard creates very fast but simple encrypted tunnels between devices. From the <a class="reference external" href="https://www.wireguard.com/">WireGuard</a> website, “it might be regarded as the most secure, easiest to use, and simplest VPN solution in the industry.”</p>
+<p>Previous solutions like OpenVPN and IPSec are considerably more heavy and complex, while being less performant. All existing VPN tunnelling solutions will cause a significant increase in your network latency. WireGuard is the first to achieve near over-the-line network speeds, meaning you see no signigifant performance impact.  With the release of WireGuard, there is little reason to use any other existing tunnel encryption technology.</p>
+
+
+<h3 id="mesh-network">Mesh Network<a class="headerlink" href="#mesh-network" title="Permalink to this headline">¶</a></h3>
+<p>When we refer to a mesh network in these documents we are typically referring to a “full mesh.”</p>
+<a class="reference internal image-reference" href="_images/mesh.png"><img alt="Full Mesh Network Diagram" class="align-center" src="_images/mesh.png" style="width: 33%;"/></a>
+<p>A full <a class="reference external" href="https://www.bbc.co.uk/bitesize/guides/zr3yb82/revision/2">mesh network</a> exists where each machine is able to directly talk to every other machine on the network. For example, on your home network, behind your router, all the computers are likely given private addresses and can reach each other directly.</p>
+<p>This is in contrast to a hub-and-spoke network, where each machine must first pass its traffic through a relay server before it can reach other machines.</p>
+<p>In certain situations you may either want or need a <em>partial mesh</em> network, where only some devices can reach each other directly, and other devices must route their traffic through a relay/gateway. Netmaker can use this model in some use cases where it makes sense.</p>
+<p>Mesh networks are generally faster than other topologies, but are also more complicated to set up. WireGuard on its own gives you the means to create encrypted tunnels between devices, but it does not provide a method for setting up a full network. This is where Netmaker comes in.</p>
 
 
 <h3 id="netmaker">Netmaker<a class="headerlink" href="#netmaker" title="Permalink to this headline">¶</a></h3>
+<p>Netmaker is a platform built off of WireGuard which enables users to create mesh networks between their devices. Netmaker can create both full and partial mesh networks depending on the use case.</p>
+<p>When we refer to Netmaker in aggregate, we are typically referring to Netmaker and the netclient, as well as other supporting services such as CoreDNS, MongoDB, and UI webserver.</p>
+<p>From an end user perspective, they typically interact with the Netmaker UI, or even just run the install script for the netclient on their devices. The other components run in the background invisibly.</p>
+<p>Netmaker does a lot of work to set configurations for you, so that you don’t have to. This includes things like WireGuard ports, endpoints, public IPs, keys, and peers. Netmaker works to abstract away as much of the network management as possible, so that you can just click to create a network, and click to add a machine to a network. That said, every machine (node) is different, and may require special configuration. That is why, while Netmaker sets practical default settings, everything within Netmaker is fully configurable.</p>
 
 
-<h3 id="netmaker-ui">Netmaker UI<a class="headerlink" href="#netmaker-ui" title="Permalink to this headline">¶</a></h3>
+<h3 id="node">Node<a class="headerlink" href="#node" title="Permalink to this headline">¶</a></h3>
+<p>A machine in a Netmaker network, which is managed by the Netclient, is referred to as a Node, as you will see in the UI. A Node can be a VM, a bare metal server, a desktop computer, an IoT device, or any other number of internet-connected machines on which the netclient is installed. A node is simply an endpoint in the network, which can send traffic to all the other nodes, and recieve traffic from all of the other nodes.</p>
 
 
-<h3 id="netclient">Netclient<a class="headerlink" href="#netclient" title="Permalink to this headline">¶</a></h3>
+<h3 id="systemd">SystemD<a class="headerlink" href="#systemd" title="Permalink to this headline">¶</a></h3>
+<p>SystemD is a system service manager for a wide array of Linux operating systems. Not all Linux distributions have adopted systemd, but, for better or worse, it has become a fairly common standard in the Linux world. That said, any non-Linux operating system will not have systemd, and many Linux/Unix distributionshave alternative system service managers.</p>
+<p>Netmaker’s netclient, the agent which controls networking on all nodes, relies heavily on systemd as of version 0.3. This reliance is being reduced but is currently a core dependency, causing most of the limitations and incompatibilities. As Netmaker evolves, systemd will become just one of the possible service management options, allowing the netclient to be run on a wider array of devices.</p>
 
 
-<h3 id="coredns">CoreDNS<a class="headerlink" href="#coredns" title="Permalink to this headline">¶</a></h3>
 
+<h2 id="components">Components<a class="headerlink" href="#components" title="Permalink to this headline">¶</a></h2>
+<p>Netmaker consists of several core components, which are explained in high-level technical detail below.</p>
+
+<h3 id="netmaker-server">Netmaker Server<a class="headerlink" href="#netmaker-server" title="Permalink to this headline">¶</a></h3>
+<p>The Netmaker server is, at its core, a golang binary. Source code can be found <a class="reference external" href="https://github.com/gravitl/netmaker">on GitHub</a>. The binary, by itself can be compiled for most systems. If you need to run the Netmaker server on a particular system, it likely can be made to work. In typical deployments, it is run as a Docker container. It can also be run as a systemd service as outlined in the non-docker install guide.</p>
+<p>The Netmaker server acts as an API to the front end, and as a GRPC server to the machines in the network. GRPC is much faster and more efficient than standard API calls, which increases the speed of transactions. For this reason, the Netmaker server exposes two ports: The default for the API is 8081, and the default for GRPC is 50051. Either the API or the GRPC server can be disabled on any given Netmaker instance can be disabled, allowing you to deploy two different servers for managing the API (which is largely for the admin’s use) and GRPC (which is largely for the nodes’ use).</p>
+<p>Most server settings are configurable via a config file, or by environment variables (which take precedence). If the server finds neither of these, it sets sensible defaults, including things like the server’s reachable IP, ports, and which “modes” to run in.</p>
+<p>These modes include client mode and dns mode. Either of these can be disabled but are enabled by default. Client mode allows you to treat the Netmaker host machine (operating system) as a network Node, installing the netclient and controlling the host network. DNS mode has the server write config settings for CoreDNS, a separate component and nameserver, which picks up the config settings to manage node DNS.</p>
+<p>The Netmaker server interacts with (as of v0.3) a MongoDB instance, which holds information about nodes, networks, users, and other important data. This data is configuration data. For the most part, Netmaker serves configuration data to Nodes, telling them how they should configure themselves. The Netclient is the agent that actually does that configuration.</p>
+
+
+<h3 id="netclient">Netclient<a class="headerlink" href="#netclient" title="Permalink to this headline">¶</a></h3>
+<p>The netclient is, at its core, a golang binary. Source code can be found in the netclient folder of the Netmaker <a class="reference external" href="https://github.com/gravitl/netmaker/tree/master/netclient">GitHub Repository</a>. The binary, by itself, can be compiled for most systems. However, this binary is designed to manage a certain number of Operating Systems. As of version 0.3, it requires systemd in order to manage the host system appropriately. It may be installable, and it may even make the machine a part of the mesh network, but it will not function in entirely (see Compatible Systems for more info) without systemd.</p>
+<p>The netclient is installed via a simple bash script, which pulls the latest binary and runs install command.</p>
+<p>The install command registers the machine with the Netmaker server using sensible defaults, which can be overridden with a config file or environment variables. Assuming the netclient has a valid key (or the network allows manual node signup), it will be registered in the Netmaker network, which will return configuration details about how to set up the local network.</p>
+<p>The netclient then sets itself up in systemd, and configures WireGuard. At this point it should be part of the network.</p>
+<p>On a periodic basis (systemd timer), the netclient performs a “check in.” It will authenticate with the server, and check to see if anything has changed in the network. It will also post changes about its own local configuration if there. If there has been a change, the server will return new configurations and the netclient will reconfigure the network.</p>
+<p>The check in process is what allows Netmaker to create dynamic mesh networks. As nodes are added to, removed from, and modified on the network, other nodes are notified, and make appropriate changes.</p>
 
-<h3 id="systemd">SystemD<a class="headerlink" href="#systemd" title="Permalink to this headline">¶</a></h3>
 
+<h3 id="mongodb">MongoDB<a class="headerlink" href="#mongodb" title="Permalink to this headline">¶</a></h3>
+<p>As of v0.3, Netmaker uses MongoDB as its database, and interacts with a MongoDB instance to store and retrieve information about nodes, networks, and users. Netmaker is rapidly evolving, and MongoDB provides a flexible database structure that accelerates development. However, MongoDB is also the heaviest component of Netmaker (high cpu/memory consumption), and is set to be replaced by a lighter-weight, SQL-based database in the future.</p>
 
 
-<h2 id="compatible-systems">Compatible Systems<a class="headerlink" href="#compatible-systems" title="Permalink to this headline">¶</a></h2>
+<h3 id="netmaker-ui">Netmaker UI<a class="headerlink" href="#netmaker-ui" title="Permalink to this headline">¶</a></h3>
+<p>The Netmaker UI is a ReactJS-based static website which can be run on top of standard webservers such as Apache and Nginx. Source code can be found <a class="reference external" href="https://github.com/gravitl/netmaker-ui">here</a>. In a typical configuration, the Netmaker UI is run on Nginx as a Docker container.</p>
+<p>Netmaker can be used in its entirety without the UI, but the UI makes things a lot easier for most users. It has a sensible flow and layout for managing Networks, Nodes, Access Keys, and DNS.</p>
+
+
+<h3 id="coredns">CoreDNS<a class="headerlink" href="#coredns" title="Permalink to this headline">¶</a></h3>
+<p>v0.3 introduced the concept of private DNS management for nodes. This requires a nameserver, and CoreDNS is the chosen nameserver. CoreDNS is lightweight and extensible. CoreDNS loads dns settings from a simple file, managed by Netmaker, and serves out DNS info for managed nodes. DNS can be tricky, and DNS management is currently only supported on a small set of devices, specifically those running systemd-resolved. However, the Netmaker CoreDNS instance can be added manually as a nameserver to other devices. DNS mode can also be turned off.</p>
+<p>Worth considering is that CoreDNS requires port 53 on the Netmaker host system, which may cause conflicts depending on your operating system. This is explained in the <a class="reference internal" href="server-installation.html"><span class="doc">Server Installation</span></a> guide.</p>
+
+
+
+<h2 id="technical-process">Technical Process<a class="headerlink" href="#technical-process" title="Permalink to this headline">¶</a></h2>
+<p>Below is a high level, step-by-step overview of the flow of communications within Netmaker (assuming Netmaker has already been installed):</p>
+<ol class="arabic simple">
+<li><p>Admin creates a new network with a subnet, for instance 10.10.10.0/24</p></li>
+<li><p>Admin creates an access key for signing up new nodes</p></li>
+<li><p>Both of the above requests are routed to the server via an API call from the front end</p></li>
+<li><p>Admin runs the netclient install script on any given node (machine).</p></li>
+<li><p>Netclient decodes key, which contains the GRPC server location and port</p></li>
+<li><p>Netclient retrieves/sets local information, including open ports for WireGuard, public IP, and generating key pairs for peers</p></li>
+<li><p>Netclient reaches out to GRPC server with this information, authenticating via access key.</p></li>
+<li><p>Netmaker server verifies information and creates the node, setting default values for any missing information.</p></li>
+<li><p>Timestamp is set for the network (see #16).</p></li>
+<li><p>Netmaker returns settings as response to netclient. Some settings may be added or modified based on the network.</p></li>
+<li><p>Netclient recieves response. If successful, it takes any additional info returned from Netmaker and configures the local system/WireGuard</p></li>
+<li><p>Netclient sends another request to Netmaker’s GRPC server, this time to retrieve the peers list (all other clients in the network).</p></li>
+<li><p>Netmaker sends back peers list, including current known configurations of all nodes in network.</p></li>
+<li><p>Netclient configures WireGuard with this information. At this point, the node is fully configured as a part of the network and should be able to reach the other nodes via private address.</p></li>
+<li><p>Netclient begins daemon (system timer) to run check in’s with the server. It awaits changes, reporting local changes, and retrieving changes from any other nodes in the network.</p></li>
+<li><p>Other netclients on the network, upon checking in with the Netmaker server, will see that the timestamp has updated, and they will retrieve a new peers list, completing the update cycle.</p></li>
+</ol>
+
+
+<h2 id="compatible-systems-for-netclient">Compatible Systems for Netclient<a class="headerlink" href="#compatible-systems-for-netclient" title="Permalink to this headline">¶</a></h2>
 <dl class="simple">
-<dt>To manage a server automatically, Netmaker requires <strong>systemd-based linux.</strong> Compatible systems include:</dt><dd><ul class="simple">
+<dt>To manage a node automatically, the Netmaker client (netclient) requires <strong>systemd-based linux.</strong> Compatible systems include:</dt><dd><ul class="simple">
 <li><p>Fedora</p></li>
 <li><p>Ubuntu</p></li>
 <li><p>Debian</p></li>
@@ -711,7 +762,7 @@
 <li><p>CoreOS</p></li>
 </ul>
 </dd>
-<dt>To manage DNS (optional), the server must have systemd-resolved. Systems that have this enabled include:</dt><dd><ul class="simple">
+<dt>To manage DNS (optional), the node must have systemd-resolved. Systems that have this enabled include:</dt><dd><ul class="simple">
 <li><p>Arch</p></li>
 <li><p>Debian</p></li>
 <li><p>Ubuntu</p></li>
@@ -719,10 +770,15 @@
 </ul>
 </dd>
 </dl>
-<p>In future releases, we will support other platforms such as Windows, MacOS, iOS, Android, and more.</p>
 
 
 <h2 id="limitations">Limitations<a class="headerlink" href="#limitations" title="Permalink to this headline">¶</a></h2>
+<p>Install limitations mostly include platform-specific limitations, such as needing systemd or systemd-resolved (see above). In addition the Netmaker platform has some additional limitations:</p>
+<ul class="simple">
+<li><p><strong>Double NAT</strong>: Netmaker is currently unable to route traffic for devices behind a “double NAT”.</p></li>
+<li><p><strong>CGNAT</strong>: Netmaker is currently unable to route traffic for for devices behind a “carrier-grade NAT”.</p></li>
+<li><p><strong>Windows/iPhone/Android</strong>: To reiterate the systemd limitation, Netmaker is not currently configured to support “end user” devices such as Windows desktops and phones generally. In v0.4, Netmaker will introduce external device gateways to allow this traffic (and many other sorts of devices).</p></li>
+</ul>
 
 
 

+ 21 - 70
docs/_build/html/client-installation.html

@@ -214,7 +214,7 @@
     <li class="md-nav__item">
     
     
-      <a href="about.html#introduction" class="md-nav__link">Introduction</a>
+      <a href="about.html#what-is-netmaker" class="md-nav__link">What is Netmaker?</a>
       
     
     </li>
@@ -228,7 +228,7 @@
     <li class="md-nav__item">
     
     
-      <a href="about.html#use-cases" class="md-nav__link">Use Cases</a>
+      <a href="about.html#use-cases-for-netmaker" class="md-nav__link">Use Cases for Netmaker</a>
       
     
     </li></ul>
@@ -245,6 +245,20 @@
       <a href="architecture.html#core-concepts" class="md-nav__link">Core Concepts</a>
       
     
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="architecture.html#components" class="md-nav__link">Components</a>
+      
+    
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="architecture.html#technical-process" class="md-nav__link">Technical Process</a>
+      
+    
     </li>
     <li class="md-nav__item">
     
@@ -414,96 +428,33 @@
     <li class="md-nav__item">
     
     
-      <a href="api.html" class="md-nav__link">API Usage</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#authentication" class="md-nav__link">Authentication</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#format-of-calls-for-curl" class="md-nav__link">Format of Calls for Curl</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#api-documentation" class="md-nav__link">API Documentation</a>
+      <a href="api.html" class="md-nav__link">API Reference</a>
       <ul class="md-nav__list"> 
     <li class="md-nav__item">
     
     
-      <a href="api.html#networks-api" class="md-nav__link">Networks API</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#networks-api-call-examples" class="md-nav__link">Networks API Call Examples</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#access-keys-api" class="md-nav__link">Access Keys API</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#access-keys-api-call-examples" class="md-nav__link">Access Keys API Call Examples</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#nodes-api" class="md-nav__link">Nodes API</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#nodes-api-call-examples" class="md-nav__link">Nodes API Call Examples</a>
+      <a href="api.html#api-usage" class="md-nav__link">API Usage</a>
       
     
     </li>
     <li class="md-nav__item">
     
     
-      <a href="api.html#users-api" class="md-nav__link">Users API</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#users-api-calls-examples" class="md-nav__link">Users API Calls Examples</a>
+      <a href="api.html#authentication" class="md-nav__link">Authentication</a>
       
     
     </li>
     <li class="md-nav__item">
     
     
-      <a href="api.html#server-management-api" class="md-nav__link">Server Management API</a>
+      <a href="api.html#format-of-calls-for-curl" class="md-nav__link">Format of Calls for Curl</a>
       
     
     </li>
     <li class="md-nav__item">
     
     
-      <a href="api.html#file-server-api" class="md-nav__link">File Server API</a>
+      <a href="api.html#api-documentation" class="md-nav__link">API Documentation</a>
       
     
     </li></ul>

+ 26 - 82
docs/_build/html/conduct.html

@@ -214,7 +214,7 @@
     <li class="md-nav__item">
     
     
-      <a href="about.html#introduction" class="md-nav__link">Introduction</a>
+      <a href="about.html#what-is-netmaker" class="md-nav__link">What is Netmaker?</a>
       
     
     </li>
@@ -228,7 +228,7 @@
     <li class="md-nav__item">
     
     
-      <a href="about.html#use-cases" class="md-nav__link">Use Cases</a>
+      <a href="about.html#use-cases-for-netmaker" class="md-nav__link">Use Cases for Netmaker</a>
       
     
     </li></ul>
@@ -245,6 +245,20 @@
       <a href="architecture.html#core-concepts" class="md-nav__link">Core Concepts</a>
       
     
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="architecture.html#components" class="md-nav__link">Components</a>
+      
+    
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="architecture.html#technical-process" class="md-nav__link">Technical Process</a>
+      
+    
     </li>
     <li class="md-nav__item">
     
@@ -384,96 +398,33 @@
     <li class="md-nav__item">
     
     
-      <a href="api.html" class="md-nav__link">API Usage</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#authentication" class="md-nav__link">Authentication</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#format-of-calls-for-curl" class="md-nav__link">Format of Calls for Curl</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#api-documentation" class="md-nav__link">API Documentation</a>
+      <a href="api.html" class="md-nav__link">API Reference</a>
       <ul class="md-nav__list"> 
     <li class="md-nav__item">
     
     
-      <a href="api.html#networks-api" class="md-nav__link">Networks API</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#networks-api-call-examples" class="md-nav__link">Networks API Call Examples</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#access-keys-api" class="md-nav__link">Access Keys API</a>
+      <a href="api.html#api-usage" class="md-nav__link">API Usage</a>
       
     
     </li>
     <li class="md-nav__item">
     
     
-      <a href="api.html#access-keys-api-call-examples" class="md-nav__link">Access Keys API Call Examples</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#nodes-api" class="md-nav__link">Nodes API</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#nodes-api-call-examples" class="md-nav__link">Nodes API Call Examples</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#users-api" class="md-nav__link">Users API</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#users-api-calls-examples" class="md-nav__link">Users API Calls Examples</a>
+      <a href="api.html#authentication" class="md-nav__link">Authentication</a>
       
     
     </li>
     <li class="md-nav__item">
     
     
-      <a href="api.html#server-management-api" class="md-nav__link">Server Management API</a>
+      <a href="api.html#format-of-calls-for-curl" class="md-nav__link">Format of Calls for Curl</a>
       
     
     </li>
     <li class="md-nav__item">
     
     
-      <a href="api.html#file-server-api" class="md-nav__link">File Server API</a>
+      <a href="api.html#api-documentation" class="md-nav__link">API Documentation</a>
       
     
     </li></ul>
@@ -680,18 +631,11 @@ include:</p>
 </ul>
 <p>Examples of unacceptable behavior by participants include:</p>
 <ul class="simple">
-<li><p>The use of sexualized language or imagery and unwelcome sexual attention or</p></li>
-</ul>
-<p>advances
-* Trolling, insulting/derogatory comments, and personal or political attacks
-* Public or private harassment
-* Publishing others’ private information, such as a physical or electronic</p>
-<blockquote>
-<div><p>address, without explicit permission</p>
-</div></blockquote>
-<ul class="simple">
-<li><p>Other conduct which could reasonably be considered inappropriate in a
-professional setting</p></li>
+<li><p>The use of sexualized language or imagery and unwelcome sexual attention or advances</p></li>
+<li><p>Trolling, insulting/derogatory comments, and personal or political attacks</p></li>
+<li><p>Public or private harassment</p></li>
+<li><p>Publishing others’ private information, such as a physical or electronic address, without explicit permission</p></li>
+<li><p>Other conduct which could reasonably be considered inappropriate in a professional setting</p></li>
 </ul>
 
 

+ 21 - 70
docs/_build/html/contribute.html

@@ -214,7 +214,7 @@
     <li class="md-nav__item">
     
     
-      <a href="about.html#introduction" class="md-nav__link">Introduction</a>
+      <a href="about.html#what-is-netmaker" class="md-nav__link">What is Netmaker?</a>
       
     
     </li>
@@ -228,7 +228,7 @@
     <li class="md-nav__item">
     
     
-      <a href="about.html#use-cases" class="md-nav__link">Use Cases</a>
+      <a href="about.html#use-cases-for-netmaker" class="md-nav__link">Use Cases for Netmaker</a>
       
     
     </li></ul>
@@ -245,6 +245,20 @@
       <a href="architecture.html#core-concepts" class="md-nav__link">Core Concepts</a>
       
     
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="architecture.html#components" class="md-nav__link">Components</a>
+      
+    
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="architecture.html#technical-process" class="md-nav__link">Technical Process</a>
+      
+    
     </li>
     <li class="md-nav__item">
     
@@ -384,96 +398,33 @@
     <li class="md-nav__item">
     
     
-      <a href="api.html" class="md-nav__link">API Usage</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#authentication" class="md-nav__link">Authentication</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#format-of-calls-for-curl" class="md-nav__link">Format of Calls for Curl</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#api-documentation" class="md-nav__link">API Documentation</a>
+      <a href="api.html" class="md-nav__link">API Reference</a>
       <ul class="md-nav__list"> 
     <li class="md-nav__item">
     
     
-      <a href="api.html#networks-api" class="md-nav__link">Networks API</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#networks-api-call-examples" class="md-nav__link">Networks API Call Examples</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#access-keys-api" class="md-nav__link">Access Keys API</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#access-keys-api-call-examples" class="md-nav__link">Access Keys API Call Examples</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#nodes-api" class="md-nav__link">Nodes API</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#nodes-api-call-examples" class="md-nav__link">Nodes API Call Examples</a>
+      <a href="api.html#api-usage" class="md-nav__link">API Usage</a>
       
     
     </li>
     <li class="md-nav__item">
     
     
-      <a href="api.html#users-api" class="md-nav__link">Users API</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#users-api-calls-examples" class="md-nav__link">Users API Calls Examples</a>
+      <a href="api.html#authentication" class="md-nav__link">Authentication</a>
       
     
     </li>
     <li class="md-nav__item">
     
     
-      <a href="api.html#server-management-api" class="md-nav__link">Server Management API</a>
+      <a href="api.html#format-of-calls-for-curl" class="md-nav__link">Format of Calls for Curl</a>
       
     
     </li>
     <li class="md-nav__item">
     
     
-      <a href="api.html#file-server-api" class="md-nav__link">File Server API</a>
+      <a href="api.html#api-documentation" class="md-nav__link">API Documentation</a>
       
     
     </li></ul>

+ 17 - 3
docs/_build/html/genindex.html

@@ -212,7 +212,7 @@
     <li class="md-nav__item">
     
     
-      <a href="about.html#introduction" class="md-nav__link">Introduction</a>
+      <a href="about.html#what-is-netmaker" class="md-nav__link">What is Netmaker?</a>
       
     
     </li>
@@ -226,7 +226,7 @@
     <li class="md-nav__item">
     
     
-      <a href="about.html#use-cases" class="md-nav__link">Use Cases</a>
+      <a href="about.html#use-cases-for-netmaker" class="md-nav__link">Use Cases for Netmaker</a>
       
     
     </li></ul>
@@ -247,7 +247,21 @@
     <li class="md-nav__item">
     
     
-      <a href="architecture.html#compatible-systems" class="md-nav__link">Compatible Systems</a>
+      <a href="architecture.html#components" class="md-nav__link">Components</a>
+      
+    
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="architecture.html#technical-process" class="md-nav__link">Technical Process</a>
+      
+    
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="architecture.html#compatible-systems-for-netclient" class="md-nav__link">Compatible Systems for Netclient</a>
       
     
     </li>

+ 23 - 7
docs/_build/html/index.html

@@ -213,7 +213,7 @@
     <li class="md-nav__item">
     
     
-      <a href="about.html#introduction" class="md-nav__link">Introduction</a>
+      <a href="about.html#what-is-netmaker" class="md-nav__link">What is Netmaker?</a>
       
     
     </li>
@@ -227,7 +227,7 @@
     <li class="md-nav__item">
     
     
-      <a href="about.html#use-cases" class="md-nav__link">Use Cases</a>
+      <a href="about.html#use-cases-for-netmaker" class="md-nav__link">Use Cases for Netmaker</a>
       
     
     </li></ul>
@@ -248,7 +248,21 @@
     <li class="md-nav__item">
     
     
-      <a href="architecture.html#compatible-systems" class="md-nav__link">Compatible Systems</a>
+      <a href="architecture.html#components" class="md-nav__link">Components</a>
+      
+    
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="architecture.html#technical-process" class="md-nav__link">Technical Process</a>
+      
+    
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="architecture.html#compatible-systems-for-netclient" class="md-nav__link">Compatible Systems for Netclient</a>
       
     
     </li>
@@ -581,7 +595,7 @@
 
 <h1 id="index--page-root">Welcome to the Netmaker Documentation<a class="headerlink" href="#index--page-root" title="Permalink to this headline">¶</a></h1>
 <p>Netmaker is a platform for creating and managing fast, secure, and dynamic virtual overlay networks using WireGuard.</p>
-<p>This documentation covers Netmaker’s installation, usage, troubleshooting, and customization, as well as reference documents for the API, UI and Agent configuration. All of the <a class="reference external" href="https://github.com/gravitl/netmaker">source code</a> for Netmaker is on GitHub.</p>
+<p>This documentation covers Netmaker’s <a class="reference internal" href="server-installation.html"><span class="doc">installation</span></a>, <a class="reference internal" href="usage.html"><span class="doc">usage</span></a>, <a class="reference internal" href="support.html"><span class="doc">troubleshooting</span></a>, and customization, as well as reference documents for the <a class="reference internal" href="api.html"><span class="doc">API</span></a>, UI and Agent configuration. All of the <a class="reference external" href="https://github.com/gravitl/netmaker">source code</a> for Netmaker is on GitHub.</p>
 <p><span class="raw-html"><br/></span></p>
 <div style="position:relative; width:100%; height:0px; padding-bottom:56.25%;">
 <iframe src="https://www.youtube.com/embed/PWLPT320Ybo" style="position:absolute; left:0; top:0; width:100%; height:100%">
@@ -593,9 +607,9 @@
 <div class="toctree-wrapper compound">
 <ul>
 <li class="toctree-l1"><a class="reference internal" href="about.html">About</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="about.html#introduction">Introduction</a></li>
+<li class="toctree-l2"><a class="reference internal" href="about.html#what-is-netmaker">What is Netmaker?</a></li>
 <li class="toctree-l2"><a class="reference internal" href="about.html#how-does-netmaker-work">How Does Netmaker Work?</a></li>
-<li class="toctree-l2"><a class="reference internal" href="about.html#use-cases">Use Cases</a></li>
+<li class="toctree-l2"><a class="reference internal" href="about.html#use-cases-for-netmaker">Use Cases for Netmaker</a></li>
 </ul>
 </li>
 </ul>
@@ -608,7 +622,9 @@
 <ul>
 <li class="toctree-l1"><a class="reference internal" href="architecture.html">Architecture</a><ul>
 <li class="toctree-l2"><a class="reference internal" href="architecture.html#core-concepts">Core Concepts</a></li>
-<li class="toctree-l2"><a class="reference internal" href="architecture.html#compatible-systems">Compatible Systems</a></li>
+<li class="toctree-l2"><a class="reference internal" href="architecture.html#components">Components</a></li>
+<li class="toctree-l2"><a class="reference internal" href="architecture.html#technical-process">Technical Process</a></li>
+<li class="toctree-l2"><a class="reference internal" href="architecture.html#compatible-systems-for-netclient">Compatible Systems for Netclient</a></li>
 <li class="toctree-l2"><a class="reference internal" href="architecture.html#limitations">Limitations</a></li>
 </ul>
 </li>

+ 21 - 70
docs/_build/html/license.html

@@ -213,7 +213,7 @@
     <li class="md-nav__item">
     
     
-      <a href="about.html#introduction" class="md-nav__link">Introduction</a>
+      <a href="about.html#what-is-netmaker" class="md-nav__link">What is Netmaker?</a>
       
     
     </li>
@@ -227,7 +227,7 @@
     <li class="md-nav__item">
     
     
-      <a href="about.html#use-cases" class="md-nav__link">Use Cases</a>
+      <a href="about.html#use-cases-for-netmaker" class="md-nav__link">Use Cases for Netmaker</a>
       
     
     </li></ul>
@@ -244,6 +244,20 @@
       <a href="architecture.html#core-concepts" class="md-nav__link">Core Concepts</a>
       
     
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="architecture.html#components" class="md-nav__link">Components</a>
+      
+    
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="architecture.html#technical-process" class="md-nav__link">Technical Process</a>
+      
+    
     </li>
     <li class="md-nav__item">
     
@@ -383,96 +397,33 @@
     <li class="md-nav__item">
     
     
-      <a href="api.html" class="md-nav__link">API Usage</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#authentication" class="md-nav__link">Authentication</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#format-of-calls-for-curl" class="md-nav__link">Format of Calls for Curl</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#api-documentation" class="md-nav__link">API Documentation</a>
+      <a href="api.html" class="md-nav__link">API Reference</a>
       <ul class="md-nav__list"> 
     <li class="md-nav__item">
     
     
-      <a href="api.html#networks-api" class="md-nav__link">Networks API</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#networks-api-call-examples" class="md-nav__link">Networks API Call Examples</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#access-keys-api" class="md-nav__link">Access Keys API</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#access-keys-api-call-examples" class="md-nav__link">Access Keys API Call Examples</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#nodes-api" class="md-nav__link">Nodes API</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#nodes-api-call-examples" class="md-nav__link">Nodes API Call Examples</a>
+      <a href="api.html#api-usage" class="md-nav__link">API Usage</a>
       
     
     </li>
     <li class="md-nav__item">
     
     
-      <a href="api.html#users-api" class="md-nav__link">Users API</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#users-api-calls-examples" class="md-nav__link">Users API Calls Examples</a>
+      <a href="api.html#authentication" class="md-nav__link">Authentication</a>
       
     
     </li>
     <li class="md-nav__item">
     
     
-      <a href="api.html#server-management-api" class="md-nav__link">Server Management API</a>
+      <a href="api.html#format-of-calls-for-curl" class="md-nav__link">Format of Calls for Curl</a>
       
     
     </li>
     <li class="md-nav__item">
     
     
-      <a href="api.html#file-server-api" class="md-nav__link">File Server API</a>
+      <a href="api.html#api-documentation" class="md-nav__link">API Documentation</a>
       
     
     </li></ul>

+ 21 - 70
docs/_build/html/quick-start.html

@@ -214,7 +214,7 @@
     <li class="md-nav__item">
     
     
-      <a href="about.html#introduction" class="md-nav__link">Introduction</a>
+      <a href="about.html#what-is-netmaker" class="md-nav__link">What is Netmaker?</a>
       
     
     </li>
@@ -228,7 +228,7 @@
     <li class="md-nav__item">
     
     
-      <a href="about.html#use-cases" class="md-nav__link">Use Cases</a>
+      <a href="about.html#use-cases-for-netmaker" class="md-nav__link">Use Cases for Netmaker</a>
       
     
     </li></ul>
@@ -245,6 +245,20 @@
       <a href="architecture.html#core-concepts" class="md-nav__link">Core Concepts</a>
       
     
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="architecture.html#components" class="md-nav__link">Components</a>
+      
+    
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="architecture.html#technical-process" class="md-nav__link">Technical Process</a>
+      
+    
     </li>
     <li class="md-nav__item">
     
@@ -393,96 +407,33 @@
     <li class="md-nav__item">
     
     
-      <a href="api.html" class="md-nav__link">API Usage</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#authentication" class="md-nav__link">Authentication</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#format-of-calls-for-curl" class="md-nav__link">Format of Calls for Curl</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#api-documentation" class="md-nav__link">API Documentation</a>
+      <a href="api.html" class="md-nav__link">API Reference</a>
       <ul class="md-nav__list"> 
     <li class="md-nav__item">
     
     
-      <a href="api.html#networks-api" class="md-nav__link">Networks API</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#networks-api-call-examples" class="md-nav__link">Networks API Call Examples</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#access-keys-api" class="md-nav__link">Access Keys API</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#access-keys-api-call-examples" class="md-nav__link">Access Keys API Call Examples</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#nodes-api" class="md-nav__link">Nodes API</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#nodes-api-call-examples" class="md-nav__link">Nodes API Call Examples</a>
+      <a href="api.html#api-usage" class="md-nav__link">API Usage</a>
       
     
     </li>
     <li class="md-nav__item">
     
     
-      <a href="api.html#users-api" class="md-nav__link">Users API</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#users-api-calls-examples" class="md-nav__link">Users API Calls Examples</a>
+      <a href="api.html#authentication" class="md-nav__link">Authentication</a>
       
     
     </li>
     <li class="md-nav__item">
     
     
-      <a href="api.html#server-management-api" class="md-nav__link">Server Management API</a>
+      <a href="api.html#format-of-calls-for-curl" class="md-nav__link">Format of Calls for Curl</a>
       
     
     </li>
     <li class="md-nav__item">
     
     
-      <a href="api.html#file-server-api" class="md-nav__link">File Server API</a>
+      <a href="api.html#api-documentation" class="md-nav__link">API Documentation</a>
       
     
     </li></ul>

+ 17 - 3
docs/_build/html/search.html

@@ -218,7 +218,7 @@
     <li class="md-nav__item">
     
     
-      <a href="about.html#introduction" class="md-nav__link">Introduction</a>
+      <a href="about.html#what-is-netmaker" class="md-nav__link">What is Netmaker?</a>
       
     
     </li>
@@ -232,7 +232,7 @@
     <li class="md-nav__item">
     
     
-      <a href="about.html#use-cases" class="md-nav__link">Use Cases</a>
+      <a href="about.html#use-cases-for-netmaker" class="md-nav__link">Use Cases for Netmaker</a>
       
     
     </li></ul>
@@ -253,7 +253,21 @@
     <li class="md-nav__item">
     
     
-      <a href="architecture.html#compatible-systems" class="md-nav__link">Compatible Systems</a>
+      <a href="architecture.html#components" class="md-nav__link">Components</a>
+      
+    
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="architecture.html#technical-process" class="md-nav__link">Technical Process</a>
+      
+    
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="architecture.html#compatible-systems-for-netclient" class="md-nav__link">Compatible Systems for Netclient</a>
       
     
     </li>

File diff suppressed because it is too large
+ 0 - 0
docs/_build/html/searchindex.js


+ 21 - 70
docs/_build/html/server-installation.html

@@ -214,7 +214,7 @@
     <li class="md-nav__item">
     
     
-      <a href="about.html#introduction" class="md-nav__link">Introduction</a>
+      <a href="about.html#what-is-netmaker" class="md-nav__link">What is Netmaker?</a>
       
     
     </li>
@@ -228,7 +228,7 @@
     <li class="md-nav__item">
     
     
-      <a href="about.html#use-cases" class="md-nav__link">Use Cases</a>
+      <a href="about.html#use-cases-for-netmaker" class="md-nav__link">Use Cases for Netmaker</a>
       
     
     </li></ul>
@@ -245,6 +245,20 @@
       <a href="architecture.html#core-concepts" class="md-nav__link">Core Concepts</a>
       
     
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="architecture.html#components" class="md-nav__link">Components</a>
+      
+    
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="architecture.html#technical-process" class="md-nav__link">Technical Process</a>
+      
+    
     </li>
     <li class="md-nav__item">
     
@@ -414,96 +428,33 @@
     <li class="md-nav__item">
     
     
-      <a href="api.html" class="md-nav__link">API Usage</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#authentication" class="md-nav__link">Authentication</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#format-of-calls-for-curl" class="md-nav__link">Format of Calls for Curl</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#api-documentation" class="md-nav__link">API Documentation</a>
+      <a href="api.html" class="md-nav__link">API Reference</a>
       <ul class="md-nav__list"> 
     <li class="md-nav__item">
     
     
-      <a href="api.html#networks-api" class="md-nav__link">Networks API</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#networks-api-call-examples" class="md-nav__link">Networks API Call Examples</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#access-keys-api" class="md-nav__link">Access Keys API</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#access-keys-api-call-examples" class="md-nav__link">Access Keys API Call Examples</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#nodes-api" class="md-nav__link">Nodes API</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#nodes-api-call-examples" class="md-nav__link">Nodes API Call Examples</a>
+      <a href="api.html#api-usage" class="md-nav__link">API Usage</a>
       
     
     </li>
     <li class="md-nav__item">
     
     
-      <a href="api.html#users-api" class="md-nav__link">Users API</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#users-api-calls-examples" class="md-nav__link">Users API Calls Examples</a>
+      <a href="api.html#authentication" class="md-nav__link">Authentication</a>
       
     
     </li>
     <li class="md-nav__item">
     
     
-      <a href="api.html#server-management-api" class="md-nav__link">Server Management API</a>
+      <a href="api.html#format-of-calls-for-curl" class="md-nav__link">Format of Calls for Curl</a>
       
     
     </li>
     <li class="md-nav__item">
     
     
-      <a href="api.html#file-server-api" class="md-nav__link">File Server API</a>
+      <a href="api.html#api-documentation" class="md-nav__link">API Documentation</a>
       
     
     </li></ul>

+ 24 - 73
docs/_build/html/support.html

@@ -57,7 +57,7 @@
     <link rel="index" title="Index" href="genindex.html" />
     <link rel="search" title="Search" href="search.html" />
     <link rel="next" title="Contribute" href="contribute.html" />
-    <link rel="prev" title="API Usage" href="api.html" />
+    <link rel="prev" title="API Reference" href="api.html" />
   
    
 
@@ -214,7 +214,7 @@
     <li class="md-nav__item">
     
     
-      <a href="about.html#introduction" class="md-nav__link">Introduction</a>
+      <a href="about.html#what-is-netmaker" class="md-nav__link">What is Netmaker?</a>
       
     
     </li>
@@ -228,7 +228,7 @@
     <li class="md-nav__item">
     
     
-      <a href="about.html#use-cases" class="md-nav__link">Use Cases</a>
+      <a href="about.html#use-cases-for-netmaker" class="md-nav__link">Use Cases for Netmaker</a>
       
     
     </li></ul>
@@ -245,6 +245,20 @@
       <a href="architecture.html#core-concepts" class="md-nav__link">Core Concepts</a>
       
     
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="architecture.html#components" class="md-nav__link">Components</a>
+      
+    
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="architecture.html#technical-process" class="md-nav__link">Technical Process</a>
+      
+    
     </li>
     <li class="md-nav__item">
     
@@ -384,96 +398,33 @@
     <li class="md-nav__item">
     
     
-      <a href="api.html" class="md-nav__link">API Usage</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#authentication" class="md-nav__link">Authentication</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#format-of-calls-for-curl" class="md-nav__link">Format of Calls for Curl</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#api-documentation" class="md-nav__link">API Documentation</a>
+      <a href="api.html" class="md-nav__link">API Reference</a>
       <ul class="md-nav__list"> 
     <li class="md-nav__item">
     
     
-      <a href="api.html#networks-api" class="md-nav__link">Networks API</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#networks-api-call-examples" class="md-nav__link">Networks API Call Examples</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#access-keys-api" class="md-nav__link">Access Keys API</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#access-keys-api-call-examples" class="md-nav__link">Access Keys API Call Examples</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#nodes-api" class="md-nav__link">Nodes API</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#nodes-api-call-examples" class="md-nav__link">Nodes API Call Examples</a>
+      <a href="api.html#api-usage" class="md-nav__link">API Usage</a>
       
     
     </li>
     <li class="md-nav__item">
     
     
-      <a href="api.html#users-api" class="md-nav__link">Users API</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#users-api-calls-examples" class="md-nav__link">Users API Calls Examples</a>
+      <a href="api.html#authentication" class="md-nav__link">Authentication</a>
       
     
     </li>
     <li class="md-nav__item">
     
     
-      <a href="api.html#server-management-api" class="md-nav__link">Server Management API</a>
+      <a href="api.html#format-of-calls-for-curl" class="md-nav__link">Format of Calls for Curl</a>
       
     
     </li>
     <li class="md-nav__item">
     
     
-      <a href="api.html#file-server-api" class="md-nav__link">File Server API</a>
+      <a href="api.html#api-documentation" class="md-nav__link">API Documentation</a>
       
     
     </li></ul>
@@ -709,7 +660,7 @@ Discord: <a class="reference external" href="https://discord.gg/zRb9Vfhk8A">http
     <div class="md-footer-nav">
       <nav class="md-footer-nav__inner md-grid">
           
-            <a href="api.html" title="API Usage"
+            <a href="api.html" title="API Reference"
                class="md-flex md-footer-nav__link md-footer-nav__link--prev"
                rel="prev">
               <div class="md-flex__cell md-flex__cell--shrink">
@@ -718,7 +669,7 @@ Discord: <a class="reference external" href="https://discord.gg/zRb9Vfhk8A">http
               <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
                 <span class="md-flex__ellipsis">
                   <span
-                      class="md-footer-nav__direction"> Previous </span> API Usage </span>
+                      class="md-footer-nav__direction"> Previous </span> API Reference </span>
               </div>
             </a>
           

+ 24 - 73
docs/_build/html/usage.html

@@ -56,7 +56,7 @@
     <link rel="author" title="About these documents" href="about.html" />
     <link rel="index" title="Index" href="genindex.html" />
     <link rel="search" title="Search" href="search.html" />
-    <link rel="next" title="API Usage" href="api.html" />
+    <link rel="next" title="API Reference" href="api.html" />
     <link rel="prev" title="Client Installation" href="client-installation.html" />
   
    
@@ -214,7 +214,7 @@
     <li class="md-nav__item">
     
     
-      <a href="about.html#introduction" class="md-nav__link">Introduction</a>
+      <a href="about.html#what-is-netmaker" class="md-nav__link">What is Netmaker?</a>
       
     
     </li>
@@ -228,7 +228,7 @@
     <li class="md-nav__item">
     
     
-      <a href="about.html#use-cases" class="md-nav__link">Use Cases</a>
+      <a href="about.html#use-cases-for-netmaker" class="md-nav__link">Use Cases for Netmaker</a>
       
     
     </li></ul>
@@ -245,6 +245,20 @@
       <a href="architecture.html#core-concepts" class="md-nav__link">Core Concepts</a>
       
     
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="architecture.html#components" class="md-nav__link">Components</a>
+      
+    
+    </li>
+    <li class="md-nav__item">
+    
+    
+      <a href="architecture.html#technical-process" class="md-nav__link">Technical Process</a>
+      
+    
     </li>
     <li class="md-nav__item">
     
@@ -416,96 +430,33 @@
     <li class="md-nav__item">
     
     
-      <a href="api.html" class="md-nav__link">API Usage</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#authentication" class="md-nav__link">Authentication</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#format-of-calls-for-curl" class="md-nav__link">Format of Calls for Curl</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#api-documentation" class="md-nav__link">API Documentation</a>
+      <a href="api.html" class="md-nav__link">API Reference</a>
       <ul class="md-nav__list"> 
     <li class="md-nav__item">
     
     
-      <a href="api.html#networks-api" class="md-nav__link">Networks API</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#networks-api-call-examples" class="md-nav__link">Networks API Call Examples</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#access-keys-api" class="md-nav__link">Access Keys API</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#access-keys-api-call-examples" class="md-nav__link">Access Keys API Call Examples</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#nodes-api" class="md-nav__link">Nodes API</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#nodes-api-call-examples" class="md-nav__link">Nodes API Call Examples</a>
+      <a href="api.html#api-usage" class="md-nav__link">API Usage</a>
       
     
     </li>
     <li class="md-nav__item">
     
     
-      <a href="api.html#users-api" class="md-nav__link">Users API</a>
-      
-    
-    </li>
-    <li class="md-nav__item">
-    
-    
-      <a href="api.html#users-api-calls-examples" class="md-nav__link">Users API Calls Examples</a>
+      <a href="api.html#authentication" class="md-nav__link">Authentication</a>
       
     
     </li>
     <li class="md-nav__item">
     
     
-      <a href="api.html#server-management-api" class="md-nav__link">Server Management API</a>
+      <a href="api.html#format-of-calls-for-curl" class="md-nav__link">Format of Calls for Curl</a>
       
     
     </li>
     <li class="md-nav__item">
     
     
-      <a href="api.html#file-server-api" class="md-nav__link">File Server API</a>
+      <a href="api.html#api-documentation" class="md-nav__link">API Documentation</a>
       
     
     </li></ul>
@@ -731,12 +682,12 @@
             </a>
           
           
-            <a href="api.html" title="API Usage"
+            <a href="api.html" title="API Reference"
                class="md-flex md-footer-nav__link md-footer-nav__link--next"
                rel="next">
             <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title"><span
                 class="md-flex__ellipsis"> <span
-                class="md-footer-nav__direction"> Next </span> API Usage </span>
+                class="md-footer-nav__direction"> Next </span> API Reference </span>
             </div>
             <div class="md-flex__cell md-flex__cell--shrink"><i
                 class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>

+ 32 - 18
docs/about.rst

@@ -2,31 +2,45 @@
 About
 ===============
 
-Confused about what Netmaker is? That's ok, you're in the right place. Networking is hard, and you're not alone, but Netmaker is here to make your network nightmare into a dreamy breeze.
+What is Netmaker?
+==================
 
-Introduction
-===============
+Netmaker is a tool for creating and managing virtual overlay networks. If you have at least two machines with internet access which you need to connect with a secure tunnel, Netmaker is for you. If you have thousands of servers spread across multiple locations, data centers, or clouds, Netmaker is also for you. Netmaker connects machines securely, wherever they are.
 
-Netmaker is a tool for creating and managing virtual overlay networks. If you have servers spread across multiple locations, data centers, or clouds, this platform will make life easier. 
+.. image:: mesh-diagram.png
+   :width: 50%
+   :alt: WireGuard Mesh
+   :align: center
 
-Netmaker takes all those machines and puts them into a single, secure, flat network so that they can all talk to each other easily and securely. It's like a VPC but of arbitrary computers. From the machine's perspective, they're in the same room with their buddy machines, even if they're spread all over the world.
+Netmaker takes those machines and creates a flat network so that they can all talk to each other easily and securely. 
+If you're familiar with AWS, it's like a VPC but made up of arbitrary computers. From the machine's perspective, all these other machines are in the same neighborhood, even if they're spread all over the world.
 
-Netmaker is similar to Tailscale, ZeroTier, or Nebula. What makes Netmaker different is its speed and flexibility. NNetmaker is faster because it uses kernel WireGuard. It's more dynamic because the server and agents are fully configurable, and let you do all sorts on things to meet special use cases.
+Netmaker has many similarities to Tailscale, ZeroTier, and Nebula. What makes Netmaker different is its speed and flexibility. Netmaker is faster because it uses kernel WireGuard. It is more dynamic because the server and agents are fully configurable, which lets you handle all sorts of different use cases.
 
 How Does Netmaker Work?
 =======================
 
-Netmaker is two things: The admin panel/server, and the netclient. You interact with the admin panel, creating networks and managing machines/access. The server just holds onto configurations that will be loaded by the machines. The machines use the netclient to retrieve the configs and set WireGuard, a special encrypted tunneling tool. These configs tell each machine how to reach each of the other machines.
+Netmaker relies on WireGuard to create tunnels between machines. At its core, Netmaker is managing WireGuard across machines to create sensible networks. Technically, Netmaker is two things:
+
+- the admin server, called Netmaker
+- the agent, called Netclient
+
+As the network manager, you interact with the server to create and manage networks and devices. The server holds configurations for these networks and devices, which are retrieved by the netclients (agent). 
+
+The netclient is installed on any machine you would like to add to a given network, whether that machine is a VM, Server, or IoT device. The netclient reaches out to the server, and the server tells it how it should configure the network. By doing this across many machines simultaneously, we create a dynamic, fully configurable virtual networks.
+
+The Netmaker server does not typically route traffic. Otherwise, this would be a hub-and-spoke model, which is very slow. Instead, Netmaker just tells the machines on the network how they can reach each other directly. This is called a *full mesh* network and is much faster. Even if the server goes down, as long as none of the existing machines change substantially, your network will still run just fine.
+
+Use Cases for Netmaker
+=============================
 
-Traffic is only routed through the main server if you want it to. The server can crash and everything will run fine until machine configs change (you just wont be able to add/remove/update machines from the network).
+There are many use cases for Netmaker. In fact, you could probably be using it right now. This list is not all-encompassing, but provides a sample of how you might want to use Netmaker. Guided setup for many of these use cases can be found in the :doc:`Using Netmaker <./usage>` documentation. 
 
-Use Cases
-=========
- 1. Create a flat, secure network between multiple/hybrid cloud environments
- 2. Integrate central and edge services
- 3. Provide access to IoT devices, remote locations, or client sites.
- 3. Secure a home or office network while providing remote connectivity
- 4. Manage cryptocurrency proof-of-stake machines
- 6. Provide an additional layer of security on an existing network
- 7. Encrypt Kubernetes inter-node communications
- 8. Secure site-to-site connections
+ 0. Automate creation of a WireGuard mesh network
+ 1. Create a flat, secure network between cloud environments and data centers
+ 2. Provide secure access to IoT devices, remote servers, and client sites.
+ 3. Secure a home or office network
+ 4. Add a layer of encryption to an existing network 
+ 5. Secure site-to-site connections
+ 6. Manage cryptocurrency proof-of-stake machines 
+ 7. Create a dynamic and secure Kubernetes underlay network

+ 1 - 1
docs/api.rst

@@ -131,7 +131,7 @@ Nodes API Call Examples
 Users API
 -----------------------
   
-**Note:** Only able to create Admin user at this time. The "user" is only used by the [user interface](https://github.com/gravitl/netmaker-ui) to authenticate the  single  admin user.
+**Note:** Only able to create Admin user at this time. The "user" is only used by the `user interface <https://github.com/gravitl/netmaker-ui>`_ to authenticate the  single  admin user.
 
 **Get User:** `/api/users/{username}`, `GET`  
   

+ 136 - 12
docs/architecture.rst

@@ -2,32 +2,153 @@
 Architecture
 ===============
 
+.. image:: nm-diagram.jpg
+   :width: 45%
+   :alt: Netmaker Architecture Diagram
+   :align: center
+    
+
+*Pictured Above: A diagram of Netmaker's Architecture.*
+
 
 Core Concepts
 ==============
 
+Familiarity with several core concepts will help when you encounter them later on in the documentation.
+
 WireGuard
 ----------
 
+WireGuard is a relatively new but very important technology which was recently added to the Linux kernel. WireGuard creates very fast but simple encrypted tunnels between devices. From the `WireGuard <https://www.wireguard.com/>`_ website, "it might be regarded as the most secure, easiest to use, and simplest VPN solution in the industry."
+
+Previous solutions like OpenVPN and IPSec are considerably more heavy and complex, while being less performant. All existing VPN tunnelling solutions will cause a significant increase in your network latency. WireGuard is the first to achieve near over-the-line network speeds, meaning you see no signigifant performance impact.  With the release of WireGuard, there is little reason to use any other existing tunnel encryption technology.
+
+Mesh Network
+-------------
+
+When we refer to a mesh network in these documents we are typically referring to a "full mesh."
+
+.. image:: mesh.png
+   :width: 33%
+   :alt: Full Mesh Network Diagram
+   :align: center
+
+
+A full `mesh network <https://www.bbc.co.uk/bitesize/guides/zr3yb82/revision/2>`_ exists where each machine is able to directly talk to every other machine on the network. For example, on your home network, behind your router, all the computers are likely given private addresses and can reach each other directly.
+
+This is in contrast to a hub-and-spoke network, where each machine must first pass its traffic through a relay server before it can reach other machines.
+
+In certain situations you may either want or need a *partial mesh* network, where only some devices can reach each other directly, and other devices must route their traffic through a relay/gateway. Netmaker can use this model in some use cases where it makes sense.
+
+Mesh networks are generally faster than other topologies, but are also more complicated to set up. WireGuard on its own gives you the means to create encrypted tunnels between devices, but it does not provide a method for setting up a full network. This is where Netmaker comes in.
+
 Netmaker
+---------
+
+Netmaker is a platform built off of WireGuard which enables users to create mesh networks between their devices. Netmaker can create both full and partial mesh networks depending on the use case.
+
+When we refer to Netmaker in aggregate, we are typically referring to Netmaker and the netclient, as well as other supporting services such as CoreDNS, MongoDB, and UI webserver.
+
+From an end user perspective, they typically interact with the Netmaker UI, or even just run the install script for the netclient on their devices. The other components run in the background invisibly. 
+
+Netmaker does a lot of work to set configurations for you, so that you don't have to. This includes things like WireGuard ports, endpoints, public IPs, keys, and peers. Netmaker works to abstract away as much of the network management as possible, so that you can just click to create a network, and click to add a machine to a network. That said, every machine (node) is different, and may require special configuration. That is why, while Netmaker sets practical default settings, everything within Netmaker is fully configurable.
+
+Node
+------
+
+A machine in a Netmaker network, which is managed by the Netclient, is referred to as a Node, as you will see in the UI. A Node can be a VM, a bare metal server, a desktop computer, an IoT device, or any other number of internet-connected machines on which the netclient is installed. A node is simply an endpoint in the network, which can send traffic to all the other nodes, and recieve traffic from all of the other nodes.
+
+SystemD
+-------
+
+SystemD is a system service manager for a wide array of Linux operating systems. Not all Linux distributions have adopted systemd, but, for better or worse, it has become a fairly common standard in the Linux world. That said, any non-Linux operating system will not have systemd, and many Linux/Unix distributionshave alternative system service managers.
+
+Netmaker's netclient, the agent which controls networking on all nodes, relies heavily on systemd as of version 0.3. This reliance is being reduced but is currently a core dependency, causing most of the limitations and incompatibilities. As Netmaker evolves, systemd will become just one of the possible service management options, allowing the netclient to be run on a wider array of devices.
+
+
+Components
+===========
+
+Netmaker consists of several core components, which are explained in high-level technical detail below.
+
+Netmaker Server
+------------------
+
+The Netmaker server is, at its core, a golang binary. Source code can be found `on GitHub <https://github.com/gravitl/netmaker>`_. The binary, by itself can be compiled for most systems. If you need to run the Netmaker server on a particular system, it likely can be made to work. In typical deployments, it is run as a Docker container. It can also be run as a systemd service as outlined in the non-docker install guide.
+
+The Netmaker server acts as an API to the front end, and as a GRPC server to the machines in the network. GRPC is much faster and more efficient than standard API calls, which increases the speed of transactions. For this reason, the Netmaker server exposes two ports: The default for the API is 8081, and the default for GRPC is 50051. Either the API or the GRPC server can be disabled on any given Netmaker instance can be disabled, allowing you to deploy two different servers for managing the API (which is largely for the admin's use) and GRPC (which is largely for the nodes' use).
+
+Most server settings are configurable via a config file, or by environment variables (which take precedence). If the server finds neither of these, it sets sensible defaults, including things like the server's reachable IP, ports, and which "modes" to run in.
+
+These modes include client mode and dns mode. Either of these can be disabled but are enabled by default. Client mode allows you to treat the Netmaker host machine (operating system) as a network Node, installing the netclient and controlling the host network. DNS mode has the server write config settings for CoreDNS, a separate component and nameserver, which picks up the config settings to manage node DNS.
+
+The Netmaker server interacts with (as of v0.3) a MongoDB instance, which holds information about nodes, networks, users, and other important data. This data is configuration data. For the most part, Netmaker serves configuration data to Nodes, telling them how they should configure themselves. The Netclient is the agent that actually does that configuration.
+
+
+Netclient
+----------------
+
+The netclient is, at its core, a golang binary. Source code can be found in the netclient folder of the Netmaker `GitHub Repository <https://github.com/gravitl/netmaker/tree/master/netclient>`_. The binary, by itself, can be compiled for most systems. However, this binary is designed to manage a certain number of Operating Systems. As of version 0.3, it requires systemd in order to manage the host system appropriately. It may be installable, and it may even make the machine a part of the mesh network, but it will not function in entirely (see Compatible Systems for more info) without systemd.
+
+The netclient is installed via a simple bash script, which pulls the latest binary and runs install command.
+
+The install command registers the machine with the Netmaker server using sensible defaults, which can be overridden with a config file or environment variables. Assuming the netclient has a valid key (or the network allows manual node signup), it will be registered in the Netmaker network, which will return configuration details about how to set up the local network. 
+
+The netclient then sets itself up in systemd, and configures WireGuard. At this point it should be part of the network.
+
+On a periodic basis (systemd timer), the netclient performs a "check in." It will authenticate with the server, and check to see if anything has changed in the network. It will also post changes about its own local configuration if there. If there has been a change, the server will return new configurations and the netclient will reconfigure the network.
+
+The check in process is what allows Netmaker to create dynamic mesh networks. As nodes are added to, removed from, and modified on the network, other nodes are notified, and make appropriate changes.
+
+
+MongoDB
 --------
 
+As of v0.3, Netmaker uses MongoDB as its database, and interacts with a MongoDB instance to store and retrieve information about nodes, networks, and users. Netmaker is rapidly evolving, and MongoDB provides a flexible database structure that accelerates development. However, MongoDB is also the heaviest component of Netmaker (high cpu/memory consumption), and is set to be replaced by a lighter-weight, SQL-based database in the future.
+
 Netmaker UI
-------------
+---------------
+
+The Netmaker UI is a ReactJS-based static website which can be run on top of standard webservers such as Apache and Nginx. Source code can be found `here <https://github.com/gravitl/netmaker-ui>`_. In a typical configuration, the Netmaker UI is run on Nginx as a Docker container.
+
+Netmaker can be used in its entirety without the UI, but the UI makes things a lot easier for most users. It has a sensible flow and layout for managing Networks, Nodes, Access Keys, and DNS.
 
-Netclient
----------
 
 CoreDNS
 --------
 
-SystemD
--------
+v0.3 introduced the concept of private DNS management for nodes. This requires a nameserver, and CoreDNS is the chosen nameserver. CoreDNS is lightweight and extensible. CoreDNS loads dns settings from a simple file, managed by Netmaker, and serves out DNS info for managed nodes. DNS can be tricky, and DNS management is currently only supported on a small set of devices, specifically those running systemd-resolved. However, the Netmaker CoreDNS instance can be added manually as a nameserver to other devices. DNS mode can also be turned off.
+
+Worth considering is that CoreDNS requires port 53 on the Netmaker host system, which may cause conflicts depending on your operating system. This is explained in the :doc:`Server Installation <./server-installation>` guide.
+
+
+Technical Process
+====================
 
-Compatible Systems
-==================
+Below is a high level, step-by-step overview of the flow of communications within Netmaker (assuming Netmaker has already been installed):
 
-To manage a server automatically, Netmaker requires **systemd-based linux.** Compatible systems include:
+1. Admin creates a new network with a subnet, for instance 10.10.10.0/24
+2. Admin creates an access key for signing up new nodes
+3. Both of the above requests are routed to the server via an API call from the front end
+4. Admin runs the netclient install script on any given node (machine).
+5. Netclient decodes key, which contains the GRPC server location and port
+6. Netclient retrieves/sets local information, including open ports for WireGuard, public IP, and generating key pairs for peers
+7. Netclient reaches out to GRPC server with this information, authenticating via access key.
+8. Netmaker server verifies information and creates the node, setting default values for any missing information. 
+9. Timestamp is set for the network (see #16). 
+10. Netmaker returns settings as response to netclient. Some settings may be added or modified based on the network.
+11. Netclient recieves response. If successful, it takes any additional info returned from Netmaker and configures the local system/WireGuard
+12. Netclient sends another request to Netmaker's GRPC server, this time to retrieve the peers list (all other clients in the network).
+13. Netmaker sends back peers list, including current known configurations of all nodes in network.
+14. Netclient configures WireGuard with this information. At this point, the node is fully configured as a part of the network and should be able to reach the other nodes via private address.
+15. Netclient begins daemon (system timer) to run check in's with the server. It awaits changes, reporting local changes, and retrieving changes from any other nodes in the network.
+16. Other netclients on the network, upon checking in with the Netmaker server, will see that the timestamp has updated, and they will retrieve a new peers list, completing the update cycle.
+
+
+Compatible Systems for Netclient
+==================================
+
+To manage a node automatically, the Netmaker client (netclient) requires **systemd-based linux.** Compatible systems include:
         - Fedora
         - Ubuntu
         - Debian
@@ -39,14 +160,17 @@ To manage a server automatically, Netmaker requires **systemd-based linux.** Com
         - CentOS
         - CoreOS
       
-To manage DNS (optional), the server must have systemd-resolved. Systems that have this enabled include:
+To manage DNS (optional), the node must have systemd-resolved. Systems that have this enabled include:
         - Arch
         - Debian
         - Ubuntu
         - SUSE
 
-
-In future releases, we will support other platforms such as Windows, MacOS, iOS, Android, and more. 
-
 Limitations
 ===========
+
+Install limitations mostly include platform-specific limitations, such as needing systemd or systemd-resolved (see above). In addition the Netmaker platform has some additional limitations:
+
+- **Double NAT**: Netmaker is currently unable to route traffic for devices behind a "double NAT".
+- **CGNAT**: Netmaker is currently unable to route traffic for for devices behind a "carrier-grade NAT".
+- **Windows/iPhone/Android**: To reiterate the systemd limitation, Netmaker is not currently configured to support "end user" devices such as Windows desktops and phones generally. In v0.4, Netmaker will introduce external device gateways to allow this traffic (and many other sorts of devices).

+ 3 - 6
docs/conduct.rst

@@ -26,14 +26,11 @@ include:
 
 Examples of unacceptable behavior by participants include:
 
-* The use of sexualized language or imagery and unwelcome sexual attention or
-advances
+* The use of sexualized language or imagery and unwelcome sexual attention or advances
 * Trolling, insulting/derogatory comments, and personal or political attacks
 * Public or private harassment
-* Publishing others' private information, such as a physical or electronic
-  address, without explicit permission
-* Other conduct which could reasonably be considered inappropriate in a
-  professional setting
+* Publishing others' private information, such as a physical or electronic address, without explicit permission
+* Other conduct which could reasonably be considered inappropriate in a professional setting
 
 Our Responsibilities
 ====================

+ 1 - 2
docs/conf.py

@@ -30,8 +30,7 @@ release = '0.3.5'
 # Add any Sphinx extension module names here, as strings. They can be
 # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
 # ones.
-extensions = [
-]
+extensions = ['sphinx.ext.intersphinx']
 
 # Add any paths that contain templates here, relative to this directory.
 templates_path = ['_templates']

+ 1 - 1
docs/index.rst

@@ -21,7 +21,7 @@ Welcome to the Netmaker Documentation
 
 Netmaker is a platform for creating and managing fast, secure, and dynamic virtual overlay networks using WireGuard.
 
-This documentation covers Netmaker's installation, usage, troubleshooting, and customization, as well as reference documents for the API, UI and Agent configuration. All of the `source code <https://github.com/gravitl/netmaker>`_ for Netmaker is on GitHub.
+This documentation covers Netmaker's :doc:`installation <./server-installation>`, :doc:`usage <./usage>`, :doc:`troubleshooting <./support>`, and customization, as well as reference documents for the :doc:`API <./api>`, UI and Agent configuration. All of the `source code <https://github.com/gravitl/netmaker>`_ for Netmaker is on GitHub.
 
 :raw-html:`<br />`
 

BIN
docs/mesh.png


BIN
docs/nm-diagram.jpg


Some files were not shown because too many files changed in this diff