Advanced Options
This section provides in-depth installation and configuration options for Netmaker, including the Netmaker Server, Netmaker UI, MQ Broker, and Reverse Proxy.
System Compatibility
Netmaker requires elevated privileges on the host machine to perform network operations. Netmaker must be able to modify interfaces and set firewall rules using iptables.
Typically, Netmaker is run inside of containers, using Docker or Kubernetes.
Netmaker can be run without containers, but this is not recommended. You must run the Netmaker binary, CoreDNS binary, database, and a web server directly on the host.
Each of these components has its own individual requirements and the management complexity increases exponentially by running outside of containers.
For first-time installs, we recommend the quick install guide. The following documents are meant for more advanced installation environments and are not recommended for most users. However, these documents can be helpful in customizing or troubleshooting your own installation.
Server Configuration Reference
Netmaker sets its configuration in the following order of precedence:
In most situations, if you wish to modify a server setting, set it in the netmaker.env file, then run:
docker kill netmaker
docker-compose up -d
Variable Description
NM_EMAIL Default: “” Description: Email used for SSL certificates
NM_DOMAIN Default: “” Description: Public IP of machine
SERVER_HOST Default: (Server detects the public IP address of machine) Description: The public IP of the server where the machine is running.
MASTER_KEY Default: “secretkey” Description: The admin master key for accessing the API. Change this in any production installation.
MQ_USERNAME Default: “” Description: The username to set for MQ access
MQ_PASSWORD Default: “” Description: The password to set for MQ access
INSTALL_TYPE Default: ce Description: The installation type to run on the server. “ce” will run community edition. “pro” will run professional edition if you have an on-prem tenant.
LICENSE_KEY Default: “” Description: The license key from your on-prem tenant needed to validate your professional installation
NETMAKER_TENANT_ID Default: “” Description: The ID of your on-prem tenant used to validate your professional installation.
SERVER_IMAGE_TAG Default: Description: The tag used for the server docker image. You can set it to “latest” to get the most up to date version. To stay on a certain version set the tag to the version you would like. ex: v0.24.2. if using a pro image, add “-ee” after the version. ex: v0.24.2-ee.
UI_IMAGE_TAG Default: “” Description: The tag used for the netmaker ui docker image. You can set it to “latest” to get the most up to date version. To stay on a certain version set the tag to the version you would like. ex: v0.24.2.
METRICS_EXPORTER Default: off Description: This is a pro feature that exports metrics to the netmaker server.
PROMETHEUS Default: off Description: This is a pro feature. Prometheus is an open-source systems monitoring and alerting toolkit originally built at SoundCloud. It is used in our metrics collection.
DNS_MODE Default: on Description: Enables DNS Mode, meaning all nodes will set hosts file for private dns settings.
NETCLIENT_AUTO_UPDATE Default: enabled Description: Enable/Disable auto update of netclient.
API_PORT Default: 8081 Description: The HTTP API port for Netmaker. Used for API calls / communication from front end. If changed, need to change port of BACKEND_URL for netmaker-ui.
EXPORTER_API_PORT Default: 8085 Description: The API port to set for the metrics exporter.
CORS_ALLOWED_ORIGIN Default: “*” Description: The “allowed origin” for API requests. Change to restrict where API requests can come from with comma-separated URLs. ex: https://dashboard.netmaker.domain1.com,https://dashboard.netmaker.domain2.com
DISPLAY_KEYS Default: on Description: Show keys permanently in UI (until deleted) as opposed to 1-time display.
DATABASE Default: sqlite Description: Database to use - sqlite, postgres, or rqlite
SERVER_BROKER_ENDPOINT Default: ws://mq:1883 Description: The address of the mq server. If running from docker compose it will be “mq”. Otherwise, need to input address. If using “host networking”, it will find and detect the IP of the mq container. For EMQX websockets use SERVER_BROKER_ENDPOINT=ws://mq:8083/mqtt
VERBOSITY Default: 1 Description: Logging verbosity level - 1, 2, 3, or 4
REST_BACKEND Default: on Description: Enables the REST backend (API running on API_PORT at SERVER_HTTP_HOST).
DISABLE_REMOTE_IP_CHECK Default: off Description: If turned “on”, Server will not set Host based on remote IP check. This is already overridden if SERVER_HOST is set.
TELEMETRY Default: on Description: Whether or not to send telemetry data to help improve Netmaker. Switch to “off” to opt out of sending telemetry.
ALLOWED_EMAIL_DOMAINS Default: “*” Description: only mentioned domains will be allowed to signup using oauth, by default all domains are allowed
AUTH_PROVIDER Default: “” Description: You can use azure-ad, github, google, oidc
CLIENT_ID Default: “” Description: The client id of your oauth provider.
CLIENT_SECRET Default: “” Description: The client secret of your oauth provider.
FRONTEND_URL Default: “” Description: https://dashboard.
AZURE_TENANT Default: “” Description: only for azure, you may optionally specify the tenant for the OAuth
OIDC_ISSUER Default: “” Description: https://oidc.yourprovider.com/ - URL of oidc provider
JWT_VALIDITY_DURATION Default: 43200 Description: Duration of JWT token validity in seconds
RAC_AUTO_DISABLE Default: false Description: Auto disable a user’s connected clients based on JWT token expiration
CACHING_ENABLED Default: true Description: if turned on data will be cached on to improve performance significantly (IMPORTANT: If HA set to false )
ENDPOINT_DETECTION Default: true Description: if turned on netclient checks if peers are reachable over private/LAN address, and choose that as peer endpoint
SMTP_HOST Default: "" Description: The address of the host SMTP service
SMTP_PORT Default: 587 Description: The port of the SMTP service
EMAIL_SENDER_ADDR Default: "" Description: The email address to send from
EMAIL_SENDER_USER Default: “” Description: The sender’s SMTP user. If empty, EMAIL_SENDER_ADDR would be used
EMAIL_SENDER_PASSWORD Default: "" Description: The password for the email sender
Starting from version v0.90.0, the following parameters are now configured directly from the Netmaker Settings interface:
Allowed Email Domains
Dashboard JWT Validity Duration
Client JWT Validity Duration
Restrict Simultaneous Network Connections
Managed DNS
DNS Base Domain
LAN Routing
Netclient Auto Update
STUN Servers
Verbosity Level
Telemetry
Metrics Port
Metrics Collection Interval
Email Configuration Parameters
Compose File - Annotated
All environment variables and options are enabled in this file. It is the equivalent to running the “full install” from the above section. However, all environment variables are included and are set to the default values provided by Netmaker (if the environment variable was left unset, it would not change the installation). Comments are added to each option to show how you might use it to modify your installation.
As of v0.18.0, netmaker now uses a stun server (Session Traversal Utilities for NAT). This provides a tool for communications protocols to detect and traverse NATs that are located in the path between two endpoints. By default, netmaker uses publicly available STUN servers. You are free to set up your own stun servers and use those to augment/replace the public STUN servers. Update the STUN_LIST to list the STUN servers you wish to use. Two resources for installing your own STUN server are:
https://ourcodeworld.com/articles/read/1175/how-to-create-and-configure-your-own-stun-turn-server-with-coturn-in-ubuntu-18-04
https://cloudkul.com/blog/how-to-install-turn-stun-server-on-aws-ubuntu-20-04/
There are also some environment variables that have been changed, or removed. Your updated docker-compose and .env files should look like this.
The corresponding example .env entries:
Caddyfile example:
Available docker-compose files
The default options for docker-compose can be found here: https://github.com/gravitl/netmaker/tree/master/compose
The following is a brief description of each:
docker-compose.yml — This maintains the most recommended setup at the moment, using the caddy proxy. (https://github.com/gravitl/netmaker/blob/master/compose/docker-compose.yml)
docker-compose.pro.yml — This is the compose file needed for Netmaker Professional. You will need a licence and tenant id from Netmaker’s licence dashboard. (https://github.com/gravitl/netmaker/blob/master/compose/docker-compose.pro.yml)
Setting a Netmaker server up for emailing
Starting from version v0.90.0, the Email Configuration Parameters are now configured directly from the Settings interface.
Since v0.25.0, the Netmaker server can now send email notifications to users, when relevant actions are effected on the server (e.g., inviting a user to join the server).
To enable emailing, the server administrator must correctly provide the below environment variables (in the netmaker.env file), and restart the server if needed:
SMTP_HOST
SMTP_PORT
EMAIL_SENDER_ADDR
EMAIL_SENDER_USER
EMAIL_SENDER_PASSWORD
Refer to the Variable Description section above for more information on what values to assign.
EMQX
Netmaker offers an EMQX option as a broker for your server. The main configuration changes between mosquitto and EMQX occur in the docker-compose.yml, netmaker.env and the Caddyfile.
You can find the EMQX docker-compose file in the netmaker repo: https://github.com/gravitl/netmaker/blob/master/compose/docker-compose-emqx.yml
You should not need to make any changes to the docker-compose-emqx.yml file. Just download this file using the command provided below in the same directory as your netmaker.env file — it will grab information from netmaker.env:
In your Caddyfile, change the mq block to:
Update netmaker.env:
Replace:
with:
In your docker-compose.yml, update BROKER_ENDPOINT and add broker type entries:
If using a professional server, update netmaker-exporter in docker-compose.override.yml:
Bring up the services:
Your docker logs mq should show listeners similar to:
You can view your EMQX dashboard at http://<serverip>:18083/. Sign-in credentials are the EMQX_DASHBOARD__DEFAULT_USERNAME and EMQX_DASHBOARD__DEFAULT_PASSWORD located in your netmaker.env file.
Nginx Reverse Proxy Setup with HTTPS
The Swag Proxy (https://github.com/linuxserver/docker-swag) makes it easy to generate a valid SSL certificate for the config below. Here is the documentation: https://docs.linuxserver.io/general/swag
An example config for Netmaker as a subdomain (adapted from swag):
./netmaker.subdomain.conf:
Nginx Proxy Manager Setup
To use Netmaker with Nginx Proxy Manager, add three proxy hosts, one for each subdomain used by Netmaker. Each subdomain should have SSL enabled and be configured as follows:
api.netmaker.example.com:
Forward Hostname/IP: netmaker
Forward Port: 8081
dashboard.netmaker.example.com:
Forward Hostname/IP: netmaker-ui
Forward Port: 80
grpc.netmaker.example.com:
Forward Hostname/IP: netmaker
Forward Port: 50051
Custom Locations:
Add location /
Forward Hostname/IP: netmaker
Forward Port: 50051
Custom config: grpc_pass netmaker:50051;
A cleaned-up config generated by Nginx Proxy Manager (does not include SSL configuration):
Security Settings
It can be useful to secure your web dashboard behind a firewall while keeping the API available for nodes. Below are examples for Caddy and Traefik reverse proxies.
For Caddy
In your /root/Caddyfile, in the Dashboard section where reverse_proxy http://netmaker-ui appears, add above it:
Replace the placeholders with your whitelist IP ranges.
For Traefik
In the labels section, add:
Update the router middlewares line from:
to:
Replace YOUR_IP_CIDR with the whitelist IP range (can be multiple ranges).
After changes are made for your reverse proxy, run:
This keeps your dashboard secure while keeping the API available without changing netmaker-ui ports.
Setup Netmaker on an IPv6-only Machine
This is not a guide on adding an overlay network (with IPv6) in Netmaker; see the setup page for that. This guide covers getting Netmaker to run on an IPv6-only machine.
About the install script nm-quick.sh
At the time of writing, the install script nm-quick.sh only supports IPv4. For installation, IPv4 needs to be enabled temporarily.
Add AAAA record for domain name resolution
Netmaker client communicates with the Netmaker server by domain name. Add an AAAA record to resolve the domain name to the server's IPv6 address.
Enable IPv6 support for Docker
Add/Edit the Docker daemon config at /etc/docker/daemon.json:
Restart the Docker daemon:
Create a new IPv6 Docker network, for example:
Here “ip6net” is the network name and “2001:0DB8::/112” is the network range.
Enable IPv6 support for Netmaker
Edit your docker-compose.yml and add the external network declaration at the bottom:
In docker-compose.yml, add the networks field for every service that should attach to the IPv6 network:
Restart Netmaker:
Was this helpful?