This guide covers advanced usage of Netmaker. If you are just looking to get started quickly, check out the Quick Start in the README.
Netmaker settings can be set via Environment Variables or Config file. There are also a couple of runtime arguments that can optionally be set.
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.
Stored as config/environments/*.yaml. Default used is dev.yaml
server:
mongoconn: (see ENV values above for explanation. ENV values override.)
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.
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.
Install MongoDB on your server. For Ubuntu: sudo apt install -y mongodb
. For more advanced installation or other operating systems, see the MongoDB documentation.
Create a user:
mongo admin
db.createUser({ user: "mongoadmin" , pwd: "mongopass", roles: ["userAdminAnyDatabase", "dbAdminAnyDatabase", "readWriteAnyDatabase"]})
sudo journalctl -u netmaker
sudo systemctl restart netmaker
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
Unzip: sudo unzip /usr/share/nginx/html/netmaker-ui.zip -d /usr/share/nginx/html
Copy Config to Nginx: sudo cp /usr/share/nginx/html/nginx.conf /etc/nginx/conf.d/default.conf
Modify Default Config Path: sudo sed -i 's/root \/var\/www\/html/root \/usr\/share\/nginx\/html/g' /etc/nginx/sites-available/default
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'
Start Nginx: sudo systemctl start nginx
On each machine you would like to add to the network, do the following:
sudo apt install wireguard-tools
sysctl -w net.ipv4.ip_forward=1
sudo curl -sfL https://raw.githubusercontent.com/gravitl/netmaker/v0.2/netclient-install.sh | KEY=YOUR_TOKEN sh -
sudo netclient -c install -t YOUR_TOKEN
This will install [email protected] 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.
Back End Compilation The backend can be compiled by running "go build" from the root of the repository, which will create an executable named "netmaker."
Client Compilation Similarly, "go build" can be run from the netclient directory to produce a netclient executable.
Protoc command for GRPC Compilation: Whenever making changes to grpc/node.proto, you will need to recompile the grpc. This can be achieved by running the following command from the root of the repository.
protoc --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative grpc/node.proto
Build binary: go build ./
Unit Testing When making changes to Netmaker, you may wish to create nodes, networks, or keys for testing. Bash scripts have been created under the "test" directory (*.sh) which run curl commands that generate sample nodes, networks, and keys that can be used for testing purposes.
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."