Netmaker

 __    __    ________    ________    __       __     ______     __    __    ________    _______  
|\_\  |\_\  |\ ______\  |\ ______\  |\_\     /\_\   /\ ____\   |\_\  /\_\  |\ ______\  |\ _____\ 
| XX\ | XX  | XXXXXXXX   \XXXXXXXX  | XX\   /  XX  |\ XXXXXX\  | XX /  XX  | XXXXXXXX  | XXXXXXX\
| XXX\| XX  | XX__         | XX     | XXX\ /  XXX  | XX__| XX  | XX/  XX   | XX__      | XX__| XX
| XXXX\ XX  | XX _\        | XX     | XXXX\  XXXX  | XX __\XX  | XX  XX    | XX _\     | XX __\XX
| XX\XX XX  | XXXXX        | XX     | XX\XX XX XX  | XXXXXXXX  | XXXXX\    | XXXXX     | XXXXXXX\
| XX \XXXX  | XX_____      | XX     | XX \XXX| XX  | XX  | XX  | XX \XX\   | XX_____   | XX  | XX
| XX  \XXX  | XX ____\     | XX     | XX  \X | XX  | XX  | XX  | XX  \XX\  | XX ____\  | XX  | XX
 \XX   \XX   \XXXXXXXX      \XX      \XX      \XX   \XX   \XX   \XX   \XX   \XXXXXXXX   \XX   \XX

                                                                                  SA6ANW 20240104

Netmaker
Wireguard VPN & Software Defined Networking

Med Netmaker Kan jag styra kommunikationen precis som jag vill. Det påminner om Tailscale men man har möjlighet att hosta det själv. Jag kör version 0.17.0.

För att köra netnetmaker Skapa en docker-compose.yaml med följande innehåll

version: "3.4"

services:
netmaker:
    container_name: netmaker
    image: gravitl/netmaker:v0.17.0
    cap_add: 
    - NET_ADMIN
    - NET_RAW
    - SYS_MODULE
    sysctls:
    - net.ipv4.ip_forward=1
    - net.ipv4.conf.all.src_valid_mark=1
    - net.ipv6.conf.all.disable_ipv6=0
    - net.ipv6.conf.all.forwarding=1
    restart: always
    volumes:
    - dnsconfig:/root/config/dnsconfig
    - sqldata:/root/data
    - mosquitto_data:/etc/netmaker
    environment:
    SERVER_NAME: "broker.netmaker.sa6anw.se"
    SERVER_HOST: "81.170.219.67"
    SERVER_API_CONN_STRING: "api.netmaker.sa6anw.se:443"
    COREDNS_ADDR: "81.170.219.67"
    DNS_MODE: "on"
    SERVER_HTTP_HOST: "api.netmaker.sa6anw.se"
    API_PORT: "8081"
    CLIENT_MODE: "on"
    MASTER_KEY: "Masterkey"
    CORS_ALLOWED_ORIGIN: "*"
    DISPLAY_KEYS: "on"
    DATABASE: "sqlite"
    NODE_ID: "netmaker-server-1"
    MQ_HOST: "mq"
    MQ_PORT: "443"
    MQ_SERVER_PORT: "1883"
    HOST_NETWORK: "off"
    VERBOSITY: "1"
    MANAGE_IPTABLES: "on"
    PORT_FORWARD_SERVICES: "dns"
    MQ_ADMIN_PASSWORD: "AdminPassword"
    ports:
    - "51821-51830:51821-51830/udp"
netmaker-ui:
    container_name: netmaker-ui
    image: gravitl/netmaker-ui:v0.17.0
    depends_on:
    - netmaker
    links:
    - "netmaker:api"
    restart: always
    environment:
    BACKEND_URL: "https://api.netmaker.sa6anw.se"
  caddy:
    image: caddy:2.6.2
    container_name: caddy
    restart: unless-stopped
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - caddy_data:/data
      - caddy_conf:/config
    ports:
      - "80:80"
      - "443:443"
coredns:
    container_name: coredns
    image: coredns/coredns
    command: -conf /root/dnsconfig/Corefile
    depends_on:
    - netmaker
    restart: always
    volumes:
    - dnsconfig:/root/dnsconfig
mq:
    container_name: mq
    image: eclipse-mosquitto:2.0.15-openssl
    depends_on:
    - netmaker
    restart: unless-stopped
    command: ["/mosquitto/config/wait.sh"]
    environment:
    NETMAKER_SERVER_HOST: "https://api.netmaker.sa6anw.se"
    volumes:
    - ./mosquitto.conf:/mosquitto/config/mosquitto.conf
    - ./wait.sh:/mosquitto/config/wait.sh
    - mosquitto_data:/mosquitto/data
    - mosquitto_logs:/mosquitto/log
volumes:
caddy_data: {}
caddy_conf: {}
sqldata: {}
dnsconfig: {}
mosquitto_data: {}
mosquitto_logs: {}
  • Byt till din egen domän
  • Sätt lång MASTER_KEY och MQ_ADMIN_PASSWORD

Du behöver också filen Caddyfile i samma folder med följande innehåll

{
        # LetsEncrypt account
        email sa6anw@gmail.com
}

# Dashboard
https://dashboard.netmaker.sa6anw.se {
        # Apply basic security headers
        header {
                # Enable cross origin access to *.netmaker.sa6anw.se
                Access-Control-Allow-Origin *.netmaker.sa6anw.se
                # Enable HTTP Strict Transport Security (HSTS)
                Strict-Transport-Security "max-age=31536000;"
                # Enable cross-site filter (XSS) and tell browser to block detected attacks
                X-XSS-Protection "1; mode=block"
                # Disallow the site to be rendered within a frame on a foreign domain (clickjacking protection)
                X-Frame-Options "SAMEORIGIN"
                # Prevent search engines from indexing
                X-Robots-Tag "none"
                # Remove the server name
                -Server
        }

        reverse_proxy http://netmaker-ui
}

# API
https://api.netmaker.sa6anw.se {
        reverse_proxy http://netmaker:8081
}

# MQ
wss://broker.netmaker.sa6anw.se {
        reverse_proxy ws://mq:8883
}
  • Samma sak här, byt till din domän och mailadress.

Som näst sista filen du behöver är wait.sh

#!/bin/ash

wait_for_netmaker() {
echo "SERVER: ${NETMAKER_SERVER_HOST}"
until curl --output /dev/null --silent --fail --head \
    --location "${NETMAKER_SERVER_HOST}/api/server/health"; do
    echo "Waiting for netmaker server to startup"
    sleep 1
done
}

main(){
# wait for netmaker to startup
apk add curl
wait_for_netmaker
echo "Starting MQ..."
# Run the main container command.
/docker-entrypoint.sh
/usr/sbin/mosquitto -c /mosquitto/config/mosquitto.conf

}

main "${@}"

Till sist mosquitto.conf

per_listener_settings false
listener 8883
protocol websockets
allow_anonymous false

listener 1883
protocol websockets
allow_anonymous false

plugin /usr/lib/mosquitto_dynamic_security.so
plugin_opt_config_file /mosquitto/data/dynamic-security.json

Sen är det bara att köra docker-compose up -d

Modifiering
Jag har valt att bryta ut caddy så att jag kan köra fler tjänster med bara en publik IP.

Modifiera docker-compose.yaml på följande sätt

version: "3.4"

services:
netmaker:
    container_name: netmaker
    image: gravitl/netmaker:v0.17.0
    cap_add: 
    - NET_ADMIN
    - NET_RAW
    - SYS_MODULE
    sysctls:
    - net.ipv4.ip_forward=1
    - net.ipv4.conf.all.src_valid_mark=1
    - net.ipv6.conf.all.disable_ipv6=0
    - net.ipv6.conf.all.forwarding=1
    restart: always
    volumes:
    - dnsconfig:/root/config/dnsconfig
    - sqldata:/root/data
    - mosquitto_data:/etc/netmaker
    environment:
    SERVER_NAME: "broker.netmaker.sa6anw.se"
    SERVER_HOST: "81.170.219.67"
    SERVER_API_CONN_STRING: "api.netmaker.sa6anw.se:443"
    COREDNS_ADDR: "81.170.219.67"
    DNS_MODE: "on"
    SERVER_HTTP_HOST: "api.netmaker.sa6anw.se"
    API_PORT: "8081"
    CLIENT_MODE: "on"
    MASTER_KEY: "MasterKey"
    CORS_ALLOWED_ORIGIN: "*"
    DISPLAY_KEYS: "on"
    DATABASE: "sqlite"
    NODE_ID: "netmaker-server-1"
    MQ_HOST: "mq"
    MQ_PORT: "443"
    MQ_SERVER_PORT: "1883"
    HOST_NETWORK: "off"
    VERBOSITY: "1"
    MANAGE_IPTABLES: "on"
    PORT_FORWARD_SERVICES: "dns"
    MQ_ADMIN_PASSWORD: "AdminPassword"
    ports:
    - "51821-51830:51821-51830/udp"
+   - "8081:8081"
  netmaker-ui:
    container_name: netmaker-ui
    image: gravitl/netmaker-ui:v0.17.0
    depends_on:
    - netmaker
    links:
    - "netmaker:api"
    restart: always
    environment:
    BACKEND_URL: "https://api.netmaker.sa6anw.se"
+   ports:
+   - "8080:80"
- caddy:
-   image: caddy:2.6.2
-   container_name: caddy
-   restart: unless-stopped
-   volumes:
-     - ./Caddyfile:/etc/caddy/Caddyfile
-     - caddy_data:/data
-     - caddy_conf:/config
-   ports:
-     - "80:80"
-     - "443:443"
  coredns:
    container_name: coredns
    image: coredns/coredns
    command: -conf /root/dnsconfig/Corefile
    depends_on:
    - netmaker
    restart: always
    volumes:
    - dnsconfig:/root/dnsconfig
  mq:
    container_name: mq
    image: eclipse-mosquitto:2.0.15-openssl
    depends_on:
    - netmaker
    restart: unless-stopped
    command: ["/mosquitto/config/wait.sh"]
    environment:
    NETMAKER_SERVER_HOST: "https://api.netmaker.sa6anw.se"
    volumes:
    - ./mosquitto.conf:/mosquitto/config/mosquitto.conf
    - ./wait.sh:/mosquitto/config/wait.sh
    - mosquitto_data:/mosquitto/data
    - mosquitto_logs:/mosquitto/log
+  ports:
+   - "8883:8883"
volumes:
caddy_data: {}
caddy_conf: {}
sqldata: {}
dnsconfig: {}

Filen Caddyfile kan du ta bort