Configuration

You can configure wg-access-server using environment variables, cli flags or a config file taking precedence over one another in that order.

The default configuration should work out of the box if you're just looking to try it out.

The only required configuration is an admin password and a wireguard private key. The admin password can be anything you like. You can generate a wireguard private key by following the official docs.

TLDR:

wg genkey

The config file format is yaml and an example is provided below.

Here's what you can configure:

Environment Variable CLI Flag Config File Path Required Default (docker) Description
WG_CONFIG --config The path to a wg-access-server config.yaml file
WG_LOG_LEVEL --log-level logLevel info The global log level
WG_ADMIN_USERNAME --admin-username adminUsername admin The admin account username
WG_ADMIN_PASSWORD --admin-password adminPassword Yes The admin account password
WG_PORT --port port 8000 The port the web ui will listen on (http)
WG_EXTERNAL_HOST --external-host externalHost The external domain for the server (e.g. https://www.mydomain.com)
WG_STORAGE --storage storage sqlite3:///data/db.sqlite3 A storage backend connection string. See storage docs
WG_DISABLE_METADATA --disable-metadata disableMetadata false Turn off collection of device metadata logging. Includes last handshake time and RX/TX bytes only.
WG_WIREGUARD_ENABLED --[no-]wireguard-enabled wireguard.enabled true Enable/disable the wireguard server. Useful for development on non-linux machines.
WG_WIREGUARD_INTERFACE --wireguard-interface wireguard.interface wg0 The wireguard network interface name
WG_WIREGUARD_PRIVATE_KEY --wireguard-private-key wireguard.privateKey Yes The wireguard private key. This value is required and must be stable. If this value changes all devices must re-register.
WG_WIREGUARD_PORT --wireguard-port wireguard.port 51820 The wireguard server port (udp)
WG_VPN_CIDR --vpn-cidr vpn.cidr 10.44.0.0/24 The VPN network range. VPN clients will be assigned IP addresses in this range.
WG_VPN_GATEWAY_INTERFACE --vpn-gateway-interface vpn.gatewayInterface default gateway interface (e.g. eth0) The VPN gateway interface. VPN client traffic will be forwarded to this interface.
WG_VPN_ALLOWED_IPS --vpn-allowed-ips vpn.allowedIPs 0.0.0.0/0 Allowed IPs that clients may route through this VPN. This will be set in the client's WireGuard connection file and routing is also enforced by the server using iptables.
WG_DNS_ENABLED --[no-]dns-enabled dns.enabled true Enable/disable the embedded DNS proxy server. This is enabled by default and allows VPN clients to avoid DNS leaks by sending all DNS requests to wg-access-server itself.
WG_DNS_UPSTREAM --dns-upstream dns.upstream resolveconf autodetection or 1.1.1.1 The upstream DNS server to proxy DNS requests to. By default the host machine's resolveconf configuration is used to find it's upstream DNS server, otherwise 1.1.1.1 (cloudflare) is used.

The Config File (config.yaml)

Here's an example config file to get started with.

loglevel: info
storage: sqlite3:///data/db.sqlite3
wireguard:
  privateKey: "<some-key>"
dns:
  upstream:
    - "8.8.8.8"