--- title: Main page layout: plain navbar: link: Main icon: home custom_css: - pre_overlay.css custom_js: # ipaddr.js is buggy: https://github.com/whitequark/ipaddr.js/issues/160. # TODO: revert back to using ipaddr.js if it's fixed? #- https://cdn.jsdelivr.net/npm/ipaddr.js@2.0.1/ipaddr.min.js # This is the "browserified" replacement, ip-address. This bundling procedure # fucking sucks, but it's the best I've got for now. - bundle.js - https://cdn.jsdelivr.net/npm/qrious@4.0.2/dist/qrious.min.js - main.js params: - id: server desc: Server items: - id: server_public name: Public key placeholder: "Server's public key" help: | Query using wg show wg0 public-key example: iNqGDQ2tltbSN4s3Fpb/7PRc2OSwR3/bPjOrf8V/SmA= - id: server_endpoint name: Endpoint placeholder: "Server's endpoint in the HOST:PORT format" help: | Server's public IP address or a hostname, accessible from the client. Query the current port using wg show wg0 listen-port example: 123.123.123.123:123 - id: preshared name: Preshared key placeholder: Preshared key (shared between server and client) help: | Generate using wg genpsk example: Moshdr8RNfYUWG/0MVOlglzlze3beATD6YumDwCZf5E= - id: client desc: Client items: - id: client_public name: Public key placeholder: "Client's public key" help: | Generate both the private and the public keys using wg genkey | tee private.key | wg pubkey > public.key example: hvfo/MgizTRbrktfx3k2Q0Ib0mx0P2N6LRZEYWqkpXc= - id: client_private name: Private key placeholder: "Client's private key" help: | Unless generated in one go with the public key, generate one using wg genkey example: qKgmDq8HWaU432qJhEa2Q6pE52P55xBHNOgzB0roP3A= - id: client_ipv4 name: IPv4 placeholder: IPv4 address and netmask, like 192.168.123.123/24 help: | IPv4 address to assign to the client and its netmask in the CIDR format. example: 192.168.123.123/24 - id: client_ipv6 name: IPv6 placeholder: IPv6 address and netmask, like fd01:2345:6789::192.168.123.123/48 help: | IPv6 address to assign to the client and its netmask in the CIDR format. example: fd01:2345:6789::192.168.123.123/48 - id: keepalive name: Keepalive default: 25 placeholder: Seconds between keepalive packets, typically 25 help: | Time to wait between sending keepalive packets, seconds. example: 25 advanced: true - id: tunnel_everything name: Tunnel all traffic type: checkbox default: false advanced: true - id: dns_ipv4 name: DNS (IPv4) default: 1.1.1.1,1.0.0.1 placeholder: IPv4 addresses of DNS servers help: | Comma-separated list of IPv4 addresses to use as DNS servers. example: 1.1.1.1,1.0.0.1 advanced: true - id: dns_ipv6 name: DNS (IPv6) default: 2606:4700:4700::1111,2606:4700:4700::1001 placeholder: IPv6 addresses of DNS servers help: | Comma-separated list of IPv6 addresses to use as DNS servers. example: 2606:4700:4700::1111,2606:4700:4700::1001 advanced: true ---

WireGuard configuration

This page assumes that you have a WireGuard server configured on interface wg0. You can then generate the new client's keys, feed them to this page and it will show configuration files that can be used by the client.

{% assign example_url = '?' %} {% assign first = true %} {% for grp in page.params %} {% for param in grp.items %} {% unless first %} {% capture example_url %}{{ example_url }}&{% endcapture %} {% endunless %} {% assign first = false %} {% capture example_url %}{{ example_url }}{{ param.id }}={{ param.example | url_encode }}{% endcapture %} {% endfor %} {% endfor %} {% assign example_url = example_url | escape_uri | baseurl %}

Please take a look at an example configuration.

{% for grp in page.params %}

{{ grp.desc }}

{% for param in grp.items %} {% assign type = param.type | default: "text" %} {% if type == "text" %} {% endif %} {% if type == "checkbox" %} {% endif %} {% endfor %}
{% endfor %}