From 85d4aaea8ccc4995f808fee808d3a52683a4247f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 17 May 2025 17:23:27 +0000 Subject: [PATCH] Deployed 7fd2bba to master with MkDocs 1.6.1 and mike 2.1.3 --- master/404.html | 2 +- master/assets/images/interface_view.png | Bin 0 -> 137679 bytes master/assets/images/landing_page.png | Bin 0 -> 112478 bytes master/assets/images/passkey_setup.png | Bin 0 -> 108988 bytes .../social/documentation/usage/general.png | Bin 0 -> 38450 bytes .../social/documentation/usage/ldap.png | Bin 0 -> 36157 bytes .../social/documentation/usage/security.png | Bin 0 -> 40699 bytes .../configuration/examples/index.html | 6 ++- .../configuration/overview/index.html | 15 +++++--- .../getting-started/binaries/index.html | 2 +- .../getting-started/docker/index.html | 2 +- .../getting-started/helm/index.html | 2 +- .../getting-started/reverse-proxy/index.html | 2 +- .../getting-started/sources/index.html | 2 +- .../monitoring/prometheus/index.html | 2 +- master/documentation/overview/index.html | 2 +- .../documentation/rest-api/api-doc/index.html | 2 +- master/documentation/upgrade/v1/index.html | 2 +- master/documentation/usage/general/index.html | 2 + master/documentation/usage/ldap/index.html | 6 +++ .../documentation/usage/security/index.html | 28 ++++++++++++++ master/index.html | 2 +- master/search/search_index.json | 2 +- master/sitemap.xml | 36 ++++++++++++------ master/sitemap.xml.gz | Bin 317 -> 340 bytes 25 files changed, 86 insertions(+), 31 deletions(-) create mode 100644 master/assets/images/interface_view.png create mode 100644 master/assets/images/landing_page.png create mode 100644 master/assets/images/passkey_setup.png create mode 100644 master/assets/images/social/documentation/usage/general.png create mode 100644 master/assets/images/social/documentation/usage/ldap.png create mode 100644 master/assets/images/social/documentation/usage/security.png create mode 100644 master/documentation/usage/general/index.html create mode 100644 master/documentation/usage/ldap/index.html create mode 100644 master/documentation/usage/security/index.html diff --git a/master/404.html b/master/404.html index bb3ea1f..8fd38f9 100644 --- a/master/404.html +++ b/master/404.html @@ -1 +1 @@ - WireGuard Portal

404 - Not found

\ No newline at end of file + WireGuard Portal

404 - Not found

\ No newline at end of file diff --git a/master/assets/images/interface_view.png b/master/assets/images/interface_view.png new file mode 100644 index 0000000000000000000000000000000000000000..09f5b1b8ad07b73b56f73cc8d14fbdda545dff0c GIT binary patch literal 137679 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 OoU!-7p4eR`m;M) Examples - WireGuard Portal

Examples

Below are some sample YAML configurations demonstrating how to override some default values.

Basic

core:
+ Examples - WireGuard Portal      

Examples

Below are some sample YAML configurations demonstrating how to override some default values.

Basic

core:
   admin_user: test@example.com
   admin_password: password
   admin_api_token: super-s3cr3t-api-token-or-a-UUID
@@ -27,6 +27,10 @@
   type: sqlite
   dsn: data/sqlite.db
   encryption_passphrase: change-this-s3cr3t-encryption-passphrase
+
+auth:
+  webauthn:
+    enabled: true
 

LDAP Authentication and Synchronization

# ... (basic configuration)
 
 auth:
diff --git a/master/documentation/configuration/overview/index.html b/master/documentation/configuration/overview/index.html
index 0214262..8dc72af 100644
--- a/master/documentation/configuration/overview/index.html
+++ b/master/documentation/configuration/overview/index.html
@@ -1,6 +1,6 @@
- Overview - WireGuard Portal      

Overview

This page provides an overview of all available configuration options for WireGuard Portal.

You can supply these configurations in a YAML file when starting the Portal. The path of the configuration file defaults to config/config.yaml (or config/config.yml) in the working directory of the executable.
It is possible to override the configuration filepath using the environment variable WG_PORTAL_CONFIG. For example: WG_PORTAL_CONFIG=/etc/wg-portal/config.yaml ./wg-portal.
Also, environment variable substitution in the config file is supported. Refer to the syntax.

Configuration examples are available on the Examples page.

Default configuration
core:
+ Overview - WireGuard Portal      

Overview

This page provides an overview of all available configuration options for WireGuard Portal.

You can supply these configurations in a YAML file when starting the Portal. The path of the configuration file defaults to config/config.yaml (or config/config.yml) in the working directory of the executable.
It is possible to override the configuration filepath using the environment variable WG_PORTAL_CONFIG. For example: WG_PORTAL_CONFIG=/etc/wg-portal/config.yaml ./wg-portal.
Also, environment variable substitution in the config file is supported. Refer to the syntax.

Configuration examples are available on the Examples page.

Default configuration
core:
   admin_user: admin@wgportal.local
-  admin_password: wgportal
+  admin_password: wgportal-default
   admin_api_token: ""
   editable_keys: true
   create_default_peer: false
@@ -58,6 +58,9 @@
   oidc: []
   oauth: []
   ldap: []
+  webauthn:
+    enabled: true
+  min_password_length: 16
 
 web:
   listening_address: :8888
@@ -76,11 +79,11 @@
   url: ""
   authentication: ""
   timeout: 10s
-

Below you will find sections like core, advanced, database, statistics, mail, auth, web and webhook.
Each section describes the individual configuration keys, their default values, and a brief explanation of their purpose.


Core

These are the primary configuration options that control fundamental WireGuard Portal behavior. More advanced options are found in the subsequent Advanced section.

admin_user

  • Default: admin@wgportal.local
  • Description: The administrator user. This user will be created as a default admin if it does not yet exist.

admin_password

  • Default: wgportal
  • Description: The administrator password. The default password of wgportal should be changed immediately.

admin_api_token

  • Default: (empty)
  • Description: An API token for the admin user. If a token is provided, the REST API can be accessed using this token. If empty, the API is initially disabled for the admin user.

editable_keys

  • Default: true
  • Description: Allow editing of WireGuard key-pairs directly in the UI.

create_default_peer

  • Default: false
  • Description: If a user logs in for the first time with no existing peers, automatically create a new WireGuard peer for all server interfaces.

create_default_peer_on_creation

  • Default: false
  • Description: If an LDAP user is created (e.g., through LDAP sync) and has no peers, automatically create a new WireGuard peer for all server interfaces.

re_enable_peer_after_user_enable

  • Default: true
  • Description: Re-enable all peers that were previously disabled if the associated user is re-enabled.

delete_peer_after_user_deleted

  • Default: false
  • Description: If a user is deleted, remove all linked peers. Otherwise, peers remain but are disabled.

self_provisioning_allowed

  • Default: false
  • Description: Allow registered (non-admin) users to self-provision peers from their profile page.

import_existing

  • Default: true
  • Description: On startup, import existing WireGuard interfaces and peers into WireGuard Portal.

restore_state

  • Default: true
  • Description: Restore the WireGuard interface states (up/down) that existed before WireGuard Portal started.

Advanced

Additional or more specialized configuration options for logging and interface creation details.

log_level

  • Default: info
  • Description: The log level used by the application. Valid options are: trace, debug, info, warn, error.

log_pretty

  • Default: false
  • Description: If true, log messages are colorized and formatted for readability (pretty-print).

log_json

  • Default: false
  • Description: If true, log messages are structured in JSON format.

start_listen_port

  • Default: 51820
  • Description: The first port to use when automatically creating new WireGuard interfaces.

start_cidr_v4

  • Default: 10.11.12.0/24
  • Description: The initial IPv4 subnet to use when automatically creating new WireGuard interfaces.

start_cidr_v6

  • Default: fdfd:d3ad:c0de:1234::0/64
  • Description: The initial IPv6 subnet to use when automatically creating new WireGuard interfaces.

use_ip_v6

  • Default: true
  • Description: Enable or disable IPv6 support.

config_storage_path

  • Default: (empty)
  • Description: Path to a directory where wg-quick style configuration files will be stored (if you need local filesystem configs).

expiry_check_interval

  • Default: 15m
  • Description: Interval after which existing peers are checked if they are expired. Format uses s, m, h, d for seconds, minutes, hours, days, see time.ParseDuration.

rule_prio_offset

  • Default: 20000
  • Description: Offset for IP route rule priorities when configuring routing.

route_table_offset

  • Default: 20000
  • Description: Offset for IP route table IDs when configuring routing.

api_admin_only

  • Default: true
  • Description: If true, the public REST API is accessible only to admin users. The API docs live at /api/v1/doc.html.

Database

Configuration for the underlying database used by WireGuard Portal. Supported databases include SQLite, MySQL, Microsoft SQL Server, and Postgres.

If sensitive values (like private keys) should be stored in an encrypted format, set the encryption_passphrase option.

debug

  • Default: false
  • Description: If true, logs all database statements (verbose).

slow_query_threshold

  • Default: "0"
  • Description: A time threshold (e.g., 100ms) above which queries are considered slow and logged as warnings. If zero, slow query logging is disabled. Format uses s, ms for seconds, milliseconds, see time.ParseDuration. The value must be a string.

type

  • Default: sqlite
  • Description: The database type. Valid options: sqlite, mssql, mysql, postgres.

dsn

  • Default: data/sqlite.db
  • Description: The Data Source Name (DSN) for connecting to the database.
    For example:
    user:pass@tcp(1.2.3.4:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local
    -

encryption_passphrase

  • Default: (empty)
  • Description: Passphrase for encrypting sensitive values such as private keys in the database. Encryption is only applied if this passphrase is set. Important: Once you enable encryption by setting this passphrase, you cannot disable it or change it afterward. New or updated records will be encrypted; existing data remains in plaintext until it’s next modified.

Statistics

Controls how WireGuard Portal collects and reports usage statistics, including ping checks and Prometheus metrics.

use_ping_checks

  • Default: true
  • Description: Enable periodic ping checks to verify that peers remain responsive.

ping_check_workers

  • Default: 10
  • Description: Number of parallel worker processes for ping checks.

ping_unprivileged

  • Default: false
  • Description: If false, ping checks run without root privileges. This is currently considered BETA.

ping_check_interval

  • Default: 1m
  • Description: Interval between consecutive ping checks for all peers. Format uses s, m, h, d for seconds, minutes, hours, days, see time.ParseDuration.

data_collection_interval

  • Default: 1m
  • Description: Interval between data collection cycles (bytes sent/received, handshake times, etc.). Format uses s, m, h, d for seconds, minutes, hours, days, see time.ParseDuration.

collect_interface_data

  • Default: true
  • Description: If true, collects interface-level data (bytes in/out) for monitoring and statistics.

collect_peer_data

  • Default: true
  • Description: If true, collects peer-level data (bytes, last handshake, endpoint, etc.).

collect_audit_data

  • Default: true
  • Description: If true, logs certain portal events (such as user logins) to the database.

listening_address

  • Default: :8787
  • Description: Address and port for the integrated Prometheus metric server (e.g., :8787 or 127.0.0.1:8787).

Mail

Options for configuring email notifications or sending peer configurations via email.

host

  • Default: 127.0.0.1
  • Description: Hostname or IP of the SMTP server.

port

  • Default: 25
  • Description: Port number for the SMTP server.

encryption

  • Default: none
  • Description: SMTP encryption type. Valid values: none, tls, starttls.

cert_validation

  • Default: true
  • Description: If true, validate the SMTP server certificate (relevant if encryption = tls).

username

  • Default: (empty)
  • Description: Optional SMTP username for authentication.

password

  • Default: (empty)
  • Description: Optional SMTP password for authentication.

auth_type

  • Default: plain
  • Description: SMTP authentication type. Valid values: plain, login, crammd5.

from

  • Default: Wireguard Portal <noreply@wireguard.local>
  • Description: The default "From" address when sending emails.
  • Default: false
  • Description: If true, emails only contain a link to WireGuard Portal, rather than attaching the full configuration.

Auth

WireGuard Portal supports multiple authentication strategies, including OpenID Connect (oidc), OAuth (oauth), and LDAP (ldap). Each can have multiple providers configured. Below are the relevant keys.


OIDC

The oidc array contains a list of OpenID Connect providers. Below are the properties for each OIDC provider entry inside auth.oidc:

provider_name

  • Default: (empty)
  • Description: A unique name for this provider. Must not conflict with other providers.

display_name

  • Default: (empty)
  • Description: A user-friendly name shown on the login page (e.g., "Login with Google").

base_url

  • Default: (empty)
  • Description: The OIDC provider’s base URL (e.g., https://accounts.google.com).

client_id

  • Default: (empty)
  • Description: The OAuth client ID from the OIDC provider.

client_secret

  • Default: (empty)
  • Description: The OAuth client secret from the OIDC provider.

extra_scopes

  • Default: (empty)
  • Description: A list of additional OIDC scopes (e.g., profile, email).

allowed_domains

  • Default: (empty)
  • Description: A list of allowlisted domains. Only users with email addresses in these domains can log in or register. This is useful for restricting access to specific organizations or groups.

field_map

  • Default: (empty)
  • Description: Maps OIDC claims to WireGuard Portal user fields.
  • Available fields: user_identifier, email, firstname, lastname, phone, department, is_admin, user_groups.

    Field Typical OIDC Claim Explanation
    user_identifier sub or preferred_username A unique identifier for the user. Often the OIDC sub claim is used because it’s guaranteed to be unique for the user within the IdP. Some providers also support preferred_username if it’s unique.
    email email The user’s email address as provided by the IdP. Not always verified, depending on IdP settings.
    firstname given_name The user’s first name, typically provided by the IdP in the given_name claim.
    lastname family_name The user’s last (family) name, typically provided by the IdP in the family_name claim.
    phone phone_number The user’s phone number. This may require additional scopes/permissions from the IdP to access.
    department Custom claim (e.g., department) If the IdP can provide organizational data, it may store it in a custom claim. Adjust accordingly (e.g., department, org, or another attribute).
    is_admin Custom claim or derived role If the IdP returns a role or admin flag, you can map that to is_admin. Often this is managed through custom claims or group membership.
    user_groups groups or another custom claim A list of group memberships for the user. Some IdPs provide groups out of the box; others require custom claims or directory lookups.

admin_mapping

  • Default: (empty)
  • Description: WgPortal can grant a user admin rights by matching the value of the is_admin claim against a regular expression. Alternatively, a regular expression can be used to check if a user is member of a specific group listed in the user_group claim. The regular expressions are defined in admin_value_regex and admin_group_regex.
    • admin_value_regex: A regular expression to match the is_admin claim. By default, this expression matches the string "true" (^true$).
    • admin_group_regex: A regular expression to match the user_groups claim. Each entry in the user_groups claim is checked against this regex.

registration_enabled

  • Default: (empty)
  • Description: If true, a new user will be created in WireGuard Portal if not already present.

log_user_info

  • Default: (empty)
  • Description: If true, OIDC user data is logged at the trace level upon login (for debugging).

OAuth

The oauth array contains a list of plain OAuth2 providers. Below are the properties for each OAuth provider entry inside auth.oauth:

provider_name

  • Default: (empty)
  • Description: A unique name for this provider. Must not conflict with other providers.

display_name

  • Default: (empty)
  • Description: A user-friendly name shown on the login page.

client_id

  • Default: (empty)
  • Description: The OAuth client ID for the provider.

client_secret

  • Default: (empty)
  • Description: The OAuth client secret for the provider.

auth_url

  • Default: (empty)
  • Description: URL of the authentication endpoint.

token_url

  • Default: (empty)
  • Description: URL of the token endpoint.

user_info_url

  • Default: (empty)
  • Description: URL of the user information endpoint.

scopes

  • Default: (empty)
  • Description: A list of OAuth scopes.

allowed_domains

  • Default: (empty)
  • Description: A list of allowlisted domains. Only users with email addresses in these domains can log in or register. This is useful for restricting access to specific organizations or groups.

field_map

  • Default: (empty)
  • Description: Maps OAuth attributes to WireGuard Portal fields.
  • Available fields: user_identifier, email, firstname, lastname, phone, department, is_admin, user_groups.

    Field Typical Claim Explanation
    user_identifier sub or preferred_username A unique identifier for the user. Often the OIDC sub claim is used because it’s guaranteed to be unique for the user within the IdP. Some providers also support preferred_username if it’s unique.
    email email The user’s email address as provided by the IdP. Not always verified, depending on IdP settings.
    firstname given_name The user’s first name, typically provided by the IdP in the given_name claim.
    lastname family_name The user’s last (family) name, typically provided by the IdP in the family_name claim.
    phone phone_number The user’s phone number. This may require additional scopes/permissions from the IdP to access.
    department Custom claim (e.g., department) If the IdP can provide organizational data, it may store it in a custom claim. Adjust accordingly (e.g., department, org, or another attribute).
    is_admin Custom claim or derived role If the IdP returns a role or admin flag, you can map that to is_admin. Often this is managed through custom claims or group membership.
    user_groups groups or another custom claim A list of group memberships for the user. Some IdPs provide groups out of the box; others require custom claims or directory lookups.

admin_mapping

  • Default: (empty)
  • Description: WgPortal can grant a user admin rights by matching the value of the is_admin claim against a regular expression. Alternatively, a regular expression can be used to check if a user is member of a specific group listed in the user_group claim. The regular expressions are defined in admin_value_regex and admin_group_regex.
  • admin_value_regex: A regular expression to match the is_admin claim. By default, this expression matches the string "true" (^true$).
  • admin_group_regex: A regular expression to match the user_groups claim. Each entry in the user_groups claim is checked against this regex.

registration_enabled

  • Default: (empty)
  • Description: If true, new users are created automatically on successful login.

log_user_info

  • Default: (empty)
  • Description: If true, logs user info at the trace level upon login.

LDAP

The ldap array contains a list of LDAP authentication providers. Below are the properties for each LDAP provider entry inside auth.ldap:

provider_name

  • Default: (empty)
  • Description: A unique name for this provider. Must not conflict with other providers.

url

  • Default: (empty)
  • Description: The LDAP server URL (e.g., ldap://srv-ad01.company.local:389).

start_tls

  • Default: (empty)
  • Description: If true, use STARTTLS to secure the LDAP connection.

cert_validation

  • Default: (empty)
  • Description: If true, validate the LDAP server’s TLS certificate.

tls_certificate_path

  • Default: (empty)
  • Description: Path to a TLS certificate if needed for LDAP connections.

tls_key_path

  • Default: (empty)
  • Description: Path to the corresponding TLS certificate key.

base_dn

  • Default: (empty)
  • Description: The base DN for user searches (e.g., DC=COMPANY,DC=LOCAL).

bind_user

  • Default: (empty)
  • Description: The bind user for LDAP (e.g., company\\ldap_wireguard or ldap_wireguard@company.local).

bind_pass

  • Default: (empty)
  • Description: The bind password for LDAP authentication.

field_map

  • Default: (empty)
  • Description: Maps LDAP attributes to WireGuard Portal fields.

    • Available fields: user_identifier, email, firstname, lastname, phone, department, memberof.
    WireGuard Portal Field Typical LDAP Attribute Short Description
    user_identifier sAMAccountName / uid Uniquely identifies the user within the LDAP directory.
    email mail / userPrincipalName Stores the user's primary email address.
    firstname givenName Contains the user's first (given) name.
    lastname sn Contains the user's last (surname) name.
    phone telephoneNumber / mobile Holds the user's phone or mobile number.
    department departmentNumber / ou Specifies the department or organizational unit of the user.
    memberof memberOf Lists the groups and roles to which the user belongs.

login_filter

  • Default: (empty)
  • Description: An LDAP filter to restrict which users can log in. Use {{login_identifier}} to insert the username. For example:
    (&(objectClass=organizationalPerson)(mail={{login_identifier}})(!userAccountControl:1.2.840.113556.1.4.803:=2))
    -

admin_group

  • Default: (empty)
  • Description: A specific LDAP group whose members are considered administrators in WireGuard Portal. For example:
    CN=WireGuardAdmins,OU=Some-OU,DC=YOURDOMAIN,DC=LOCAL
    +

Below you will find sections like core, advanced, database, statistics, mail, auth, web and webhook.
Each section describes the individual configuration keys, their default values, and a brief explanation of their purpose.


Core

These are the primary configuration options that control fundamental WireGuard Portal behavior. More advanced options are found in the subsequent Advanced section.

admin_user

  • Default: admin@wgportal.local
  • Description: The administrator user. This user will be created as a default admin if it does not yet exist.

admin_password

  • Default: wgportal-default
  • Description: The administrator password. The default password should be changed immediately!
  • Important: The password should be strong and secure. The minimum password length is specified in auth.min_password_length. By default, it is 16 characters.

admin_api_token

  • Default: (empty)
  • Description: An API token for the admin user. If a token is provided, the REST API can be accessed using this token. If empty, the API is initially disabled for the admin user.

editable_keys

  • Default: true
  • Description: Allow editing of WireGuard key-pairs directly in the UI.

create_default_peer

  • Default: false
  • Description: If a user logs in for the first time with no existing peers, automatically create a new WireGuard peer for all server interfaces.

create_default_peer_on_creation

  • Default: false
  • Description: If an LDAP user is created (e.g., through LDAP sync) and has no peers, automatically create a new WireGuard peer for all server interfaces.

re_enable_peer_after_user_enable

  • Default: true
  • Description: Re-enable all peers that were previously disabled if the associated user is re-enabled.

delete_peer_after_user_deleted

  • Default: false
  • Description: If a user is deleted, remove all linked peers. Otherwise, peers remain but are disabled.

self_provisioning_allowed

  • Default: false
  • Description: Allow registered (non-admin) users to self-provision peers from their profile page.

import_existing

  • Default: true
  • Description: On startup, import existing WireGuard interfaces and peers into WireGuard Portal.

restore_state

  • Default: true
  • Description: Restore the WireGuard interface states (up/down) that existed before WireGuard Portal started.

Advanced

Additional or more specialized configuration options for logging and interface creation details.

log_level

  • Default: info
  • Description: The log level used by the application. Valid options are: trace, debug, info, warn, error.

log_pretty

  • Default: false
  • Description: If true, log messages are colorized and formatted for readability (pretty-print).

log_json

  • Default: false
  • Description: If true, log messages are structured in JSON format.

start_listen_port

  • Default: 51820
  • Description: The first port to use when automatically creating new WireGuard interfaces.

start_cidr_v4

  • Default: 10.11.12.0/24
  • Description: The initial IPv4 subnet to use when automatically creating new WireGuard interfaces.

start_cidr_v6

  • Default: fdfd:d3ad:c0de:1234::0/64
  • Description: The initial IPv6 subnet to use when automatically creating new WireGuard interfaces.

use_ip_v6

  • Default: true
  • Description: Enable or disable IPv6 support.

config_storage_path

  • Default: (empty)
  • Description: Path to a directory where wg-quick style configuration files will be stored (if you need local filesystem configs).

expiry_check_interval

  • Default: 15m
  • Description: Interval after which existing peers are checked if they are expired. Format uses s, m, h, d for seconds, minutes, hours, days, see time.ParseDuration.

rule_prio_offset

  • Default: 20000
  • Description: Offset for IP route rule priorities when configuring routing.

route_table_offset

  • Default: 20000
  • Description: Offset for IP route table IDs when configuring routing.

api_admin_only

  • Default: true
  • Description: If true, the public REST API is accessible only to admin users. The API docs live at /api/v1/doc.html.

Database

Configuration for the underlying database used by WireGuard Portal. Supported databases include SQLite, MySQL, Microsoft SQL Server, and Postgres.

If sensitive values (like private keys) should be stored in an encrypted format, set the encryption_passphrase option.

debug

  • Default: false
  • Description: If true, logs all database statements (verbose).

slow_query_threshold

  • Default: "0"
  • Description: A time threshold (e.g., 100ms) above which queries are considered slow and logged as warnings. If zero, slow query logging is disabled. Format uses s, ms for seconds, milliseconds, see time.ParseDuration. The value must be a string.

type

  • Default: sqlite
  • Description: The database type. Valid options: sqlite, mssql, mysql, postgres.

dsn

  • Default: data/sqlite.db
  • Description: The Data Source Name (DSN) for connecting to the database.
    For example:
    user:pass@tcp(1.2.3.4:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local
    +

encryption_passphrase

  • Default: (empty)
  • Description: Passphrase for encrypting sensitive values such as private keys in the database. Encryption is only applied if this passphrase is set. Important: Once you enable encryption by setting this passphrase, you cannot disable it or change it afterward. New or updated records will be encrypted; existing data remains in plaintext until it’s next modified.

Statistics

Controls how WireGuard Portal collects and reports usage statistics, including ping checks and Prometheus metrics.

use_ping_checks

  • Default: true
  • Description: Enable periodic ping checks to verify that peers remain responsive.

ping_check_workers

  • Default: 10
  • Description: Number of parallel worker processes for ping checks.

ping_unprivileged

  • Default: false
  • Description: If false, ping checks run without root privileges. This is currently considered BETA.

ping_check_interval

  • Default: 1m
  • Description: Interval between consecutive ping checks for all peers. Format uses s, m, h, d for seconds, minutes, hours, days, see time.ParseDuration.

data_collection_interval

  • Default: 1m
  • Description: Interval between data collection cycles (bytes sent/received, handshake times, etc.). Format uses s, m, h, d for seconds, minutes, hours, days, see time.ParseDuration.

collect_interface_data

  • Default: true
  • Description: If true, collects interface-level data (bytes in/out) for monitoring and statistics.

collect_peer_data

  • Default: true
  • Description: If true, collects peer-level data (bytes, last handshake, endpoint, etc.).

collect_audit_data

  • Default: true
  • Description: If true, logs certain portal events (such as user logins) to the database.

listening_address

  • Default: :8787
  • Description: Address and port for the integrated Prometheus metric server (e.g., :8787 or 127.0.0.1:8787).

Mail

Options for configuring email notifications or sending peer configurations via email.

host

  • Default: 127.0.0.1
  • Description: Hostname or IP of the SMTP server.

port

  • Default: 25
  • Description: Port number for the SMTP server.

encryption

  • Default: none
  • Description: SMTP encryption type. Valid values: none, tls, starttls.

cert_validation

  • Default: true
  • Description: If true, validate the SMTP server certificate (relevant if encryption = tls).

username

  • Default: (empty)
  • Description: Optional SMTP username for authentication.

password

  • Default: (empty)
  • Description: Optional SMTP password for authentication.

auth_type

  • Default: plain
  • Description: SMTP authentication type. Valid values: plain, login, crammd5.

from

  • Default: Wireguard Portal <noreply@wireguard.local>
  • Description: The default "From" address when sending emails.
  • Default: false
  • Description: If true, emails only contain a link to WireGuard Portal, rather than attaching the full configuration.

Auth

WireGuard Portal supports multiple authentication strategies, including OpenID Connect (oidc), OAuth (oauth), Passkeys (webauthn) and LDAP (ldap). Each can have multiple providers configured. Below are the relevant keys.

Some core authentication options are shared across all providers, while others are specific to each provider type.

min_password_length

  • Default: 16
  • Description: Minimum password length for local authentication. This is not enforced for LDAP authentication. The default admin password strength is also enforced by this setting.
  • Important: The password should be strong and secure. It is recommended to use a password with at least 16 characters, including uppercase and lowercase letters, numbers, and special characters.

OIDC

The oidc array contains a list of OpenID Connect providers. Below are the properties for each OIDC provider entry inside auth.oidc:

provider_name

  • Default: (empty)
  • Description: A unique name for this provider. Must not conflict with other providers.

display_name

  • Default: (empty)
  • Description: A user-friendly name shown on the login page (e.g., "Login with Google").

base_url

  • Default: (empty)
  • Description: The OIDC provider’s base URL (e.g., https://accounts.google.com).

client_id

  • Default: (empty)
  • Description: The OAuth client ID from the OIDC provider.

client_secret

  • Default: (empty)
  • Description: The OAuth client secret from the OIDC provider.

extra_scopes

  • Default: (empty)
  • Description: A list of additional OIDC scopes (e.g., profile, email).

allowed_domains

  • Default: (empty)
  • Description: A list of allowlisted domains. Only users with email addresses in these domains can log in or register. This is useful for restricting access to specific organizations or groups.

field_map

  • Default: (empty)
  • Description: Maps OIDC claims to WireGuard Portal user fields.
  • Available fields: user_identifier, email, firstname, lastname, phone, department, is_admin, user_groups.

    Field Typical OIDC Claim Explanation
    user_identifier sub or preferred_username A unique identifier for the user. Often the OIDC sub claim is used because it’s guaranteed to be unique for the user within the IdP. Some providers also support preferred_username if it’s unique.
    email email The user’s email address as provided by the IdP. Not always verified, depending on IdP settings.
    firstname given_name The user’s first name, typically provided by the IdP in the given_name claim.
    lastname family_name The user’s last (family) name, typically provided by the IdP in the family_name claim.
    phone phone_number The user’s phone number. This may require additional scopes/permissions from the IdP to access.
    department Custom claim (e.g., department) If the IdP can provide organizational data, it may store it in a custom claim. Adjust accordingly (e.g., department, org, or another attribute).
    is_admin Custom claim or derived role If the IdP returns a role or admin flag, you can map that to is_admin. Often this is managed through custom claims or group membership.
    user_groups groups or another custom claim A list of group memberships for the user. Some IdPs provide groups out of the box; others require custom claims or directory lookups.

admin_mapping

  • Default: (empty)
  • Description: WgPortal can grant a user admin rights by matching the value of the is_admin claim against a regular expression. Alternatively, a regular expression can be used to check if a user is member of a specific group listed in the user_group claim. The regular expressions are defined in admin_value_regex and admin_group_regex.
    • admin_value_regex: A regular expression to match the is_admin claim. By default, this expression matches the string "true" (^true$).
    • admin_group_regex: A regular expression to match the user_groups claim. Each entry in the user_groups claim is checked against this regex.

registration_enabled

  • Default: (empty)
  • Description: If true, a new user will be created in WireGuard Portal if not already present.

log_user_info

  • Default: (empty)
  • Description: If true, OIDC user data is logged at the trace level upon login (for debugging).

OAuth

The oauth array contains a list of plain OAuth2 providers. Below are the properties for each OAuth provider entry inside auth.oauth:

provider_name

  • Default: (empty)
  • Description: A unique name for this provider. Must not conflict with other providers.

display_name

  • Default: (empty)
  • Description: A user-friendly name shown on the login page.

client_id

  • Default: (empty)
  • Description: The OAuth client ID for the provider.

client_secret

  • Default: (empty)
  • Description: The OAuth client secret for the provider.

auth_url

  • Default: (empty)
  • Description: URL of the authentication endpoint.

token_url

  • Default: (empty)
  • Description: URL of the token endpoint.

user_info_url

  • Default: (empty)
  • Description: URL of the user information endpoint.

scopes

  • Default: (empty)
  • Description: A list of OAuth scopes.

allowed_domains

  • Default: (empty)
  • Description: A list of allowlisted domains. Only users with email addresses in these domains can log in or register. This is useful for restricting access to specific organizations or groups.

field_map

  • Default: (empty)
  • Description: Maps OAuth attributes to WireGuard Portal fields.
  • Available fields: user_identifier, email, firstname, lastname, phone, department, is_admin, user_groups.

    Field Typical Claim Explanation
    user_identifier sub or preferred_username A unique identifier for the user. Often the OIDC sub claim is used because it’s guaranteed to be unique for the user within the IdP. Some providers also support preferred_username if it’s unique.
    email email The user’s email address as provided by the IdP. Not always verified, depending on IdP settings.
    firstname given_name The user’s first name, typically provided by the IdP in the given_name claim.
    lastname family_name The user’s last (family) name, typically provided by the IdP in the family_name claim.
    phone phone_number The user’s phone number. This may require additional scopes/permissions from the IdP to access.
    department Custom claim (e.g., department) If the IdP can provide organizational data, it may store it in a custom claim. Adjust accordingly (e.g., department, org, or another attribute).
    is_admin Custom claim or derived role If the IdP returns a role or admin flag, you can map that to is_admin. Often this is managed through custom claims or group membership.
    user_groups groups or another custom claim A list of group memberships for the user. Some IdPs provide groups out of the box; others require custom claims or directory lookups.

admin_mapping

  • Default: (empty)
  • Description: WgPortal can grant a user admin rights by matching the value of the is_admin claim against a regular expression. Alternatively, a regular expression can be used to check if a user is member of a specific group listed in the user_group claim. The regular expressions are defined in admin_value_regex and admin_group_regex.
  • admin_value_regex: A regular expression to match the is_admin claim. By default, this expression matches the string "true" (^true$).
  • admin_group_regex: A regular expression to match the user_groups claim. Each entry in the user_groups claim is checked against this regex.

registration_enabled

  • Default: (empty)
  • Description: If true, new users are created automatically on successful login.

log_user_info

  • Default: (empty)
  • Description: If true, logs user info at the trace level upon login.

LDAP

The ldap array contains a list of LDAP authentication providers. Below are the properties for each LDAP provider entry inside auth.ldap:

provider_name

  • Default: (empty)
  • Description: A unique name for this provider. Must not conflict with other providers.

url

  • Default: (empty)
  • Description: The LDAP server URL (e.g., ldap://srv-ad01.company.local:389).

start_tls

  • Default: (empty)
  • Description: If true, use STARTTLS to secure the LDAP connection.

cert_validation

  • Default: (empty)
  • Description: If true, validate the LDAP server’s TLS certificate.

tls_certificate_path

  • Default: (empty)
  • Description: Path to a TLS certificate if needed for LDAP connections.

tls_key_path

  • Default: (empty)
  • Description: Path to the corresponding TLS certificate key.

base_dn

  • Default: (empty)
  • Description: The base DN for user searches (e.g., DC=COMPANY,DC=LOCAL).

bind_user

  • Default: (empty)
  • Description: The bind user for LDAP (e.g., company\\ldap_wireguard or ldap_wireguard@company.local).

bind_pass

  • Default: (empty)
  • Description: The bind password for LDAP authentication.

field_map

  • Default: (empty)
  • Description: Maps LDAP attributes to WireGuard Portal fields.

    • Available fields: user_identifier, email, firstname, lastname, phone, department, memberof.
    WireGuard Portal Field Typical LDAP Attribute Short Description
    user_identifier sAMAccountName / uid Uniquely identifies the user within the LDAP directory.
    email mail / userPrincipalName Stores the user's primary email address.
    firstname givenName Contains the user's first (given) name.
    lastname sn Contains the user's last (surname) name.
    phone telephoneNumber / mobile Holds the user's phone or mobile number.
    department departmentNumber / ou Specifies the department or organizational unit of the user.
    memberof memberOf Lists the groups and roles to which the user belongs.

login_filter

  • Default: (empty)
  • Description: An LDAP filter to restrict which users can log in. Use {{login_identifier}} to insert the username. For example:
    (&(objectClass=organizationalPerson)(mail={{login_identifier}})(!userAccountControl:1.2.840.113556.1.4.803:=2))
    +
  • Important: The login_filter must always be a valid LDAP filter. It should at most return one user. If the filter returns multiple or no users, the login will fail.

admin_group

  • Default: (empty)
  • Description: A specific LDAP group whose members are considered administrators in WireGuard Portal. For example:
    CN=WireGuardAdmins,OU=Some-OU,DC=YOURDOMAIN,DC=LOCAL
     

sync_interval

  • Default: (empty)
  • Description: How frequently (in duration, e.g. 30m) to synchronize users from LDAP. Empty or 0 disables sync. Format uses s, m, h, d for seconds, minutes, hours, days, see time.ParseDuration. Only users that match the sync_filter are synchronized, if disable_missing is true, users not found in LDAP are disabled.

sync_filter

  • Default: (empty)
  • Description: An LDAP filter to select which users get synchronized into WireGuard Portal. For example:
    (&(objectClass=organizationalPerson)(!userAccountControl:1.2.840.113556.1.4.803:=2)(mail=*))
    -

disable_missing

  • Default: (empty)
  • Description: If true, any user not found in LDAP (during sync) is disabled in WireGuard Portal.

auto_re_enable

  • Default: (empty)
  • Description: If true, users that where disabled because they were missing (see disable_missing) will be re-enabled once they are found again.

registration_enabled

  • Default: (empty)
  • Description: If true, new user accounts are created in WireGuard Portal upon first login.

log_user_info

  • Default: (empty)
  • Description: If true, logs LDAP user data at the trace level upon login.

Web

The web section contains configuration options for the web server, including the listening address, session management, and CSRF protection. It is important to specify a valid external_url for the web server, especially if you are using a reverse proxy. Without a valid external_url, the login process may fail due to CSRF protection.

listening_address

  • Default: :8888
  • Description: The listening address and port for the web server (e.g., :8888 to bind on all interfaces or 127.0.0.1:8888 to bind only on the loopback interface). Ensure that access to WireGuard Portal is protected against unauthorized access, especially if binding to all interfaces.

external_url

  • Default: http://localhost:8888
  • Description: The URL where a client can access WireGuard Portal. This URL is used for generating links in emails and for performing OAUTH redirects.
    Important: If you are using a reverse proxy, set this to the external URL of the reverse proxy, otherwise login will fail. If you access the portal via IP address, set this to the IP address of the server.

site_company_name

  • Default: WireGuard Portal
  • Description: The company name that is shown at the bottom of the web frontend.

site_title

  • Default: WireGuard Portal
  • Description: The title that is shown in the web frontend.

session_identifier

  • Default: wgPortalSession
  • Description: The session identifier for the web frontend.

session_secret

  • Default: very_secret
  • Description: The session secret for the web frontend.

csrf_secret

  • Default: extremely_secret
  • Description: The CSRF secret.

request_logging

  • Default: false
  • Description: Log all HTTP requests.

expose_host_info

  • Default: false
  • Description: Expose the hostname and version of the WireGuard Portal server in an HTTP header. This is useful for debugging but may expose sensitive information.

cert_file

  • Default: (empty)
  • Description: (Optional) Path to the TLS certificate file.

key_file

  • Default: (empty)
  • Description: (Optional) Path to the TLS certificate key file.

Webhook

The webhook section allows you to configure a webhook that is called on certain events in WireGuard Portal. A JSON object is sent in a POST request to the webhook URL with the following structure:

{
+

disable_missing

  • Default: (empty)
  • Description: If true, any user not found in LDAP (during sync) is disabled in WireGuard Portal.

auto_re_enable

  • Default: (empty)
  • Description: If true, users that where disabled because they were missing (see disable_missing) will be re-enabled once they are found again.

registration_enabled

  • Default: (empty)
  • Description: If true, new user accounts are created in WireGuard Portal upon first login.

log_user_info

  • Default: (empty)
  • Description: If true, logs LDAP user data at the trace level upon login.

WebAuthn (Passkeys)

The webauthn section contains configuration options for WebAuthn authentication (passkeys).

enabled

  • Default: true
  • Description: If true, Passkey authentication is enabled. If false, WebAuthn is disabled. Users are encouraged to use Passkeys for secure authentication instead of passwords. If a passkey is registered, the password login is still available as a fallback. Ensure that the password is strong and secure.

Web

The web section contains configuration options for the web server, including the listening address, session management, and CSRF protection. It is important to specify a valid external_url for the web server, especially if you are using a reverse proxy. Without a valid external_url, the login process may fail due to CSRF protection.

listening_address

  • Default: :8888
  • Description: The listening address and port for the web server (e.g., :8888 to bind on all interfaces or 127.0.0.1:8888 to bind only on the loopback interface). Ensure that access to WireGuard Portal is protected against unauthorized access, especially if binding to all interfaces.

external_url

  • Default: http://localhost:8888
  • Description: The URL where a client can access WireGuard Portal. This URL is used for generating links in emails and for performing OAUTH redirects.
    Important: If you are using a reverse proxy, set this to the external URL of the reverse proxy, otherwise login will fail. If you access the portal via IP address, set this to the IP address of the server.

site_company_name

  • Default: WireGuard Portal
  • Description: The company name that is shown at the bottom of the web frontend.

site_title

  • Default: WireGuard Portal
  • Description: The title that is shown in the web frontend.

session_identifier

  • Default: wgPortalSession
  • Description: The session identifier for the web frontend.

session_secret

  • Default: very_secret
  • Description: The session secret for the web frontend.

csrf_secret

  • Default: extremely_secret
  • Description: The CSRF secret.

request_logging

  • Default: false
  • Description: Log all HTTP requests.

expose_host_info

  • Default: false
  • Description: Expose the hostname and version of the WireGuard Portal server in an HTTP header. This is useful for debugging but may expose sensitive information.

cert_file

  • Default: (empty)
  • Description: (Optional) Path to the TLS certificate file.

key_file

  • Default: (empty)
  • Description: (Optional) Path to the TLS certificate key file.

Webhook

The webhook section allows you to configure a webhook that is called on certain events in WireGuard Portal. A JSON object is sent in a POST request to the webhook URL with the following structure:

{
   "event": "peer_created",
   "entity": "peer",
   "identifier": "the-peer-identifier",
diff --git a/master/documentation/getting-started/binaries/index.html b/master/documentation/getting-started/binaries/index.html
index 6d2e7c4..8d13812 100644
--- a/master/documentation/getting-started/binaries/index.html
+++ b/master/documentation/getting-started/binaries/index.html
@@ -1,4 +1,4 @@
- Binaries - WireGuard Portal      

Binaries

Starting from v2, each release includes compiled binaries for supported platforms. These binary versions can be manually downloaded and installed.

Download

Make sure that you download the correct binary for your architecture. The available binaries are:

  • wg-portal_linux_amd64 - Linux x86_64
  • wg-portal_linux_arm64 - Linux ARM 64-bit
  • wg-portal_linux_arm_v7 - Linux ARM 32-bit

With curl:

curl -L -o wg-portal https://github.com/h44z/wg-portal/releases/download/${WG_PORTAL_VERSION}/wg-portal_linux_amd64 
+ Binaries - WireGuard Portal      

Binaries

Starting from v2, each release includes compiled binaries for supported platforms. These binary versions can be manually downloaded and installed.

Download

Make sure that you download the correct binary for your architecture. The available binaries are:

  • wg-portal_linux_amd64 - Linux x86_64
  • wg-portal_linux_arm64 - Linux ARM 64-bit
  • wg-portal_linux_arm_v7 - Linux ARM 32-bit

With curl:

curl -L -o wg-portal https://github.com/h44z/wg-portal/releases/download/${WG_PORTAL_VERSION}/wg-portal_linux_amd64 
 

With wget:

wget -O wg-portal https://github.com/h44z/wg-portal/releases/download/${WG_PORTAL_VERSION}/wg-portal_linux_amd64
 

with gh cli:

gh release download ${WG_PORTAL_VERSION} --repo h44z/wg-portal --output wg-portal --pattern '*amd64'
 

Install

sudo mkdir -p /opt/wg-portal
diff --git a/master/documentation/getting-started/docker/index.html b/master/documentation/getting-started/docker/index.html
index f61dc54..6817219 100644
--- a/master/documentation/getting-started/docker/index.html
+++ b/master/documentation/getting-started/docker/index.html
@@ -1,4 +1,4 @@
- Docker - WireGuard Portal      

Docker

Image Usage

The WireGuard Portal Docker image is available on both Docker Hub and GitHub Container Registry. It is built on the official Alpine Linux base image and comes pre-packaged with all necessary WireGuard dependencies.

This container allows you to establish WireGuard VPN connections without relying on a host system that supports WireGuard or using the linuxserver/wireguard Docker image.

The recommended method for deploying WireGuard Portal is via Docker Compose for ease of configuration and management.

A sample docker-compose.yml (managing WireGuard interfaces directly on the host) is provided below:

---
+ Docker - WireGuard Portal      

Docker

Image Usage

The WireGuard Portal Docker image is available on both Docker Hub and GitHub Container Registry. It is built on the official Alpine Linux base image and comes pre-packaged with all necessary WireGuard dependencies.

This container allows you to establish WireGuard VPN connections without relying on a host system that supports WireGuard or using the linuxserver/wireguard Docker image.

The recommended method for deploying WireGuard Portal is via Docker Compose for ease of configuration and management.

A sample docker-compose.yml (managing WireGuard interfaces directly on the host) is provided below:

---
 services:
   wg-portal:
     image: wgportal/wg-portal:v2
diff --git a/master/documentation/getting-started/helm/index.html b/master/documentation/getting-started/helm/index.html
index 9a89eb2..3f16cb3 100644
--- a/master/documentation/getting-started/helm/index.html
+++ b/master/documentation/getting-started/helm/index.html
@@ -1,2 +1,2 @@
- Helm - WireGuard Portal      

Helm

Installing the Chart

To install the chart with the release name wg-portal:

helm install wg-portal oci://ghcr.io/h44z/charts/wg-portal
+ Helm - WireGuard Portal      

Helm

Installing the Chart

To install the chart with the release name wg-portal:

helm install wg-portal oci://ghcr.io/h44z/charts/wg-portal
 

This command deploy wg-portal on the Kubernetes cluster in the default configuration. The Values section lists the parameters that can be configured during installation.

Values

Key Type Default Description
nameOverride string "" Partially override resource names (adds suffix)
fullnameOverride string "" Fully override resource names
extraDeploy list [] Array of extra objects to deploy with the release
config.advanced tpl/object {} Advanced configuration options.
config.auth tpl/object {} Auth configuration options.
config.core tpl/object {} Core configuration options.
If external admins in auth are defined and there are no admin_user and admin_password defined here, the default admin account will be disabled.
config.database tpl/object {} Database configuration options
config.mail tpl/object {} Mail configuration options
config.statistics tpl/object {} Statistics configuration options
config.web tpl/object {} Web configuration options.
listening_address will be set automatically from service.web.port. external_url is required to enable ingress and certificate resources.
revisionHistoryLimit string 10 The number of old ReplicaSets to retain to allow rollback.
workloadType string "Deployment" Workload type - Deployment or StatefulSet
strategy object {"type":"RollingUpdate"} Update strategy for the workload Valid values are: RollingUpdate or Recreate for Deployment, RollingUpdate or OnDelete for StatefulSet
image.repository string "ghcr.io/h44z/wg-portal" Image repository
image.pullPolicy string "IfNotPresent" Image pull policy
image.tag string "" Overrides the image tag whose default is the chart appVersion
imagePullSecrets list [] Image pull secrets
podAnnotations tpl/object {} Extra annotations to add to the pod
podLabels object {} Extra labels to add to the pod
podSecurityContext object {} Pod Security Context
securityContext.capabilities.add list ["NET_ADMIN"] Add capabilities to the container
initContainers tpl/list [] Pod init containers
sidecarContainers tpl/list [] Pod sidecar containers
dnsPolicy string "ClusterFirst" Set DNS policy for the pod. Valid values are ClusterFirstWithHostNet, ClusterFirst, Default or None.
restartPolicy string "Always" Restart policy for all containers within the pod. Valid values are Always, OnFailure or Never.
hostNetwork string false. Use the host's network namespace.
resources object {} Resources requests and limits
command list [] Overwrite pod command
args list [] Additional pod arguments
env tpl/list [] Additional environment variables
envFrom tpl/list [] Additional environment variables from a secret or configMap
livenessProbe object {} Liveness probe configuration
readinessProbe object {} Readiness probe configuration
startupProbe object {} Startup probe configuration
volumes tpl/list [] Additional volumes
volumeMounts tpl/list [] Additional volumeMounts
nodeSelector object {"kubernetes.io/os":"linux"} Node Selector configuration
tolerations list [] Tolerations configuration
affinity object {} Affinity configuration
service.mixed.enabled bool false Whether to create a single service for the web and wireguard interfaces
service.mixed.type string "LoadBalancer" Service type
service.web.annotations object {} Annotations for the web service
service.web.type string "ClusterIP" Web service type
service.web.port int 8888 Web service port Used for the web interface listener
service.web.appProtocol string "http" Web service appProtocol. Will be auto set to https if certificate is enabled.
service.wireguard.annotations object {} Annotations for the WireGuard service
service.wireguard.type string "LoadBalancer" Wireguard service type
service.wireguard.ports list [51820] Wireguard service ports. Exposes the WireGuard ports for created interfaces. Lowerest port is selected as start port for the first interface. Increment next port by 1 for each additional interface.
service.metrics.port int 8787
ingress.enabled bool false Specifies whether an ingress resource should be created
ingress.className string "" Ingress class name
ingress.annotations object {} Ingress annotations
ingress.tls bool false Ingress TLS configuration. Enable certificate resource or add ingress annotation to create required secret
certificate.enabled bool false Specifies whether a certificate resource should be created. If enabled, certificate will be used for the web.
certificate.issuer.name string "" Certificate issuer name
certificate.issuer.kind string "" Certificate issuer kind (ClusterIssuer or Issuer)
certificate.issuer.group string "cert-manager.io" Certificate issuer group
certificate.duration string "" Optional. Documentation
certificate.renewBefore string "" Optional. Documentation
certificate.commonName string "" Optional. Documentation
certificate.emailAddresses list [] Optional. Documentation
certificate.ipAddresses list [] Optional. Documentation
certificate.keystores object {} Optional. Documentation
certificate.privateKey object {} Optional. Documentation
certificate.secretTemplate object {} Optional. Documentation
certificate.subject object {} Optional. Documentation
certificate.uris list [] Optional. Documentation
certificate.usages list [] Optional. Documentation
persistence.enabled bool false Specifies whether an persistent volume should be created
persistence.annotations object {} Persistent Volume Claim annotations
persistence.storageClass string "" Persistent Volume storage class. If undefined (the default) cluster's default provisioner will be used.
persistence.accessMode string "ReadWriteOnce" Persistent Volume Access Mode
persistence.size string "1Gi" Persistent Volume size
persistence.volumeName string "" Persistent Volume Name (optional)
serviceAccount.create bool true Specifies whether a service account should be created
serviceAccount.annotations object {} Service account annotations
serviceAccount.automount bool false Automatically mount a ServiceAccount's API credentials
serviceAccount.name string "" The name of the service account to use. If not set and create is true, a name is generated using the fullname template
monitoring.enabled bool false Enable Prometheus monitoring.
monitoring.apiVersion string "monitoring.coreos.com/v1" API version of the Prometheus resource. Use azmonitoring.coreos.com/v1 for Azure Managed Prometheus.
monitoring.kind string "PodMonitor" Kind of the Prometheus resource. Could be PodMonitor or ServiceMonitor.
monitoring.labels object {} Resource labels.
monitoring.annotations object {} Resource annotations.
monitoring.interval string 1m Interval at which metrics should be scraped. If not specified config.statistics.data_collection_interval interval is used.
monitoring.metricRelabelings list [] Relabelings to samples before ingestion.
monitoring.relabelings list [] Relabelings to samples before scraping.
monitoring.scrapeTimeout string "" Timeout after which the scrape is ended If not specified, the Prometheus global scrape interval is used.
monitoring.jobLabel string "" The label to use to retrieve the job name from.
monitoring.podTargetLabels object {} Transfers labels on the Kubernetes Pod onto the target.
monitoring.dashboard.enabled bool false Enable Grafana dashboard.
monitoring.dashboard.annotations object {} Annotations for the dashboard ConfigMap.
monitoring.dashboard.labels object {} Additional labels for the dashboard ConfigMap.
monitoring.dashboard.namespace string "" Dashboard ConfigMap namespace Overrides the namespace for the dashboard ConfigMap.
\ No newline at end of file diff --git a/master/documentation/getting-started/reverse-proxy/index.html b/master/documentation/getting-started/reverse-proxy/index.html index b6a0a5a..1a7a756 100644 --- a/master/documentation/getting-started/reverse-proxy/index.html +++ b/master/documentation/getting-started/reverse-proxy/index.html @@ -1,4 +1,4 @@ - Reverse Proxy (HTTPS) - WireGuard Portal

Reverse Proxy (HTTPS)

Reverse Proxy for HTTPS

For production deployments, always serve the WireGuard Portal over HTTPS. You have two options to secure your connection:

Reverse Proxy

Let a front‐end proxy handle HTTPS for you. This also frees you from managing certificates manually and is therefore the preferred option. You can use Nginx, Traefik, Caddy or any other proxy.

Below is an example using a Docker Compose stack with Traefik. It exposes the WireGuard Portal on https://wg.domain.com and redirects initial HTTP traffic to HTTPS.

services:
+ Reverse Proxy (HTTPS) - WireGuard Portal      

Reverse Proxy (HTTPS)

Reverse Proxy for HTTPS

For production deployments, always serve the WireGuard Portal over HTTPS. You have two options to secure your connection:

Reverse Proxy

Let a front‐end proxy handle HTTPS for you. This also frees you from managing certificates manually and is therefore the preferred option. You can use Nginx, Traefik, Caddy or any other proxy.

Below is an example using a Docker Compose stack with Traefik. It exposes the WireGuard Portal on https://wg.domain.com and redirects initial HTTP traffic to HTTPS.

services:
   reverse-proxy:
     image: traefik:v3.3
     restart: unless-stopped
diff --git a/master/documentation/getting-started/sources/index.html b/master/documentation/getting-started/sources/index.html
index 530a733..96c319c 100644
--- a/master/documentation/getting-started/sources/index.html
+++ b/master/documentation/getting-started/sources/index.html
@@ -1,4 +1,4 @@
- Sources - WireGuard Portal      

Sources

To build the application from source files, use the Makefile provided in the repository.

Requirements

Build

# Get source code
+ Sources - WireGuard Portal      

Sources

To build the application from source files, use the Makefile provided in the repository.

Requirements

Build

# Get source code
 git clone https://github.com/h44z/wg-portal -b ${WG_PORTAL_VERSION:-master} --depth 1
 cd wg-portal
 # Build the frontend
diff --git a/master/documentation/monitoring/prometheus/index.html b/master/documentation/monitoring/prometheus/index.html
index 1456fc2..80f1602 100644
--- a/master/documentation/monitoring/prometheus/index.html
+++ b/master/documentation/monitoring/prometheus/index.html
@@ -1,4 +1,4 @@
- Monitoring - WireGuard Portal      

By default, WG-Portal exposes Prometheus metrics on port 8787 if interface/peer statistic data collection is enabled.

Exposed Metrics

Metric Type Description
wireguard_interface_received_bytes_total gauge Bytes received through the interface.
wireguard_interface_sent_bytes_total gauge Bytes sent through the interface.
wireguard_peer_last_handshake_seconds gauge Seconds from the last handshake with the peer.
wireguard_peer_received_bytes_total gauge Bytes received from the peer.
wireguard_peer_sent_bytes_total gauge Bytes sent to the peer.
wireguard_peer_up gauge Peer connection state (boolean: 1/0).

Prometheus Config

Add the following scrape job to your Prometheus config file:

# prometheus.yaml
+ Monitoring - WireGuard Portal      

By default, WG-Portal exposes Prometheus metrics on port 8787 if interface/peer statistic data collection is enabled.

Exposed Metrics

Metric Type Description
wireguard_interface_received_bytes_total gauge Bytes received through the interface.
wireguard_interface_sent_bytes_total gauge Bytes sent through the interface.
wireguard_peer_last_handshake_seconds gauge Seconds from the last handshake with the peer.
wireguard_peer_received_bytes_total gauge Bytes received from the peer.
wireguard_peer_sent_bytes_total gauge Bytes sent to the peer.
wireguard_peer_up gauge Peer connection state (boolean: 1/0).

Prometheus Config

Add the following scrape job to your Prometheus config file:

# prometheus.yaml
 scrape_configs:
   - job_name: wg-portal
     scrape_interval: 60s
diff --git a/master/documentation/overview/index.html b/master/documentation/overview/index.html
index 921a7f8..752d0b8 100644
--- a/master/documentation/overview/index.html
+++ b/master/documentation/overview/index.html
@@ -1 +1 @@
- Overview - WireGuard Portal      

Overview

WireGuard Portal is a simple, web-based configuration portal for WireGuard server management. The portal uses the WireGuard wgctrl library to manage existing VPN interfaces. This allows for the seamless activation or deactivation of new users without disturbing existing VPN connections.

The configuration portal supports using a database (SQLite, MySQL, MsSQL, or Postgres), OAuth or LDAP (Active Directory or OpenLDAP) as a user source for authentication and profile data.

Features

  • Self-hosted - the whole application is a single binary
  • Responsive multi-language web UI written in Vue.js
  • Automatically selects IP from the network pool assigned to the client
  • QR-Code for convenient mobile client configuration
  • Sends email to the client with QR-code and client config
  • Enable / Disable clients seamlessly
  • Generation of wg-quick configuration file (wgX.conf) if required
  • User authentication (database, OAuth, or LDAP)
  • IPv6 ready
  • Docker ready
  • Can be used with existing WireGuard setups
  • Support for multiple WireGuard interfaces
  • Peer Expiry Feature
  • Handles route and DNS settings like wg-quick does
  • Exposes Prometheus metrics for monitoring and alerting
  • REST API for management and client deployment
  • Webhook for custom actions on peer, interface, or user updates
\ No newline at end of file + Overview - WireGuard Portal

Overview

WireGuard Portal is a simple, web-based configuration portal for WireGuard server management. The portal uses the WireGuard wgctrl library to manage existing VPN interfaces. This allows for the seamless activation or deactivation of new users without disturbing existing VPN connections.

The configuration portal supports using a database (SQLite, MySQL, MsSQL, or Postgres), OAuth or LDAP (Active Directory or OpenLDAP) as a user source for authentication and profile data.

Features

  • Self-hosted - the whole application is a single binary
  • Responsive multi-language web UI written in Vue.js
  • Automatically selects IP from the network pool assigned to the client
  • QR-Code for convenient mobile client configuration
  • Sends email to the client with QR-code and client config
  • Enable / Disable clients seamlessly
  • Generation of wg-quick configuration file (wgX.conf) if required
  • User authentication (database, OAuth, or LDAP), Passkey support
  • IPv6 ready
  • Docker ready
  • Can be used with existing WireGuard setups
  • Support for multiple WireGuard interfaces
  • Peer Expiry Feature
  • Handles route and DNS settings like wg-quick does
  • Exposes Prometheus metrics for monitoring and alerting
  • REST API for management and client deployment
  • Webhook for custom actions on peer, interface, or user updates
\ No newline at end of file diff --git a/master/documentation/rest-api/api-doc/index.html b/master/documentation/rest-api/api-doc/index.html index aa5caf0..ea5fbfa 100644 --- a/master/documentation/rest-api/api-doc/index.html +++ b/master/documentation/rest-api/api-doc/index.html @@ -1,5 +1,5 @@ - REST API - WireGuard Portal

REST API

REST API

Upgrade

Major upgrades between different versions may require special procedures, which are described in the following sections.

Upgrade from v1 to v2

⚠ Before upgrading from V1, make sure that you have a backup of your currently working configuration files and database!

To start the upgrade process, start the wg-portal binary with the -migrateFrom parameter. The configuration (config.yaml) for WireGuard Portal must be updated and valid before starting the upgrade.

To upgrade from a previous SQLite database, start wg-portal like:

./wg-portal-amd64 -migrateFrom=old_wg_portal.db
+ Upgrade - WireGuard Portal      

Upgrade

Major upgrades between different versions may require special procedures, which are described in the following sections.

Upgrade from v1 to v2

⚠ Before upgrading from V1, make sure that you have a backup of your currently working configuration files and database!

To start the upgrade process, start the wg-portal binary with the -migrateFrom parameter. The configuration (config.yaml) for WireGuard Portal must be updated and valid before starting the upgrade.

To upgrade from a previous SQLite database, start wg-portal like:

./wg-portal-amd64 -migrateFrom=old_wg_portal.db
 

You can also specify the database type using the parameter -migrateFromType. Supported database types: mysql, mssql, postgres or sqlite.

For example:

./wg-portal-amd64 -migrateFromType=mysql -migrateFrom='user:pass@tcp(1.2.3.4:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local'
 

The upgrade will transform the old, existing database and store the values in the new database specified in the config.yaml configuration file. Ensure that the new database does not contain any data!

If you are using Docker, you can adapt the docker-compose.yml file to start the upgrade process:

services:
   wg-portal:
diff --git a/master/documentation/usage/general/index.html b/master/documentation/usage/general/index.html
new file mode 100644
index 0000000..267d8a1
--- /dev/null
+++ b/master/documentation/usage/general/index.html
@@ -0,0 +1,2 @@
+ General - WireGuard Portal      

General

This documentation section describes the general usage of WireGuard Portal. If you are looking for specific setup instructions, please refer to the Getting Started and Configuration sections, for example, using a Docker deployment.

Basic Concepts

WireGuard Portal is a web-based configuration portal for WireGuard server management. It allows managing multiple WireGuard interfaces and users from a single web UI. WireGuard Interfaces can be categorized into three types:

  • Server: A WireGuard server interface that to which multiple peers can connect. In this mode, it is possible to specify default settings for all peers, such as the IP address range, DNS servers, and MTU size.
  • Client: A WireGuard client interface that can be used to connect to a WireGuard server. Usually, such an interface has exactly one peer.
  • Unknown: This is the default type for imported interfaces. It is encouraged to change the type to either Server or Client after importing the interface.

Accessing the Web UI

The web UI should be accessed via the URL specified in the external_url property of the configuration file. By default, WireGuard Portal listens on port 8888 for HTTP connections. Check the Security section for more information on securing the web UI.

So the default URL to access the web UI is:

http://localhost:8888
+

A freshly set-up WireGuard Portal instance will have a default admin user with the username admin@wgportal.local and the password wgportal-default. You can and should override the default credentials in the configuration file. Make sure to change the default password immediately after the first login!

Basic UI Description

WireGuard Portal Web UI

As seen in the screenshot above, the web UI is divided into several sections which are accessible via the navigation bar on the top of the screen.

  1. Home: The landing page of WireGuard Portal. It provides a staring point for the user to access the different sections of the web UI. It also provides quick links to WireGuard Client downloads or official documentation.
  2. Interfaces: This section allows you to manage the WireGuard interfaces. You can add, edit, or delete interfaces, as well as view their status and statistics. Peers for each interface can be managed here as well.
  3. Users: This section allows you to manage the users of WireGuard Portal. You can add, edit, or delete users, as well as view their status and statistics.
  4. Key Generator: This section allows you to generate WireGuard keys locally on your browser. The generated keys are never sent to the server. This is useful if you want to generate keys for a new peer without having to store the private keys in the database.
  5. Profile / Settings: This section allows you to access your own profile page, settings, and audit logs.

Interface View

WireGuard Portal Interface View

The interface view provides an overview of the WireGuard interfaces and peers configured in WireGuard Portal.

The most important elements are:

  1. Interface Selector: This dropdown allows you to select the WireGuard interface you want to manage. All further actions will be performed on the selected interface.
  2. Create new Interface: This button allows you to create a new WireGuard interface.
  3. Interface Overview: This section provides an overview of the selected WireGuard interface. It shows the interface type, number of peers, and other important information.
  4. List of Peers: This section provides a list of all peers associated with the selected WireGuard interface. You can view, add, edit, or delete peers from this list.
  5. Add new Peer: This button allows you to add a new peer to the selected WireGuard interface.
  6. Add multiple Peers: This button allows you to add multiple peers to the selected WireGuard interface. This is useful if you want to add a large number of peers at once.
\ No newline at end of file diff --git a/master/documentation/usage/ldap/index.html b/master/documentation/usage/ldap/index.html new file mode 100644 index 0000000..bed1e2f --- /dev/null +++ b/master/documentation/usage/ldap/index.html @@ -0,0 +1,6 @@ + LDAP - WireGuard Portal

LDAP

WireGuard Portal lets you hook up any LDAP server such as Active Directory or OpenLDAP for both authentication and user sync. You can even register multiple LDAP servers side-by-side. When someone logs in via LDAP, their specific provider is remembered, so there's no risk of cross-provider conflicts. Details on the log-in process can be found in the Security documentation.

If you enable LDAP synchronization, all users within the LDAP directory will be created automatically in the WireGuard Portal database if they do not exist. If a user is disabled or deleted in LDAP, the user will be disabled in WireGuard Portal as well. The synchronization process can be fine-tuned by multiple parameters, which are described below.

LDAP Synchronization

WireGuard Portal can automatically synchronize users from LDAP to the database. To enable this feature, set the sync_interval property in the LDAP provider configuration to a value greater than "0". The value is a string representing a duration, such as "15m" for 15 minutes or "1h" for 1 hour (check the exact format definition for details). The synchronization process will run in the background and synchronize users from LDAP to the database at the specified interval. Also make sure that the sync_filter property is a well-formed LDAP filter, or synchronization will fail.

Limiting Synchronization to Specific Users

Use the sync_filter property in your LDAP provider block to restrict which users get synchronized. It accepts any valid LDAP search filter, only entries matching that filter will be pulled into the portal's database.

For example, to import only users with a mail attribute:

auth:
+  ldap:
+    - id: ldap
+      # ... other settings
+      sync_filter: (mail=*)
+

Disable Missing Users

If you set the disable_missing property to true, any user that is not found in LDAP during synchronization will be disabled in WireGuard Portal. All peers associated with that user will also be disabled.

If you want a user and its peers to be automatically re-enabled once they are found in LDAP again, set the auto_re_enable property to true. This will only re-enable the user if they where disabled by the synchronization process. Manually disabled users will not be re-enabled.

\ No newline at end of file diff --git a/master/documentation/usage/security/index.html b/master/documentation/usage/security/index.html new file mode 100644 index 0000000..5d681b7 --- /dev/null +++ b/master/documentation/usage/security/index.html @@ -0,0 +1,28 @@ + Security - WireGuard Portal

Security

This section describes the security features available to administrators for hardening WireGuard Portal and protecting its data.

Authentication

WireGuard Portal supports multiple authentication methods, including:

  • Local user accounts
  • LDAP authentication
  • OAuth and OIDC authentication
  • Passkey authentication (WebAuthn)

Users can have two roles which limit their permissions in WireGuard Portal:

  • User: Can manage their own account and peers.
  • Admin: Can manage all users and peers, including the ability to manage WireGuard interfaces.

Password Security

WireGuard Portal supports username and password authentication for both local and LDAP-backed accounts. Local users are stored in the database, while LDAP users are authenticated against an external LDAP server.

On initial startup, WireGuard Portal automatically creates a local admin account with the password wgportal-default.

⚠ This password must be changed immediately after the first login.

The minimum password length for all local users can be configured in the auth section of the configuration file. The default value is 16 characters, see min_password_length. The minimum password length is also enforced for the default admin user.

Passkey (WebAuthn) Authentication

Besides the standard authentication mechanisms, WireGuard Portal supports Passkey authentication. This feature is enabled by default and can be configured in the webauthn section of the configuration file.

Users can register multiple Passkeys to their account. These Passkeys can be used to log in to the web UI as long as the user is not locked.

⚠ Passkey authentication does not disable password authentication. The password can still be used to log in (e.g., as a fallback).

To register a Passkey, open the settings page (1) in the web UI and click on the "Register Passkey" (2) button.

Passkey UI

OAuth and OIDC Authentication

WireGuard Portal supports OAuth and OIDC authentication. You can use any OAuth or OIDC provider that supports the authorization code flow, such as Google, GitHub, or Keycloak.

For OAuth or OIDC to work, you need to configure the external_url property in the web section of the configuration file. If you are planning to expose the portal to the internet, make sure that the external_url is configured to use HTTPS.

To add OIDC or OAuth authentication to WireGuard Portal, create a Client-ID and Client-Secret in your OAuth provider and configure a new authentication provider in the auth section of the configuration file. Make sure that each configured provider has a unique provider_name property set. Samples can be seen here.

Limiting Login to Specific Domains

You can limit the login to specific domains by setting the allowed_domains property for OAuth or OIDC providers. This property is a comma-separated list of domains that are allowed to log in. The user's email address is checked against this list. For example, if you want to allow only users with an email address ending in outlook.com to log in, set the property as follows:

auth:
+  oidc:
+    - provider_name: "oidc1"
+      # ... other settings
+      allowed_domains:
+        - "outlook.com"
+

Limit Login to Existing Users

You can limit the login to existing users only by setting the registration_enabled property to false for OAuth or OIDC providers. If registration is enabled, new users will be created in the database when they log in for the first time.

Admin Mapping

You can map users to admin roles based on their attributes in the OAuth or OIDC provider. To do this, set the admin_mapping property for the provider. Administrative access can either be mapped by a specific attribute or by group membership.

Attribute specific mapping can be achieved by setting the admin_value_regex and the is_admin property. The admin_value_regex property is a regular expression that is matched against the value of the is_admin attribute. The user is granted admin access if the regex matches the attribute value.

Example:

auth:
+  oidc:
+    - provider_name: "oidc1"
+      # ... other settings
+      field_map:
+        is_admin: "wg_admin_prop"
+      admin_mapping:
+        admin_value_regex: "^true$"
+
The example above will grant admin access to users with the wg_admin_prop attribute set to true.

Group membership mapping can be achieved by setting the admin_group_regex and user_groups property. The admin_group_regex property is a regular expression that is matched against the group names of the user. The user is granted admin access if the regex matches any of the group names.

Example:

auth:
+  oidc:
+    - provider_name: "oidc1"
+      # ... other settings
+      field_map:
+        user_groups: "groups"
+      admin_mapping:
+        admin_group_regex: "^the-admin-group$"
+
The example above will grant admin access to users who are members of the the-admin-group group.

LDAP Authentication

WireGuard Portal supports LDAP authentication. You can use any LDAP server that supports the LDAP protocol, such as Active Directory or OpenLDAP. Multiple LDAP servers can be configured in the auth section of the configuration file. WireGuard Portal remembers the authentication provider of the user and therefore avoids conflicts between multiple LDAP providers.

To configure LDAP authentication, create a new ldap authentication provider in the auth section of the configuration file.

Limiting Login to Specific Users

You can limit the login to specific users by setting the login_filter property for LDAP provider. This filter uses the LDAP search filter syntax. The username can be inserted into the query by placing the {{login_identifier}} placeholder in the filter. This placeholder will then be replaced with the username entered by the user during login.

For example, if you want to allow only users with the objectClass attribute set to organizationalPerson to log in, set the property as follows:

auth:
+  ldap:
+    - provider_name: "ldap1"
+      # ... other settings
+      login_filter: "(&(objectClass=organizationalPerson)(uid={{login_identifier}}))"
+

The login_filter should always be designed to return at most one user.

Limit Login to Existing Users

You can limit the login to existing users only by setting the registration_enabled property to false for LDAP providers. If registration is enabled, new users will be created in the database when they log in for the first time.

Admin Mapping

You can map users to admin roles based on their group membership in the LDAP server. To do this, set the admin_group and memberof property for the provider. The admin_group property defines the distinguished name of the group that is allowed to log in as admin. All groups that are listed in the memberof attribute of the user will be checked against this group. If one of the groups matches, the user is granted admin access.

UI and API Access

WireGuard Portal provides a web UI and a REST API for user interaction. It is important to secure these interfaces to prevent unauthorized access and data breaches.

HTTPS

It is recommended to use HTTPS for all communication with the portal to prevent eavesdropping.

Event though, WireGuard Portal supports HTTPS out of the box, it is recommended to use a reverse proxy like Nginx or Traefik to handle SSL termination and other security features. A detailed explanation is available in the Reverse Proxy section.

\ No newline at end of file diff --git a/master/index.html b/master/index.html index 2c8d845..144dbb5 100644 --- a/master/index.html +++ b/master/index.html @@ -292,4 +292,4 @@ background: var(--md-accent-fg-color--transparent); } -

A beautiful and simple UI to manage your WireGuard peers and interfaces

WireGuard Portal is an open source web-based user interface that makes it easy to setup and manage WireGuard VPN connections. It's built on top of WireGuard's official wgctrl library.

Get started

More information about WireGuard

WireGuard® is an extremely simple yet fast and modern VPN that utilizes state-of-the-art cryptography.

WireGuard uses state-of-the-art cryptography and still manages to be as easy to configure and deploy as SSH. A combination of extremely high-speed cryptographic primitives and the fact that WireGuard lives inside the Linux kernel means that secure networking can be very high-speed. It is suitable for both small embedded devices like smartphones and fully loaded backbone routers.

\ No newline at end of file +

A beautiful and simple UI to manage your WireGuard peers and interfaces

WireGuard Portal is an open source web-based user interface that makes it easy to setup and manage WireGuard VPN connections. It's built on top of WireGuard's official wgctrl library.

Get started

More information about WireGuard

WireGuard® is an extremely simple yet fast and modern VPN that utilizes state-of-the-art cryptography.

WireGuard uses state-of-the-art cryptography and still manages to be as easy to configure and deploy as SSH. A combination of extremely high-speed cryptographic primitives and the fact that WireGuard lives inside the Linux kernel means that secure networking can be very high-speed. It is suitable for both small embedded devices like smartphones and fully loaded backbone routers.

\ No newline at end of file diff --git a/master/search/search_index.json b/master/search/search_index.json index 9b03e3a..e41e340 100644 --- a/master/search/search_index.json +++ b/master/search/search_index.json @@ -1 +1 @@ -{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"documentation/overview/","title":"Overview","text":"

WireGuard Portal is a simple, web-based configuration portal for WireGuard server management. The portal uses the WireGuard wgctrl library to manage existing VPN interfaces. This allows for the seamless activation or deactivation of new users without disturbing existing VPN connections.

The configuration portal supports using a database (SQLite, MySQL, MsSQL, or Postgres), OAuth or LDAP (Active Directory or OpenLDAP) as a user source for authentication and profile data.

"},{"location":"documentation/overview/#features","title":"Features","text":"
  • Self-hosted - the whole application is a single binary
  • Responsive multi-language web UI written in Vue.js
  • Automatically selects IP from the network pool assigned to the client
  • QR-Code for convenient mobile client configuration
  • Sends email to the client with QR-code and client config
  • Enable / Disable clients seamlessly
  • Generation of wg-quick configuration file (wgX.conf) if required
  • User authentication (database, OAuth, or LDAP)
  • IPv6 ready
  • Docker ready
  • Can be used with existing WireGuard setups
  • Support for multiple WireGuard interfaces
  • Peer Expiry Feature
  • Handles route and DNS settings like wg-quick does
  • Exposes Prometheus metrics for monitoring and alerting
  • REST API for management and client deployment
  • Webhook for custom actions on peer, interface, or user updates
"},{"location":"documentation/configuration/examples/","title":"Examples","text":"

Below are some sample YAML configurations demonstrating how to override some default values.

"},{"location":"documentation/configuration/examples/#basic","title":"Basic","text":"
core:\n  admin_user: test@example.com\n  admin_password: password\n  admin_api_token: super-s3cr3t-api-token-or-a-UUID\n  import_existing: false\n  create_default_peer: true\n  self_provisioning_allowed: true\n\nweb:\n  site_title: My WireGuard Server\n  site_company_name: My Company\n  listening_address: :8080\n  external_url: https://my.external-domain.com\n  csrf_secret: super-s3cr3t-csrf\n  session_secret: super-s3cr3t-session\n  request_logging: true\n\nadvanced:\n  log_level: trace\n  log_pretty: true\n  log_json: false\n  config_storage_path: /etc/wireguard\n  expiry_check_interval: 5m\n\ndatabase:\n  debug: true\n  type: sqlite\n  dsn: data/sqlite.db\n  encryption_passphrase: change-this-s3cr3t-encryption-passphrase\n
"},{"location":"documentation/configuration/examples/#ldap-authentication-and-synchronization","title":"LDAP Authentication and Synchronization","text":"
# ... (basic configuration)\n\nauth:\n  ldap:\n    # a sample LDAP provider with user sync enabled\n    - id: ldap\n      provider_name: Active Directory\n      url: ldap://srv-ad1.company.local:389\n      bind_user: ldap_wireguard@company.local\n      bind_pass: super-s3cr3t-ldap\n      base_dn: DC=COMPANY,DC=LOCAL\n      login_filter: (&(objectClass=organizationalPerson)(mail={{login_identifier}})(!userAccountControl:1.2.840.113556.1.4.803:=2))\n      sync_interval: 15m\n      sync_filter: (&(objectClass=organizationalPerson)(!userAccountControl:1.2.840.113556.1.4.803:=2)(mail=*))\n      disable_missing: true\n      field_map:\n        user_identifier: sAMAccountName\n        email: mail\n        firstname: givenName\n        lastname: sn\n        phone: telephoneNumber\n        department: department\n        memberof: memberOf\n      admin_group: CN=WireGuardAdmins,OU=Some-OU,DC=COMPANY,DC=LOCAL\n      registration_enabled: true\n      log_user_info: true\n
"},{"location":"documentation/configuration/examples/#openid-connect-oidc-authentication","title":"OpenID Connect (OIDC) Authentication","text":"
# ... (basic configuration)\n\nauth:\n  oidc:\n    # A sample Entra ID provider with environment variable substitution.\n    # Only users with an @outlook.com email address are allowed to register or login.\n    - id: azure\n      provider_name: azure\n      display_name: Login with</br>Entra ID\n      registration_enabled: true\n      base_url: \"https://login.microsoftonline.com/${AZURE_TENANT_ID}/v2.0\"\n      client_id: \"${AZURE_CLIENT_ID}\"\n      client_secret: \"${AZURE_CLIENT_SECRET}\"\n      allowed_domains:\n        - \"outlook.com\"\n      extra_scopes:\n        - profile\n        - email\n\n    # a sample provider where users with the attribute `wg_admin` set to `true` are considered as admins\n    - id: oidc-with-admin-attribute\n      provider_name: google\n      display_name: Login with</br>Google\n      base_url: https://accounts.google.com\n      client_id: the-client-id-1234.apps.googleusercontent.com\n      client_secret: A_CLIENT_SECRET\n      extra_scopes:\n        - https://www.googleapis.com/auth/userinfo.email\n        - https://www.googleapis.com/auth/userinfo.profile\n      field_map:\n        user_identifier: sub\n        email: email\n        firstname: given_name\n        lastname: family_name\n        phone: phone_number\n        department: department\n        is_admin: wg_admin\n      admin_mapping:\n        admin_value_regex: ^true$\n      registration_enabled: true\n      log_user_info: true\n\n    # a sample provider where users in the group `the-admin-group` are considered as admins\n    - id: oidc-with-admin-group\n      provider_name: google2\n      display_name: Login with</br>Google2\n      base_url: https://accounts.google.com\n      client_id: another-client-id-1234.apps.googleusercontent.com\n      client_secret: A_CLIENT_SECRET\n      extra_scopes:\n        - https://www.googleapis.com/auth/userinfo.email\n        - https://www.googleapis.com/auth/userinfo.profile\n      field_map:\n        user_identifier: sub\n        email: email\n        firstname: given_name\n        lastname: family_name\n        phone: phone_number\n        department: department\n        user_groups: groups\n      admin_mapping:\n        admin_group_regex: ^the-admin-group$\n      registration_enabled: true\n      log_user_info: true\n
"},{"location":"documentation/configuration/examples/#plain-oauth2-authentication","title":"Plain OAuth2 Authentication","text":"
# ... (basic configuration)\n\nauth:\n  oauth:\n    # a sample provider where users with the attribute `this-attribute-must-be-true` set to `true` or `True`\n    # are considered as admins\n    - id: google_plain_oauth-with-admin-attribute\n      provider_name: google3\n      display_name: Login with</br>Google3\n      client_id: another-client-id-1234.apps.googleusercontent.com\n      client_secret: A_CLIENT_SECRET\n      auth_url: https://accounts.google.com/o/oauth2/v2/auth\n      token_url: https://oauth2.googleapis.com/token\n      user_info_url: https://openidconnect.googleapis.com/v1/userinfo\n      scopes:\n        - openid\n        - email\n        - profile\n      field_map:\n        user_identifier: sub\n        email: email\n        firstname: name\n        is_admin: this-attribute-must-be-true\n      admin_mapping:\n        admin_value_regex: ^(True|true)$\n      registration_enabled: true\n\n    # a sample provider where either users with the attribute `this-attribute-must-be-true` set to `true` or \n    # users in the group `admin-group-name` are considered as admins\n    - id: google_plain_oauth_with_groups\n      provider_name: google4\n      display_name: Login with</br>Google4\n      client_id: another-client-id-1234.apps.googleusercontent.com\n      client_secret: A_CLIENT_SECRET\n      auth_url: https://accounts.google.com/o/oauth2/v2/auth\n      token_url: https://oauth2.googleapis.com/token\n      user_info_url: https://openidconnect.googleapis.com/v1/userinfo\n      scopes:\n        - openid\n        - email\n        - profile\n        - i-want-some-groups\n      field_map:\n        email: email\n        firstname: name\n        user_identifier: sub\n        is_admin: this-attribute-must-be-true\n        user_groups: groups\n      admin_mapping:\n        admin_value_regex: ^true$\n        admin_group_regex: ^admin-group-name$\n      registration_enabled: true\n      log_user_info: true\n
"},{"location":"documentation/configuration/overview/","title":"Overview","text":"

This page provides an overview of all available configuration options for WireGuard Portal.

You can supply these configurations in a YAML file when starting the Portal. The path of the configuration file defaults to config/config.yaml (or config/config.yml) in the working directory of the executable. It is possible to override the configuration filepath using the environment variable WG_PORTAL_CONFIG. For example: WG_PORTAL_CONFIG=/etc/wg-portal/config.yaml ./wg-portal. Also, environment variable substitution in the config file is supported. Refer to the syntax.

Configuration examples are available on the Examples page.

Default configuration
core:\n  admin_user: admin@wgportal.local\n  admin_password: wgportal\n  admin_api_token: \"\"\n  editable_keys: true\n  create_default_peer: false\n  create_default_peer_on_creation: false\n  re_enable_peer_after_user_enable: true\n  delete_peer_after_user_deleted: false\n  self_provisioning_allowed: false\n  import_existing: true\n  restore_state: true\n\nadvanced:\n  log_level: info\n  log_pretty: false\n  log_json: false\n  start_listen_port: 51820\n  start_cidr_v4: 10.11.12.0/24\n  start_cidr_v6: fdfd:d3ad:c0de:1234::0/64\n  use_ip_v6: true\n  config_storage_path: \"\"\n  expiry_check_interval: 15m\n  rule_prio_offset: 20000\n  route_table_offset: 20000\n  api_admin_only: true\n\ndatabase:\n  debug: false\n  slow_query_threshold: \"0\"\n  type: sqlite\n  dsn: data/sqlite.db\n  encryption_passphrase: \"\"\n\nstatistics:\n  use_ping_checks: true\n  ping_check_workers: 10\n  ping_unprivileged: false\n  ping_check_interval: 1m\n  data_collection_interval: 1m\n  collect_interface_data: true\n  collect_peer_data: true\n  collect_audit_data: true\n  listening_address: :8787\n\nmail:\n  host: 127.0.0.1\n  port: 25\n  encryption: none\n  cert_validation: true\n  username: \"\"\n  password: \"\"\n  auth_type: plain\n  from: Wireguard Portal <noreply@wireguard.local>\n  link_only: false\n\nauth:\n  oidc: []\n  oauth: []\n  ldap: []\n\nweb:\n  listening_address: :8888\n  external_url: http://localhost:8888\n  site_company_name: WireGuard Portal\n  site_title: WireGuard Portal\n  session_identifier: wgPortalSession\n  session_secret: very_secret\n  csrf_secret: extremely_secret\n  request_logging: false\n  expose_host_info: false\n  cert_file: \"\"\n  key_File: \"\"\n\nwebhook:\n  url: \"\"\n  authentication: \"\"\n  timeout: 10s\n

Below you will find sections like core, advanced, database, statistics, mail, auth, web and webhook. Each section describes the individual configuration keys, their default values, and a brief explanation of their purpose.

"},{"location":"documentation/configuration/overview/#core","title":"Core","text":"

These are the primary configuration options that control fundamental WireGuard Portal behavior. More advanced options are found in the subsequent Advanced section.

"},{"location":"documentation/configuration/overview/#admin_user","title":"admin_user","text":"
  • Default: admin@wgportal.local
  • Description: The administrator user. This user will be created as a default admin if it does not yet exist.
"},{"location":"documentation/configuration/overview/#admin_password","title":"admin_password","text":"
  • Default: wgportal
  • Description: The administrator password. The default password of wgportal should be changed immediately.
"},{"location":"documentation/configuration/overview/#admin_api_token","title":"admin_api_token","text":"
  • Default: (empty)
  • Description: An API token for the admin user. If a token is provided, the REST API can be accessed using this token. If empty, the API is initially disabled for the admin user.
"},{"location":"documentation/configuration/overview/#editable_keys","title":"editable_keys","text":"
  • Default: true
  • Description: Allow editing of WireGuard key-pairs directly in the UI.
"},{"location":"documentation/configuration/overview/#create_default_peer","title":"create_default_peer","text":"
  • Default: false
  • Description: If a user logs in for the first time with no existing peers, automatically create a new WireGuard peer for all server interfaces.
"},{"location":"documentation/configuration/overview/#create_default_peer_on_creation","title":"create_default_peer_on_creation","text":"
  • Default: false
  • Description: If an LDAP user is created (e.g., through LDAP sync) and has no peers, automatically create a new WireGuard peer for all server interfaces.
"},{"location":"documentation/configuration/overview/#re_enable_peer_after_user_enable","title":"re_enable_peer_after_user_enable","text":"
  • Default: true
  • Description: Re-enable all peers that were previously disabled if the associated user is re-enabled.
"},{"location":"documentation/configuration/overview/#delete_peer_after_user_deleted","title":"delete_peer_after_user_deleted","text":"
  • Default: false
  • Description: If a user is deleted, remove all linked peers. Otherwise, peers remain but are disabled.
"},{"location":"documentation/configuration/overview/#self_provisioning_allowed","title":"self_provisioning_allowed","text":"
  • Default: false
  • Description: Allow registered (non-admin) users to self-provision peers from their profile page.
"},{"location":"documentation/configuration/overview/#import_existing","title":"import_existing","text":"
  • Default: true
  • Description: On startup, import existing WireGuard interfaces and peers into WireGuard Portal.
"},{"location":"documentation/configuration/overview/#restore_state","title":"restore_state","text":"
  • Default: true
  • Description: Restore the WireGuard interface states (up/down) that existed before WireGuard Portal started.
"},{"location":"documentation/configuration/overview/#advanced","title":"Advanced","text":"

Additional or more specialized configuration options for logging and interface creation details.

"},{"location":"documentation/configuration/overview/#log_level","title":"log_level","text":"
  • Default: info
  • Description: The log level used by the application. Valid options are: trace, debug, info, warn, error.
"},{"location":"documentation/configuration/overview/#log_pretty","title":"log_pretty","text":"
  • Default: false
  • Description: If true, log messages are colorized and formatted for readability (pretty-print).
"},{"location":"documentation/configuration/overview/#log_json","title":"log_json","text":"
  • Default: false
  • Description: If true, log messages are structured in JSON format.
"},{"location":"documentation/configuration/overview/#start_listen_port","title":"start_listen_port","text":"
  • Default: 51820
  • Description: The first port to use when automatically creating new WireGuard interfaces.
"},{"location":"documentation/configuration/overview/#start_cidr_v4","title":"start_cidr_v4","text":"
  • Default: 10.11.12.0/24
  • Description: The initial IPv4 subnet to use when automatically creating new WireGuard interfaces.
"},{"location":"documentation/configuration/overview/#start_cidr_v6","title":"start_cidr_v6","text":"
  • Default: fdfd:d3ad:c0de:1234::0/64
  • Description: The initial IPv6 subnet to use when automatically creating new WireGuard interfaces.
"},{"location":"documentation/configuration/overview/#use_ip_v6","title":"use_ip_v6","text":"
  • Default: true
  • Description: Enable or disable IPv6 support.
"},{"location":"documentation/configuration/overview/#config_storage_path","title":"config_storage_path","text":"
  • Default: (empty)
  • Description: Path to a directory where wg-quick style configuration files will be stored (if you need local filesystem configs).
"},{"location":"documentation/configuration/overview/#expiry_check_interval","title":"expiry_check_interval","text":"
  • Default: 15m
  • Description: Interval after which existing peers are checked if they are expired. Format uses s, m, h, d for seconds, minutes, hours, days, see time.ParseDuration.
"},{"location":"documentation/configuration/overview/#rule_prio_offset","title":"rule_prio_offset","text":"
  • Default: 20000
  • Description: Offset for IP route rule priorities when configuring routing.
"},{"location":"documentation/configuration/overview/#route_table_offset","title":"route_table_offset","text":"
  • Default: 20000
  • Description: Offset for IP route table IDs when configuring routing.
"},{"location":"documentation/configuration/overview/#api_admin_only","title":"api_admin_only","text":"
  • Default: true
  • Description: If true, the public REST API is accessible only to admin users. The API docs live at /api/v1/doc.html.
"},{"location":"documentation/configuration/overview/#database","title":"Database","text":"

Configuration for the underlying database used by WireGuard Portal. Supported databases include SQLite, MySQL, Microsoft SQL Server, and Postgres.

If sensitive values (like private keys) should be stored in an encrypted format, set the encryption_passphrase option.

"},{"location":"documentation/configuration/overview/#debug","title":"debug","text":"
  • Default: false
  • Description: If true, logs all database statements (verbose).
"},{"location":"documentation/configuration/overview/#slow_query_threshold","title":"slow_query_threshold","text":"
  • Default: \"0\"
  • Description: A time threshold (e.g., 100ms) above which queries are considered slow and logged as warnings. If zero, slow query logging is disabled. Format uses s, ms for seconds, milliseconds, see time.ParseDuration. The value must be a string.
"},{"location":"documentation/configuration/overview/#type","title":"type","text":"
  • Default: sqlite
  • Description: The database type. Valid options: sqlite, mssql, mysql, postgres.
"},{"location":"documentation/configuration/overview/#dsn","title":"dsn","text":"
  • Default: data/sqlite.db
  • Description: The Data Source Name (DSN) for connecting to the database. For example:
    user:pass@tcp(1.2.3.4:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local\n
"},{"location":"documentation/configuration/overview/#encryption_passphrase","title":"encryption_passphrase","text":"
  • Default: (empty)
  • Description: Passphrase for encrypting sensitive values such as private keys in the database. Encryption is only applied if this passphrase is set. Important: Once you enable encryption by setting this passphrase, you cannot disable it or change it afterward. New or updated records will be encrypted; existing data remains in plaintext until it\u2019s next modified.
"},{"location":"documentation/configuration/overview/#statistics","title":"Statistics","text":"

Controls how WireGuard Portal collects and reports usage statistics, including ping checks and Prometheus metrics.

"},{"location":"documentation/configuration/overview/#use_ping_checks","title":"use_ping_checks","text":"
  • Default: true
  • Description: Enable periodic ping checks to verify that peers remain responsive.
"},{"location":"documentation/configuration/overview/#ping_check_workers","title":"ping_check_workers","text":"
  • Default: 10
  • Description: Number of parallel worker processes for ping checks.
"},{"location":"documentation/configuration/overview/#ping_unprivileged","title":"ping_unprivileged","text":"
  • Default: false
  • Description: If false, ping checks run without root privileges. This is currently considered BETA.
"},{"location":"documentation/configuration/overview/#ping_check_interval","title":"ping_check_interval","text":"
  • Default: 1m
  • Description: Interval between consecutive ping checks for all peers. Format uses s, m, h, d for seconds, minutes, hours, days, see time.ParseDuration.
"},{"location":"documentation/configuration/overview/#data_collection_interval","title":"data_collection_interval","text":"
  • Default: 1m
  • Description: Interval between data collection cycles (bytes sent/received, handshake times, etc.). Format uses s, m, h, d for seconds, minutes, hours, days, see time.ParseDuration.
"},{"location":"documentation/configuration/overview/#collect_interface_data","title":"collect_interface_data","text":"
  • Default: true
  • Description: If true, collects interface-level data (bytes in/out) for monitoring and statistics.
"},{"location":"documentation/configuration/overview/#collect_peer_data","title":"collect_peer_data","text":"
  • Default: true
  • Description: If true, collects peer-level data (bytes, last handshake, endpoint, etc.).
"},{"location":"documentation/configuration/overview/#collect_audit_data","title":"collect_audit_data","text":"
  • Default: true
  • Description: If true, logs certain portal events (such as user logins) to the database.
"},{"location":"documentation/configuration/overview/#listening_address","title":"listening_address","text":"
  • Default: :8787
  • Description: Address and port for the integrated Prometheus metric server (e.g., :8787 or 127.0.0.1:8787).
"},{"location":"documentation/configuration/overview/#mail","title":"Mail","text":"

Options for configuring email notifications or sending peer configurations via email.

"},{"location":"documentation/configuration/overview/#host","title":"host","text":"
  • Default: 127.0.0.1
  • Description: Hostname or IP of the SMTP server.
"},{"location":"documentation/configuration/overview/#port","title":"port","text":"
  • Default: 25
  • Description: Port number for the SMTP server.
"},{"location":"documentation/configuration/overview/#encryption","title":"encryption","text":"
  • Default: none
  • Description: SMTP encryption type. Valid values: none, tls, starttls.
"},{"location":"documentation/configuration/overview/#cert_validation","title":"cert_validation","text":"
  • Default: true
  • Description: If true, validate the SMTP server certificate (relevant if encryption = tls).
"},{"location":"documentation/configuration/overview/#username","title":"username","text":"
  • Default: (empty)
  • Description: Optional SMTP username for authentication.
"},{"location":"documentation/configuration/overview/#password","title":"password","text":"
  • Default: (empty)
  • Description: Optional SMTP password for authentication.
"},{"location":"documentation/configuration/overview/#auth_type","title":"auth_type","text":"
  • Default: plain
  • Description: SMTP authentication type. Valid values: plain, login, crammd5.
"},{"location":"documentation/configuration/overview/#from","title":"from","text":"
  • Default: Wireguard Portal <noreply@wireguard.local>
  • Description: The default \"From\" address when sending emails.
"},{"location":"documentation/configuration/overview/#link_only","title":"link_only","text":"
  • Default: false
  • Description: If true, emails only contain a link to WireGuard Portal, rather than attaching the full configuration.
"},{"location":"documentation/configuration/overview/#auth","title":"Auth","text":"

WireGuard Portal supports multiple authentication strategies, including OpenID Connect (oidc), OAuth (oauth), and LDAP (ldap). Each can have multiple providers configured. Below are the relevant keys.

"},{"location":"documentation/configuration/overview/#oidc","title":"OIDC","text":"

The oidc array contains a list of OpenID Connect providers. Below are the properties for each OIDC provider entry inside auth.oidc:

"},{"location":"documentation/configuration/overview/#provider_name","title":"provider_name","text":"
  • Default: (empty)
  • Description: A unique name for this provider. Must not conflict with other providers.
"},{"location":"documentation/configuration/overview/#display_name","title":"display_name","text":"
  • Default: (empty)
  • Description: A user-friendly name shown on the login page (e.g., \"Login with Google\").
"},{"location":"documentation/configuration/overview/#base_url","title":"base_url","text":"
  • Default: (empty)
  • Description: The OIDC provider\u2019s base URL (e.g., https://accounts.google.com).
"},{"location":"documentation/configuration/overview/#client_id","title":"client_id","text":"
  • Default: (empty)
  • Description: The OAuth client ID from the OIDC provider.
"},{"location":"documentation/configuration/overview/#client_secret","title":"client_secret","text":"
  • Default: (empty)
  • Description: The OAuth client secret from the OIDC provider.
"},{"location":"documentation/configuration/overview/#extra_scopes","title":"extra_scopes","text":"
  • Default: (empty)
  • Description: A list of additional OIDC scopes (e.g., profile, email).
"},{"location":"documentation/configuration/overview/#allowed_domains","title":"allowed_domains","text":"
  • Default: (empty)
  • Description: A list of allowlisted domains. Only users with email addresses in these domains can log in or register. This is useful for restricting access to specific organizations or groups.
"},{"location":"documentation/configuration/overview/#field_map","title":"field_map","text":"
  • Default: (empty)
  • Description: Maps OIDC claims to WireGuard Portal user fields.
  • Available fields: user_identifier, email, firstname, lastname, phone, department, is_admin, user_groups.

    Field Typical OIDC Claim Explanation user_identifier sub or preferred_username A unique identifier for the user. Often the OIDC sub claim is used because it\u2019s guaranteed to be unique for the user within the IdP. Some providers also support preferred_username if it\u2019s unique. email email The user\u2019s email address as provided by the IdP. Not always verified, depending on IdP settings. firstname given_name The user\u2019s first name, typically provided by the IdP in the given_name claim. lastname family_name The user\u2019s last (family) name, typically provided by the IdP in the family_name claim. phone phone_number The user\u2019s phone number. This may require additional scopes/permissions from the IdP to access. department Custom claim (e.g., department) If the IdP can provide organizational data, it may store it in a custom claim. Adjust accordingly (e.g., department, org, or another attribute). is_admin Custom claim or derived role If the IdP returns a role or admin flag, you can map that to is_admin. Often this is managed through custom claims or group membership. user_groups groups or another custom claim A list of group memberships for the user. Some IdPs provide groups out of the box; others require custom claims or directory lookups.
"},{"location":"documentation/configuration/overview/#admin_mapping","title":"admin_mapping","text":"
  • Default: (empty)
  • Description: WgPortal can grant a user admin rights by matching the value of the is_admin claim against a regular expression. Alternatively, a regular expression can be used to check if a user is member of a specific group listed in the user_group claim. The regular expressions are defined in admin_value_regex and admin_group_regex.
    • admin_value_regex: A regular expression to match the is_admin claim. By default, this expression matches the string \"true\" (^true$).
    • admin_group_regex: A regular expression to match the user_groups claim. Each entry in the user_groups claim is checked against this regex.
"},{"location":"documentation/configuration/overview/#registration_enabled","title":"registration_enabled","text":"
  • Default: (empty)
  • Description: If true, a new user will be created in WireGuard Portal if not already present.
"},{"location":"documentation/configuration/overview/#log_user_info","title":"log_user_info","text":"
  • Default: (empty)
  • Description: If true, OIDC user data is logged at the trace level upon login (for debugging).
"},{"location":"documentation/configuration/overview/#oauth","title":"OAuth","text":"

The oauth array contains a list of plain OAuth2 providers. Below are the properties for each OAuth provider entry inside auth.oauth:

"},{"location":"documentation/configuration/overview/#provider_name_1","title":"provider_name","text":"
  • Default: (empty)
  • Description: A unique name for this provider. Must not conflict with other providers.
"},{"location":"documentation/configuration/overview/#display_name_1","title":"display_name","text":"
  • Default: (empty)
  • Description: A user-friendly name shown on the login page.
"},{"location":"documentation/configuration/overview/#client_id_1","title":"client_id","text":"
  • Default: (empty)
  • Description: The OAuth client ID for the provider.
"},{"location":"documentation/configuration/overview/#client_secret_1","title":"client_secret","text":"
  • Default: (empty)
  • Description: The OAuth client secret for the provider.
"},{"location":"documentation/configuration/overview/#auth_url","title":"auth_url","text":"
  • Default: (empty)
  • Description: URL of the authentication endpoint.
"},{"location":"documentation/configuration/overview/#token_url","title":"token_url","text":"
  • Default: (empty)
  • Description: URL of the token endpoint.
"},{"location":"documentation/configuration/overview/#user_info_url","title":"user_info_url","text":"
  • Default: (empty)
  • Description: URL of the user information endpoint.
"},{"location":"documentation/configuration/overview/#scopes","title":"scopes","text":"
  • Default: (empty)
  • Description: A list of OAuth scopes.
"},{"location":"documentation/configuration/overview/#allowed_domains_1","title":"allowed_domains","text":"
  • Default: (empty)
  • Description: A list of allowlisted domains. Only users with email addresses in these domains can log in or register. This is useful for restricting access to specific organizations or groups.
"},{"location":"documentation/configuration/overview/#field_map_1","title":"field_map","text":"
  • Default: (empty)
  • Description: Maps OAuth attributes to WireGuard Portal fields.
  • Available fields: user_identifier, email, firstname, lastname, phone, department, is_admin, user_groups.

    Field Typical Claim Explanation user_identifier sub or preferred_username A unique identifier for the user. Often the OIDC sub claim is used because it\u2019s guaranteed to be unique for the user within the IdP. Some providers also support preferred_username if it\u2019s unique. email email The user\u2019s email address as provided by the IdP. Not always verified, depending on IdP settings. firstname given_name The user\u2019s first name, typically provided by the IdP in the given_name claim. lastname family_name The user\u2019s last (family) name, typically provided by the IdP in the family_name claim. phone phone_number The user\u2019s phone number. This may require additional scopes/permissions from the IdP to access. department Custom claim (e.g., department) If the IdP can provide organizational data, it may store it in a custom claim. Adjust accordingly (e.g., department, org, or another attribute). is_admin Custom claim or derived role If the IdP returns a role or admin flag, you can map that to is_admin. Often this is managed through custom claims or group membership. user_groups groups or another custom claim A list of group memberships for the user. Some IdPs provide groups out of the box; others require custom claims or directory lookups.
"},{"location":"documentation/configuration/overview/#admin_mapping_1","title":"admin_mapping","text":"
  • Default: (empty)
  • Description: WgPortal can grant a user admin rights by matching the value of the is_admin claim against a regular expression. Alternatively, a regular expression can be used to check if a user is member of a specific group listed in the user_group claim. The regular expressions are defined in admin_value_regex and admin_group_regex.
  • admin_value_regex: A regular expression to match the is_admin claim. By default, this expression matches the string \"true\" (^true$).
  • admin_group_regex: A regular expression to match the user_groups claim. Each entry in the user_groups claim is checked against this regex.
"},{"location":"documentation/configuration/overview/#registration_enabled_1","title":"registration_enabled","text":"
  • Default: (empty)
  • Description: If true, new users are created automatically on successful login.
"},{"location":"documentation/configuration/overview/#log_user_info_1","title":"log_user_info","text":"
  • Default: (empty)
  • Description: If true, logs user info at the trace level upon login.
"},{"location":"documentation/configuration/overview/#ldap","title":"LDAP","text":"

The ldap array contains a list of LDAP authentication providers. Below are the properties for each LDAP provider entry inside auth.ldap:

"},{"location":"documentation/configuration/overview/#provider_name_2","title":"provider_name","text":"
  • Default: (empty)
  • Description: A unique name for this provider. Must not conflict with other providers.
"},{"location":"documentation/configuration/overview/#url","title":"url","text":"
  • Default: (empty)
  • Description: The LDAP server URL (e.g., ldap://srv-ad01.company.local:389).
"},{"location":"documentation/configuration/overview/#start_tls","title":"start_tls","text":"
  • Default: (empty)
  • Description: If true, use STARTTLS to secure the LDAP connection.
"},{"location":"documentation/configuration/overview/#cert_validation_1","title":"cert_validation","text":"
  • Default: (empty)
  • Description: If true, validate the LDAP server\u2019s TLS certificate.
"},{"location":"documentation/configuration/overview/#tls_certificate_path","title":"tls_certificate_path","text":"
  • Default: (empty)
  • Description: Path to a TLS certificate if needed for LDAP connections.
"},{"location":"documentation/configuration/overview/#tls_key_path","title":"tls_key_path","text":"
  • Default: (empty)
  • Description: Path to the corresponding TLS certificate key.
"},{"location":"documentation/configuration/overview/#base_dn","title":"base_dn","text":"
  • Default: (empty)
  • Description: The base DN for user searches (e.g., DC=COMPANY,DC=LOCAL).
"},{"location":"documentation/configuration/overview/#bind_user","title":"bind_user","text":"
  • Default: (empty)
  • Description: The bind user for LDAP (e.g., company\\\\ldap_wireguard or ldap_wireguard@company.local).
"},{"location":"documentation/configuration/overview/#bind_pass","title":"bind_pass","text":"
  • Default: (empty)
  • Description: The bind password for LDAP authentication.
"},{"location":"documentation/configuration/overview/#field_map_2","title":"field_map","text":"
  • Default: (empty)
  • Description: Maps LDAP attributes to WireGuard Portal fields.

    • Available fields: user_identifier, email, firstname, lastname, phone, department, memberof.
    WireGuard Portal Field Typical LDAP Attribute Short Description user_identifier sAMAccountName / uid Uniquely identifies the user within the LDAP directory. email mail / userPrincipalName Stores the user's primary email address. firstname givenName Contains the user's first (given) name. lastname sn Contains the user's last (surname) name. phone telephoneNumber / mobile Holds the user's phone or mobile number. department departmentNumber / ou Specifies the department or organizational unit of the user. memberof memberOf Lists the groups and roles to which the user belongs.
"},{"location":"documentation/configuration/overview/#login_filter","title":"login_filter","text":"
  • Default: (empty)
  • Description: An LDAP filter to restrict which users can log in. Use {{login_identifier}} to insert the username. For example:
    (&(objectClass=organizationalPerson)(mail={{login_identifier}})(!userAccountControl:1.2.840.113556.1.4.803:=2))\n
"},{"location":"documentation/configuration/overview/#admin_group","title":"admin_group","text":"
  • Default: (empty)
  • Description: A specific LDAP group whose members are considered administrators in WireGuard Portal. For example:
    CN=WireGuardAdmins,OU=Some-OU,DC=YOURDOMAIN,DC=LOCAL\n
"},{"location":"documentation/configuration/overview/#sync_interval","title":"sync_interval","text":"
  • Default: (empty)
  • Description: How frequently (in duration, e.g. 30m) to synchronize users from LDAP. Empty or 0 disables sync. Format uses s, m, h, d for seconds, minutes, hours, days, see time.ParseDuration. Only users that match the sync_filter are synchronized, if disable_missing is true, users not found in LDAP are disabled.
"},{"location":"documentation/configuration/overview/#sync_filter","title":"sync_filter","text":"
  • Default: (empty)
  • Description: An LDAP filter to select which users get synchronized into WireGuard Portal. For example:
    (&(objectClass=organizationalPerson)(!userAccountControl:1.2.840.113556.1.4.803:=2)(mail=*))\n
"},{"location":"documentation/configuration/overview/#disable_missing","title":"disable_missing","text":"
  • Default: (empty)
  • Description: If true, any user not found in LDAP (during sync) is disabled in WireGuard Portal.
"},{"location":"documentation/configuration/overview/#auto_re_enable","title":"auto_re_enable","text":"
  • Default: (empty)
  • Description: If true, users that where disabled because they were missing (see disable_missing) will be re-enabled once they are found again.
"},{"location":"documentation/configuration/overview/#registration_enabled_2","title":"registration_enabled","text":"
  • Default: (empty)
  • Description: If true, new user accounts are created in WireGuard Portal upon first login.
"},{"location":"documentation/configuration/overview/#log_user_info_2","title":"log_user_info","text":"
  • Default: (empty)
  • Description: If true, logs LDAP user data at the trace level upon login.
"},{"location":"documentation/configuration/overview/#web","title":"Web","text":"

The web section contains configuration options for the web server, including the listening address, session management, and CSRF protection. It is important to specify a valid external_url for the web server, especially if you are using a reverse proxy. Without a valid external_url, the login process may fail due to CSRF protection.

"},{"location":"documentation/configuration/overview/#listening_address_1","title":"listening_address","text":"
  • Default: :8888
  • Description: The listening address and port for the web server (e.g., :8888 to bind on all interfaces or 127.0.0.1:8888 to bind only on the loopback interface). Ensure that access to WireGuard Portal is protected against unauthorized access, especially if binding to all interfaces.
"},{"location":"documentation/configuration/overview/#external_url","title":"external_url","text":"
  • Default: http://localhost:8888
  • Description: The URL where a client can access WireGuard Portal. This URL is used for generating links in emails and for performing OAUTH redirects. Important: If you are using a reverse proxy, set this to the external URL of the reverse proxy, otherwise login will fail. If you access the portal via IP address, set this to the IP address of the server.
"},{"location":"documentation/configuration/overview/#site_company_name","title":"site_company_name","text":"
  • Default: WireGuard Portal
  • Description: The company name that is shown at the bottom of the web frontend.
"},{"location":"documentation/configuration/overview/#site_title","title":"site_title","text":"
  • Default: WireGuard Portal
  • Description: The title that is shown in the web frontend.
"},{"location":"documentation/configuration/overview/#session_identifier","title":"session_identifier","text":"
  • Default: wgPortalSession
  • Description: The session identifier for the web frontend.
"},{"location":"documentation/configuration/overview/#session_secret","title":"session_secret","text":"
  • Default: very_secret
  • Description: The session secret for the web frontend.
"},{"location":"documentation/configuration/overview/#csrf_secret","title":"csrf_secret","text":"
  • Default: extremely_secret
  • Description: The CSRF secret.
"},{"location":"documentation/configuration/overview/#request_logging","title":"request_logging","text":"
  • Default: false
  • Description: Log all HTTP requests.
"},{"location":"documentation/configuration/overview/#expose_host_info","title":"expose_host_info","text":"
  • Default: false
  • Description: Expose the hostname and version of the WireGuard Portal server in an HTTP header. This is useful for debugging but may expose sensitive information.
"},{"location":"documentation/configuration/overview/#cert_file","title":"cert_file","text":"
  • Default: (empty)
  • Description: (Optional) Path to the TLS certificate file.
"},{"location":"documentation/configuration/overview/#key_file","title":"key_file","text":"
  • Default: (empty)
  • Description: (Optional) Path to the TLS certificate key file.
"},{"location":"documentation/configuration/overview/#webhook","title":"Webhook","text":"

The webhook section allows you to configure a webhook that is called on certain events in WireGuard Portal. A JSON object is sent in a POST request to the webhook URL with the following structure:

{\n  \"event\": \"peer_created\",\n  \"entity\": \"peer\",\n  \"identifier\": \"the-peer-identifier\",\n  \"payload\": {\n    // The payload of the event, e.g. peer data.\n    // Check the API documentation for the exact structure.\n  }\n}\n

"},{"location":"documentation/configuration/overview/#url_1","title":"url","text":"
  • Default: (empty)
  • Description: The POST endpoint to which the webhook is sent. The URL must be reachable from the WireGuard Portal server. If the URL is empty, the webhook is disabled.
"},{"location":"documentation/configuration/overview/#authentication","title":"authentication","text":"
  • Default: (empty)
  • Description: The Authorization header for the webhook endpoint. The value is send as-is in the header. For example: Bearer <token>.
"},{"location":"documentation/configuration/overview/#timeout","title":"timeout","text":"
  • Default: 10s
  • Description: The timeout for the webhook request. If the request takes longer than this, it is aborted.
"},{"location":"documentation/getting-started/binaries/","title":"Binaries","text":"

Starting from v2, each release includes compiled binaries for supported platforms. These binary versions can be manually downloaded and installed.

"},{"location":"documentation/getting-started/binaries/#download","title":"Download","text":"

Make sure that you download the correct binary for your architecture. The available binaries are:

  • wg-portal_linux_amd64 - Linux x86_64
  • wg-portal_linux_arm64 - Linux ARM 64-bit
  • wg-portal_linux_arm_v7 - Linux ARM 32-bit

With curl:

curl -L -o wg-portal https://github.com/h44z/wg-portal/releases/download/${WG_PORTAL_VERSION}/wg-portal_linux_amd64 \n

With wget:

wget -O wg-portal https://github.com/h44z/wg-portal/releases/download/${WG_PORTAL_VERSION}/wg-portal_linux_amd64\n

with gh cli:

gh release download ${WG_PORTAL_VERSION} --repo h44z/wg-portal --output wg-portal --pattern '*amd64'\n
"},{"location":"documentation/getting-started/binaries/#install","title":"Install","text":"
sudo mkdir -p /opt/wg-portal\nsudo install wg-portal /opt/wg-portal/\n
"},{"location":"documentation/getting-started/binaries/#unreleased-versions-master-branch-builds","title":"Unreleased versions (master branch builds)","text":"

Unreleased versions can be fetched directly from the artifacts section of the GitHub Workflow.

"},{"location":"documentation/getting-started/docker/","title":"Docker","text":""},{"location":"documentation/getting-started/docker/#image-usage","title":"Image Usage","text":"

The WireGuard Portal Docker image is available on both Docker Hub and GitHub Container Registry. It is built on the official Alpine Linux base image and comes pre-packaged with all necessary WireGuard dependencies.

This container allows you to establish WireGuard VPN connections without relying on a host system that supports WireGuard or using the linuxserver/wireguard Docker image.

The recommended method for deploying WireGuard Portal is via Docker Compose for ease of configuration and management.

A sample docker-compose.yml (managing WireGuard interfaces directly on the host) is provided below:

---\nservices:\n  wg-portal:\n    image: wgportal/wg-portal:v2\n    container_name: wg-portal\n    restart: unless-stopped\n    logging:\n      options:\n        max-size: \"10m\"\n        max-file: \"3\"\n    cap_add:\n      - NET_ADMIN\n    # Use host network mode for WireGuard and the UI. Ensure that access to the UI is properly secured.\n    network_mode: \"host\"\n    volumes:\n      # left side is the host path, right side is the container path\n      - /etc/wireguard:/etc/wireguard\n      - ./data:/app/data\n      - ./config:/app/config\n

By default, the webserver for the UI is listening on port 8888 on all available interfaces.

Volumes for /app/data and /app/config should be used ensure data persistence across container restarts.

"},{"location":"documentation/getting-started/docker/#wireguard-interface-handling","title":"WireGuard Interface Handling","text":"

WireGuard Portal supports managing WireGuard interfaces through three distinct deployment methods, providing flexibility based on your system architecture and operational preferences:

  • Directly on the host system: WireGuard Portal can control WireGuard interfaces natively on the host, without using containers. This setup is ideal for environments where direct access to system networking is preferred. To use this method, you need to set the network mode to host in your docker-compose.yml file.

    services:\n  wg-portal:\n    ...\n    network_mode: \"host\"\n    ...\n

    If host networking is used, the WireGuard Portal UI will be accessible on all the host's IP addresses if the listening address is set to :8888 in the configuration file. To avoid this, you can bind the listening address to a specific IP address, for example, the loopback address (127.0.0.1:8888). It is also possible to deploy firewall rules to restrict access to the WireGuard Portal UI.

  • Within the WireGuard Portal Docker container: WireGuard interfaces can be managed directly from within the WireGuard Portal container itself. This is the recommended approach when running WireGuard Portal via Docker, as it encapsulates all functionality in a single, portable container without requiring a separate WireGuard host or image.

    services:\n  wg-portal:\n    image: wgportal/wg-portal:v2\n    container_name: wg-portal\n    ...\n    cap_add:\n      - NET_ADMIN\n    ports:\n      # host port : container port\n      # WireGuard port, needs to match the port in wg-portal interface config (add one port mapping for each interface)\n      - \"51820:51820/udp\" \n      # Web UI port\n      - \"8888:8888/tcp\"\n    sysctls:\n      - net.ipv4.conf.all.src_valid_mark=1\n    volumes:\n      # host path : container path\n      - ./wg/data:/app/data\n      - ./wg/config:/app/config\n

  • Via a separate Docker container: WireGuard Portal can interface with and control WireGuard running in another Docker container, such as the linuxserver/wireguard image. This method is useful in setups that already use linuxserver/wireguard or where you want to isolate the VPN backend from the portal frontend. For this, you need to set the network mode to service:wireguard in your docker-compose.yml file, wireguard is the service name of your WireGuard container.

    services:\n  wg-portal:\n    image: wgportal/wg-portal:v2\n    container_name: wg-portal\n    ...\n    cap_add:\n      - NET_ADMIN\n    network_mode: \"service:wireguard\" # So we ensure to stay on the same network as the wireguard container.\n    volumes:\n      # host path : container path\n      - ./wg/etc:/etc/wireguard\n      - ./wg/data:/app/data\n      - ./wg/config:/app/config\n\n  wireguard:\n    image: lscr.io/linuxserver/wireguard:latest\n    container_name: wireguard\n    restart: unless-stopped\n    cap_add:\n      - NET_ADMIN\n    ports:\n      # host port : container port\n      - \"51820:51820/udp\" # WireGuard port, needs to match the port in wg-portal interface config\n      - \"8888:8888/tcp\" # Noticed that the port of the web UI is exposed in the wireguard container.\n    volumes:\n      - ./wg/etc:/config/wg_confs # We share the configuration (wgx.conf) between wg-portal and wireguard\n    sysctls:\n      - net.ipv4.conf.all.src_valid_mark=1\n
    As the linuxserver/wireguard image uses wg-quick to manage the interfaces, you need to have at least the following configuration set for WireGuard Portal:
    core:\n  # The WireGuard container uses wg-quick to manage the WireGuard interfaces - this conflicts with WireGuard Portal during startup.\n  # To avoid this, we need to set the restore_state option to false so that wg-quick can create the interfaces.\n  restore_state: false\n  # Usually, there are no existing interfaces in the WireGuard container, so we can set this to false.\n  import_existing: false\nadvanced:\n  # WireGuard Portal needs to export the WireGuard configuration as wg-quick config files so that the WireGuard container can use them.\n  config_storage_path: /etc/wireguard/\n

"},{"location":"documentation/getting-started/docker/#image-versioning","title":"Image Versioning","text":"

All images are hosted on Docker Hub at https://hub.docker.com/r/wgportal/wg-portal or in the GitHub Container Registry.

Version 2 is the current stable release. Version 1 has moved to legacy status and is no longer recommended.

There are three types of tags in the repository:

"},{"location":"documentation/getting-started/docker/#semantic-versioned-tags","title":"Semantic versioned tags","text":"

For example, 2.0.0-rc.1 or v2.0.0-rc.1.

These are official releases of WireGuard Portal. For production deployments of WireGuard Portal, we strongly recommend using one of these versioned tags instead of the latest or canary tags.

There are different types of these tags:

  • Major version tags: v2 or 2. These tags always refer to the latest image for WireGuard Portal version 2.
  • Minor version tags: v2.x or 2.0. These tags always refer to the latest image for WireGuard Portal version 2.x.
  • Specific version tags (patch version): v2.0.0 or 2.0.0. These tags denote a very specific release. They correspond to the GitHub tags that we make, and you can see the release notes for them here: https://github.com/h44z/wg-portal/releases. Once these tags for a specific version show up in the Docker repository, they will never change.
"},{"location":"documentation/getting-started/docker/#the-latest-tag","title":"The latest tag","text":"

The lastest tag is the latest stable release of WireGuard Portal. For version 2, this is the same as the v2 tag.

"},{"location":"documentation/getting-started/docker/#the-master-tag","title":"The master tag","text":"

This is the most recent build to the main branch! It changes a lot and is very unstable.

We recommend that you don't use it except for development purposes or to test the latest features.

"},{"location":"documentation/getting-started/docker/#configuration","title":"Configuration","text":"

You can configure WireGuard Portal using a YAML configuration file. The filepath of the YAML configuration file defaults to /app/config/config.yaml. It is possible to override the configuration filepath using the environment variable WG_PORTAL_CONFIG.

By default, WireGuard Portal uses an SQLite database. The database is stored in /app/data/sqlite.db.

You should mount those directories as a volume:

  • /app/data
  • /app/config

A detailed description of the configuration options can be found here.

If you want to access configuration files in wg-quick format, you can mount the /etc/wireguard directory inside the container to a location of your choice. Also enable the config_storage_path option in the configuration file:

advanced:\n  config_storage_path: /etc/wireguard\n

"},{"location":"documentation/getting-started/helm/","title":"Helm","text":""},{"location":"documentation/getting-started/helm/#installing-the-chart","title":"Installing the Chart","text":"

To install the chart with the release name wg-portal:

helm install wg-portal oci://ghcr.io/h44z/charts/wg-portal\n

This command deploy wg-portal on the Kubernetes cluster in the default configuration. The Values section lists the parameters that can be configured during installation.

"},{"location":"documentation/getting-started/helm/#values","title":"Values","text":"Key Type Default Description nameOverride string \"\" Partially override resource names (adds suffix) fullnameOverride string \"\" Fully override resource names extraDeploy list [] Array of extra objects to deploy with the release config.advanced tpl/object {} Advanced configuration options. config.auth tpl/object {} Auth configuration options. config.core tpl/object {} Core configuration options. If external admins in auth are defined and there are no admin_user and admin_password defined here, the default admin account will be disabled. config.database tpl/object {} Database configuration options config.mail tpl/object {} Mail configuration options config.statistics tpl/object {} Statistics configuration options config.web tpl/object {} Web configuration options. listening_address will be set automatically from service.web.port. external_url is required to enable ingress and certificate resources. revisionHistoryLimit string 10 The number of old ReplicaSets to retain to allow rollback. workloadType string \"Deployment\" Workload type - Deployment or StatefulSet strategy object {\"type\":\"RollingUpdate\"} Update strategy for the workload Valid values are: RollingUpdate or Recreate for Deployment, RollingUpdate or OnDelete for StatefulSet image.repository string \"ghcr.io/h44z/wg-portal\" Image repository image.pullPolicy string \"IfNotPresent\" Image pull policy image.tag string \"\" Overrides the image tag whose default is the chart appVersion imagePullSecrets list [] Image pull secrets podAnnotations tpl/object {} Extra annotations to add to the pod podLabels object {} Extra labels to add to the pod podSecurityContext object {} Pod Security Context securityContext.capabilities.add list [\"NET_ADMIN\"] Add capabilities to the container initContainers tpl/list [] Pod init containers sidecarContainers tpl/list [] Pod sidecar containers dnsPolicy string \"ClusterFirst\" Set DNS policy for the pod. Valid values are ClusterFirstWithHostNet, ClusterFirst, Default or None. restartPolicy string \"Always\" Restart policy for all containers within the pod. Valid values are Always, OnFailure or Never. hostNetwork string false. Use the host's network namespace. resources object {} Resources requests and limits command list [] Overwrite pod command args list [] Additional pod arguments env tpl/list [] Additional environment variables envFrom tpl/list [] Additional environment variables from a secret or configMap livenessProbe object {} Liveness probe configuration readinessProbe object {} Readiness probe configuration startupProbe object {} Startup probe configuration volumes tpl/list [] Additional volumes volumeMounts tpl/list [] Additional volumeMounts nodeSelector object {\"kubernetes.io/os\":\"linux\"} Node Selector configuration tolerations list [] Tolerations configuration affinity object {} Affinity configuration service.mixed.enabled bool false Whether to create a single service for the web and wireguard interfaces service.mixed.type string \"LoadBalancer\" Service type service.web.annotations object {} Annotations for the web service service.web.type string \"ClusterIP\" Web service type service.web.port int 8888 Web service port Used for the web interface listener service.web.appProtocol string \"http\" Web service appProtocol. Will be auto set to https if certificate is enabled. service.wireguard.annotations object {} Annotations for the WireGuard service service.wireguard.type string \"LoadBalancer\" Wireguard service type service.wireguard.ports list [51820] Wireguard service ports. Exposes the WireGuard ports for created interfaces. Lowerest port is selected as start port for the first interface. Increment next port by 1 for each additional interface. service.metrics.port int 8787 ingress.enabled bool false Specifies whether an ingress resource should be created ingress.className string \"\" Ingress class name ingress.annotations object {} Ingress annotations ingress.tls bool false Ingress TLS configuration. Enable certificate resource or add ingress annotation to create required secret certificate.enabled bool false Specifies whether a certificate resource should be created. If enabled, certificate will be used for the web. certificate.issuer.name string \"\" Certificate issuer name certificate.issuer.kind string \"\" Certificate issuer kind (ClusterIssuer or Issuer) certificate.issuer.group string \"cert-manager.io\" Certificate issuer group certificate.duration string \"\" Optional. Documentation certificate.renewBefore string \"\" Optional. Documentation certificate.commonName string \"\" Optional. Documentation certificate.emailAddresses list [] Optional. Documentation certificate.ipAddresses list [] Optional. Documentation certificate.keystores object {} Optional. Documentation certificate.privateKey object {} Optional. Documentation certificate.secretTemplate object {} Optional. Documentation certificate.subject object {} Optional. Documentation certificate.uris list [] Optional. Documentation certificate.usages list [] Optional. Documentation persistence.enabled bool false Specifies whether an persistent volume should be created persistence.annotations object {} Persistent Volume Claim annotations persistence.storageClass string \"\" Persistent Volume storage class. If undefined (the default) cluster's default provisioner will be used. persistence.accessMode string \"ReadWriteOnce\" Persistent Volume Access Mode persistence.size string \"1Gi\" Persistent Volume size persistence.volumeName string \"\" Persistent Volume Name (optional) serviceAccount.create bool true Specifies whether a service account should be created serviceAccount.annotations object {} Service account annotations serviceAccount.automount bool false Automatically mount a ServiceAccount's API credentials serviceAccount.name string \"\" The name of the service account to use. If not set and create is true, a name is generated using the fullname template monitoring.enabled bool false Enable Prometheus monitoring. monitoring.apiVersion string \"monitoring.coreos.com/v1\" API version of the Prometheus resource. Use azmonitoring.coreos.com/v1 for Azure Managed Prometheus. monitoring.kind string \"PodMonitor\" Kind of the Prometheus resource. Could be PodMonitor or ServiceMonitor. monitoring.labels object {} Resource labels. monitoring.annotations object {} Resource annotations. monitoring.interval string 1m Interval at which metrics should be scraped. If not specified config.statistics.data_collection_interval interval is used. monitoring.metricRelabelings list [] Relabelings to samples before ingestion. monitoring.relabelings list [] Relabelings to samples before scraping. monitoring.scrapeTimeout string \"\" Timeout after which the scrape is ended If not specified, the Prometheus global scrape interval is used. monitoring.jobLabel string \"\" The label to use to retrieve the job name from. monitoring.podTargetLabels object {} Transfers labels on the Kubernetes Pod onto the target. monitoring.dashboard.enabled bool false Enable Grafana dashboard. monitoring.dashboard.annotations object {} Annotations for the dashboard ConfigMap. monitoring.dashboard.labels object {} Additional labels for the dashboard ConfigMap. monitoring.dashboard.namespace string \"\" Dashboard ConfigMap namespace Overrides the namespace for the dashboard ConfigMap."},{"location":"documentation/getting-started/reverse-proxy/","title":"Reverse Proxy (HTTPS)","text":""},{"location":"documentation/getting-started/reverse-proxy/#reverse-proxy-for-https","title":"Reverse Proxy for HTTPS","text":"

For production deployments, always serve the WireGuard Portal over HTTPS. You have two options to secure your connection:

"},{"location":"documentation/getting-started/reverse-proxy/#reverse-proxy","title":"Reverse Proxy","text":"

Let a front\u2010end proxy handle HTTPS for you. This also frees you from managing certificates manually and is therefore the preferred option. You can use Nginx, Traefik, Caddy or any other proxy.

Below is an example using a Docker Compose stack with Traefik. It exposes the WireGuard Portal on https://wg.domain.com and redirects initial HTTP traffic to HTTPS.

services:\n  reverse-proxy:\n    image: traefik:v3.3\n    restart: unless-stopped\n    command:\n      #- '--log.level=DEBUG'\n      - '--providers.docker.endpoint=unix:///var/run/docker.sock'\n      - '--providers.docker.exposedbydefault=false'\n      - '--entrypoints.web.address=:80'\n      - '--entrypoints.websecure.address=:443'\n      - '--entrypoints.websecure.http3'\n      - '--certificatesresolvers.letsencryptresolver.acme.httpchallenge=true'\n      - '--certificatesresolvers.letsencryptresolver.acme.httpchallenge.entrypoint=web'\n      - '--certificatesresolvers.letsencryptresolver.acme.email=your.email@domain.com'\n      - '--certificatesresolvers.letsencryptresolver.acme.storage=/letsencrypt/acme.json'\n      #- '--certificatesresolvers.letsencryptresolver.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory'  # just for testing\n    ports:\n      - 80:80 # for HTTP\n      - 443:443/tcp  # for HTTPS\n      - 443:443/udp  # for HTTP/3\n    volumes:\n      - acme-certs:/letsencrypt\n      - /var/run/docker.sock:/var/run/docker.sock:ro\n    labels:\n      - 'traefik.enable=true'\n      # HTTP Catchall for redirecting HTTP -> HTTPS\n      - 'traefik.http.routers.dashboard-catchall.rule=Host(`wg.domain.com`) && PathPrefix(`/`)'\n      - 'traefik.http.routers.dashboard-catchall.entrypoints=web'\n      - 'traefik.http.routers.dashboard-catchall.middlewares=redirect-to-https'\n      - 'traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https'\n\n  wg-portal:\n    image: wgportal/wg-portal:v2\n    container_name: wg-portal\n    restart: unless-stopped\n    logging:\n      options:\n        max-size: \"10m\"\n        max-file: \"3\"\n    cap_add:\n      - NET_ADMIN\n    ports:\n      # host port : container port\n      # WireGuard port, needs to match the port in wg-portal interface config (add one port mapping for each interface)\n      - \"51820:51820/udp\"\n      # Web UI port (only available on localhost, Traefik will handle the HTTPS)\n      - \"127.0.0.1:8888:8888/tcp\"\n    sysctls:\n      - net.ipv4.conf.all.src_valid_mark=1\n    volumes:\n      # host path : container path\n      - ./wg/data:/app/data\n      - ./wg/config:/app/config\n    labels:\n      - 'traefik.enable=true'\n      - 'traefik.http.routers.wgportal.rule=Host(`wg.domain.com`)'\n      - 'traefik.http.routers.wgportal.entrypoints=websecure'\n      - 'traefik.http.routers.wgportal.tls.certresolver=letsencryptresolver'\n      - 'traefik.http.routers.wgportal.service=wgportal'\n      - 'traefik.http.services.wgportal.loadbalancer.server.port=8888'\n\nvolumes:\n  acme-certs:\n

The WireGuard Portal configuration must be updated accordingly so that the correct external URL is set for the web interface:

web:\n  external_url: https://wg.domain.com\n
"},{"location":"documentation/getting-started/reverse-proxy/#built-in-tls","title":"Built-in TLS","text":"

If you prefer to let WireGuard Portal handle TLS itself, you can use the built-in TLS support. In your config.yaml, under the web section, point to your certificate and key files:

web:\n  cert_file: /path/to/your/fullchain.pem\n  key_file:  /path/to/your/privkey.pem\n

The web server will then use these files to serve HTTPS traffic directly instead of HTTP.

"},{"location":"documentation/getting-started/sources/","title":"Sources","text":"

To build the application from source files, use the Makefile provided in the repository.

"},{"location":"documentation/getting-started/sources/#requirements","title":"Requirements","text":"
  • Git
  • Make
  • Go: >=1.24.0
  • Node.js with npm: node>=18, npm>=9
"},{"location":"documentation/getting-started/sources/#build","title":"Build","text":"
# Get source code\ngit clone https://github.com/h44z/wg-portal -b ${WG_PORTAL_VERSION:-master} --depth 1\ncd wg-portal\n# Build the frontend\nmake frontend\n# Build the backend\nmake build\n
"},{"location":"documentation/getting-started/sources/#install","title":"Install","text":"

Compiled binary will be available in ./dist directory.

For installation instructions, check the Binaries section.

"},{"location":"documentation/monitoring/prometheus/","title":"Monitoring","text":"

By default, WG-Portal exposes Prometheus metrics on port 8787 if interface/peer statistic data collection is enabled.

"},{"location":"documentation/monitoring/prometheus/#exposed-metrics","title":"Exposed Metrics","text":"Metric Type Description wireguard_interface_received_bytes_total gauge Bytes received through the interface. wireguard_interface_sent_bytes_total gauge Bytes sent through the interface. wireguard_peer_last_handshake_seconds gauge Seconds from the last handshake with the peer. wireguard_peer_received_bytes_total gauge Bytes received from the peer. wireguard_peer_sent_bytes_total gauge Bytes sent to the peer. wireguard_peer_up gauge Peer connection state (boolean: 1/0)."},{"location":"documentation/monitoring/prometheus/#prometheus-config","title":"Prometheus Config","text":"

Add the following scrape job to your Prometheus config file:

# prometheus.yaml\nscrape_configs:\n  - job_name: wg-portal\n    scrape_interval: 60s\n    static_configs:\n      - targets:\n          - localhost:8787 # Change localhost to IP Address or hostname with WG-Portal\n
"},{"location":"documentation/monitoring/prometheus/#grafana-dashboard","title":"Grafana Dashboard","text":"

You may import dashboard.json into your Grafana instance.

"},{"location":"documentation/rest-api/api-doc/","title":"REST API","text":""},{"location":"documentation/upgrade/v1/","title":"Upgrade","text":"

Major upgrades between different versions may require special procedures, which are described in the following sections.

"},{"location":"documentation/upgrade/v1/#upgrade-from-v1-to-v2","title":"Upgrade from v1 to v2","text":"

Before upgrading from V1, make sure that you have a backup of your currently working configuration files and database!

To start the upgrade process, start the wg-portal binary with the -migrateFrom parameter. The configuration (config.yaml) for WireGuard Portal must be updated and valid before starting the upgrade.

To upgrade from a previous SQLite database, start wg-portal like:

./wg-portal-amd64 -migrateFrom=old_wg_portal.db\n

You can also specify the database type using the parameter -migrateFromType. Supported database types: mysql, mssql, postgres or sqlite.

For example:

./wg-portal-amd64 -migrateFromType=mysql -migrateFrom='user:pass@tcp(1.2.3.4:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local'\n

The upgrade will transform the old, existing database and store the values in the new database specified in the config.yaml configuration file. Ensure that the new database does not contain any data!

If you are using Docker, you can adapt the docker-compose.yml file to start the upgrade process:

services:\n  wg-portal:\n    image: wgportal/wg-portal:v2\n    # ... other settings\n    restart: no\n    command: [\"-migrateFrom=/app/data/old_wg_portal.db\"]\n
"}]} \ No newline at end of file +{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"documentation/overview/","title":"Overview","text":"

WireGuard Portal is a simple, web-based configuration portal for WireGuard server management. The portal uses the WireGuard wgctrl library to manage existing VPN interfaces. This allows for the seamless activation or deactivation of new users without disturbing existing VPN connections.

The configuration portal supports using a database (SQLite, MySQL, MsSQL, or Postgres), OAuth or LDAP (Active Directory or OpenLDAP) as a user source for authentication and profile data.

"},{"location":"documentation/overview/#features","title":"Features","text":"
  • Self-hosted - the whole application is a single binary
  • Responsive multi-language web UI written in Vue.js
  • Automatically selects IP from the network pool assigned to the client
  • QR-Code for convenient mobile client configuration
  • Sends email to the client with QR-code and client config
  • Enable / Disable clients seamlessly
  • Generation of wg-quick configuration file (wgX.conf) if required
  • User authentication (database, OAuth, or LDAP), Passkey support
  • IPv6 ready
  • Docker ready
  • Can be used with existing WireGuard setups
  • Support for multiple WireGuard interfaces
  • Peer Expiry Feature
  • Handles route and DNS settings like wg-quick does
  • Exposes Prometheus metrics for monitoring and alerting
  • REST API for management and client deployment
  • Webhook for custom actions on peer, interface, or user updates
"},{"location":"documentation/configuration/examples/","title":"Examples","text":"

Below are some sample YAML configurations demonstrating how to override some default values.

"},{"location":"documentation/configuration/examples/#basic","title":"Basic","text":"
core:\n  admin_user: test@example.com\n  admin_password: password\n  admin_api_token: super-s3cr3t-api-token-or-a-UUID\n  import_existing: false\n  create_default_peer: true\n  self_provisioning_allowed: true\n\nweb:\n  site_title: My WireGuard Server\n  site_company_name: My Company\n  listening_address: :8080\n  external_url: https://my.external-domain.com\n  csrf_secret: super-s3cr3t-csrf\n  session_secret: super-s3cr3t-session\n  request_logging: true\n\nadvanced:\n  log_level: trace\n  log_pretty: true\n  log_json: false\n  config_storage_path: /etc/wireguard\n  expiry_check_interval: 5m\n\ndatabase:\n  debug: true\n  type: sqlite\n  dsn: data/sqlite.db\n  encryption_passphrase: change-this-s3cr3t-encryption-passphrase\n\nauth:\n  webauthn:\n    enabled: true\n
"},{"location":"documentation/configuration/examples/#ldap-authentication-and-synchronization","title":"LDAP Authentication and Synchronization","text":"
# ... (basic configuration)\n\nauth:\n  ldap:\n    # a sample LDAP provider with user sync enabled\n    - id: ldap\n      provider_name: Active Directory\n      url: ldap://srv-ad1.company.local:389\n      bind_user: ldap_wireguard@company.local\n      bind_pass: super-s3cr3t-ldap\n      base_dn: DC=COMPANY,DC=LOCAL\n      login_filter: (&(objectClass=organizationalPerson)(mail={{login_identifier}})(!userAccountControl:1.2.840.113556.1.4.803:=2))\n      sync_interval: 15m\n      sync_filter: (&(objectClass=organizationalPerson)(!userAccountControl:1.2.840.113556.1.4.803:=2)(mail=*))\n      disable_missing: true\n      field_map:\n        user_identifier: sAMAccountName\n        email: mail\n        firstname: givenName\n        lastname: sn\n        phone: telephoneNumber\n        department: department\n        memberof: memberOf\n      admin_group: CN=WireGuardAdmins,OU=Some-OU,DC=COMPANY,DC=LOCAL\n      registration_enabled: true\n      log_user_info: true\n
"},{"location":"documentation/configuration/examples/#openid-connect-oidc-authentication","title":"OpenID Connect (OIDC) Authentication","text":"
# ... (basic configuration)\n\nauth:\n  oidc:\n    # A sample Entra ID provider with environment variable substitution.\n    # Only users with an @outlook.com email address are allowed to register or login.\n    - id: azure\n      provider_name: azure\n      display_name: Login with</br>Entra ID\n      registration_enabled: true\n      base_url: \"https://login.microsoftonline.com/${AZURE_TENANT_ID}/v2.0\"\n      client_id: \"${AZURE_CLIENT_ID}\"\n      client_secret: \"${AZURE_CLIENT_SECRET}\"\n      allowed_domains:\n        - \"outlook.com\"\n      extra_scopes:\n        - profile\n        - email\n\n    # a sample provider where users with the attribute `wg_admin` set to `true` are considered as admins\n    - id: oidc-with-admin-attribute\n      provider_name: google\n      display_name: Login with</br>Google\n      base_url: https://accounts.google.com\n      client_id: the-client-id-1234.apps.googleusercontent.com\n      client_secret: A_CLIENT_SECRET\n      extra_scopes:\n        - https://www.googleapis.com/auth/userinfo.email\n        - https://www.googleapis.com/auth/userinfo.profile\n      field_map:\n        user_identifier: sub\n        email: email\n        firstname: given_name\n        lastname: family_name\n        phone: phone_number\n        department: department\n        is_admin: wg_admin\n      admin_mapping:\n        admin_value_regex: ^true$\n      registration_enabled: true\n      log_user_info: true\n\n    # a sample provider where users in the group `the-admin-group` are considered as admins\n    - id: oidc-with-admin-group\n      provider_name: google2\n      display_name: Login with</br>Google2\n      base_url: https://accounts.google.com\n      client_id: another-client-id-1234.apps.googleusercontent.com\n      client_secret: A_CLIENT_SECRET\n      extra_scopes:\n        - https://www.googleapis.com/auth/userinfo.email\n        - https://www.googleapis.com/auth/userinfo.profile\n      field_map:\n        user_identifier: sub\n        email: email\n        firstname: given_name\n        lastname: family_name\n        phone: phone_number\n        department: department\n        user_groups: groups\n      admin_mapping:\n        admin_group_regex: ^the-admin-group$\n      registration_enabled: true\n      log_user_info: true\n
"},{"location":"documentation/configuration/examples/#plain-oauth2-authentication","title":"Plain OAuth2 Authentication","text":"
# ... (basic configuration)\n\nauth:\n  oauth:\n    # a sample provider where users with the attribute `this-attribute-must-be-true` set to `true` or `True`\n    # are considered as admins\n    - id: google_plain_oauth-with-admin-attribute\n      provider_name: google3\n      display_name: Login with</br>Google3\n      client_id: another-client-id-1234.apps.googleusercontent.com\n      client_secret: A_CLIENT_SECRET\n      auth_url: https://accounts.google.com/o/oauth2/v2/auth\n      token_url: https://oauth2.googleapis.com/token\n      user_info_url: https://openidconnect.googleapis.com/v1/userinfo\n      scopes:\n        - openid\n        - email\n        - profile\n      field_map:\n        user_identifier: sub\n        email: email\n        firstname: name\n        is_admin: this-attribute-must-be-true\n      admin_mapping:\n        admin_value_regex: ^(True|true)$\n      registration_enabled: true\n\n    # a sample provider where either users with the attribute `this-attribute-must-be-true` set to `true` or \n    # users in the group `admin-group-name` are considered as admins\n    - id: google_plain_oauth_with_groups\n      provider_name: google4\n      display_name: Login with</br>Google4\n      client_id: another-client-id-1234.apps.googleusercontent.com\n      client_secret: A_CLIENT_SECRET\n      auth_url: https://accounts.google.com/o/oauth2/v2/auth\n      token_url: https://oauth2.googleapis.com/token\n      user_info_url: https://openidconnect.googleapis.com/v1/userinfo\n      scopes:\n        - openid\n        - email\n        - profile\n        - i-want-some-groups\n      field_map:\n        email: email\n        firstname: name\n        user_identifier: sub\n        is_admin: this-attribute-must-be-true\n        user_groups: groups\n      admin_mapping:\n        admin_value_regex: ^true$\n        admin_group_regex: ^admin-group-name$\n      registration_enabled: true\n      log_user_info: true\n
"},{"location":"documentation/configuration/overview/","title":"Overview","text":"

This page provides an overview of all available configuration options for WireGuard Portal.

You can supply these configurations in a YAML file when starting the Portal. The path of the configuration file defaults to config/config.yaml (or config/config.yml) in the working directory of the executable. It is possible to override the configuration filepath using the environment variable WG_PORTAL_CONFIG. For example: WG_PORTAL_CONFIG=/etc/wg-portal/config.yaml ./wg-portal. Also, environment variable substitution in the config file is supported. Refer to the syntax.

Configuration examples are available on the Examples page.

Default configuration
core:\n  admin_user: admin@wgportal.local\n  admin_password: wgportal-default\n  admin_api_token: \"\"\n  editable_keys: true\n  create_default_peer: false\n  create_default_peer_on_creation: false\n  re_enable_peer_after_user_enable: true\n  delete_peer_after_user_deleted: false\n  self_provisioning_allowed: false\n  import_existing: true\n  restore_state: true\n\nadvanced:\n  log_level: info\n  log_pretty: false\n  log_json: false\n  start_listen_port: 51820\n  start_cidr_v4: 10.11.12.0/24\n  start_cidr_v6: fdfd:d3ad:c0de:1234::0/64\n  use_ip_v6: true\n  config_storage_path: \"\"\n  expiry_check_interval: 15m\n  rule_prio_offset: 20000\n  route_table_offset: 20000\n  api_admin_only: true\n\ndatabase:\n  debug: false\n  slow_query_threshold: \"0\"\n  type: sqlite\n  dsn: data/sqlite.db\n  encryption_passphrase: \"\"\n\nstatistics:\n  use_ping_checks: true\n  ping_check_workers: 10\n  ping_unprivileged: false\n  ping_check_interval: 1m\n  data_collection_interval: 1m\n  collect_interface_data: true\n  collect_peer_data: true\n  collect_audit_data: true\n  listening_address: :8787\n\nmail:\n  host: 127.0.0.1\n  port: 25\n  encryption: none\n  cert_validation: true\n  username: \"\"\n  password: \"\"\n  auth_type: plain\n  from: Wireguard Portal <noreply@wireguard.local>\n  link_only: false\n\nauth:\n  oidc: []\n  oauth: []\n  ldap: []\n  webauthn:\n    enabled: true\n  min_password_length: 16\n\nweb:\n  listening_address: :8888\n  external_url: http://localhost:8888\n  site_company_name: WireGuard Portal\n  site_title: WireGuard Portal\n  session_identifier: wgPortalSession\n  session_secret: very_secret\n  csrf_secret: extremely_secret\n  request_logging: false\n  expose_host_info: false\n  cert_file: \"\"\n  key_File: \"\"\n\nwebhook:\n  url: \"\"\n  authentication: \"\"\n  timeout: 10s\n

Below you will find sections like core, advanced, database, statistics, mail, auth, web and webhook. Each section describes the individual configuration keys, their default values, and a brief explanation of their purpose.

"},{"location":"documentation/configuration/overview/#core","title":"Core","text":"

These are the primary configuration options that control fundamental WireGuard Portal behavior. More advanced options are found in the subsequent Advanced section.

"},{"location":"documentation/configuration/overview/#admin_user","title":"admin_user","text":"
  • Default: admin@wgportal.local
  • Description: The administrator user. This user will be created as a default admin if it does not yet exist.
"},{"location":"documentation/configuration/overview/#admin_password","title":"admin_password","text":"
  • Default: wgportal-default
  • Description: The administrator password. The default password should be changed immediately!
  • Important: The password should be strong and secure. The minimum password length is specified in auth.min_password_length. By default, it is 16 characters.
"},{"location":"documentation/configuration/overview/#admin_api_token","title":"admin_api_token","text":"
  • Default: (empty)
  • Description: An API token for the admin user. If a token is provided, the REST API can be accessed using this token. If empty, the API is initially disabled for the admin user.
"},{"location":"documentation/configuration/overview/#editable_keys","title":"editable_keys","text":"
  • Default: true
  • Description: Allow editing of WireGuard key-pairs directly in the UI.
"},{"location":"documentation/configuration/overview/#create_default_peer","title":"create_default_peer","text":"
  • Default: false
  • Description: If a user logs in for the first time with no existing peers, automatically create a new WireGuard peer for all server interfaces.
"},{"location":"documentation/configuration/overview/#create_default_peer_on_creation","title":"create_default_peer_on_creation","text":"
  • Default: false
  • Description: If an LDAP user is created (e.g., through LDAP sync) and has no peers, automatically create a new WireGuard peer for all server interfaces.
"},{"location":"documentation/configuration/overview/#re_enable_peer_after_user_enable","title":"re_enable_peer_after_user_enable","text":"
  • Default: true
  • Description: Re-enable all peers that were previously disabled if the associated user is re-enabled.
"},{"location":"documentation/configuration/overview/#delete_peer_after_user_deleted","title":"delete_peer_after_user_deleted","text":"
  • Default: false
  • Description: If a user is deleted, remove all linked peers. Otherwise, peers remain but are disabled.
"},{"location":"documentation/configuration/overview/#self_provisioning_allowed","title":"self_provisioning_allowed","text":"
  • Default: false
  • Description: Allow registered (non-admin) users to self-provision peers from their profile page.
"},{"location":"documentation/configuration/overview/#import_existing","title":"import_existing","text":"
  • Default: true
  • Description: On startup, import existing WireGuard interfaces and peers into WireGuard Portal.
"},{"location":"documentation/configuration/overview/#restore_state","title":"restore_state","text":"
  • Default: true
  • Description: Restore the WireGuard interface states (up/down) that existed before WireGuard Portal started.
"},{"location":"documentation/configuration/overview/#advanced","title":"Advanced","text":"

Additional or more specialized configuration options for logging and interface creation details.

"},{"location":"documentation/configuration/overview/#log_level","title":"log_level","text":"
  • Default: info
  • Description: The log level used by the application. Valid options are: trace, debug, info, warn, error.
"},{"location":"documentation/configuration/overview/#log_pretty","title":"log_pretty","text":"
  • Default: false
  • Description: If true, log messages are colorized and formatted for readability (pretty-print).
"},{"location":"documentation/configuration/overview/#log_json","title":"log_json","text":"
  • Default: false
  • Description: If true, log messages are structured in JSON format.
"},{"location":"documentation/configuration/overview/#start_listen_port","title":"start_listen_port","text":"
  • Default: 51820
  • Description: The first port to use when automatically creating new WireGuard interfaces.
"},{"location":"documentation/configuration/overview/#start_cidr_v4","title":"start_cidr_v4","text":"
  • Default: 10.11.12.0/24
  • Description: The initial IPv4 subnet to use when automatically creating new WireGuard interfaces.
"},{"location":"documentation/configuration/overview/#start_cidr_v6","title":"start_cidr_v6","text":"
  • Default: fdfd:d3ad:c0de:1234::0/64
  • Description: The initial IPv6 subnet to use when automatically creating new WireGuard interfaces.
"},{"location":"documentation/configuration/overview/#use_ip_v6","title":"use_ip_v6","text":"
  • Default: true
  • Description: Enable or disable IPv6 support.
"},{"location":"documentation/configuration/overview/#config_storage_path","title":"config_storage_path","text":"
  • Default: (empty)
  • Description: Path to a directory where wg-quick style configuration files will be stored (if you need local filesystem configs).
"},{"location":"documentation/configuration/overview/#expiry_check_interval","title":"expiry_check_interval","text":"
  • Default: 15m
  • Description: Interval after which existing peers are checked if they are expired. Format uses s, m, h, d for seconds, minutes, hours, days, see time.ParseDuration.
"},{"location":"documentation/configuration/overview/#rule_prio_offset","title":"rule_prio_offset","text":"
  • Default: 20000
  • Description: Offset for IP route rule priorities when configuring routing.
"},{"location":"documentation/configuration/overview/#route_table_offset","title":"route_table_offset","text":"
  • Default: 20000
  • Description: Offset for IP route table IDs when configuring routing.
"},{"location":"documentation/configuration/overview/#api_admin_only","title":"api_admin_only","text":"
  • Default: true
  • Description: If true, the public REST API is accessible only to admin users. The API docs live at /api/v1/doc.html.
"},{"location":"documentation/configuration/overview/#database","title":"Database","text":"

Configuration for the underlying database used by WireGuard Portal. Supported databases include SQLite, MySQL, Microsoft SQL Server, and Postgres.

If sensitive values (like private keys) should be stored in an encrypted format, set the encryption_passphrase option.

"},{"location":"documentation/configuration/overview/#debug","title":"debug","text":"
  • Default: false
  • Description: If true, logs all database statements (verbose).
"},{"location":"documentation/configuration/overview/#slow_query_threshold","title":"slow_query_threshold","text":"
  • Default: \"0\"
  • Description: A time threshold (e.g., 100ms) above which queries are considered slow and logged as warnings. If zero, slow query logging is disabled. Format uses s, ms for seconds, milliseconds, see time.ParseDuration. The value must be a string.
"},{"location":"documentation/configuration/overview/#type","title":"type","text":"
  • Default: sqlite
  • Description: The database type. Valid options: sqlite, mssql, mysql, postgres.
"},{"location":"documentation/configuration/overview/#dsn","title":"dsn","text":"
  • Default: data/sqlite.db
  • Description: The Data Source Name (DSN) for connecting to the database. For example:
    user:pass@tcp(1.2.3.4:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local\n
"},{"location":"documentation/configuration/overview/#encryption_passphrase","title":"encryption_passphrase","text":"
  • Default: (empty)
  • Description: Passphrase for encrypting sensitive values such as private keys in the database. Encryption is only applied if this passphrase is set. Important: Once you enable encryption by setting this passphrase, you cannot disable it or change it afterward. New or updated records will be encrypted; existing data remains in plaintext until it\u2019s next modified.
"},{"location":"documentation/configuration/overview/#statistics","title":"Statistics","text":"

Controls how WireGuard Portal collects and reports usage statistics, including ping checks and Prometheus metrics.

"},{"location":"documentation/configuration/overview/#use_ping_checks","title":"use_ping_checks","text":"
  • Default: true
  • Description: Enable periodic ping checks to verify that peers remain responsive.
"},{"location":"documentation/configuration/overview/#ping_check_workers","title":"ping_check_workers","text":"
  • Default: 10
  • Description: Number of parallel worker processes for ping checks.
"},{"location":"documentation/configuration/overview/#ping_unprivileged","title":"ping_unprivileged","text":"
  • Default: false
  • Description: If false, ping checks run without root privileges. This is currently considered BETA.
"},{"location":"documentation/configuration/overview/#ping_check_interval","title":"ping_check_interval","text":"
  • Default: 1m
  • Description: Interval between consecutive ping checks for all peers. Format uses s, m, h, d for seconds, minutes, hours, days, see time.ParseDuration.
"},{"location":"documentation/configuration/overview/#data_collection_interval","title":"data_collection_interval","text":"
  • Default: 1m
  • Description: Interval between data collection cycles (bytes sent/received, handshake times, etc.). Format uses s, m, h, d for seconds, minutes, hours, days, see time.ParseDuration.
"},{"location":"documentation/configuration/overview/#collect_interface_data","title":"collect_interface_data","text":"
  • Default: true
  • Description: If true, collects interface-level data (bytes in/out) for monitoring and statistics.
"},{"location":"documentation/configuration/overview/#collect_peer_data","title":"collect_peer_data","text":"
  • Default: true
  • Description: If true, collects peer-level data (bytes, last handshake, endpoint, etc.).
"},{"location":"documentation/configuration/overview/#collect_audit_data","title":"collect_audit_data","text":"
  • Default: true
  • Description: If true, logs certain portal events (such as user logins) to the database.
"},{"location":"documentation/configuration/overview/#listening_address","title":"listening_address","text":"
  • Default: :8787
  • Description: Address and port for the integrated Prometheus metric server (e.g., :8787 or 127.0.0.1:8787).
"},{"location":"documentation/configuration/overview/#mail","title":"Mail","text":"

Options for configuring email notifications or sending peer configurations via email.

"},{"location":"documentation/configuration/overview/#host","title":"host","text":"
  • Default: 127.0.0.1
  • Description: Hostname or IP of the SMTP server.
"},{"location":"documentation/configuration/overview/#port","title":"port","text":"
  • Default: 25
  • Description: Port number for the SMTP server.
"},{"location":"documentation/configuration/overview/#encryption","title":"encryption","text":"
  • Default: none
  • Description: SMTP encryption type. Valid values: none, tls, starttls.
"},{"location":"documentation/configuration/overview/#cert_validation","title":"cert_validation","text":"
  • Default: true
  • Description: If true, validate the SMTP server certificate (relevant if encryption = tls).
"},{"location":"documentation/configuration/overview/#username","title":"username","text":"
  • Default: (empty)
  • Description: Optional SMTP username for authentication.
"},{"location":"documentation/configuration/overview/#password","title":"password","text":"
  • Default: (empty)
  • Description: Optional SMTP password for authentication.
"},{"location":"documentation/configuration/overview/#auth_type","title":"auth_type","text":"
  • Default: plain
  • Description: SMTP authentication type. Valid values: plain, login, crammd5.
"},{"location":"documentation/configuration/overview/#from","title":"from","text":"
  • Default: Wireguard Portal <noreply@wireguard.local>
  • Description: The default \"From\" address when sending emails.
"},{"location":"documentation/configuration/overview/#link_only","title":"link_only","text":"
  • Default: false
  • Description: If true, emails only contain a link to WireGuard Portal, rather than attaching the full configuration.
"},{"location":"documentation/configuration/overview/#auth","title":"Auth","text":"

WireGuard Portal supports multiple authentication strategies, including OpenID Connect (oidc), OAuth (oauth), Passkeys (webauthn) and LDAP (ldap). Each can have multiple providers configured. Below are the relevant keys.

Some core authentication options are shared across all providers, while others are specific to each provider type.

"},{"location":"documentation/configuration/overview/#min_password_length","title":"min_password_length","text":"
  • Default: 16
  • Description: Minimum password length for local authentication. This is not enforced for LDAP authentication. The default admin password strength is also enforced by this setting.
  • Important: The password should be strong and secure. It is recommended to use a password with at least 16 characters, including uppercase and lowercase letters, numbers, and special characters.
"},{"location":"documentation/configuration/overview/#oidc","title":"OIDC","text":"

The oidc array contains a list of OpenID Connect providers. Below are the properties for each OIDC provider entry inside auth.oidc:

"},{"location":"documentation/configuration/overview/#provider_name","title":"provider_name","text":"
  • Default: (empty)
  • Description: A unique name for this provider. Must not conflict with other providers.
"},{"location":"documentation/configuration/overview/#display_name","title":"display_name","text":"
  • Default: (empty)
  • Description: A user-friendly name shown on the login page (e.g., \"Login with Google\").
"},{"location":"documentation/configuration/overview/#base_url","title":"base_url","text":"
  • Default: (empty)
  • Description: The OIDC provider\u2019s base URL (e.g., https://accounts.google.com).
"},{"location":"documentation/configuration/overview/#client_id","title":"client_id","text":"
  • Default: (empty)
  • Description: The OAuth client ID from the OIDC provider.
"},{"location":"documentation/configuration/overview/#client_secret","title":"client_secret","text":"
  • Default: (empty)
  • Description: The OAuth client secret from the OIDC provider.
"},{"location":"documentation/configuration/overview/#extra_scopes","title":"extra_scopes","text":"
  • Default: (empty)
  • Description: A list of additional OIDC scopes (e.g., profile, email).
"},{"location":"documentation/configuration/overview/#allowed_domains","title":"allowed_domains","text":"
  • Default: (empty)
  • Description: A list of allowlisted domains. Only users with email addresses in these domains can log in or register. This is useful for restricting access to specific organizations or groups.
"},{"location":"documentation/configuration/overview/#field_map","title":"field_map","text":"
  • Default: (empty)
  • Description: Maps OIDC claims to WireGuard Portal user fields.
  • Available fields: user_identifier, email, firstname, lastname, phone, department, is_admin, user_groups.

    Field Typical OIDC Claim Explanation user_identifier sub or preferred_username A unique identifier for the user. Often the OIDC sub claim is used because it\u2019s guaranteed to be unique for the user within the IdP. Some providers also support preferred_username if it\u2019s unique. email email The user\u2019s email address as provided by the IdP. Not always verified, depending on IdP settings. firstname given_name The user\u2019s first name, typically provided by the IdP in the given_name claim. lastname family_name The user\u2019s last (family) name, typically provided by the IdP in the family_name claim. phone phone_number The user\u2019s phone number. This may require additional scopes/permissions from the IdP to access. department Custom claim (e.g., department) If the IdP can provide organizational data, it may store it in a custom claim. Adjust accordingly (e.g., department, org, or another attribute). is_admin Custom claim or derived role If the IdP returns a role or admin flag, you can map that to is_admin. Often this is managed through custom claims or group membership. user_groups groups or another custom claim A list of group memberships for the user. Some IdPs provide groups out of the box; others require custom claims or directory lookups.
"},{"location":"documentation/configuration/overview/#admin_mapping","title":"admin_mapping","text":"
  • Default: (empty)
  • Description: WgPortal can grant a user admin rights by matching the value of the is_admin claim against a regular expression. Alternatively, a regular expression can be used to check if a user is member of a specific group listed in the user_group claim. The regular expressions are defined in admin_value_regex and admin_group_regex.
    • admin_value_regex: A regular expression to match the is_admin claim. By default, this expression matches the string \"true\" (^true$).
    • admin_group_regex: A regular expression to match the user_groups claim. Each entry in the user_groups claim is checked against this regex.
"},{"location":"documentation/configuration/overview/#registration_enabled","title":"registration_enabled","text":"
  • Default: (empty)
  • Description: If true, a new user will be created in WireGuard Portal if not already present.
"},{"location":"documentation/configuration/overview/#log_user_info","title":"log_user_info","text":"
  • Default: (empty)
  • Description: If true, OIDC user data is logged at the trace level upon login (for debugging).
"},{"location":"documentation/configuration/overview/#oauth","title":"OAuth","text":"

The oauth array contains a list of plain OAuth2 providers. Below are the properties for each OAuth provider entry inside auth.oauth:

"},{"location":"documentation/configuration/overview/#provider_name_1","title":"provider_name","text":"
  • Default: (empty)
  • Description: A unique name for this provider. Must not conflict with other providers.
"},{"location":"documentation/configuration/overview/#display_name_1","title":"display_name","text":"
  • Default: (empty)
  • Description: A user-friendly name shown on the login page.
"},{"location":"documentation/configuration/overview/#client_id_1","title":"client_id","text":"
  • Default: (empty)
  • Description: The OAuth client ID for the provider.
"},{"location":"documentation/configuration/overview/#client_secret_1","title":"client_secret","text":"
  • Default: (empty)
  • Description: The OAuth client secret for the provider.
"},{"location":"documentation/configuration/overview/#auth_url","title":"auth_url","text":"
  • Default: (empty)
  • Description: URL of the authentication endpoint.
"},{"location":"documentation/configuration/overview/#token_url","title":"token_url","text":"
  • Default: (empty)
  • Description: URL of the token endpoint.
"},{"location":"documentation/configuration/overview/#user_info_url","title":"user_info_url","text":"
  • Default: (empty)
  • Description: URL of the user information endpoint.
"},{"location":"documentation/configuration/overview/#scopes","title":"scopes","text":"
  • Default: (empty)
  • Description: A list of OAuth scopes.
"},{"location":"documentation/configuration/overview/#allowed_domains_1","title":"allowed_domains","text":"
  • Default: (empty)
  • Description: A list of allowlisted domains. Only users with email addresses in these domains can log in or register. This is useful for restricting access to specific organizations or groups.
"},{"location":"documentation/configuration/overview/#field_map_1","title":"field_map","text":"
  • Default: (empty)
  • Description: Maps OAuth attributes to WireGuard Portal fields.
  • Available fields: user_identifier, email, firstname, lastname, phone, department, is_admin, user_groups.

    Field Typical Claim Explanation user_identifier sub or preferred_username A unique identifier for the user. Often the OIDC sub claim is used because it\u2019s guaranteed to be unique for the user within the IdP. Some providers also support preferred_username if it\u2019s unique. email email The user\u2019s email address as provided by the IdP. Not always verified, depending on IdP settings. firstname given_name The user\u2019s first name, typically provided by the IdP in the given_name claim. lastname family_name The user\u2019s last (family) name, typically provided by the IdP in the family_name claim. phone phone_number The user\u2019s phone number. This may require additional scopes/permissions from the IdP to access. department Custom claim (e.g., department) If the IdP can provide organizational data, it may store it in a custom claim. Adjust accordingly (e.g., department, org, or another attribute). is_admin Custom claim or derived role If the IdP returns a role or admin flag, you can map that to is_admin. Often this is managed through custom claims or group membership. user_groups groups or another custom claim A list of group memberships for the user. Some IdPs provide groups out of the box; others require custom claims or directory lookups.
"},{"location":"documentation/configuration/overview/#admin_mapping_1","title":"admin_mapping","text":"
  • Default: (empty)
  • Description: WgPortal can grant a user admin rights by matching the value of the is_admin claim against a regular expression. Alternatively, a regular expression can be used to check if a user is member of a specific group listed in the user_group claim. The regular expressions are defined in admin_value_regex and admin_group_regex.
  • admin_value_regex: A regular expression to match the is_admin claim. By default, this expression matches the string \"true\" (^true$).
  • admin_group_regex: A regular expression to match the user_groups claim. Each entry in the user_groups claim is checked against this regex.
"},{"location":"documentation/configuration/overview/#registration_enabled_1","title":"registration_enabled","text":"
  • Default: (empty)
  • Description: If true, new users are created automatically on successful login.
"},{"location":"documentation/configuration/overview/#log_user_info_1","title":"log_user_info","text":"
  • Default: (empty)
  • Description: If true, logs user info at the trace level upon login.
"},{"location":"documentation/configuration/overview/#ldap","title":"LDAP","text":"

The ldap array contains a list of LDAP authentication providers. Below are the properties for each LDAP provider entry inside auth.ldap:

"},{"location":"documentation/configuration/overview/#provider_name_2","title":"provider_name","text":"
  • Default: (empty)
  • Description: A unique name for this provider. Must not conflict with other providers.
"},{"location":"documentation/configuration/overview/#url","title":"url","text":"
  • Default: (empty)
  • Description: The LDAP server URL (e.g., ldap://srv-ad01.company.local:389).
"},{"location":"documentation/configuration/overview/#start_tls","title":"start_tls","text":"
  • Default: (empty)
  • Description: If true, use STARTTLS to secure the LDAP connection.
"},{"location":"documentation/configuration/overview/#cert_validation_1","title":"cert_validation","text":"
  • Default: (empty)
  • Description: If true, validate the LDAP server\u2019s TLS certificate.
"},{"location":"documentation/configuration/overview/#tls_certificate_path","title":"tls_certificate_path","text":"
  • Default: (empty)
  • Description: Path to a TLS certificate if needed for LDAP connections.
"},{"location":"documentation/configuration/overview/#tls_key_path","title":"tls_key_path","text":"
  • Default: (empty)
  • Description: Path to the corresponding TLS certificate key.
"},{"location":"documentation/configuration/overview/#base_dn","title":"base_dn","text":"
  • Default: (empty)
  • Description: The base DN for user searches (e.g., DC=COMPANY,DC=LOCAL).
"},{"location":"documentation/configuration/overview/#bind_user","title":"bind_user","text":"
  • Default: (empty)
  • Description: The bind user for LDAP (e.g., company\\\\ldap_wireguard or ldap_wireguard@company.local).
"},{"location":"documentation/configuration/overview/#bind_pass","title":"bind_pass","text":"
  • Default: (empty)
  • Description: The bind password for LDAP authentication.
"},{"location":"documentation/configuration/overview/#field_map_2","title":"field_map","text":"
  • Default: (empty)
  • Description: Maps LDAP attributes to WireGuard Portal fields.

    • Available fields: user_identifier, email, firstname, lastname, phone, department, memberof.
    WireGuard Portal Field Typical LDAP Attribute Short Description user_identifier sAMAccountName / uid Uniquely identifies the user within the LDAP directory. email mail / userPrincipalName Stores the user's primary email address. firstname givenName Contains the user's first (given) name. lastname sn Contains the user's last (surname) name. phone telephoneNumber / mobile Holds the user's phone or mobile number. department departmentNumber / ou Specifies the department or organizational unit of the user. memberof memberOf Lists the groups and roles to which the user belongs.
"},{"location":"documentation/configuration/overview/#login_filter","title":"login_filter","text":"
  • Default: (empty)
  • Description: An LDAP filter to restrict which users can log in. Use {{login_identifier}} to insert the username. For example:
    (&(objectClass=organizationalPerson)(mail={{login_identifier}})(!userAccountControl:1.2.840.113556.1.4.803:=2))\n
  • Important: The login_filter must always be a valid LDAP filter. It should at most return one user. If the filter returns multiple or no users, the login will fail.
"},{"location":"documentation/configuration/overview/#admin_group","title":"admin_group","text":"
  • Default: (empty)
  • Description: A specific LDAP group whose members are considered administrators in WireGuard Portal. For example:
    CN=WireGuardAdmins,OU=Some-OU,DC=YOURDOMAIN,DC=LOCAL\n
"},{"location":"documentation/configuration/overview/#sync_interval","title":"sync_interval","text":"
  • Default: (empty)
  • Description: How frequently (in duration, e.g. 30m) to synchronize users from LDAP. Empty or 0 disables sync. Format uses s, m, h, d for seconds, minutes, hours, days, see time.ParseDuration. Only users that match the sync_filter are synchronized, if disable_missing is true, users not found in LDAP are disabled.
"},{"location":"documentation/configuration/overview/#sync_filter","title":"sync_filter","text":"
  • Default: (empty)
  • Description: An LDAP filter to select which users get synchronized into WireGuard Portal. For example:
    (&(objectClass=organizationalPerson)(!userAccountControl:1.2.840.113556.1.4.803:=2)(mail=*))\n
"},{"location":"documentation/configuration/overview/#disable_missing","title":"disable_missing","text":"
  • Default: (empty)
  • Description: If true, any user not found in LDAP (during sync) is disabled in WireGuard Portal.
"},{"location":"documentation/configuration/overview/#auto_re_enable","title":"auto_re_enable","text":"
  • Default: (empty)
  • Description: If true, users that where disabled because they were missing (see disable_missing) will be re-enabled once they are found again.
"},{"location":"documentation/configuration/overview/#registration_enabled_2","title":"registration_enabled","text":"
  • Default: (empty)
  • Description: If true, new user accounts are created in WireGuard Portal upon first login.
"},{"location":"documentation/configuration/overview/#log_user_info_2","title":"log_user_info","text":"
  • Default: (empty)
  • Description: If true, logs LDAP user data at the trace level upon login.
"},{"location":"documentation/configuration/overview/#webauthn-passkeys","title":"WebAuthn (Passkeys)","text":"

The webauthn section contains configuration options for WebAuthn authentication (passkeys).

"},{"location":"documentation/configuration/overview/#enabled","title":"enabled","text":"
  • Default: true
  • Description: If true, Passkey authentication is enabled. If false, WebAuthn is disabled. Users are encouraged to use Passkeys for secure authentication instead of passwords. If a passkey is registered, the password login is still available as a fallback. Ensure that the password is strong and secure.
"},{"location":"documentation/configuration/overview/#web","title":"Web","text":"

The web section contains configuration options for the web server, including the listening address, session management, and CSRF protection. It is important to specify a valid external_url for the web server, especially if you are using a reverse proxy. Without a valid external_url, the login process may fail due to CSRF protection.

"},{"location":"documentation/configuration/overview/#listening_address_1","title":"listening_address","text":"
  • Default: :8888
  • Description: The listening address and port for the web server (e.g., :8888 to bind on all interfaces or 127.0.0.1:8888 to bind only on the loopback interface). Ensure that access to WireGuard Portal is protected against unauthorized access, especially if binding to all interfaces.
"},{"location":"documentation/configuration/overview/#external_url","title":"external_url","text":"
  • Default: http://localhost:8888
  • Description: The URL where a client can access WireGuard Portal. This URL is used for generating links in emails and for performing OAUTH redirects. Important: If you are using a reverse proxy, set this to the external URL of the reverse proxy, otherwise login will fail. If you access the portal via IP address, set this to the IP address of the server.
"},{"location":"documentation/configuration/overview/#site_company_name","title":"site_company_name","text":"
  • Default: WireGuard Portal
  • Description: The company name that is shown at the bottom of the web frontend.
"},{"location":"documentation/configuration/overview/#site_title","title":"site_title","text":"
  • Default: WireGuard Portal
  • Description: The title that is shown in the web frontend.
"},{"location":"documentation/configuration/overview/#session_identifier","title":"session_identifier","text":"
  • Default: wgPortalSession
  • Description: The session identifier for the web frontend.
"},{"location":"documentation/configuration/overview/#session_secret","title":"session_secret","text":"
  • Default: very_secret
  • Description: The session secret for the web frontend.
"},{"location":"documentation/configuration/overview/#csrf_secret","title":"csrf_secret","text":"
  • Default: extremely_secret
  • Description: The CSRF secret.
"},{"location":"documentation/configuration/overview/#request_logging","title":"request_logging","text":"
  • Default: false
  • Description: Log all HTTP requests.
"},{"location":"documentation/configuration/overview/#expose_host_info","title":"expose_host_info","text":"
  • Default: false
  • Description: Expose the hostname and version of the WireGuard Portal server in an HTTP header. This is useful for debugging but may expose sensitive information.
"},{"location":"documentation/configuration/overview/#cert_file","title":"cert_file","text":"
  • Default: (empty)
  • Description: (Optional) Path to the TLS certificate file.
"},{"location":"documentation/configuration/overview/#key_file","title":"key_file","text":"
  • Default: (empty)
  • Description: (Optional) Path to the TLS certificate key file.
"},{"location":"documentation/configuration/overview/#webhook","title":"Webhook","text":"

The webhook section allows you to configure a webhook that is called on certain events in WireGuard Portal. A JSON object is sent in a POST request to the webhook URL with the following structure:

{\n  \"event\": \"peer_created\",\n  \"entity\": \"peer\",\n  \"identifier\": \"the-peer-identifier\",\n  \"payload\": {\n    // The payload of the event, e.g. peer data.\n    // Check the API documentation for the exact structure.\n  }\n}\n

"},{"location":"documentation/configuration/overview/#url_1","title":"url","text":"
  • Default: (empty)
  • Description: The POST endpoint to which the webhook is sent. The URL must be reachable from the WireGuard Portal server. If the URL is empty, the webhook is disabled.
"},{"location":"documentation/configuration/overview/#authentication","title":"authentication","text":"
  • Default: (empty)
  • Description: The Authorization header for the webhook endpoint. The value is send as-is in the header. For example: Bearer <token>.
"},{"location":"documentation/configuration/overview/#timeout","title":"timeout","text":"
  • Default: 10s
  • Description: The timeout for the webhook request. If the request takes longer than this, it is aborted.
"},{"location":"documentation/getting-started/binaries/","title":"Binaries","text":"

Starting from v2, each release includes compiled binaries for supported platforms. These binary versions can be manually downloaded and installed.

"},{"location":"documentation/getting-started/binaries/#download","title":"Download","text":"

Make sure that you download the correct binary for your architecture. The available binaries are:

  • wg-portal_linux_amd64 - Linux x86_64
  • wg-portal_linux_arm64 - Linux ARM 64-bit
  • wg-portal_linux_arm_v7 - Linux ARM 32-bit

With curl:

curl -L -o wg-portal https://github.com/h44z/wg-portal/releases/download/${WG_PORTAL_VERSION}/wg-portal_linux_amd64 \n

With wget:

wget -O wg-portal https://github.com/h44z/wg-portal/releases/download/${WG_PORTAL_VERSION}/wg-portal_linux_amd64\n

with gh cli:

gh release download ${WG_PORTAL_VERSION} --repo h44z/wg-portal --output wg-portal --pattern '*amd64'\n
"},{"location":"documentation/getting-started/binaries/#install","title":"Install","text":"
sudo mkdir -p /opt/wg-portal\nsudo install wg-portal /opt/wg-portal/\n
"},{"location":"documentation/getting-started/binaries/#unreleased-versions-master-branch-builds","title":"Unreleased versions (master branch builds)","text":"

Unreleased versions can be fetched directly from the artifacts section of the GitHub Workflow.

"},{"location":"documentation/getting-started/docker/","title":"Docker","text":""},{"location":"documentation/getting-started/docker/#image-usage","title":"Image Usage","text":"

The WireGuard Portal Docker image is available on both Docker Hub and GitHub Container Registry. It is built on the official Alpine Linux base image and comes pre-packaged with all necessary WireGuard dependencies.

This container allows you to establish WireGuard VPN connections without relying on a host system that supports WireGuard or using the linuxserver/wireguard Docker image.

The recommended method for deploying WireGuard Portal is via Docker Compose for ease of configuration and management.

A sample docker-compose.yml (managing WireGuard interfaces directly on the host) is provided below:

---\nservices:\n  wg-portal:\n    image: wgportal/wg-portal:v2\n    container_name: wg-portal\n    restart: unless-stopped\n    logging:\n      options:\n        max-size: \"10m\"\n        max-file: \"3\"\n    cap_add:\n      - NET_ADMIN\n    # Use host network mode for WireGuard and the UI. Ensure that access to the UI is properly secured.\n    network_mode: \"host\"\n    volumes:\n      # left side is the host path, right side is the container path\n      - /etc/wireguard:/etc/wireguard\n      - ./data:/app/data\n      - ./config:/app/config\n

By default, the webserver for the UI is listening on port 8888 on all available interfaces.

Volumes for /app/data and /app/config should be used ensure data persistence across container restarts.

"},{"location":"documentation/getting-started/docker/#wireguard-interface-handling","title":"WireGuard Interface Handling","text":"

WireGuard Portal supports managing WireGuard interfaces through three distinct deployment methods, providing flexibility based on your system architecture and operational preferences:

  • Directly on the host system: WireGuard Portal can control WireGuard interfaces natively on the host, without using containers. This setup is ideal for environments where direct access to system networking is preferred. To use this method, you need to set the network mode to host in your docker-compose.yml file.

    services:\n  wg-portal:\n    ...\n    network_mode: \"host\"\n    ...\n

    If host networking is used, the WireGuard Portal UI will be accessible on all the host's IP addresses if the listening address is set to :8888 in the configuration file. To avoid this, you can bind the listening address to a specific IP address, for example, the loopback address (127.0.0.1:8888). It is also possible to deploy firewall rules to restrict access to the WireGuard Portal UI.

  • Within the WireGuard Portal Docker container: WireGuard interfaces can be managed directly from within the WireGuard Portal container itself. This is the recommended approach when running WireGuard Portal via Docker, as it encapsulates all functionality in a single, portable container without requiring a separate WireGuard host or image.

    services:\n  wg-portal:\n    image: wgportal/wg-portal:v2\n    container_name: wg-portal\n    ...\n    cap_add:\n      - NET_ADMIN\n    ports:\n      # host port : container port\n      # WireGuard port, needs to match the port in wg-portal interface config (add one port mapping for each interface)\n      - \"51820:51820/udp\" \n      # Web UI port\n      - \"8888:8888/tcp\"\n    sysctls:\n      - net.ipv4.conf.all.src_valid_mark=1\n    volumes:\n      # host path : container path\n      - ./wg/data:/app/data\n      - ./wg/config:/app/config\n

  • Via a separate Docker container: WireGuard Portal can interface with and control WireGuard running in another Docker container, such as the linuxserver/wireguard image. This method is useful in setups that already use linuxserver/wireguard or where you want to isolate the VPN backend from the portal frontend. For this, you need to set the network mode to service:wireguard in your docker-compose.yml file, wireguard is the service name of your WireGuard container.

    services:\n  wg-portal:\n    image: wgportal/wg-portal:v2\n    container_name: wg-portal\n    ...\n    cap_add:\n      - NET_ADMIN\n    network_mode: \"service:wireguard\" # So we ensure to stay on the same network as the wireguard container.\n    volumes:\n      # host path : container path\n      - ./wg/etc:/etc/wireguard\n      - ./wg/data:/app/data\n      - ./wg/config:/app/config\n\n  wireguard:\n    image: lscr.io/linuxserver/wireguard:latest\n    container_name: wireguard\n    restart: unless-stopped\n    cap_add:\n      - NET_ADMIN\n    ports:\n      # host port : container port\n      - \"51820:51820/udp\" # WireGuard port, needs to match the port in wg-portal interface config\n      - \"8888:8888/tcp\" # Noticed that the port of the web UI is exposed in the wireguard container.\n    volumes:\n      - ./wg/etc:/config/wg_confs # We share the configuration (wgx.conf) between wg-portal and wireguard\n    sysctls:\n      - net.ipv4.conf.all.src_valid_mark=1\n
    As the linuxserver/wireguard image uses wg-quick to manage the interfaces, you need to have at least the following configuration set for WireGuard Portal:
    core:\n  # The WireGuard container uses wg-quick to manage the WireGuard interfaces - this conflicts with WireGuard Portal during startup.\n  # To avoid this, we need to set the restore_state option to false so that wg-quick can create the interfaces.\n  restore_state: false\n  # Usually, there are no existing interfaces in the WireGuard container, so we can set this to false.\n  import_existing: false\nadvanced:\n  # WireGuard Portal needs to export the WireGuard configuration as wg-quick config files so that the WireGuard container can use them.\n  config_storage_path: /etc/wireguard/\n

"},{"location":"documentation/getting-started/docker/#image-versioning","title":"Image Versioning","text":"

All images are hosted on Docker Hub at https://hub.docker.com/r/wgportal/wg-portal or in the GitHub Container Registry.

Version 2 is the current stable release. Version 1 has moved to legacy status and is no longer recommended.

There are three types of tags in the repository:

"},{"location":"documentation/getting-started/docker/#semantic-versioned-tags","title":"Semantic versioned tags","text":"

For example, 2.0.0-rc.1 or v2.0.0-rc.1.

These are official releases of WireGuard Portal. For production deployments of WireGuard Portal, we strongly recommend using one of these versioned tags instead of the latest or canary tags.

There are different types of these tags:

  • Major version tags: v2 or 2. These tags always refer to the latest image for WireGuard Portal version 2.
  • Minor version tags: v2.x or 2.0. These tags always refer to the latest image for WireGuard Portal version 2.x.
  • Specific version tags (patch version): v2.0.0 or 2.0.0. These tags denote a very specific release. They correspond to the GitHub tags that we make, and you can see the release notes for them here: https://github.com/h44z/wg-portal/releases. Once these tags for a specific version show up in the Docker repository, they will never change.
"},{"location":"documentation/getting-started/docker/#the-latest-tag","title":"The latest tag","text":"

The lastest tag is the latest stable release of WireGuard Portal. For version 2, this is the same as the v2 tag.

"},{"location":"documentation/getting-started/docker/#the-master-tag","title":"The master tag","text":"

This is the most recent build to the main branch! It changes a lot and is very unstable.

We recommend that you don't use it except for development purposes or to test the latest features.

"},{"location":"documentation/getting-started/docker/#configuration","title":"Configuration","text":"

You can configure WireGuard Portal using a YAML configuration file. The filepath of the YAML configuration file defaults to /app/config/config.yaml. It is possible to override the configuration filepath using the environment variable WG_PORTAL_CONFIG.

By default, WireGuard Portal uses an SQLite database. The database is stored in /app/data/sqlite.db.

You should mount those directories as a volume:

  • /app/data
  • /app/config

A detailed description of the configuration options can be found here.

If you want to access configuration files in wg-quick format, you can mount the /etc/wireguard directory inside the container to a location of your choice. Also enable the config_storage_path option in the configuration file:

advanced:\n  config_storage_path: /etc/wireguard\n

"},{"location":"documentation/getting-started/helm/","title":"Helm","text":""},{"location":"documentation/getting-started/helm/#installing-the-chart","title":"Installing the Chart","text":"

To install the chart with the release name wg-portal:

helm install wg-portal oci://ghcr.io/h44z/charts/wg-portal\n

This command deploy wg-portal on the Kubernetes cluster in the default configuration. The Values section lists the parameters that can be configured during installation.

"},{"location":"documentation/getting-started/helm/#values","title":"Values","text":"Key Type Default Description nameOverride string \"\" Partially override resource names (adds suffix) fullnameOverride string \"\" Fully override resource names extraDeploy list [] Array of extra objects to deploy with the release config.advanced tpl/object {} Advanced configuration options. config.auth tpl/object {} Auth configuration options. config.core tpl/object {} Core configuration options. If external admins in auth are defined and there are no admin_user and admin_password defined here, the default admin account will be disabled. config.database tpl/object {} Database configuration options config.mail tpl/object {} Mail configuration options config.statistics tpl/object {} Statistics configuration options config.web tpl/object {} Web configuration options. listening_address will be set automatically from service.web.port. external_url is required to enable ingress and certificate resources. revisionHistoryLimit string 10 The number of old ReplicaSets to retain to allow rollback. workloadType string \"Deployment\" Workload type - Deployment or StatefulSet strategy object {\"type\":\"RollingUpdate\"} Update strategy for the workload Valid values are: RollingUpdate or Recreate for Deployment, RollingUpdate or OnDelete for StatefulSet image.repository string \"ghcr.io/h44z/wg-portal\" Image repository image.pullPolicy string \"IfNotPresent\" Image pull policy image.tag string \"\" Overrides the image tag whose default is the chart appVersion imagePullSecrets list [] Image pull secrets podAnnotations tpl/object {} Extra annotations to add to the pod podLabels object {} Extra labels to add to the pod podSecurityContext object {} Pod Security Context securityContext.capabilities.add list [\"NET_ADMIN\"] Add capabilities to the container initContainers tpl/list [] Pod init containers sidecarContainers tpl/list [] Pod sidecar containers dnsPolicy string \"ClusterFirst\" Set DNS policy for the pod. Valid values are ClusterFirstWithHostNet, ClusterFirst, Default or None. restartPolicy string \"Always\" Restart policy for all containers within the pod. Valid values are Always, OnFailure or Never. hostNetwork string false. Use the host's network namespace. resources object {} Resources requests and limits command list [] Overwrite pod command args list [] Additional pod arguments env tpl/list [] Additional environment variables envFrom tpl/list [] Additional environment variables from a secret or configMap livenessProbe object {} Liveness probe configuration readinessProbe object {} Readiness probe configuration startupProbe object {} Startup probe configuration volumes tpl/list [] Additional volumes volumeMounts tpl/list [] Additional volumeMounts nodeSelector object {\"kubernetes.io/os\":\"linux\"} Node Selector configuration tolerations list [] Tolerations configuration affinity object {} Affinity configuration service.mixed.enabled bool false Whether to create a single service for the web and wireguard interfaces service.mixed.type string \"LoadBalancer\" Service type service.web.annotations object {} Annotations for the web service service.web.type string \"ClusterIP\" Web service type service.web.port int 8888 Web service port Used for the web interface listener service.web.appProtocol string \"http\" Web service appProtocol. Will be auto set to https if certificate is enabled. service.wireguard.annotations object {} Annotations for the WireGuard service service.wireguard.type string \"LoadBalancer\" Wireguard service type service.wireguard.ports list [51820] Wireguard service ports. Exposes the WireGuard ports for created interfaces. Lowerest port is selected as start port for the first interface. Increment next port by 1 for each additional interface. service.metrics.port int 8787 ingress.enabled bool false Specifies whether an ingress resource should be created ingress.className string \"\" Ingress class name ingress.annotations object {} Ingress annotations ingress.tls bool false Ingress TLS configuration. Enable certificate resource or add ingress annotation to create required secret certificate.enabled bool false Specifies whether a certificate resource should be created. If enabled, certificate will be used for the web. certificate.issuer.name string \"\" Certificate issuer name certificate.issuer.kind string \"\" Certificate issuer kind (ClusterIssuer or Issuer) certificate.issuer.group string \"cert-manager.io\" Certificate issuer group certificate.duration string \"\" Optional. Documentation certificate.renewBefore string \"\" Optional. Documentation certificate.commonName string \"\" Optional. Documentation certificate.emailAddresses list [] Optional. Documentation certificate.ipAddresses list [] Optional. Documentation certificate.keystores object {} Optional. Documentation certificate.privateKey object {} Optional. Documentation certificate.secretTemplate object {} Optional. Documentation certificate.subject object {} Optional. Documentation certificate.uris list [] Optional. Documentation certificate.usages list [] Optional. Documentation persistence.enabled bool false Specifies whether an persistent volume should be created persistence.annotations object {} Persistent Volume Claim annotations persistence.storageClass string \"\" Persistent Volume storage class. If undefined (the default) cluster's default provisioner will be used. persistence.accessMode string \"ReadWriteOnce\" Persistent Volume Access Mode persistence.size string \"1Gi\" Persistent Volume size persistence.volumeName string \"\" Persistent Volume Name (optional) serviceAccount.create bool true Specifies whether a service account should be created serviceAccount.annotations object {} Service account annotations serviceAccount.automount bool false Automatically mount a ServiceAccount's API credentials serviceAccount.name string \"\" The name of the service account to use. If not set and create is true, a name is generated using the fullname template monitoring.enabled bool false Enable Prometheus monitoring. monitoring.apiVersion string \"monitoring.coreos.com/v1\" API version of the Prometheus resource. Use azmonitoring.coreos.com/v1 for Azure Managed Prometheus. monitoring.kind string \"PodMonitor\" Kind of the Prometheus resource. Could be PodMonitor or ServiceMonitor. monitoring.labels object {} Resource labels. monitoring.annotations object {} Resource annotations. monitoring.interval string 1m Interval at which metrics should be scraped. If not specified config.statistics.data_collection_interval interval is used. monitoring.metricRelabelings list [] Relabelings to samples before ingestion. monitoring.relabelings list [] Relabelings to samples before scraping. monitoring.scrapeTimeout string \"\" Timeout after which the scrape is ended If not specified, the Prometheus global scrape interval is used. monitoring.jobLabel string \"\" The label to use to retrieve the job name from. monitoring.podTargetLabels object {} Transfers labels on the Kubernetes Pod onto the target. monitoring.dashboard.enabled bool false Enable Grafana dashboard. monitoring.dashboard.annotations object {} Annotations for the dashboard ConfigMap. monitoring.dashboard.labels object {} Additional labels for the dashboard ConfigMap. monitoring.dashboard.namespace string \"\" Dashboard ConfigMap namespace Overrides the namespace for the dashboard ConfigMap."},{"location":"documentation/getting-started/reverse-proxy/","title":"Reverse Proxy (HTTPS)","text":""},{"location":"documentation/getting-started/reverse-proxy/#reverse-proxy-for-https","title":"Reverse Proxy for HTTPS","text":"

For production deployments, always serve the WireGuard Portal over HTTPS. You have two options to secure your connection:

"},{"location":"documentation/getting-started/reverse-proxy/#reverse-proxy","title":"Reverse Proxy","text":"

Let a front\u2010end proxy handle HTTPS for you. This also frees you from managing certificates manually and is therefore the preferred option. You can use Nginx, Traefik, Caddy or any other proxy.

Below is an example using a Docker Compose stack with Traefik. It exposes the WireGuard Portal on https://wg.domain.com and redirects initial HTTP traffic to HTTPS.

services:\n  reverse-proxy:\n    image: traefik:v3.3\n    restart: unless-stopped\n    command:\n      #- '--log.level=DEBUG'\n      - '--providers.docker.endpoint=unix:///var/run/docker.sock'\n      - '--providers.docker.exposedbydefault=false'\n      - '--entrypoints.web.address=:80'\n      - '--entrypoints.websecure.address=:443'\n      - '--entrypoints.websecure.http3'\n      - '--certificatesresolvers.letsencryptresolver.acme.httpchallenge=true'\n      - '--certificatesresolvers.letsencryptresolver.acme.httpchallenge.entrypoint=web'\n      - '--certificatesresolvers.letsencryptresolver.acme.email=your.email@domain.com'\n      - '--certificatesresolvers.letsencryptresolver.acme.storage=/letsencrypt/acme.json'\n      #- '--certificatesresolvers.letsencryptresolver.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory'  # just for testing\n    ports:\n      - 80:80 # for HTTP\n      - 443:443/tcp  # for HTTPS\n      - 443:443/udp  # for HTTP/3\n    volumes:\n      - acme-certs:/letsencrypt\n      - /var/run/docker.sock:/var/run/docker.sock:ro\n    labels:\n      - 'traefik.enable=true'\n      # HTTP Catchall for redirecting HTTP -> HTTPS\n      - 'traefik.http.routers.dashboard-catchall.rule=Host(`wg.domain.com`) && PathPrefix(`/`)'\n      - 'traefik.http.routers.dashboard-catchall.entrypoints=web'\n      - 'traefik.http.routers.dashboard-catchall.middlewares=redirect-to-https'\n      - 'traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https'\n\n  wg-portal:\n    image: wgportal/wg-portal:v2\n    container_name: wg-portal\n    restart: unless-stopped\n    logging:\n      options:\n        max-size: \"10m\"\n        max-file: \"3\"\n    cap_add:\n      - NET_ADMIN\n    ports:\n      # host port : container port\n      # WireGuard port, needs to match the port in wg-portal interface config (add one port mapping for each interface)\n      - \"51820:51820/udp\"\n      # Web UI port (only available on localhost, Traefik will handle the HTTPS)\n      - \"127.0.0.1:8888:8888/tcp\"\n    sysctls:\n      - net.ipv4.conf.all.src_valid_mark=1\n    volumes:\n      # host path : container path\n      - ./wg/data:/app/data\n      - ./wg/config:/app/config\n    labels:\n      - 'traefik.enable=true'\n      - 'traefik.http.routers.wgportal.rule=Host(`wg.domain.com`)'\n      - 'traefik.http.routers.wgportal.entrypoints=websecure'\n      - 'traefik.http.routers.wgportal.tls.certresolver=letsencryptresolver'\n      - 'traefik.http.routers.wgportal.service=wgportal'\n      - 'traefik.http.services.wgportal.loadbalancer.server.port=8888'\n\nvolumes:\n  acme-certs:\n

The WireGuard Portal configuration must be updated accordingly so that the correct external URL is set for the web interface:

web:\n  external_url: https://wg.domain.com\n
"},{"location":"documentation/getting-started/reverse-proxy/#built-in-tls","title":"Built-in TLS","text":"

If you prefer to let WireGuard Portal handle TLS itself, you can use the built-in TLS support. In your config.yaml, under the web section, point to your certificate and key files:

web:\n  cert_file: /path/to/your/fullchain.pem\n  key_file:  /path/to/your/privkey.pem\n

The web server will then use these files to serve HTTPS traffic directly instead of HTTP.

"},{"location":"documentation/getting-started/sources/","title":"Sources","text":"

To build the application from source files, use the Makefile provided in the repository.

"},{"location":"documentation/getting-started/sources/#requirements","title":"Requirements","text":"
  • Git
  • Make
  • Go: >=1.24.0
  • Node.js with npm: node>=18, npm>=9
"},{"location":"documentation/getting-started/sources/#build","title":"Build","text":"
# Get source code\ngit clone https://github.com/h44z/wg-portal -b ${WG_PORTAL_VERSION:-master} --depth 1\ncd wg-portal\n# Build the frontend\nmake frontend\n# Build the backend\nmake build\n
"},{"location":"documentation/getting-started/sources/#install","title":"Install","text":"

Compiled binary will be available in ./dist directory.

For installation instructions, check the Binaries section.

"},{"location":"documentation/monitoring/prometheus/","title":"Monitoring","text":"

By default, WG-Portal exposes Prometheus metrics on port 8787 if interface/peer statistic data collection is enabled.

"},{"location":"documentation/monitoring/prometheus/#exposed-metrics","title":"Exposed Metrics","text":"Metric Type Description wireguard_interface_received_bytes_total gauge Bytes received through the interface. wireguard_interface_sent_bytes_total gauge Bytes sent through the interface. wireguard_peer_last_handshake_seconds gauge Seconds from the last handshake with the peer. wireguard_peer_received_bytes_total gauge Bytes received from the peer. wireguard_peer_sent_bytes_total gauge Bytes sent to the peer. wireguard_peer_up gauge Peer connection state (boolean: 1/0)."},{"location":"documentation/monitoring/prometheus/#prometheus-config","title":"Prometheus Config","text":"

Add the following scrape job to your Prometheus config file:

# prometheus.yaml\nscrape_configs:\n  - job_name: wg-portal\n    scrape_interval: 60s\n    static_configs:\n      - targets:\n          - localhost:8787 # Change localhost to IP Address or hostname with WG-Portal\n
"},{"location":"documentation/monitoring/prometheus/#grafana-dashboard","title":"Grafana Dashboard","text":"

You may import dashboard.json into your Grafana instance.

"},{"location":"documentation/rest-api/api-doc/","title":"REST API","text":""},{"location":"documentation/upgrade/v1/","title":"Upgrade","text":"

Major upgrades between different versions may require special procedures, which are described in the following sections.

"},{"location":"documentation/upgrade/v1/#upgrade-from-v1-to-v2","title":"Upgrade from v1 to v2","text":"

Before upgrading from V1, make sure that you have a backup of your currently working configuration files and database!

To start the upgrade process, start the wg-portal binary with the -migrateFrom parameter. The configuration (config.yaml) for WireGuard Portal must be updated and valid before starting the upgrade.

To upgrade from a previous SQLite database, start wg-portal like:

./wg-portal-amd64 -migrateFrom=old_wg_portal.db\n

You can also specify the database type using the parameter -migrateFromType. Supported database types: mysql, mssql, postgres or sqlite.

For example:

./wg-portal-amd64 -migrateFromType=mysql -migrateFrom='user:pass@tcp(1.2.3.4:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local'\n

The upgrade will transform the old, existing database and store the values in the new database specified in the config.yaml configuration file. Ensure that the new database does not contain any data!

If you are using Docker, you can adapt the docker-compose.yml file to start the upgrade process:

services:\n  wg-portal:\n    image: wgportal/wg-portal:v2\n    # ... other settings\n    restart: no\n    command: [\"-migrateFrom=/app/data/old_wg_portal.db\"]\n
"},{"location":"documentation/usage/general/","title":"General","text":"

This documentation section describes the general usage of WireGuard Portal. If you are looking for specific setup instructions, please refer to the Getting Started and Configuration sections, for example, using a Docker deployment.

"},{"location":"documentation/usage/general/#basic-concepts","title":"Basic Concepts","text":"

WireGuard Portal is a web-based configuration portal for WireGuard server management. It allows managing multiple WireGuard interfaces and users from a single web UI. WireGuard Interfaces can be categorized into three types:

  • Server: A WireGuard server interface that to which multiple peers can connect. In this mode, it is possible to specify default settings for all peers, such as the IP address range, DNS servers, and MTU size.
  • Client: A WireGuard client interface that can be used to connect to a WireGuard server. Usually, such an interface has exactly one peer.
  • Unknown: This is the default type for imported interfaces. It is encouraged to change the type to either Server or Client after importing the interface.
"},{"location":"documentation/usage/general/#accessing-the-web-ui","title":"Accessing the Web UI","text":"

The web UI should be accessed via the URL specified in the external_url property of the configuration file. By default, WireGuard Portal listens on port 8888 for HTTP connections. Check the Security section for more information on securing the web UI.

So the default URL to access the web UI is:

http://localhost:8888\n

A freshly set-up WireGuard Portal instance will have a default admin user with the username admin@wgportal.local and the password wgportal-default. You can and should override the default credentials in the configuration file. Make sure to change the default password immediately after the first login!

"},{"location":"documentation/usage/general/#basic-ui-description","title":"Basic UI Description","text":"

As seen in the screenshot above, the web UI is divided into several sections which are accessible via the navigation bar on the top of the screen.

  1. Home: The landing page of WireGuard Portal. It provides a staring point for the user to access the different sections of the web UI. It also provides quick links to WireGuard Client downloads or official documentation.
  2. Interfaces: This section allows you to manage the WireGuard interfaces. You can add, edit, or delete interfaces, as well as view their status and statistics. Peers for each interface can be managed here as well.
  3. Users: This section allows you to manage the users of WireGuard Portal. You can add, edit, or delete users, as well as view their status and statistics.
  4. Key Generator: This section allows you to generate WireGuard keys locally on your browser. The generated keys are never sent to the server. This is useful if you want to generate keys for a new peer without having to store the private keys in the database.
  5. Profile / Settings: This section allows you to access your own profile page, settings, and audit logs.
"},{"location":"documentation/usage/general/#interface-view","title":"Interface View","text":"

The interface view provides an overview of the WireGuard interfaces and peers configured in WireGuard Portal.

The most important elements are:

  1. Interface Selector: This dropdown allows you to select the WireGuard interface you want to manage. All further actions will be performed on the selected interface.
  2. Create new Interface: This button allows you to create a new WireGuard interface.
  3. Interface Overview: This section provides an overview of the selected WireGuard interface. It shows the interface type, number of peers, and other important information.
  4. List of Peers: This section provides a list of all peers associated with the selected WireGuard interface. You can view, add, edit, or delete peers from this list.
  5. Add new Peer: This button allows you to add a new peer to the selected WireGuard interface.
  6. Add multiple Peers: This button allows you to add multiple peers to the selected WireGuard interface. This is useful if you want to add a large number of peers at once.
"},{"location":"documentation/usage/ldap/","title":"LDAP","text":"

WireGuard Portal lets you hook up any LDAP server such as Active Directory or OpenLDAP for both authentication and user sync. You can even register multiple LDAP servers side-by-side. When someone logs in via LDAP, their specific provider is remembered, so there's no risk of cross-provider conflicts. Details on the log-in process can be found in the Security documentation.

If you enable LDAP synchronization, all users within the LDAP directory will be created automatically in the WireGuard Portal database if they do not exist. If a user is disabled or deleted in LDAP, the user will be disabled in WireGuard Portal as well. The synchronization process can be fine-tuned by multiple parameters, which are described below.

"},{"location":"documentation/usage/ldap/#ldap-synchronization","title":"LDAP Synchronization","text":"

WireGuard Portal can automatically synchronize users from LDAP to the database. To enable this feature, set the sync_interval property in the LDAP provider configuration to a value greater than \"0\". The value is a string representing a duration, such as \"15m\" for 15 minutes or \"1h\" for 1 hour (check the exact format definition for details). The synchronization process will run in the background and synchronize users from LDAP to the database at the specified interval. Also make sure that the sync_filter property is a well-formed LDAP filter, or synchronization will fail.

"},{"location":"documentation/usage/ldap/#limiting-synchronization-to-specific-users","title":"Limiting Synchronization to Specific Users","text":"

Use the sync_filter property in your LDAP provider block to restrict which users get synchronized. It accepts any valid LDAP search filter, only entries matching that filter will be pulled into the portal's database.

For example, to import only users with a mail attribute:

auth:\n  ldap:\n    - id: ldap\n      # ... other settings\n      sync_filter: (mail=*)\n

"},{"location":"documentation/usage/ldap/#disable-missing-users","title":"Disable Missing Users","text":"

If you set the disable_missing property to true, any user that is not found in LDAP during synchronization will be disabled in WireGuard Portal. All peers associated with that user will also be disabled.

If you want a user and its peers to be automatically re-enabled once they are found in LDAP again, set the auto_re_enable property to true. This will only re-enable the user if they where disabled by the synchronization process. Manually disabled users will not be re-enabled.

"},{"location":"documentation/usage/security/","title":"Security","text":"

This section describes the security features available to administrators for hardening WireGuard Portal and protecting its data.

"},{"location":"documentation/usage/security/#authentication","title":"Authentication","text":"

WireGuard Portal supports multiple authentication methods, including:

  • Local user accounts
  • LDAP authentication
  • OAuth and OIDC authentication
  • Passkey authentication (WebAuthn)

Users can have two roles which limit their permissions in WireGuard Portal:

  • User: Can manage their own account and peers.
  • Admin: Can manage all users and peers, including the ability to manage WireGuard interfaces.
"},{"location":"documentation/usage/security/#password-security","title":"Password Security","text":"

WireGuard Portal supports username and password authentication for both local and LDAP-backed accounts. Local users are stored in the database, while LDAP users are authenticated against an external LDAP server.

On initial startup, WireGuard Portal automatically creates a local admin account with the password wgportal-default.

This password must be changed immediately after the first login.

The minimum password length for all local users can be configured in the auth section of the configuration file. The default value is 16 characters, see min_password_length. The minimum password length is also enforced for the default admin user.

"},{"location":"documentation/usage/security/#passkey-webauthn-authentication","title":"Passkey (WebAuthn) Authentication","text":"

Besides the standard authentication mechanisms, WireGuard Portal supports Passkey authentication. This feature is enabled by default and can be configured in the webauthn section of the configuration file.

Users can register multiple Passkeys to their account. These Passkeys can be used to log in to the web UI as long as the user is not locked.

Passkey authentication does not disable password authentication. The password can still be used to log in (e.g., as a fallback).

To register a Passkey, open the settings page (1) in the web UI and click on the \"Register Passkey\" (2) button.

"},{"location":"documentation/usage/security/#oauth-and-oidc-authentication","title":"OAuth and OIDC Authentication","text":"

WireGuard Portal supports OAuth and OIDC authentication. You can use any OAuth or OIDC provider that supports the authorization code flow, such as Google, GitHub, or Keycloak.

For OAuth or OIDC to work, you need to configure the external_url property in the web section of the configuration file. If you are planning to expose the portal to the internet, make sure that the external_url is configured to use HTTPS.

To add OIDC or OAuth authentication to WireGuard Portal, create a Client-ID and Client-Secret in your OAuth provider and configure a new authentication provider in the auth section of the configuration file. Make sure that each configured provider has a unique provider_name property set. Samples can be seen here.

"},{"location":"documentation/usage/security/#limiting-login-to-specific-domains","title":"Limiting Login to Specific Domains","text":"

You can limit the login to specific domains by setting the allowed_domains property for OAuth or OIDC providers. This property is a comma-separated list of domains that are allowed to log in. The user's email address is checked against this list. For example, if you want to allow only users with an email address ending in outlook.com to log in, set the property as follows:

auth:\n  oidc:\n    - provider_name: \"oidc1\"\n      # ... other settings\n      allowed_domains:\n        - \"outlook.com\"\n
"},{"location":"documentation/usage/security/#limit-login-to-existing-users","title":"Limit Login to Existing Users","text":"

You can limit the login to existing users only by setting the registration_enabled property to false for OAuth or OIDC providers. If registration is enabled, new users will be created in the database when they log in for the first time.

"},{"location":"documentation/usage/security/#admin-mapping","title":"Admin Mapping","text":"

You can map users to admin roles based on their attributes in the OAuth or OIDC provider. To do this, set the admin_mapping property for the provider. Administrative access can either be mapped by a specific attribute or by group membership.

Attribute specific mapping can be achieved by setting the admin_value_regex and the is_admin property. The admin_value_regex property is a regular expression that is matched against the value of the is_admin attribute. The user is granted admin access if the regex matches the attribute value.

Example:

auth:\n  oidc:\n    - provider_name: \"oidc1\"\n      # ... other settings\n      field_map:\n        is_admin: \"wg_admin_prop\"\n      admin_mapping:\n        admin_value_regex: \"^true$\"\n
The example above will grant admin access to users with the wg_admin_prop attribute set to true.

Group membership mapping can be achieved by setting the admin_group_regex and user_groups property. The admin_group_regex property is a regular expression that is matched against the group names of the user. The user is granted admin access if the regex matches any of the group names.

Example:

auth:\n  oidc:\n    - provider_name: \"oidc1\"\n      # ... other settings\n      field_map:\n        user_groups: \"groups\"\n      admin_mapping:\n        admin_group_regex: \"^the-admin-group$\"\n
The example above will grant admin access to users who are members of the the-admin-group group.

"},{"location":"documentation/usage/security/#ldap-authentication","title":"LDAP Authentication","text":"

WireGuard Portal supports LDAP authentication. You can use any LDAP server that supports the LDAP protocol, such as Active Directory or OpenLDAP. Multiple LDAP servers can be configured in the auth section of the configuration file. WireGuard Portal remembers the authentication provider of the user and therefore avoids conflicts between multiple LDAP providers.

To configure LDAP authentication, create a new ldap authentication provider in the auth section of the configuration file.

"},{"location":"documentation/usage/security/#limiting-login-to-specific-users","title":"Limiting Login to Specific Users","text":"

You can limit the login to specific users by setting the login_filter property for LDAP provider. This filter uses the LDAP search filter syntax. The username can be inserted into the query by placing the {{login_identifier}} placeholder in the filter. This placeholder will then be replaced with the username entered by the user during login.

For example, if you want to allow only users with the objectClass attribute set to organizationalPerson to log in, set the property as follows:

auth:\n  ldap:\n    - provider_name: \"ldap1\"\n      # ... other settings\n      login_filter: \"(&(objectClass=organizationalPerson)(uid={{login_identifier}}))\"\n

The login_filter should always be designed to return at most one user.

"},{"location":"documentation/usage/security/#limit-login-to-existing-users_1","title":"Limit Login to Existing Users","text":"

You can limit the login to existing users only by setting the registration_enabled property to false for LDAP providers. If registration is enabled, new users will be created in the database when they log in for the first time.

"},{"location":"documentation/usage/security/#admin-mapping_1","title":"Admin Mapping","text":"

You can map users to admin roles based on their group membership in the LDAP server. To do this, set the admin_group and memberof property for the provider. The admin_group property defines the distinguished name of the group that is allowed to log in as admin. All groups that are listed in the memberof attribute of the user will be checked against this group. If one of the groups matches, the user is granted admin access.

"},{"location":"documentation/usage/security/#ui-and-api-access","title":"UI and API Access","text":"

WireGuard Portal provides a web UI and a REST API for user interaction. It is important to secure these interfaces to prevent unauthorized access and data breaches.

"},{"location":"documentation/usage/security/#https","title":"HTTPS","text":"

It is recommended to use HTTPS for all communication with the portal to prevent eavesdropping.

Event though, WireGuard Portal supports HTTPS out of the box, it is recommended to use a reverse proxy like Nginx or Traefik to handle SSL termination and other security features. A detailed explanation is available in the Reverse Proxy section.

"}]} \ No newline at end of file diff --git a/master/sitemap.xml b/master/sitemap.xml index d0b64f0..c0e2c43 100644 --- a/master/sitemap.xml +++ b/master/sitemap.xml @@ -2,50 +2,62 @@ https://wgportal.org/master/ - 2025-05-15 + 2025-05-17 https://wgportal.org/master/documentation/overview/ - 2025-05-15 + 2025-05-17 https://wgportal.org/master/documentation/configuration/examples/ - 2025-05-15 + 2025-05-17 https://wgportal.org/master/documentation/configuration/overview/ - 2025-05-15 + 2025-05-17 https://wgportal.org/master/documentation/getting-started/binaries/ - 2025-05-15 + 2025-05-17 https://wgportal.org/master/documentation/getting-started/docker/ - 2025-05-15 + 2025-05-17 https://wgportal.org/master/documentation/getting-started/helm/ - 2025-05-15 + 2025-05-17 https://wgportal.org/master/documentation/getting-started/reverse-proxy/ - 2025-05-15 + 2025-05-17 https://wgportal.org/master/documentation/getting-started/sources/ - 2025-05-15 + 2025-05-17 https://wgportal.org/master/documentation/monitoring/prometheus/ - 2025-05-15 + 2025-05-17 https://wgportal.org/master/documentation/rest-api/api-doc/ - 2025-05-15 + 2025-05-17 https://wgportal.org/master/documentation/upgrade/v1/ - 2025-05-15 + 2025-05-17 + + + https://wgportal.org/master/documentation/usage/general/ + 2025-05-17 + + + https://wgportal.org/master/documentation/usage/ldap/ + 2025-05-17 + + + https://wgportal.org/master/documentation/usage/security/ + 2025-05-17 \ No newline at end of file diff --git a/master/sitemap.xml.gz b/master/sitemap.xml.gz index 0a4bb6db5cddee13baad908c5c165efc58ddbc0c..05e9680ac17bdd37d872e3bc5e3425e28e39ba8e 100644 GIT binary patch literal 340 zcmV-a0jvHWiwFpS(I;pE|8r?{Wo=<_E_iKh0L_-oZi6rk$M1a##65&os`epDZ+n96 z0kYshw0y~NO853NZ8c53O*@202<$laPk)&t-SO;fbplK#_(Q#I+PVU-!(jY)sNY^+ z#AAKzH(f@XfGQ65=}=EZ@mb1wo||L{oQkOlILf3aHj=zKW!pT}{ifovB)EQEMrVWW zmn>;XGsb|V>?H*+CqUWBCF1u2_Pa3jyLPu1?OtpjIOOKLR**j>{#tAZIy>;Bh((Zr z)i@cLOET!-Kg^i%YQb5#Xd$hKXbl>TK*U`t5-B7Y)c zco3G&2Smhh{#p}Q3K@0TZgRmJ3dmHF<#9k0wqoIHN&X*ToIQnlSX?{$g2mk;ui=qDj literal 317 zcmV-D0mA+tiwFpSE+uFJ|8r?{Wo=<_E_iKh0L_)nYQr!L$M1cLkh`O_P}oMA-ueXF z19*v+n8lWnm8N_9DQy{}x9yS`jBQyTKmG{2I$r#cospBHaLBhsnP(UpYF+3K`P=Ks zJmtrFQ;j?%luVsNI^?}bd;yrIsYp)H+n5UC4pP(WA;H}UW$~QXn@q=?;I_MtYM`c` zv!ppq7m39V*AyBq$WX!T@jF26p4xg>?)IkKo9$j*?zUS6_$l$%Vl6eJ#~@Zz1Rz!8 z>~LC=p`q~Mx{+@uyjULxOzR<9gGL>SXqTEKmIYgQcfqn-R;5QKz5QIan;(gK9Q>Mi z80W_aO=P-!tqCmA$j!3dNN2L}KE$oHMj

%9j{!;CDrpvWZ5)4+$k~&WE{vYp zL&X|=?^-qC;xc&v?n;O%n0u@p=a4s;<5ZMh-sN z%m2+5Iq&R&3QYA*q7&8AMWT%Coq)__=LY8g|T$sPQT zi68pC(cpi2`{y^&9{jGgZ@iy~FOXT7r8jQ)iU$=ex-aTa^Se%==O)oz0#HtI(eXuir@6IcyT z!$GhDml{r35VTG;Z;ZJ-ftd7ZZ9$a)dGtR62xUpS(Napa&)Avfxh7EOidb8Ol+jjr zd0TMQvJbdG14hc1j!3$QiLef$jAbPaGbYgQitQQp_F0ar1#_}QbbfUc=AMN`5$#5t zf``05zDxDxzmm;37s)OL-v8QAu-%*@{0@6sk`578#22jm1LuJ;(Idjt;sEjy+N=52MIi|Qx zni;rCrhgC&@SeCB;Naa+-5Civ$YNhxo7-#$m={|p4 zC9k?DG(W1;O0zXW)(l5BpFE$!BcY^BA2f)yq5!pn&u)pgwta||8%pb=(1vQB&XrR6 zV{T2QfSiI;zka^M2Rmqlk?V0&{!Mn@f|k=&M+2pKtQF)`Y#4Xxb~S|<)fN3=L>8Z1nv~lp!5$zQCPESzc@EeH#+e;$Ykuc*rbA$_4e0GvT`7*b3AFlBBIS-0daVL z+Tz7PY;#WB+C;SdnKfgB({d#?c)edcJp7{90t7xWGmDo8j|ht!{ki_Yofdq6wODO3C1=;GG+h+F{slLq?MVMj zao-c?lRXg`*J@`QAZuEJ5lN>%0CaFY>5gnUzD2}w<#w4_$Y%Y5B`T(ithO;u^XO!Q zY_v@cz{YStcmLr4hVbqlcCem~uFu@Aj-omsBh66dHuM4u8xeHz%C2u*<2PrX8=poa za;?m<&)IYI^7d3o%foIMsw(aBcA};#jA!aI2#(D>y$^9O$kdk%;AZ)u9O;DTy3Nzo z8q{Q5#37#T-~|G!?=MYnYPBkjyeekw`NBjq727`k;>c}He?A;pA%>Al4%wf6L!v^m zmVHF0%E9u2tr4%OXjj{!aYgv*S3FJV(*kZ#>e9n5!Z`Q_kZ%o2Mv)gDMGqotFG6YTQPy2%hpomaKxJ6|EFE?aMhh zhlz_ieNE23=LK0Gb8U!vgn~h>jcCh9_c=)+r4Hd^VUKS(L#&NC?;twL5lmS zKU5<50Gw0ub<<5MbW@534A=@IIsSDg_?g9o}6+QL*bY3 z@Md!7z=HLDSG93?*@{LzJ*VRX&A!hn3Etv9RCToQ{sDxqB;9;zYlt;t2_M1k;qjC+ zv9r7G^KhcbZX!!+baPxf^C7S?GX{>eQcX;0W3Ii<%G8!%+6uRgROS*#M{F1;&IF7M zvj?Vc3-hpjv}*Bd<8r|@dzP9jCKQUl=OrxU(|a=NXeG{-&wPRq0k$3RD#OZDMHaxSwL5h>KX08)%GJ@KjmR zj0)2&Nq+l=iCEF4GRxr9Ha57`c@{I68IqE6FI7TZsq<;aNYn@dJ-k<^XJGW$S>Vv& zwVTn2YHS9Fy1`;V?r~5#YdLve-o1TF(Z-0io4v7V7X2xNQm^VOuMEuSib zouu`RRw!zM|M63~-QGKSf#a+nM&=M0*F-LZI@t|fuKDYUJs@u(7p?`s8=nC(ps7iHgRvWSX;N1My&5hI|7O z*n5J~OnEPDX11T4_%1xue?oQGl^5I+h%1ao+$xZ80lFk&foX()SKr*uR6zweR360+ z;$8m;rj(oolx?kv2sZzTel+>`vFG_VY~T}!*cqVvJZhQY5n`|MA(>$RQoV?M zm5ABt^?|!i(&Vw3n_BQviLj7fWwI8y^k>81Fq6GMOz!RY?3|qrP*cljvXhu6Yw-Nj4W}sXJE!*?G+2H8=@$2zB!alN&=Q+Std@f zsS%ud1KMmC;A_f^;OBhhnk;p{Saq^5T_qL_d;wN`Lv|FiNepi`rg*l0q@b>nF_5l~ z^_hpCE_=i>hilc3uZDGm#KiBA+vEg*e;y?}apBYIsXaY4mI&w=!r~segIWtl9ZdcH zgi*;h8{8GcJU)BpBXBX3y7$avEl$NTR(i@luR*$e3bL!+9+lnp?1&)QmJgy4RX`C# zBN=n%aH9Ec=4}sG7JOJ_hOJx1ySFt`INJ2_aIMC=x`Y!j(lyGH0io$s=HU?`J0Z2} z9FpLpA*I=VyWF1HENs1<1eZN)Y;E`%$tUD&!f0b)82QfZ>c{Hh*L)`E_Ylt(F8KnE z1e(5r%s(y3aN#MBZ*|cNsxWkdce68SXo5p-y)IL2%UO|06}@8Jc7lEoLZ*{eEndS$lJ_O_JJnNqG;)PPEUKD~#emZu;LI6IsH2Kbe)1aNzqJ5t zPnp7o!_eW*6qXYP+Q)V@qiSg2;wD)Y&i!H&UZ5RU$pSdtduV!46of4yJNH|4tK@as zLu-j5lT3)x=pWUn!xl$TpYid|?hVd;K;7FkZRROXqkPYOuDKiWc5Ws^BA%6wVO^GJ zQnlJvP{n9cti-d|F4)zKOMvR(bH9wh+C1}XC8%Df@tsw>EW5{}7Kz@8iRZ+!2Lm<1B_AFAH?>942XcNwe%ytHtd@>p1$EuFSgp5bKt@ulTC>u>Q~!};haQtq z^0d&0o3&j;1g&G1JeQ=N!5;n20~6!*&j$~;q~GT!)fSZ{WP_R*)pAoRG&C}X2rw%m zk*VIVW;+%c)3W2yScBm1Fsa-%A)jd3HfXHfY?S37FncwCo-_Xl5YJ|Vmp3OO+^?YBk@I5aPFYNZa%82RD z%6VX`1Ap$=>AZKRtry=(PZTZHpU7IiN+Tm3+s1fS70Is$i)wXVb7SX~LaPLGUm7`F ztXlA~3u7O4o2T8U3T(NP+x#a*t5B7v_`MvDh3|$|e@nCGi*@i;dU_>~B z)!e>d6u$zb+(I^VXJd?w z^I28`Msyv$Zax@s%cnp#TdBk109aEEm!=b060T{UAiinjm2w%Rv$iuI9lKGjN*k#Xb)RV{~Bs{|_3oOZLPeTff+h+XE2g{vYYE^1rL_JdPp z+rFKx1oB1ba{IEyaeQhn$=?p(#~S>Oa~nY=R0Qvwx6)2T$Gu;YZ-Cjwuv^gd(wZr( zA+)j%&k!yQ*5z%Ui#`D2Dv8RSS{C z)ueayAIXSuRNC2D1Azx#x(;R)r^qHj183C=%q{Kqrr_;J@{CBrjBv$YY;Zl!TqL#k zV7FD(lGwn7t6|SPh{Wq{eiDlwCz914%t})2MUe^+4X{uP%Wid9JVk(!)M^Se%vjf| zDIUY>(-g;QZ{EO%9O*4Md(FKhwCoag?6sL#&*$3r(3_o*cc|EJ`Ia#^C5uGWG@Hqz zS;naXt@#xydC5ygEW9mxvGLm}TLX<`?pDbtb8VQ9dtx<09;QQSWMW@dgz@ZuZ#Z>I z-4&^#TKxQw^O%@p)YrGP!G07GbteuEad?-~>TEHya*l_E<{PalM2_<+mMY@fYi!)L zUvx>yw&|)^35L+oBDPR8$>@ke*w!_j9TxqLrwB|WrvbQZx3r!GBO}*Vx7HyItN}^3 z_&AeQgs%8Ff}cOD_`0q2hJQuU@{@x>gi-NKw+!b@G|A4MkCg2l)o$s(0D4|`Uy(w= znjg;OdWhVkqF5O8%7z2%l&mrHmVL+V65$_;COIOx4Z0FgbAGtwcOoaR+} zSDY#!q}T{il7Fa7|KSdY!Rb&t)ZtpqbF&Vg%dt+%j*tH)Y>m}aFX!|IPt3?!)N6Z2 zP=j1EO)(`Rv$-$acaG4d`YCPe4v`-0gL#duT+(`JN~dD zudcvMdmo@(sYOllfqLUb`cQd$G-~tYYQVJ6l!cTK^P1lfYOUQJ{~T{{5YHYK9-hB( zrK{rp432w{o1Sp{i}+Ui`B(%Z@_Zwb#c(m8lAV; zb7@;HE-vDTb@iN6k9`Ane%;$7f_Fa^JsT zzQt2++(mfxU)8WoUj3^VQ!e*Ex92n$whiq@=nR zWPWtIh{C^j9ch0NG=A`_LE!Hr?tOmu$B^)e!+%U6?%n&}WF)QD0jK;d9@l(`S){h! zNdyR6E2kmNf)<_OvE=7dA$Iyu2zT-|t=Fe0XZ=f$hNMl9*n))L@RT51{_mi(v?X7& z^VXI^>}>?IcI~%|`prR9t+ue<5ZCvs2RJ;=f^FvH&cgtb(NK1f^ZX8;c4H%CV8{NP zxGU14n9XKSOUq+$U`c_7GQIh3yGX5%l?AkCei<%$taIRVtaggJpZj*KmT%TW&feE( z@J!rf&uDlaxS(BaaJxxG!_v~_gUw~cW>d^RdSiU3KFuy9U2nOO!>)0jJu>i#cMMMA zdO|r4K%zsNUWpk+3UOUdUIqI~k(A;vk}x@}n;oFxUgyiwp6w2tUO62o-7RCp@1S*> z%{hl?)$()(Mg}}AEHj$aqd{K#dbiCFFysdea6P?d0*WbdPE(A-38+FuhAi0TpqD*r zNTbkobQrr)-l);{o$J)RTrSdTeO-Glb`*obfaog??iY7lP#P`@+jjY`L7e%Vq^^TZ# zn(@o^3EJx7!rI@%xRQ^$bWuuUI3SPRNI`tkuh#9nSqtCm`|0r~8wyuq1iLIcRrQ!) z6p#Ug2;?nyN8jw9_1!0~Re#^Qtnd^&L_)NCfXovPKt%ZV8DKP)PHM+(aEeZL1xY!sIO~NyePg0fUwgJ_pMjbS-p< z8Y`bwML(K40)=v)>nOjB1pR95c8w(cTyKHn_evegsn{C$c0X(0+rskZo#rkF5$+Jv z7FT$^JOhJz^WpRI#@o}JHe=6?LMC~boG|vSZ4JPYX(e3deqsIOlvmXit}ShbJGYVR zVRXYvG=fsE{~{rq##Y(ly5r(xU3*Q2uWrCQkHJR9+O8FYzJh9GEc=p&QIlJMSwm5F zJK%2u(-+-PZ$J;jJ-_L0Dzl z3v8#cbAZxnuAtma1XPdu<~quu8@mK)X{bJ@uK1X6V(=U}qdV8l&QDgE;Eo_G-^uom zN^9%&w4C0qT2t@F_b`spuP|7NCk# zE!+TZsBQiZYQdh-+w`kDggs83J}K;6hq1G;(q?5hF~$_2VU46L=gy#$&C1auY^e|9 zP_SBW_B_6$MDdV864O@4upS(`!GFF$A4z3nJ;yVj;S(7j*%c99GOrD&aW5WY8~@1@ z=u8C}&|jHOR|iPUnkZ!kSEtTCptvW*F6`Z0kJ? zNaqF{qZQQc)st z!eV4cK$52%0v0}W%DhU)LTh1#YWts^beQIw$+WzGxcsV_OHUGXARD!e2ydXW`gYy( z{J(TDq111PSKU6g7>Kf%@4X3U4ku13%d5V2HCfYhGIILPE1Q(3-*+(Mf3aW)C@&NE68w_l*U*BYA#U;#F_ST=S%pQQN;0IbgQs@0$Gf^{QeM{qdpo;` z!Xh?@wyf9rdhI=jW;UD5xZEFkcnlk?y52+INg{erWE4i-4XJ@f<1f|zP;T}&LG=tg zjB=O#?k7&K*%#N$unG+!f2sYIUf}1~4sako<#|(R@)}&Ob~KaYrz4glxjn7Bi>8%T zb=74mhNM^dME+ZlA$%l3=8Q1qi~Stcytw!&Z&2qXVt|WJLVC$NP;x54J4P)(8uB50 zgjb=~+aYl5w?@LL+wI=HB}t3R-o`+pe9bbt|5mQ78UA0&6~WCGmcL`Q(D<)_;7QP| z)}(Chl~38-p$Nyc&5*gtRDDy^2bM|fH?hd~DRbw_XJF0$^23Zr_R%yG7}j3cq^otleq-)J{wGLY}ld zs$_2~@UBcDv^gMGW7KxApky#-WUq{-DzAVDDj1WOInk<@(sZ;9y3G8`i?iwYYZuPG z<3~OA!4waH%aX23$Lyg9z@V9cfyW6}cOty$w2;;uSZe0>>z45APF&LqqPJO!oM*le z+J+CX?*z@jCgYH>_WGGbr> z^~r6LT{G!vyuSAp*-45m+fh_hZRjg=KQ5*9`YLa)yYIUV-A9 zZ3KUN(i^)(UlQ4Q3pWv$ClDC02S=naMC6NYO@cl}KJ{fw{g|-2s6P7L=~0D1${X0H z6h(!OW~s$i$Sk(+|k zE>noKGArq58d`xfm@~(Xo$Q!rF$E{!lk{&|m3n#}4TIwn(x!o3*0rZ^%aYRHeQS86 zxtjLnelR*kUf5HR&fje3_it*LgugJ6Ot*{iBhP?&FL2b=RJfUlk_5|ZhTY}eH@*Cm z;r}ZU?DeOVCcz98Ht+t`;Id(5#Nxwsa#8gs*?(z))Uy^6gtV<3A;_}R3sj>$>3N2Vzn*nY!**NSA zQcKpR2aZD-x!>eeM)61)Xa|U5lc_cs=qmMC9tr1K&-{5J?l)FOAS!NaNzJhvfs_qj zH8-rwsc)1hONzU8l6^RJbljxVksMT`_oKhRU#HiNv+L9RK_N0#V8tjC4dlTJnbI=5gWP zfBPUG+1A!8LHwH2h!Jnk%deGk@FPpdg~i$=du{20xlsGA5rt11h9j3UURgXlpt;vE z!X+2^qR@8T!Z4~Yh$TxTVYfYv4KKvw=PCSj>Svio%w*`&_Csh%xLIcjY<>fU&OZ5< zib2KMn?OH!LbBC-%usG>pyi#6YuOi2{HuAim)%typD`2OU6|g>x!@56t4NqrrS+Px&mGo0SgCqjxMg%vG@M!S5pc0$Pm$XpQZm_RsUwq%$ z1?L(dXSn!@x#F1&y%zK6M=+swNI{Tbx}Kk5NI{gg?N_!fv+`V?vx!6W+0-MDJF2f3 z@OX&D{J(JYXrtY2$o~q*9)Z{Oy4nnT1lJ4LYOJLF)lTCp_6!Fkw7_EHW!QL*$c#YrZ^9#@PG*aq)7@P{#B7R^Lz+z z`ta6jOW7-j!;A&CTC9=T`F0w>on7tFhEQ{?Thdg~`F}xWt^0X)8P!#%l`D!?Zxz1b zCns)Sg(MaVGFk_xeP>>7z~AJk#7S-!K8?*ewG}(~SmZvzi+E3=SOG|~X!V#$gAQa% zX&m@*HPoW1GSALB*FT!F2>7EC3n@s7p0gt)S&dHc4GqHP%>~*R3^9CpPa?E>Gs={` zAhQVq0Y-IFl6HJDm76!@=M!FRDIj3(TXY0AJs;bSWWIieEh_!8%SE&>pDg!nmet{# z67LX?!&l!#q*nmz*;e~;ajgCYnPg?h+-}PXTSIpWM%-6)qH+g1+F%AC?&{oq-Ca*D zGZ!V-vf`<#qeBkfWYU>Iiepui-uk`dX+p@VOIQqO4rUP2^eQ}lSAWZsyu+_!&axr# zpM@wvlYLjQsmqx5G-#`lk*NC07-`Py2<{O3@Jjr?ovwmYi#bvsg zC#%ZJsv(z!wB|O}RYsN7i?`S!a+g+?>3c$XWMvuTrcPDJ_k!_15dd$~T82;n7D{RE@=w<>o!s(CSk8Qd zCZwADG9>NM{|aj{aQ+=4X(7y692PoK-&(<~EG(2`h+o(-UXbfRDF{39)v1`yr!mRU z5&yk(x$kNA#^;(){DlXI#cf&aYAizdRRoEl zXsak2ANtzxzl_MRtH&dcl!xzsG2NSZ{a^R~{{;AXy^Jk_^S8Y)fAYT@h5G;SV_qUX z9)BDfnaAv@+x!KC?%jjv*ON%M!wo;zzWcRt_!ahFo4R|;xP;n~|M{Qqy(hT;9|x;@ zpI^xQ$Kn*r9$^o&|9Q&2CvPA9rvSmd|CyIFBX$UWr70DTi)Z89d-7|?gYa6k3iuh> zr#MZI?WbSokN>*@!~f6@_@6)4@+7EVbvICdJpj@}Ec+RHuI`qa&*s}XMz?vT9ySu_ znH$jH;I#DkD`pq_ceFQcE|t3Mxz(n=(8M8-+2$5qxcEU2cs*jVx>DacST9U-Rnhc& z$3yJEMul)4bkS(EKR+3eehDO)i$C3`M5u(=DTd{#!*p?IA==R z#;uYAFd&7*75I*T_Co1d#+>Ewu&o$oy)Jain$ouaxKv@uw5okdQFQAbX(7d*Z* z`=EDVBh4Y!a3I<>fnD=9M*S^87mk3dWroOcXV!Y*q#Hd-^?*Lzrg!9WvLsT1-a$?> zR)Jnwz~1iAo59ffAYNHiPHA0eXq+C0UsD=I;SH)Oj@^NpTO8XJqmhVN^!p~h(9Sit zrBZ5R3dzD-Tp67|ID8F{f|Xm5;r_r@(BYs7lg%DgmU?mh??80oB1h1nzRp_7M`@}3 zi6Im+DZuPJS<|UU;Zg%-$|ozs;nGFUgmfG{6lMEj4*^3sk!H{Yg4_&nb<^*bcLU=e zR?nPlsC}ygaw9ZDX>6$Nmv+iiR%$~VuVMBF&#*7aYuo=*)nWDg+>!1F6Xo#(xTVOiGK!Jm0eb^8UMJ(|9R}JA#1)kxR{%TN>(^1jq?H-ri=1N z8e9%S1w_KIy*cn0NUynzvU-*}dKlLV79q@-udy6O43!j)4X1}2@Aegnxj*v!R15u`k?k+tAHjJ7UB7fyqSCV z$UOe73s5@T;Q)IF0F1_#RJKabj#LwN+#u4MGD&FPXk=xA9bxk;PI1-JUOle)%M&My z=}>>m+|p%bo24q^dh)_2PVJEn#Qc!Ftnt(Fr)Oc zz}!aSsDJfYdo#RRZ+~~V@59Q8Ppf^~iKnsG;a41G|vjXFOAYNYRLKb>I{WypY+YU4EX9pST#nfEMeOl&KyJT4c?pZS4j znMS{p4vlanc@VdxeXc3wp$TzW8C|1o*PtNwfxPLj<2fW)$cGaz+qtSynPAklB zMwtL9@niLXPg6(LMu!&fG|d+xndViiAP;uLfsPedTj{f-hf=RNZYGgZR#jn{dX`vynOoY~>xhZnR~2CXMsy{NwH z>ZKA~vg!;TLOTC<=lIX#GOp*H97efjZ+7~rQBJQiTg?4JOx8TG>%Cw#c&D}}lD_^^+n%21s#20)0 zq&Z&c)7C}%jfrBt!!qZCS@v$!zo^JE_qWgZ1Yx??80*>u>H5n7n{&ee$rzLN@#cUA z(ClC_?b|!V%(RWW=mDrQPHTd^fk}z>#s*?to8>;_eQ~a_3Z6YU1(;u6Zd@jnmkaU;{wjHit9BZ z$lAkF)sitv^2%G{1lDtELv~P)W@HNF759^$FP)C|bdp_>RMO9kwlNC(sVa+|p4Fk5$%h!Pv_*bZrzeyBq~fcjrN$KH%^U_c{5fNs`Z~{TPlsx2v6aKE z0JnPG9*BX~d?A04imdF4tLCgkMCP7qpX%*c$(Q@7M+RMkHk)|Rxkk&LSblDX{D;VW zEeteF%GYdm(8FSJ?2ezb^Ka~S5$;T4ppgGmaTRZ<$qoOqdV1Tu!0rC-w|=&^r+f0- zfE~_gq-pX`h+`OT5C-XKVkT8Y*Q6`jo~@_IT2eY`i>vY- zfUXyM*-q}Er|DZ-39Vs`Y=;j~erx$O9R*kKlU7=L?3dU+CeMyqMrD>cRnoj+ktU$@?B*bTL7gN*cqrAW>g-cBaRdnwCi3!4-p7Btz0hWrGD zOP&fo$P>|905)YiIj!Lt5NOkDM$E=B1^U&^SPGHN9}XA`=u4pY)=Veg?4~shcCPM1 zY)6Ni+OS`>Tg2q!4KVm=Xj=|8_}p6vc;WKJ>97sVs`5ouEM`J3#-z&v3`)0z&i)4Vnv%SsJJO8FKlixK*dv)fSjXV*m1V$;Q1wzBq>0z;oYLW z#L=`EkfL@YpKdu{ zs5m*z=G`n=mm{fFK#pe*DE*!itmVvwx3bdZYQgVXRprz=dsP6u7h zZJg>`OcuvmRi$yry9zXR-+PiG$w{ZfA@8j8z<60EPW#rt%e=gHW_8yimrd&bXz$$r znb7|@-bsC_j-2nw<)qM#5@BSyhjXOV5EWwBaxcuKF?UiS_Z&%LI!GAXa+x)At1z;; zwYhGS+c0CM1nhsF`Q+1h@b9hmoeZuI;B54WOqZ~E{UUX>OA!F%-5?nQD%`owtI#rlB zCotZ;t$cHkQlC{~`TL0B0EGB5>WF6Z-;pb# z@R?(q1^LbJxoRSNqSad~o~sLr&DduOsd5>{o;3+*LgGtx0ezPUlusSXiMe|OtZRBKDa zX~!Y63-2>bVNb-WATPhthx{%yC*9o;YA@_MXoO=Hhl?@^^L}bjK^gVKnf1(J@XnJ8 zq)FDG7f70qQzxa1CRc8rD*WTqbjD?WF#!iNnSS&4hmOf<7*ZmvOUbs~!TNg+iShWJ zLxTCtagJC{&nsE&zJX>*)38eC7!CYuZ0#=Qr*WrC1X3}k&pz7qn@CUJU?89<4|O*p z@{I2+rA(jG;HJXzR$-Z&2~SS+ozWPQYuX~ECNU~0qb?z3-gGtn?on)Tg0;*0#a;yj zA{H9e9+31?&h+)w_bGQ zm6PnlsAjii&-vYPf#?I0`sw*jsV;$$@<+7J+KN2+BzyMPtWzN8k8PsInF{;oMyu5m z6HCIDWp>DaMaOWr^)qLRXLgKp6ca_}KKjiq+xo~JKUx27?&`V|fYDn6U1u&p_KIx> z!_e^{s6!peO(_6snZU{jZsS}E0IphqmUSwF;-=GFEEOOp;zOFh65UI>Au0f~c(m@- zNS0VAs>7kLwsG7q0Chb4t-SL1yeSK5moa$fT(Z|2w0CIQ?)&GeYHxJ>-5$XK5{rBn z^M#EF?W>YkB{(;k!baF7X)k*jY6vPyr$$S{g^(ab`l`JPliQ)8Jp$(pu=B}aJ5}_- zYRtn(Jo*FHu;#buk>NNGaDdHpmxOO(g31?S?3>Ixi#}jAT=NI3@!SY=i`Hp5cJVVTt#|` z&u}Ff-+V!Dw1HGG@S?9o_k797JhMd@QH)0t-`XAeyr?86v4P> z$bT9Mza#YrgYTU*CEh0Jzc`j&lvvti3EOeICLwPaq-KM%fK|y)d+H5y<7*oYPd@;< z7~EOa`HlC262DnYP6zURQ^bvX^R9&Ws@LB2;bUB5Ls+t%m12J}lJ>Xhk3(@wKcBlz z_#*Hap-QwGuv8Zwq+x5Su9pKj^N!~Yb@EZag7Ni4AJqzjsap|$bF-T-nRM%sQdjm% zIH$f~6MBDgVQ5j4>>6(k92kXop;ik&`nAayw>8(wlz=7pmux`UH!`F>k0B1b3GMBG z;Jx0eEtzq+^MhVdnH}h_Uu39^o|)2YBcAlp1+l`gC~-X6cV=yj5{>a`o6c1NDY_pn zb#pYkbJGbt_AP~GbPa(rlnii^jWZwZfh@7U8Q`DNydP(ZKy?k>m@X_6tPvw;+jKSr z0t|P3%g;WKnEM>)d1eGsiVcyme*o!oz}LJCA>XpKs~DlN-q^|AE~LwAHX!Q_t7#(e z^I5|eVgm*L!u#2WY5E_Rp(%)_mE;jjF@}=dyEBO<@-XJ9>C}IwR|=@yM$KJTdcrGm zDbI)!d8a+@kArKz=G1lukBUwg)Ku8o`j0KH>xR!X$LM7>+xb9eJi0^Mxwh8#(!ht4 z$zxdtGc~w#I0$hL+yiQAK_mdHSF753s-)<}yf;#9WK)fSA_pxLh}S>q90V0xxV99mQi+ zY`1zjvn2b5sB3!>89^+uMGFt?l#6gh7x~oVF8bHRmu^>j1EYI+MH{{pO{sv{#jZXVB3JZ5g=X<$<+`?P94eijGu-;(wpdls z6(!X!PF(ee;fmFLb{CnoKfBEP%BJS8Y#$UoxO;-=;f?0TF;0oU$B>Dcmtz}O85+PC zblx0bKCXx-E3q4zLdiAjTeUu=95AJU1@vdbOK_9Y*ZQx7$65^XV%OgpcaGSx60QK6 zz4E*%`HDhH536H({m-p+4XCU97`T`%$yB*uq~#;~QIq8DbkY-ocNnVmi0B?m@WzOb74 z-8ckPrk>1DIHHe|%j_M01``A1Gi(|rH^O#K=u}ztIYk2NfG+*~#Ts}H*b>7`qRkBk z8?iOQPZI7S&Br(fA(v&3QB59t>&2|uM)|qM*Z^p|*8}$YGp01;qK$p9K+3(0lH0ne z*w18cj*A3}Xge46Pw}{b8%L$*=(^wzPkW0dk6(fB=AA?ihjq$_%(jiYosph=H6id_D0%`Z1w?absGac(6B(X z>ccaq;gY6e=ku2K?bP(^z0Rd?hz?0lvA?3!m-f2v`+jqP{~-oY0+nZ#y61ecve3P_ zCPV0~#6RkwmKtU}EAPH;pu5Fv%bEi2wLtJE#kL3 zCX{lj$8LaG-%KfV;A+4d%e=`h(avTNd-ll_lOsCzRA1yDY+34DZ9}3JNLM-#h;%YAuN1mRnj7!3om+spVfwOw!%8pe5M1Sa(dM@ELE% znq0nG?4ZpLk?#+!gFnQiPO%@7(OJbGI@0shAL7#g2OaqDT~Ij@qCWy{L= literal 0 HcmV?d00001 diff --git a/master/assets/images/passkey_setup.png b/master/assets/images/passkey_setup.png new file mode 100644 index 0000000000000000000000000000000000000000..af39e89f10ec1afbeec13d577d02761f1f3bc158 GIT binary patch literal 108988 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 literal 0 HcmV?d00001 diff --git a/master/assets/images/social/documentation/usage/general.png b/master/assets/images/social/documentation/usage/general.png new file mode 100644 index 0000000000000000000000000000000000000000..808aa7ca495f7c4ee23b19eba6095a7bcf8f6d35 GIT binary patch literal 38450 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�^Xvy*905{Z*l`lu=2i)<|0 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