Experimental
An attempt to support Wireguard VPN peer connections on Nerves devices. See https://wireguard.com for more info
Wireguard needs to configure an interface and peer connections for that
interface. Below is a list of the expected configuration parameters
which are referenced from wg(8)
and wg-quick(8)
:
Key | wg name |
Required? | Description |
---|---|---|---|
:private_key |
PrivateKey |
X | base64 private key for the interface registered with the server |
:addresses |
Address |
X | list of IP addresses for the connection to use (CIDR supported) |
:listen_port |
ListenPort |
port for the connection. Randomly assigned if empty or 0 |
|
:fwmark |
FwMark |
32-bit fwmark for outgoing packets | |
:dns |
DNS |
list of DNS IP's | |
:peers |
[PEER] |
list of peer configs (see below) |
Key | wg name |
Required? | Description |
---|---|---|---|
:public_key |
PublicKey |
X | base64 public key |
:endpoint |
Endpoint |
X | endpoint to the wireguard server which the peer attempts to connect |
:allowed_ips |
AllowedIps |
X | list of IP addresses for allowed incoming packets and outgoing packets directed to. Defaults to ["0.0.0.0/0", "::0"] |
:persistent_keepalive |
PersistentKeepalive |
optional integer seconds for sending an authenticated packet as a keepalive |
Wireguard commonly uses *.conf
configuration files to simplify the setup
process and VintageNetWireguard
provides a helper function to parse those
config files into the expected format:
iex)> config = VintageNetWireguard.ConfigFile.parse("/path/to/wg0.conf")
iex)> VintageNet.configure("wg0", config)
- Setup
wg*
network interfaces - Notes/cookbook for setting up Wireguard server
- fly.io
- Another service?
- Parse wireguard peer configs
- Potentially support authentication via other routes (i.e. NervesKey)
- Mechanism for registering a new peer with remote server
- Prevent storing private keys on disc