|
@@ -2,39 +2,23 @@
|
|
|
|
|
|
This guide covers advanced usage of Netmaker. If you are just looking to get started quickly, check out the Quick Start in the [README](../README.md).
|
|
This guide covers advanced usage of Netmaker. If you are just looking to get started quickly, check out the Quick Start in the [README](../README.md).
|
|
|
|
|
|
-## Index
|
|
|
|
-
|
|
|
|
- - Config
|
|
|
|
- - Server Config
|
|
|
|
- - Agent Config
|
|
|
|
- - UI Config
|
|
|
|
- - Creating Your Network
|
|
|
|
- - Creating Networks
|
|
|
|
- - Creating Keys
|
|
|
|
- - Creating Nodes
|
|
|
|
- - Managing Your Network
|
|
|
|
- - Cleaning up
|
|
|
|
- - Non-Docker Installation
|
|
|
|
- - Building
|
|
|
|
- - Testing
|
|
|
|
-
|
|
|
|
## Server Config
|
|
## Server Config
|
|
Netmaker settings can be set via Environment Variables or Config file. There are also a couple of runtime arguments that can optionally be set.
|
|
Netmaker settings can be set via Environment Variables or Config file. There are also a couple of runtime arguments that can optionally be set.
|
|
|
|
|
|
### Environment Variables
|
|
### Environment Variables
|
|
-**APP_ENV**: default=dev. Determines which environment file to use. Will look under config/environments/APP_ENV.yaml. For instance, you can have different environments for dev, test, and prod, and store different settinggs accordingly.
|
|
|
|
-**GRPC_PORT**: default=50051. The port for GRPC (node/client) communications
|
|
|
|
-**API_PORT**: default=8081. The port for API and UI communications
|
|
|
|
-**MASTER_KEY**: default=secretkey. The skeleton key used for authenticating with server as administrator.
|
|
|
|
-
|
|
|
|
-MongoDB Connection Env Vars:
|
|
|
|
-**MONGO_USER**:default=admin
|
|
|
|
-**MONGO_HOST**:default=password
|
|
|
|
-**MONGO_PASS**:default=localhost
|
|
|
|
-**MONGO_PORTS**:default=27017
|
|
|
|
-**MONGO_OPTS**:default=/?authSource=admin
|
|
|
|
-
|
|
|
|
-**BACKEND_URL**: default=nil. The address of the server. Used for setting token values for client/nodes. If not set, will run a command to retrieve the server URL.
|
|
|
|
|
|
+**APP_ENV**: default=dev. Determines which environment file to use. Will look under config/environments/APP_ENV.yaml. For instance, you can have different environments for dev, test, and prod, and store different settinggs accordingly.
|
|
|
|
+**GRPC_PORT**: default=50051. The port for GRPC (node/client) communications
|
|
|
|
+**API_PORT**: default=8081. The port for API and UI communications
|
|
|
|
+**MASTER_KEY**: default=secretkey. The skeleton key used for authenticating with server as administrator.
|
|
|
|
+
|
|
|
|
+MongoDB Connection Env Vars:
|
|
|
|
+**MONGO_USER**:default=admin
|
|
|
|
+**MONGO_HOST**:default=password
|
|
|
|
+**MONGO_PASS**:default=localhost
|
|
|
|
+**MONGO_PORTS**:default=27017
|
|
|
|
+**MONGO_OPTS**:default=/?authSource=admin
|
|
|
|
+
|
|
|
|
+**BACKEND_URL**: default=nil. The address of the server. Used for setting token values for client/nodes. If not set, will run a command to retrieve the server URL.
|
|
|
|
|
|
### Config File
|
|
### Config File
|
|
Stored as config/environments/*.yaml. Default used is dev.yaml
|
|
Stored as config/environments/*.yaml. Default used is dev.yaml
|
|
@@ -63,26 +47,61 @@ Stored as config/environments/*.yaml. Default used is dev.yaml
|
|
**clientmode**: (default=on) E.x.: `sudo netmaker --clientmode=off` Run the Server as a client (node) as well.
|
|
**clientmode**: (default=on) E.x.: `sudo netmaker --clientmode=off` Run the Server as a client (node) as well.
|
|
**defaultnet**: (default=on) E.x.: `sudo netmaker --defaultnet=off` Create a default network on startup.
|
|
**defaultnet**: (default=on) E.x.: `sudo netmaker --defaultnet=off` Create a default network on startup.
|
|
|
|
|
|
-### Running the Backend Components on Different Machines
|
|
|
|
-HTTP, GRPC, MongoDB
|
|
|
|
|
|
+## Client Config
|
|
|
|
|
|
-### Non-Docker Installation
|
|
|
|
|
|
+Client config files are stored under /etc/netclient per network as /etc/netclient/netconfig-< network name >
|
|
|
|
+**server:**
|
|
|
|
+ address: The address:port of the server
|
|
|
|
+ accesskey: The acceess key used to sign up with the server
|
|
|
|
+
|
|
|
|
+**node:**
|
|
|
|
+ name: a displayname for the node, e.g. "mycomputer"
|
|
|
|
+ interface: the network interface name, by default something like "nm-"
|
|
|
|
+ network: the netmaker network being attached to
|
|
|
|
+ password: the node's hashed password. Can be changed by putting a value in here and setting "postchanges" to "true"
|
|
|
|
+ macaddress: the mac address of the node
|
|
|
|
+ localaddress: the local network address
|
|
|
|
+ wgaddress: the wireguard private address
|
|
|
|
+ roamingoff: flag to update the IP address automatically based on network changes
|
|
|
|
+ islocal: whether or not this is a local or public network
|
|
|
|
+ allowedips: the allowedips addresses that other nodes will recieve
|
|
|
|
+ localrange: the local address range if it's a local network
|
|
|
|
+ postup: post up rules for gateway nodes
|
|
|
|
+ postdown: post down rules for gateway nodes
|
|
|
|
+ port: the wiregard port
|
|
|
|
+ keepalive: the default keepalive value between this and all other nodes
|
|
|
|
+ publickey: the public key other nodes will use to access this node
|
|
|
|
+ privatekey: the private key of the nodes (this field does nothing)
|
|
|
|
+ endpoint: the reachable endpoint of the node for routing, either local or public.
|
|
|
|
+ postchanges: either "true" or "false" (with quotes). If true, will post any changes you make to the remote server.
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+## Non-Docker Installation
|
|
|
|
+
|
|
|
|
+### MongoDB Setup
|
|
|
|
+1. Install MongoDB on your server. For Ubuntu: `sudo apt install -y mongodb`. For more advanced installation or other operating systems, see the [MongoDB documentation](https://docs.mongodb.com/manual/administration/install-community/).
|
|
|
|
+
|
|
|
|
+2. Create a user:
|
|
|
|
+`mongo admin`
|
|
|
|
+`db.createUser({ user: "mongoadmin" , pwd: "mongopass", roles: ["userAdminAnyDatabase", "dbAdminAnyDatabase", "readWriteAnyDatabase"]})`
|
|
|
|
|
|
### Server Setup
|
|
### Server Setup
|
|
- 1. Get yourself a linux server and make sure it has a public IP.
|
|
|
|
- 2. Deploy MongoDB `docker volume create mongovol && docker run -d --name mongodb -v mongovol:/data/db --network host -e MONGO_INITDB_ROOT_USERNAME=mongoadmin -e MONGO_INITDB_ROOT_PASSWORD=mongopass mongo --bind_ip 0.0.0.0 `
|
|
|
|
- 3. Pull this repo: `git clone https://github.com/gravitl/netmaker.git`
|
|
|
|
- 4. Switch to the directory and source the default env vars `cd netmaker && source defaultvars.sh`
|
|
|
|
- 5. Run the server: `go run ./`
|
|
|
|
-### Optional (For Testing): Create Networks and Nodes
|
|
|
|
-
|
|
|
|
- 1. Create Network: `./test/networkcreate.sh`
|
|
|
|
- 2. Create Key: `./test/keycreate.sh` (save the response for step 3)
|
|
|
|
- 3. Open ./test/nodescreate.sh and replace ACCESSKEY with value from #2
|
|
|
|
- 4. Create Nodes: `./test/nodescreate.sh`
|
|
|
|
- 5. Check to see if nodes were created: `curl -H "authorization: Bearer secretkey" localhost:8081/api/skynet/nodes | jq`
|
|
|
|
|
|
+ 1. **Run the install script:** sudo curl -sfL https://raw.githubusercontent.com/gravitl/netmaker/v0.2/netmaker-server.sh | sh -
|
|
|
|
+ 2. Check status: `sudo journalctl -u netmaker`
|
|
|
|
+2. If any settings are incorrect such as host or mongo credentials, change them under /etc/netmaker/config/environments/ENV.yaml and then run `sudo systemctl restart netmaker`
|
|
|
|
+
|
|
### UI Setup
|
|
### UI Setup
|
|
-Please see [this repo](https://github.com/gravitl/netmaker-ui) for instructions on setting up your UI.
|
|
|
|
|
|
+1. **Download UI asset files:** `sudo wget -O /usr/share/nginx/html/netmaker-ui.zip https://github.com/gravitl/netmaker-ui/releases/download/latest/netmaker-ui.zip`
|
|
|
|
+
|
|
|
|
+2. **Unzip:** `sudo unzip /usr/share/nginx/html/netmaker-ui.zip -d /usr/share/nginx/html`
|
|
|
|
+
|
|
|
|
+3. **Copy Config to Nginx:** `sudo cp /usr/share/nginx/html/nginx.conf /etc/nginx/conf.d/default.conf`
|
|
|
|
+
|
|
|
|
+4. **Modify Default Config Path:** `sudo sed -i 's/root \/var\/www\/html/root \/usr\/share\/nginx\/html/g' /etc/nginx/sites-available/default`
|
|
|
|
+
|
|
|
|
+5. **Change Backend URL:** `sudo sh -c 'BACKEND_URL=http://<YOUR BACKEND API URL>:PORT /usr/share/nginx/html/generate_config_js.sh >/usr/share/nginx/html/config.js'`
|
|
|
|
+
|
|
|
|
+6. **Start Nginx:** `sudo systemctl start nginx`
|
|
|
|
|
|
### Agent Setup
|
|
### Agent Setup
|
|
|
|
|
|
@@ -91,11 +110,11 @@ On each machine you would like to add to the network, do the following:
|
|
1. Confirm wireguard is installed: `sudo apt install wireguard-tools`
|
|
1. Confirm wireguard is installed: `sudo apt install wireguard-tools`
|
|
2. Confirm ipv4 forwarding is enabled: `sysctl -w net.ipv4.ip_forward=1`
|
|
2. Confirm ipv4 forwarding is enabled: `sysctl -w net.ipv4.ip_forward=1`
|
|
3. Create a key or enable manual node signup at the network level
|
|
3. Create a key or enable manual node signup at the network level
|
|
-4. Get the binary: `sudo wget 52.55.6.84:8081/meshclient/files/meshclient`
|
|
|
|
-5. Make it executable: `sudo chmod +x meshclient`
|
|
|
|
-6. Run the install command: `sudo ./meshclient -c install -g <network name> -s <server:port> -k <key value>`
|
|
|
|
|
|
+4. Run the install command generated by key create: `sudo curl -sfL https://raw.githubusercontent.com/gravitl/netmaker/v0.2/netclient-install.sh | KEY=YOUR_TOKEN sh -`
|
|
|
|
+4.a. For additional networks on the same machine, you can just run `sudo netclient -c install -t YOUR_TOKEN`
|
|
|
|
+4.b. For offline installs (no access to github), you can self-host a netclient file server on netmaker
|
|
|
|
|
|
-This will install netclient.service and netclient.timer in systemd, which will run periodically to call the netclient binary, which will check to see if there are any updates that it needs and update WireGuard appropriately.
|
|
|
|
|
|
+This will install netclient@.service and netclient-YOUR_NET.timer in systemd, which will run periodically to call the netclient binary, which will check to see if there are any updates that it needs and update WireGuard appropriately.
|
|
|
|
|
|
## BUILDING
|
|
## BUILDING
|
|
**Back End Compilation**
|
|
**Back End Compilation**
|
|
@@ -119,4 +138,3 @@ When making changes to Netmaker, you may wish to create nodes, networks, or keys
|
|
|
|
|
|
**Integration Testing**
|
|
**Integration Testing**
|
|
Similarly, several go scripts have been created under the test directory (*.go) to test out changes to the code base. These will be run automatically when PR's are submitted but can also be run manually using "go test."
|
|
Similarly, several go scripts have been created under the test directory (*.go) to test out changes to the code base. These will be run automatically when PR's are submitted but can also be run manually using "go test."
|
|
-
|
|
|