16. Customizations

There are several ways to customize Connectivity Suite to meet specific needs. The following chapter contains some options and examples of how to realize things that provide an additional value for certain applications.

Warning

While many of those options are being used in the field, they can break the system or reduce its performance. Please make sure to test your changes in a staging environment before deploying them to production.

NetModule does not provide support for customisations.

16.1. Additional Docker Containers

Additional containers can operated in Connectivity Suite by adding them to the cs/app/compose.override.yml file. This file is not part of the standard installation, but can be added manually.

16.1.1. NTP Server

The following example adds an NTP server to the Connectivity Suite. The NTP server is a simple container running the chrony NTP server. The container is added to the Connectivity Suite by adding the following lines to the compose.override.yml file:

services:
  ntp:
    image: dockurr/chrony
    container_name: ntp
    ports:
      - 123:123/udp
    restart: always
    networks:
      - cs-net

16.1.2. Grafana

With the following example Grafana server may be added to Connectivity Suite.

The Grafana UI is exposed via the Connecitivty Suite Web Proxy Service called Traefik under /grafana. This is done with the help of labels. More about Traefiks use of labels can be found here: https://doc.traefik.io/traefik/providers/docker/.

The container is added to the Connectivity Suite by adding the following lines to the compose.override.yml file:

services:
  grafana:
    image: grafana/grafana:latest
    container_name: grafana01
    restart: always
    environment:
      - GF_SERVER_ROOT_URL=/grafana
      - GF_SERVER_SERVE_FROM_SUB_PATH=true
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.grafana-router.entryPoints=websecure"
      - "traefik.http.routers.grafana-router.rule=PathPrefix(`/grafana/`)"
    networks:
      - cs-net

Warning

This is a simplified example. The Grafana container should be configured with a persistent storage for the data and the configuration. The example does not include a persistent storage.

16.1.3. Start or update instance with extra services

After changes to the compose.override.yml file, the Connectivity Suite needs to be restarted. This can be done by running the following command in the cs/app directory:

docker-compose up -d

16.2. Customising the Connectivity Suite API / Proxy settings

The Connectivity Suite API and the Proxy settings can be customised by changing the following file cs/app/app-data/api/custom.json. The following example shows how to add a override the certificate renewal schedule (default 2am UTC) to 10pm UTC:

{
  "App": {
    "Certificate": {
      "DailyCertificateRenewalAndCleanupHour": 22
    }
  }
}

16.3. Triggering scripts on VPN servers

Warning

You can easily break the VPN Servers or make them more vulnerable by running custom scripts. Please make sure to test your scripts in a staging environment before deploying them to production.

In rare cases a user might want to trigger some custom scripts running on the VPN servers. This can be done via the API by using the following endpoint:

PUT /api/v3/Devices/{id}/staticScripts

Note

The {id} above is not the NetworkId. To find the Id of the VPN Server Device, you can have a look at the vpnServerId property in the response of the GET /api/v3/Networks endpoint.

The following 4 script hooks are available:

  • preStartup

    This is run before the offical startup script is run.

  • postStartup

    This is run after the offical startup script is run.

  • preReconfigure

    This is run before the server reconfigure script is run which happens with every change on the network (e.g. new Device is added etc.)

  • postReconfigure

    This is run after the server reconfigure script is run which happens with every change on the network (e.g. new Device is added etc.)

You can retrieve the current scripts by using the following endpoint:

GET /api/v3/Devices/{id}/staticScripts

If you want to see the logs of the scripts, you can use the following endpoints:

GET /api/v3/Devices/{id}/logs/readable or GET /api/v3/Devices/{id}/logs to get a zip file with all logs.