mirror of
https://github.com/hassio-addons/addon-wireguard.git
synced 2025-05-05 11:21:26 +00:00
✏️ Split add-on documentation
This commit is contained in:
parent
aec380097f
commit
bef5837f2a
3 changed files with 547 additions and 477 deletions
476
README.md
476
README.md
|
@ -41,472 +41,7 @@ WireGuard is currently under heavy development, but already it might be
|
||||||
regarded as the most secure, easiest to use, and the simplest VPN solution
|
regarded as the most secure, easiest to use, and the simplest VPN solution
|
||||||
in the industry.
|
in the industry.
|
||||||
|
|
||||||
## Installation
|
[:books: Read the full add-on documentation][docs]
|
||||||
|
|
||||||
WireGuard is pretty simple, however, can be quite complex for user that isn't
|
|
||||||
familiar with all terminology used. The add-on takes care of a lot of things
|
|
||||||
for you (if you want).
|
|
||||||
|
|
||||||
Follow the following steps for installation & a quick start:
|
|
||||||
|
|
||||||
1. Search for the "WireGuard" add-on in the Supervisor add-on store
|
|
||||||
and install it.
|
|
||||||
1. Set the `host` configuration option to your Hass.io (external) address,
|
|
||||||
e.g., `myautomatedhome.duckdns.org`.
|
|
||||||
1. Change the name of the peer to something useful, e.g., `myphone`.
|
|
||||||
1. Save the configuration.
|
|
||||||
1. Start the "WireGuard" add-on
|
|
||||||
1. Check the logs of the "WireGuard" add-on to see if everything went well.
|
|
||||||
1. Forward port `51820` (UDP!) in your router to your Hass.io IP.
|
|
||||||
1. Download/Open the file `/ssl/wireguard/myphone/qrcode.png` stored on your
|
|
||||||
Hass.io machine, e.g., using Samba, Visual Studio Code or the Configurator
|
|
||||||
add-on.
|
|
||||||
1. Install the WireGuard app on your phone.
|
|
||||||
1. Add a new WireGuard connection to your phone, by scanning the QR code.
|
|
||||||
1. Connect!
|
|
||||||
|
|
||||||
## Configuration
|
|
||||||
|
|
||||||
Now, for starters, don't get scared by the number of options and difficult
|
|
||||||
terms this add-on provides. WireGuard can be a complex piece of software,
|
|
||||||
but the add-on only has a few, simple, required settings. All the rest is
|
|
||||||
handled by the add-on. However, If you would like to set up a more complex
|
|
||||||
configuration, the add-on would allow that to.
|
|
||||||
|
|
||||||
If you are familiar with WireGuard, please note the following:
|
|
||||||
The configuration of WireGuard looks very similar to all terms used in the
|
|
||||||
WireGuard configuration. There is, however, one big difference: The
|
|
||||||
add-on is able to generate configurations for the add-on, but also for the
|
|
||||||
peers (clients).
|
|
||||||
|
|
||||||
**Note**: _Remember to restart the add-on when the configuration is changed._
|
|
||||||
|
|
||||||
A little more extensive example add-on configuration:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
log_level: info
|
|
||||||
server:
|
|
||||||
host: myautomatedhome.duckdns.org
|
|
||||||
addresses:
|
|
||||||
- 10.10.10.1
|
|
||||||
dns:
|
|
||||||
- 1.1.1.1
|
|
||||||
- 1.0.0.1
|
|
||||||
peers:
|
|
||||||
- name: frenck
|
|
||||||
addresses:
|
|
||||||
- 10.10.10.2
|
|
||||||
allowed_ips: []
|
|
||||||
client_allowed_ips: []
|
|
||||||
- name: ninja
|
|
||||||
public_key: QNLXV8lrsPnKOd011DO8g5DWyad6iHJDSVOD6yOqjiE=
|
|
||||||
addresses:
|
|
||||||
- 10.10.10.3
|
|
||||||
allowed_ips: []
|
|
||||||
client_allowed_ips:
|
|
||||||
- 10.10.10.0/24
|
|
||||||
- 192.168.1.0/24
|
|
||||||
```
|
|
||||||
|
|
||||||
**Note**: _This is just an example, don't copy and paste it! Create your own!_
|
|
||||||
|
|
||||||
### Option: `server.host`
|
|
||||||
|
|
||||||
This configuration option is the hostname that your clients will use to connect
|
|
||||||
to your WireGuard add-on. The `host` is mainly used to generate client
|
|
||||||
configurations and SHOULD NOT contain a port. If you want to change the port,
|
|
||||||
use the "Network" section of the add-on configuration.
|
|
||||||
|
|
||||||
Example: `myautomatedhome.duckdns.org`, for local testing `hassio.local`
|
|
||||||
will actually work.
|
|
||||||
|
|
||||||
DO NOT attempt to use a URL such as a Nabu Casa endpoint, the entry needs to be
|
|
||||||
either a DNS entry or IP address that is accessible by the clients.
|
|
||||||
|
|
||||||
### Option: `server.addresses`
|
|
||||||
|
|
||||||
A list of IP (IPv4 or IPv6) addresses (optionally with CIDR masks) to be
|
|
||||||
assigned to the server/add-on interface.
|
|
||||||
|
|
||||||
It is strongly advised to create/use a separate IP address space from your
|
|
||||||
home network, e.g., if your home network uses `192.168.1.x` then DO NOT use
|
|
||||||
that for the add-on.
|
|
||||||
|
|
||||||
### Option: `server.dns` _(optional)_
|
|
||||||
|
|
||||||
A list of DNS servers used by the add-on and the configuration generated for
|
|
||||||
the clients. This configuration option is optional, and if no DNS servers are
|
|
||||||
set, it will use the built-in DNS server from Hass.io.
|
|
||||||
|
|
||||||
**If you are running the [AdGuard][adguard] or [Pi-hole][pihole] add-on,
|
|
||||||
you can add `172.30.32.1` as a DNS IP address in the list.** This will cause your
|
|
||||||
clients to use those. What this does, it effectively making your clients
|
|
||||||
to have ad-filtering (e.g., your mobile phone), while not at home.
|
|
||||||
|
|
||||||
### Option: `server.private_key` _(optional)_
|
|
||||||
|
|
||||||
Allows you to provide your own base64 private key generated by `wg genkey`.
|
|
||||||
This option supports the use of `!secret`. If you don't supply one,
|
|
||||||
the add-on will generate one for you and store it in:
|
|
||||||
`/ssl/wireguard/private_key`.
|
|
||||||
|
|
||||||
### Option: `server.public_key` _(optional)_
|
|
||||||
|
|
||||||
Allows you to provide your own a base64 public key calculated by `wg pubkey`
|
|
||||||
from a private key. This option supports the use of `!secret`.
|
|
||||||
|
|
||||||
If you don't supply one, the add-on will calculate one based on the private
|
|
||||||
key that was supplied via the `server.private_key` or, in case no private key
|
|
||||||
was supplied, calculate it from the generated private key.
|
|
||||||
|
|
||||||
### Option: `server.fwmark` _(optional)_
|
|
||||||
|
|
||||||
A 32-bit fwmark for outgoing packets. May be specified in hexadecimal by
|
|
||||||
prepending "0x". If you don't know what this is, then you probably don't
|
|
||||||
need it.
|
|
||||||
|
|
||||||
### Option: `server.table` _(optional)_
|
|
||||||
|
|
||||||
Controls the routing table to which routes are added. Setting it to `off`
|
|
||||||
disables the creation of routes altogether. When not provided, the add-on
|
|
||||||
adds routes to the default table and enables special handling of default routes.
|
|
||||||
|
|
||||||
### Option: `server.pre_up` _(optional)_
|
|
||||||
|
|
||||||
Allows you to run commands before WireGuard is started.
|
|
||||||
|
|
||||||
### Option: `server.pre_down` _(optional)_
|
|
||||||
|
|
||||||
Allows you to run commands before WireGuard is stopped.
|
|
||||||
|
|
||||||
### Option: `server.post_up` _(optional)_
|
|
||||||
|
|
||||||
Allows you to run commands after WireGuard has been started. This is useful
|
|
||||||
for modifying things like routing. If not provided, the add-on will by default
|
|
||||||
route all traffic coming in from the VPN through your home network.
|
|
||||||
|
|
||||||
If you like to disable that, setting this option to `"off"`,
|
|
||||||
will disable that behavior.
|
|
||||||
|
|
||||||
By default it executes the following:
|
|
||||||
|
|
||||||
`iptables -A FORWARD -i %i -j ACCEPT;
|
|
||||||
iptables -A FORWARD -o %i -j ACCEPT;
|
|
||||||
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE`
|
|
||||||
|
|
||||||
### Option: `server.post_down` _(optional)_
|
|
||||||
|
|
||||||
Allows you to run commands after WireGuard has been stopped. This is useful
|
|
||||||
for modifying things like routing. If not provided, the add-on will by default
|
|
||||||
remove the default rules created by the `post_up` defaults.
|
|
||||||
|
|
||||||
If you like to disable that, setting this option to `"off"`,
|
|
||||||
will disable that behavior.
|
|
||||||
|
|
||||||
By default it executes the following:
|
|
||||||
|
|
||||||
`iptables -D FORWARD -i %i -j ACCEPT;
|
|
||||||
iptables -D FORWARD -o %i -j ACCEPT;
|
|
||||||
iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE`
|
|
||||||
|
|
||||||
### Option: `server.mtu` _(optional)_
|
|
||||||
|
|
||||||
The MTU is automatically determined from the endpoint addresses or the
|
|
||||||
system default route, which is usually a sane choice.
|
|
||||||
|
|
||||||
However, to manually specify an MTU to override this automatic discovery,
|
|
||||||
this value may be specified explicitly.
|
|
||||||
|
|
||||||
### Option: `peers.name`
|
|
||||||
|
|
||||||
This is an identifier for you. It helps you to know what this peer is, e.g.,
|
|
||||||
`myphone`, `mylaptop`, `ninja`.
|
|
||||||
|
|
||||||
This name is also used for creating the directory in `/ssl/wireguard` where
|
|
||||||
the generated client configuration and QR codes are stored. Therefore, a name
|
|
||||||
has a maximum of 32 characters, can only contain A-Z (or a-z) and 0-9.
|
|
||||||
Names contain a hyphen (-) but must not start or end with one.
|
|
||||||
|
|
||||||
### Option: `peers.addresses`
|
|
||||||
|
|
||||||
A list of IP (IPv4 or IPv6) addresses (optionally with CIDR masks) to be
|
|
||||||
assigned to the peer.
|
|
||||||
|
|
||||||
This is used in the client configuration, but also for used by the add-on to
|
|
||||||
set the allowed IPs (unless overriden by the `peers.allowed_ips` option.)
|
|
||||||
|
|
||||||
### Option: `peers.private_key` _(optional)_
|
|
||||||
|
|
||||||
Allows you to provide your own base64 private key generated by `wg genkey` for
|
|
||||||
the peer. This option supports the use of `!secret`.
|
|
||||||
|
|
||||||
Technically, the add-on does not need this, however, since the add-on can
|
|
||||||
generate client configurations, it can be helpful.
|
|
||||||
|
|
||||||
If no private key and no public key is provided, the add-on will generate one
|
|
||||||
for you and store it in: `/ssl/wireguard/<peer.name>/`.
|
|
||||||
|
|
||||||
**Private keys, in general, should only be known by client, while this add-on
|
|
||||||
supports setting or generating one for your client is helpful and easy, it
|
|
||||||
isn't the best security practice. The best practice is to provide just the
|
|
||||||
`peers.public_key` option below, the add-on will honor that.**
|
|
||||||
|
|
||||||
### Option: `peers.public_key` _(optional, but recommended!)_
|
|
||||||
|
|
||||||
Allows you to provide your own a base64 public key calculated by `wg pubkey`
|
|
||||||
from a private key. This option supports the use of `!secret`.
|
|
||||||
|
|
||||||
If you don't supply one, the add-on will calculate one based on the private
|
|
||||||
key that was supplied via the `peer.private_key` or, in case no private key
|
|
||||||
was supplied, calculated it from the generated private key for this peer.
|
|
||||||
|
|
||||||
**While this add-on can generate public/private keypairs, from best security
|
|
||||||
practice perspective, it is strongly advised to manually provide a public key
|
|
||||||
for each of your peers. In that case, the add-on will not generate or configure
|
|
||||||
a private key by itself.**
|
|
||||||
|
|
||||||
### Option: `peers.allowed_ips` _(optional)_
|
|
||||||
|
|
||||||
**This configuration only valid for the add-on/server end and does not
|
|
||||||
affect client configurations!**
|
|
||||||
|
|
||||||
A list of IPs (IPv4 or IPv6) addresses (optionally with CIDR masks) from which
|
|
||||||
incoming traffic for this peer is allowed and to which outgoing traffic for
|
|
||||||
this peer is directed.
|
|
||||||
|
|
||||||
If there are no IP addresses configured, the add-on will use the addresses
|
|
||||||
listed in `peers.addresses`.
|
|
||||||
|
|
||||||
The catch-all `0.0.0.0/0` may be specified for matching all IPv4 addresses,
|
|
||||||
and `::/0` may be specified for matching all IPv6 addresses.
|
|
||||||
|
|
||||||
### Option: `peers.client_allowed_ips` _(optional)_
|
|
||||||
|
|
||||||
**This configuration only valid for the peer end/client configuration and does
|
|
||||||
not affect the server/add-on!**
|
|
||||||
|
|
||||||
A list of IPs (IPv4 or IPv6) addresses (optionally with CIDR masks) from which
|
|
||||||
incoming traffic from the server is allowed and to which outgoing traffic for
|
|
||||||
this peer is directed.
|
|
||||||
|
|
||||||
The catch-all `0.0.0.0/0` may be specified for matching all IPv4 addresses,
|
|
||||||
and `::/0` may be specified for matching all IPv6 addresses.
|
|
||||||
|
|
||||||
If not configured, the add-on will use `0.0.0.0/0` in the generated client
|
|
||||||
configuration, routing all traffic on your client through the VPN tunnel.
|
|
||||||
|
|
||||||
### Option: `peers.persistent_keep_alive` _(optional)_
|
|
||||||
|
|
||||||
A seconds interval, between 1 and 65535 inclusive, of how often to send an
|
|
||||||
authenticated empty packet to the peer for the purpose of keeping a stateful
|
|
||||||
firewall or NAT mapping valid persistently.
|
|
||||||
|
|
||||||
For example, if the interface very rarely sends traffic, but it might at
|
|
||||||
anytime receive traffic from a peer, and it is behind NAT, the interface might
|
|
||||||
benefit from having a persistent keepalive interval of 25 seconds.
|
|
||||||
|
|
||||||
By default or when unspecified, this option is set to 25 seconds. This is
|
|
||||||
different from the WireGuard default, since the use case for this add-on is
|
|
||||||
most likely to be installed in home setups behind a NAT.
|
|
||||||
|
|
||||||
If set to "off", this option is disabled.
|
|
||||||
|
|
||||||
### Option: `peers.endpoint` _(optional)_
|
|
||||||
|
|
||||||
An endpoint IP or hostname, followed by a colon, and then a port number. This
|
|
||||||
is used by the add-on/server to connect to its peer.
|
|
||||||
|
|
||||||
This is completely optional as the endpoint will be updated automatically
|
|
||||||
to the most recent source IP address and port of correctly authenticated
|
|
||||||
packets from the peer/client.
|
|
||||||
|
|
||||||
### Option: `peers.pre_shared_key` _(optional)_
|
|
||||||
|
|
||||||
A base64 preshared key generated by `wg genpsk`. This option adds an additional
|
|
||||||
layer of symmetric-key cryptography to be mixed into the already existing
|
|
||||||
public-key cryptography, for post-quantum resistance.
|
|
||||||
|
|
||||||
### Option: `peers.fwmark` _(optional)_
|
|
||||||
|
|
||||||
**This configuration only valid for the peer end/client configuration and does
|
|
||||||
not affect the server/add-on!**
|
|
||||||
|
|
||||||
A 32-bit fwmark for outgoing packets. May be specified in hexadecimal by
|
|
||||||
prepending "0x". If you don't know what this is, then you probably don't
|
|
||||||
need it.
|
|
||||||
|
|
||||||
### Option: `log_level` _(optional)_
|
|
||||||
|
|
||||||
The `log_level` option controls the level of log output by the addon and can
|
|
||||||
be changed to be more or less verbose, which might be useful when you are
|
|
||||||
dealing with an unknown issue. Possible values are:
|
|
||||||
|
|
||||||
- `trace`: Show every detail, like all called internal functions.
|
|
||||||
- `debug`: Shows detailed debug information.
|
|
||||||
- `info`: Normal (usually) interesting events.
|
|
||||||
- `warning`: Exceptional occurrences that are not errors.
|
|
||||||
- `error`: Runtime errors that do not require immediate action.
|
|
||||||
- `fatal`: Something went terribly wrong. Add-on becomes unusable.
|
|
||||||
|
|
||||||
Please note that each level automatically includes log messages from a
|
|
||||||
more severe level, e.g., `debug` also shows `info` messages. By default,
|
|
||||||
the `log_level` is set to `info`, which is the recommended setting unless
|
|
||||||
you are troubleshooting.
|
|
||||||
|
|
||||||
## Finding generated client configurations
|
|
||||||
|
|
||||||
All generated files are stored in `/ssl/wireguard`. This includes the
|
|
||||||
client configurations generated by this add-on.
|
|
||||||
|
|
||||||
Each peer/client will have its own folder, by the name specified in the
|
|
||||||
add-on configuration. The add-on additionally generates an image for each
|
|
||||||
client containing a QR code, to allow a quick an easy set up on, e.g., your
|
|
||||||
mobile phone.
|
|
||||||
|
|
||||||
## Using on a Generic Linux/Debian/Ubuntu-based Hass.io system
|
|
||||||
|
|
||||||
The HassOS operating system for Hass.io by default has installed WireGuard
|
|
||||||
support in its Linux kernel. However, if you run Hass.io on a generic Linux
|
|
||||||
installation (e.g., based on Ubuntu or Debian), WireGuard support is not
|
|
||||||
available by default.
|
|
||||||
|
|
||||||
This will cause the add-on to throw a large warning during the start up.
|
|
||||||
However, the add-on will work as advertised!
|
|
||||||
|
|
||||||
When this happens, the add-on falls back on a standalone instance of WireGuard
|
|
||||||
running inside the add-on itself. This method has drawbacks in terms of
|
|
||||||
performance.
|
|
||||||
|
|
||||||
In order to run WireGuard optimal, you should install WireGuard on your
|
|
||||||
host system. The add-on will pick that up automatically on the next start.
|
|
||||||
|
|
||||||
### Ubuntu
|
|
||||||
|
|
||||||
```bash
|
|
||||||
sudo add-apt-repository ppa:wireguard/wireguard
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install wireguard
|
|
||||||
```
|
|
||||||
|
|
||||||
### Debian
|
|
||||||
|
|
||||||
```bash
|
|
||||||
sudo echo "deb http://deb.debian.org/debian/ unstable main" > /etc/apt/sources.list.d/unstable.list
|
|
||||||
sudo printf 'Package: *\nPin: release a=unstable\nPin-Priority: 90\n' > /etc/apt/preferences.d/limit-unstable
|
|
||||||
sudo apt update
|
|
||||||
sudo apt install wireguard
|
|
||||||
```
|
|
||||||
|
|
||||||
### Fedora
|
|
||||||
|
|
||||||
```bash
|
|
||||||
sudo dnf copr enable jdoss/wireguard
|
|
||||||
sudo dnf install wireguard-dkms wireguard-tools
|
|
||||||
```
|
|
||||||
|
|
||||||
### Other
|
|
||||||
|
|
||||||
If you have a different operating system on which you run Hass.io on, please
|
|
||||||
consult [WireGuard installation manual][wireguard-install]
|
|
||||||
|
|
||||||
## _"Missing WireGuard kernel module. Falling back to slow userspace implementation."_
|
|
||||||
|
|
||||||
If you've seen this warning in the add-on logs files, please check the chapter
|
|
||||||
above for more information.
|
|
||||||
|
|
||||||
## _"IP forwarding is disabled on the host system!"_
|
|
||||||
|
|
||||||
IP forwarding is the ability for an operating system to accept incoming
|
|
||||||
network packets on one interface, recognize that it is not meant for the
|
|
||||||
system itself, but that it should be passed on to another network,
|
|
||||||
and then forwards it accordingly.
|
|
||||||
|
|
||||||
Basically, it allows for data coming in from your VPN client will be routed to
|
|
||||||
other places like your home network, or the internet.
|
|
||||||
|
|
||||||
To enable IP forwarding, run the following commands directly on your **host**
|
|
||||||
system (e.g., Ubuntu, Debian).
|
|
||||||
|
|
||||||
```bash
|
|
||||||
sudo sysctl -w net.ipv4.ip_forward=1
|
|
||||||
echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf
|
|
||||||
sudo sysctl -p /etc/sysctl.conf
|
|
||||||
```
|
|
||||||
|
|
||||||
## Snapshots
|
|
||||||
|
|
||||||
The WireGuard add-on can be backed up using Hass.io snapshots. There is one
|
|
||||||
caveat to take into account: A partial snapshot of the add-on DOES NOT contain
|
|
||||||
the generated client configurations, including their public/private keys
|
|
||||||
(if those keys are generated by the add-on).
|
|
||||||
|
|
||||||
Client configurations are stored in the `/ssl/wireguard` folder. If you
|
|
||||||
use partial snapshots, please be sure to backup both the `ssl` folder and the
|
|
||||||
add-on.
|
|
||||||
|
|
||||||
## WireGuard status API
|
|
||||||
|
|
||||||
This add-on provides a simple WireGuard status API. This API is not an
|
|
||||||
official API, darn simple, and experimental, but does allow you to pull
|
|
||||||
in data from the add-on into Home Assistant.
|
|
||||||
|
|
||||||
With the use of the [Home Assistant RESTful][ha-rest] integration, one should
|
|
||||||
be able to grab some interesting data from this add-on.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
sensor:
|
|
||||||
- platform: rest
|
|
||||||
resource: http://a0d7b954-wireguard
|
|
||||||
```
|
|
||||||
|
|
||||||
At this moment, we do not have template or examples on how this could be
|
|
||||||
used effectively with Home Assistant.
|
|
||||||
If you have, sharing would be appreciated!
|
|
||||||
|
|
||||||
## Troubleshooting
|
|
||||||
|
|
||||||
- You can test if the tunnel works (when not using custom DNS servers), by
|
|
||||||
visiting <http://homeassistant:8123>. If a Home Assistant login page appears,
|
|
||||||
it is working!
|
|
||||||
- Changes to peer/client configuration of this add-on, are not automatically
|
|
||||||
passed to your (already) configured clients. You have to change those
|
|
||||||
manually on your client device OR remove the WireGuard profile on the client
|
|
||||||
device and load the new client configuration (e.g., by scanning the QR
|
|
||||||
code).
|
|
||||||
- If you are running the [AdGuard][adguard] or [Pi-hole][pihole] add-on,
|
|
||||||
you can add `172.30.32.1` as a DNS IP address the list to use it.
|
|
||||||
- If you are running the [Pi-hole][pihole] add-on and facing DNS issues when
|
|
||||||
connected through WireGuard, make sure the option `Listen on all interfaces`
|
|
||||||
is selected in Pi-hole. This option is located under `Settings` > `DNS` >
|
|
||||||
`Interface listening behavior`.
|
|
||||||
- If you run a protection service like CloudFlare on your `server.host`
|
|
||||||
address, please remember, that WireGuard will try to connect to CloudFlare
|
|
||||||
in that case (and not your Home). Please consider using your IP
|
|
||||||
address in the `server.host` field, or get an addition DNS record (e.g.,
|
|
||||||
using DuckDNS) that does point directly to your IP address.
|
|
||||||
- If the initial connection from you client fails, this can be caused by
|
|
||||||
resolving issues of `server.host` on the client device. You can consider
|
|
||||||
solving this by editing the "Endpoint" setting on the client on the device
|
|
||||||
in the connection profile.
|
|
||||||
- We had reports of people with connection issues on the client side, being
|
|
||||||
resolved by configuring/setting the "Listen port" to `51820` on the client
|
|
||||||
device in the connection profile.
|
|
||||||
|
|
||||||
## Changelog & Releases
|
|
||||||
|
|
||||||
This repository keeps a change log using [GitHub's releases][releases]
|
|
||||||
functionality. The format of the log is based on
|
|
||||||
[Keep a Changelog][keepchangelog].
|
|
||||||
|
|
||||||
Releases are based on [Semantic Versioning][semver], and use the format
|
|
||||||
of ``MAJOR.MINOR.PATCH``. In a nutshell, the version will be incremented
|
|
||||||
based on the following:
|
|
||||||
|
|
||||||
- ``MAJOR``: Incompatible or major changes.
|
|
||||||
- ``MINOR``: Backwards-compatible new features and enhancements.
|
|
||||||
- ``PATCH``: Backwards-compatible bugfixes and package updates.
|
|
||||||
|
|
||||||
## Support
|
## Support
|
||||||
|
|
||||||
|
@ -572,7 +107,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
|
|
||||||
[aarch64-shield]: https://img.shields.io/badge/aarch64-yes-green.svg
|
[aarch64-shield]: https://img.shields.io/badge/aarch64-yes-green.svg
|
||||||
[adguard]: https://github.com/hassio-addons/addon-adguard-home
|
|
||||||
[amd64-shield]: https://img.shields.io/badge/amd64-yes-green.svg
|
[amd64-shield]: https://img.shields.io/badge/amd64-yes-green.svg
|
||||||
[armhf-shield]: https://img.shields.io/badge/armhf-yes-green.svg
|
[armhf-shield]: https://img.shields.io/badge/armhf-yes-green.svg
|
||||||
[armv7-shield]: https://img.shields.io/badge/armv7-yes-green.svg
|
[armv7-shield]: https://img.shields.io/badge/armv7-yes-green.svg
|
||||||
|
@ -582,7 +116,7 @@ SOFTWARE.
|
||||||
[discord-ha]: https://discord.gg/c5DvZ4e
|
[discord-ha]: https://discord.gg/c5DvZ4e
|
||||||
[discord-shield]: https://img.shields.io/discord/478094546522079232.svg
|
[discord-shield]: https://img.shields.io/discord/478094546522079232.svg
|
||||||
[discord]: https://discord.me/hassioaddons
|
[discord]: https://discord.me/hassioaddons
|
||||||
[dockerhub]: https://hub.docker.com/r/hassioaddons/wireguard
|
[docs]: https://github.com/hassio-addons/addon-wireguard/blob/master/wireguard/DOCS.md
|
||||||
[forum-shield]: https://img.shields.io/badge/community-forum-brightgreen.svg
|
[forum-shield]: https://img.shields.io/badge/community-forum-brightgreen.svg
|
||||||
[forum]: https://community.home-assistant.io/t/home-assistant-community-add-on-wireguard/134662?u=frenck
|
[forum]: https://community.home-assistant.io/t/home-assistant-community-add-on-wireguard/134662?u=frenck
|
||||||
[frenck]: https://github.com/frenck
|
[frenck]: https://github.com/frenck
|
||||||
|
@ -590,21 +124,15 @@ SOFTWARE.
|
||||||
[github-sponsors]: https://github.com/sponsors/frenck
|
[github-sponsors]: https://github.com/sponsors/frenck
|
||||||
[gitlabci-shield]: https://gitlab.com/hassio-addons/addon-wireguard/badges/master/pipeline.svg
|
[gitlabci-shield]: https://gitlab.com/hassio-addons/addon-wireguard/badges/master/pipeline.svg
|
||||||
[gitlabci]: https://gitlab.com/hassio-addons/addon-wireguard/pipelines
|
[gitlabci]: https://gitlab.com/hassio-addons/addon-wireguard/pipelines
|
||||||
[ha-rest]: https://www.home-assistant.io/components/rest/
|
|
||||||
[home-assistant]: https://home-assistant.io
|
|
||||||
[i386-shield]: https://img.shields.io/badge/i386-yes-green.svg
|
[i386-shield]: https://img.shields.io/badge/i386-yes-green.svg
|
||||||
[issue]: https://github.com/hassio-addons/addon-wireguard/issues
|
[issue]: https://github.com/hassio-addons/addon-wireguard/issues
|
||||||
[keepchangelog]: http://keepachangelog.com/en/1.0.0/
|
|
||||||
[license-shield]: https://img.shields.io/github/license/hassio-addons/addon-wireguard.svg
|
[license-shield]: https://img.shields.io/github/license/hassio-addons/addon-wireguard.svg
|
||||||
[maintenance-shield]: https://img.shields.io/maintenance/yes/2020.svg
|
[maintenance-shield]: https://img.shields.io/maintenance/yes/2020.svg
|
||||||
[patreon-shield]: https://frenck.dev/wp-content/uploads/2019/12/patreon.png
|
[patreon-shield]: https://frenck.dev/wp-content/uploads/2019/12/patreon.png
|
||||||
[patreon]: https://www.patreon.com/frenck
|
[patreon]: https://www.patreon.com/frenck
|
||||||
[pihole]: https://github.com/hassio-addons/addon-pi-hole
|
|
||||||
[project-stage-shield]: https://img.shields.io/badge/project%20stage-experimental-yellow.svg
|
[project-stage-shield]: https://img.shields.io/badge/project%20stage-experimental-yellow.svg
|
||||||
[reddit]: https://reddit.com/r/homeassistant
|
[reddit]: https://reddit.com/r/homeassistant
|
||||||
[releases-shield]: https://img.shields.io/github/release/hassio-addons/addon-wireguard.svg
|
[releases-shield]: https://img.shields.io/github/release/hassio-addons/addon-wireguard.svg
|
||||||
[releases]: https://github.com/hassio-addons/addon-wireguard/releases
|
[releases]: https://github.com/hassio-addons/addon-wireguard/releases
|
||||||
[repository]: https://github.com/hassio-addons/repository
|
[repository]: https://github.com/hassio-addons/repository
|
||||||
[semver]: http://semver.org/spec/v2.0.0.htm
|
|
||||||
[wireguard-install]: https://www.wireguard.com/install/
|
|
||||||
[wireguard]: https://www.wireguard.com
|
[wireguard]: https://www.wireguard.com
|
||||||
|
|
|
@ -28,8 +28,6 @@ WireGuard is currently under heavy development, but already it might be
|
||||||
regarded as the most secure, easiest to use, and the simplest VPN solution
|
regarded as the most secure, easiest to use, and the simplest VPN solution
|
||||||
in the industry.
|
in the industry.
|
||||||
|
|
||||||
[Click here for the full documentation][docs]
|
|
||||||
|
|
||||||
{% if channel == "edge" %}
|
{% if channel == "edge" %}
|
||||||
## WARNING! THIS IS AN EDGE VERSION!
|
## WARNING! THIS IS AN EDGE VERSION!
|
||||||
|
|
||||||
|
@ -71,7 +69,6 @@ If you are more interested in stable releases of our add-ons:
|
||||||
{% endif %}
|
{% endif %}
|
||||||
[discord-shield]: https://img.shields.io/discord/478094546522079232.svg
|
[discord-shield]: https://img.shields.io/discord/478094546522079232.svg
|
||||||
[discord]: https://discord.me/hassioaddons
|
[discord]: https://discord.me/hassioaddons
|
||||||
[docs]: {{ repo }}/blob/{{ version }}/README.md
|
|
||||||
[forum-shield]: https://img.shields.io/badge/community-forum-brightgreen.svg
|
[forum-shield]: https://img.shields.io/badge/community-forum-brightgreen.svg
|
||||||
[forum]: https://community.home-assistant.io/t/home-assistant-community-add-on-wireguard/134662?u=frenck
|
[forum]: https://community.home-assistant.io/t/home-assistant-community-add-on-wireguard/134662?u=frenck
|
||||||
[github-sponsors-shield]: https://frenck.dev/wp-content/uploads/2019/12/github_sponsor.png
|
[github-sponsors-shield]: https://frenck.dev/wp-content/uploads/2019/12/github_sponsor.png
|
||||||
|
|
545
wireguard/DOCS.md
Normal file
545
wireguard/DOCS.md
Normal file
|
@ -0,0 +1,545 @@
|
||||||
|
# Home Assistant Community Add-on: WireGuard
|
||||||
|
|
||||||
|
[WireGuard®][wireguard] is an extremely simple yet fast and modern VPN that
|
||||||
|
utilizes state-of-the-art cryptography. It aims to be faster, simpler, leaner,
|
||||||
|
and more useful than IPsec, while avoiding the massive headache.
|
||||||
|
|
||||||
|
It intends to be considerably more performant than OpenVPN. WireGuard is
|
||||||
|
designed as a general-purpose VPN for running on embedded interfaces and
|
||||||
|
supercomputers alike, fit for many different circumstances.
|
||||||
|
|
||||||
|
Initially released for the Linux kernel, it is now cross-platform (Windows,
|
||||||
|
macOS, BSD, iOS, Android) and widely deployable,
|
||||||
|
including via an Hass.io add-on!
|
||||||
|
|
||||||
|
WireGuard is currently under heavy development, but already it might be
|
||||||
|
regarded as the most secure, easiest to use, and the simplest VPN solution
|
||||||
|
in the industry.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
WireGuard is pretty simple, however, can be quite complex for user that isn't
|
||||||
|
familiar with all terminology used. The add-on takes care of a lot of things
|
||||||
|
for you (if you want).
|
||||||
|
|
||||||
|
Follow the following steps for installation & a quick start:
|
||||||
|
|
||||||
|
1. Search for the "WireGuard" add-on in the Supervisor add-on store
|
||||||
|
and install it.
|
||||||
|
1. Set the `host` configuration option to your Hass.io (external) address,
|
||||||
|
e.g., `myautomatedhome.duckdns.org`.
|
||||||
|
1. Change the name of the peer to something useful, e.g., `myphone`.
|
||||||
|
1. Save the configuration.
|
||||||
|
1. Start the "WireGuard" add-on
|
||||||
|
1. Check the logs of the "WireGuard" add-on to see if everything went well.
|
||||||
|
1. Forward port `51820` (UDP!) in your router to your Hass.io IP.
|
||||||
|
1. Download/Open the file `/ssl/wireguard/myphone/qrcode.png` stored on your
|
||||||
|
Hass.io machine, e.g., using Samba, Visual Studio Code or the Configurator
|
||||||
|
add-on.
|
||||||
|
1. Install the WireGuard app on your phone.
|
||||||
|
1. Add a new WireGuard connection to your phone, by scanning the QR code.
|
||||||
|
1. Connect!
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
Now, for starters, don't get scared by the number of options and difficult
|
||||||
|
terms this add-on provides. WireGuard can be a complex piece of software,
|
||||||
|
but the add-on only has a few, simple, required settings. All the rest is
|
||||||
|
handled by the add-on. However, If you would like to set up a more complex
|
||||||
|
configuration, the add-on would allow that to.
|
||||||
|
|
||||||
|
If you are familiar with WireGuard, please note the following:
|
||||||
|
The configuration of WireGuard looks very similar to all terms used in the
|
||||||
|
WireGuard configuration. There is, however, one big difference: The
|
||||||
|
add-on is able to generate configurations for the add-on, but also for the
|
||||||
|
peers (clients).
|
||||||
|
|
||||||
|
**Note**: _Remember to restart the add-on when the configuration is changed._
|
||||||
|
|
||||||
|
A little more extensive example add-on configuration:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
log_level: info
|
||||||
|
server:
|
||||||
|
host: myautomatedhome.duckdns.org
|
||||||
|
addresses:
|
||||||
|
- 10.10.10.1
|
||||||
|
dns:
|
||||||
|
- 1.1.1.1
|
||||||
|
- 1.0.0.1
|
||||||
|
peers:
|
||||||
|
- name: frenck
|
||||||
|
addresses:
|
||||||
|
- 10.10.10.2
|
||||||
|
allowed_ips: []
|
||||||
|
client_allowed_ips: []
|
||||||
|
- name: ninja
|
||||||
|
public_key: QNLXV8lrsPnKOd011DO8g5DWyad6iHJDSVOD6yOqjiE=
|
||||||
|
addresses:
|
||||||
|
- 10.10.10.3
|
||||||
|
allowed_ips: []
|
||||||
|
client_allowed_ips:
|
||||||
|
- 10.10.10.0/24
|
||||||
|
- 192.168.1.0/24
|
||||||
|
```
|
||||||
|
|
||||||
|
**Note**: _This is just an example, don't copy and paste it! Create your own!_
|
||||||
|
|
||||||
|
### Option: `server.host`
|
||||||
|
|
||||||
|
This configuration option is the hostname that your clients will use to connect
|
||||||
|
to your WireGuard add-on. The `host` is mainly used to generate client
|
||||||
|
configurations and SHOULD NOT contain a port. If you want to change the port,
|
||||||
|
use the "Network" section of the add-on configuration.
|
||||||
|
|
||||||
|
Example: `myautomatedhome.duckdns.org`, for local testing `hassio.local`
|
||||||
|
will actually work.
|
||||||
|
|
||||||
|
DO NOT attempt to use a URL such as a Nabu Casa endpoint, the entry needs to be
|
||||||
|
either a DNS entry or IP address that is accessible by the clients.
|
||||||
|
|
||||||
|
### Option: `server.addresses`
|
||||||
|
|
||||||
|
A list of IP (IPv4 or IPv6) addresses (optionally with CIDR masks) to be
|
||||||
|
assigned to the server/add-on interface.
|
||||||
|
|
||||||
|
It is strongly advised to create/use a separate IP address space from your
|
||||||
|
home network, e.g., if your home network uses `192.168.1.x` then DO NOT use
|
||||||
|
that for the add-on.
|
||||||
|
|
||||||
|
### Option: `server.dns` _(optional)_
|
||||||
|
|
||||||
|
A list of DNS servers used by the add-on and the configuration generated for
|
||||||
|
the clients. This configuration option is optional, and if no DNS servers are
|
||||||
|
set, it will use the built-in DNS server from Hass.io.
|
||||||
|
|
||||||
|
**If you are running the [AdGuard][adguard] add-on,
|
||||||
|
you can add `172.30.32.1` as a DNS IP address in the list.** This will cause your
|
||||||
|
clients to use those. What this does, it effectively making your clients
|
||||||
|
to have ad-filtering (e.g., your mobile phone), while not at home.
|
||||||
|
|
||||||
|
### Option: `server.private_key` _(optional)_
|
||||||
|
|
||||||
|
Allows you to provide your own base64 private key generated by `wg genkey`.
|
||||||
|
This option supports the use of `!secret`. If you don't supply one,
|
||||||
|
the add-on will generate one for you and store it in:
|
||||||
|
`/ssl/wireguard/private_key`.
|
||||||
|
|
||||||
|
### Option: `server.public_key` _(optional)_
|
||||||
|
|
||||||
|
Allows you to provide your own a base64 public key calculated by `wg pubkey`
|
||||||
|
from a private key. This option supports the use of `!secret`.
|
||||||
|
|
||||||
|
If you don't supply one, the add-on will calculate one based on the private
|
||||||
|
key that was supplied via the `server.private_key` or, in case no private key
|
||||||
|
was supplied, calculate it from the generated private key.
|
||||||
|
|
||||||
|
### Option: `server.fwmark` _(optional)_
|
||||||
|
|
||||||
|
A 32-bit fwmark for outgoing packets. May be specified in hexadecimal by
|
||||||
|
prepending "0x". If you don't know what this is, then you probably don't
|
||||||
|
need it.
|
||||||
|
|
||||||
|
### Option: `server.table` _(optional)_
|
||||||
|
|
||||||
|
Controls the routing table to which routes are added. Setting it to `off`
|
||||||
|
disables the creation of routes altogether. When not provided, the add-on
|
||||||
|
adds routes to the default table and enables special handling of default routes.
|
||||||
|
|
||||||
|
### Option: `server.pre_up` _(optional)_
|
||||||
|
|
||||||
|
Allows you to run commands before WireGuard is started.
|
||||||
|
|
||||||
|
### Option: `server.pre_down` _(optional)_
|
||||||
|
|
||||||
|
Allows you to run commands before WireGuard is stopped.
|
||||||
|
|
||||||
|
### Option: `server.post_up` _(optional)_
|
||||||
|
|
||||||
|
Allows you to run commands after WireGuard has been started. This is useful
|
||||||
|
for modifying things like routing. If not provided, the add-on will by default
|
||||||
|
route all traffic coming in from the VPN through your home network.
|
||||||
|
|
||||||
|
If you like to disable that, setting this option to `"off"`,
|
||||||
|
will disable that behavior.
|
||||||
|
|
||||||
|
By default it executes the following:
|
||||||
|
|
||||||
|
`iptables -A FORWARD -i %i -j ACCEPT;
|
||||||
|
iptables -A FORWARD -o %i -j ACCEPT;
|
||||||
|
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE`
|
||||||
|
|
||||||
|
### Option: `server.post_down` _(optional)_
|
||||||
|
|
||||||
|
Allows you to run commands after WireGuard has been stopped. This is useful
|
||||||
|
for modifying things like routing. If not provided, the add-on will by default
|
||||||
|
remove the default rules created by the `post_up` defaults.
|
||||||
|
|
||||||
|
If you like to disable that, setting this option to `"off"`,
|
||||||
|
will disable that behavior.
|
||||||
|
|
||||||
|
By default it executes the following:
|
||||||
|
|
||||||
|
`iptables -D FORWARD -i %i -j ACCEPT;
|
||||||
|
iptables -D FORWARD -o %i -j ACCEPT;
|
||||||
|
iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE`
|
||||||
|
|
||||||
|
### Option: `server.mtu` _(optional)_
|
||||||
|
|
||||||
|
The MTU is automatically determined from the endpoint addresses or the
|
||||||
|
system default route, which is usually a sane choice.
|
||||||
|
|
||||||
|
However, to manually specify an MTU to override this automatic discovery,
|
||||||
|
this value may be specified explicitly.
|
||||||
|
|
||||||
|
### Option: `peers.name`
|
||||||
|
|
||||||
|
This is an identifier for you. It helps you to know what this peer is, e.g.,
|
||||||
|
`myphone`, `mylaptop`, `ninja`.
|
||||||
|
|
||||||
|
This name is also used for creating the directory in `/ssl/wireguard` where
|
||||||
|
the generated client configuration and QR codes are stored. Therefore, a name
|
||||||
|
has a maximum of 32 characters, can only contain A-Z (or a-z) and 0-9.
|
||||||
|
Names contain a hyphen (-) but must not start or end with one.
|
||||||
|
|
||||||
|
### Option: `peers.addresses`
|
||||||
|
|
||||||
|
A list of IP (IPv4 or IPv6) addresses (optionally with CIDR masks) to be
|
||||||
|
assigned to the peer.
|
||||||
|
|
||||||
|
This is used in the client configuration, but also for used by the add-on to
|
||||||
|
set the allowed IPs (unless overriden by the `peers.allowed_ips` option.)
|
||||||
|
|
||||||
|
### Option: `peers.private_key` _(optional)_
|
||||||
|
|
||||||
|
Allows you to provide your own base64 private key generated by `wg genkey` for
|
||||||
|
the peer. This option supports the use of `!secret`.
|
||||||
|
|
||||||
|
Technically, the add-on does not need this, however, since the add-on can
|
||||||
|
generate client configurations, it can be helpful.
|
||||||
|
|
||||||
|
If no private key and no public key is provided, the add-on will generate one
|
||||||
|
for you and store it in: `/ssl/wireguard/<peer.name>/`.
|
||||||
|
|
||||||
|
**Private keys, in general, should only be known by client, while this add-on
|
||||||
|
supports setting or generating one for your client is helpful and easy, it
|
||||||
|
isn't the best security practice. The best practice is to provide just the
|
||||||
|
`peers.public_key` option below, the add-on will honor that.**
|
||||||
|
|
||||||
|
### Option: `peers.public_key` _(optional, but recommended!)_
|
||||||
|
|
||||||
|
Allows you to provide your own a base64 public key calculated by `wg pubkey`
|
||||||
|
from a private key. This option supports the use of `!secret`.
|
||||||
|
|
||||||
|
If you don't supply one, the add-on will calculate one based on the private
|
||||||
|
key that was supplied via the `peer.private_key` or, in case no private key
|
||||||
|
was supplied, calculated it from the generated private key for this peer.
|
||||||
|
|
||||||
|
**While this add-on can generate public/private keypairs, from best security
|
||||||
|
practice perspective, it is strongly advised to manually provide a public key
|
||||||
|
for each of your peers. In that case, the add-on will not generate or configure
|
||||||
|
a private key by itself.**
|
||||||
|
|
||||||
|
### Option: `peers.allowed_ips` _(optional)_
|
||||||
|
|
||||||
|
**This configuration only valid for the add-on/server end and does not
|
||||||
|
affect client configurations!**
|
||||||
|
|
||||||
|
A list of IPs (IPv4 or IPv6) addresses (optionally with CIDR masks) from which
|
||||||
|
incoming traffic for this peer is allowed and to which outgoing traffic for
|
||||||
|
this peer is directed.
|
||||||
|
|
||||||
|
If there are no IP addresses configured, the add-on will use the addresses
|
||||||
|
listed in `peers.addresses`.
|
||||||
|
|
||||||
|
The catch-all `0.0.0.0/0` may be specified for matching all IPv4 addresses,
|
||||||
|
and `::/0` may be specified for matching all IPv6 addresses.
|
||||||
|
|
||||||
|
### Option: `peers.client_allowed_ips` _(optional)_
|
||||||
|
|
||||||
|
**This configuration only valid for the peer end/client configuration and does
|
||||||
|
not affect the server/add-on!**
|
||||||
|
|
||||||
|
A list of IPs (IPv4 or IPv6) addresses (optionally with CIDR masks) from which
|
||||||
|
incoming traffic from the server is allowed and to which outgoing traffic for
|
||||||
|
this peer is directed.
|
||||||
|
|
||||||
|
The catch-all `0.0.0.0/0` may be specified for matching all IPv4 addresses,
|
||||||
|
and `::/0` may be specified for matching all IPv6 addresses.
|
||||||
|
|
||||||
|
If not configured, the add-on will use `0.0.0.0/0` in the generated client
|
||||||
|
configuration, routing all traffic on your client through the VPN tunnel.
|
||||||
|
|
||||||
|
### Option: `peers.persistent_keep_alive` _(optional)_
|
||||||
|
|
||||||
|
A seconds interval, between 1 and 65535 inclusive, of how often to send an
|
||||||
|
authenticated empty packet to the peer for the purpose of keeping a stateful
|
||||||
|
firewall or NAT mapping valid persistently.
|
||||||
|
|
||||||
|
For example, if the interface very rarely sends traffic, but it might at
|
||||||
|
anytime receive traffic from a peer, and it is behind NAT, the interface might
|
||||||
|
benefit from having a persistent keepalive interval of 25 seconds.
|
||||||
|
|
||||||
|
By default or when unspecified, this option is set to 25 seconds. This is
|
||||||
|
different from the WireGuard default, since the use case for this add-on is
|
||||||
|
most likely to be installed in home setups behind a NAT.
|
||||||
|
|
||||||
|
If set to "off", this option is disabled.
|
||||||
|
|
||||||
|
### Option: `peers.endpoint` _(optional)_
|
||||||
|
|
||||||
|
An endpoint IP or hostname, followed by a colon, and then a port number. This
|
||||||
|
is used by the add-on/server to connect to its peer.
|
||||||
|
|
||||||
|
This is completely optional as the endpoint will be updated automatically
|
||||||
|
to the most recent source IP address and port of correctly authenticated
|
||||||
|
packets from the peer/client.
|
||||||
|
|
||||||
|
### Option: `peers.pre_shared_key` _(optional)_
|
||||||
|
|
||||||
|
A base64 preshared key generated by `wg genpsk`. This option adds an additional
|
||||||
|
layer of symmetric-key cryptography to be mixed into the already existing
|
||||||
|
public-key cryptography, for post-quantum resistance.
|
||||||
|
|
||||||
|
### Option: `peers.fwmark` _(optional)_
|
||||||
|
|
||||||
|
**This configuration only valid for the peer end/client configuration and does
|
||||||
|
not affect the server/add-on!**
|
||||||
|
|
||||||
|
A 32-bit fwmark for outgoing packets. May be specified in hexadecimal by
|
||||||
|
prepending "0x". If you don't know what this is, then you probably don't
|
||||||
|
need it.
|
||||||
|
|
||||||
|
### Option: `log_level` _(optional)_
|
||||||
|
|
||||||
|
The `log_level` option controls the level of log output by the addon and can
|
||||||
|
be changed to be more or less verbose, which might be useful when you are
|
||||||
|
dealing with an unknown issue. Possible values are:
|
||||||
|
|
||||||
|
- `trace`: Show every detail, like all called internal functions.
|
||||||
|
- `debug`: Shows detailed debug information.
|
||||||
|
- `info`: Normal (usually) interesting events.
|
||||||
|
- `warning`: Exceptional occurrences that are not errors.
|
||||||
|
- `error`: Runtime errors that do not require immediate action.
|
||||||
|
- `fatal`: Something went terribly wrong. Add-on becomes unusable.
|
||||||
|
|
||||||
|
Please note that each level automatically includes log messages from a
|
||||||
|
more severe level, e.g., `debug` also shows `info` messages. By default,
|
||||||
|
the `log_level` is set to `info`, which is the recommended setting unless
|
||||||
|
you are troubleshooting.
|
||||||
|
|
||||||
|
## Finding generated client configurations
|
||||||
|
|
||||||
|
All generated files are stored in `/ssl/wireguard`. This includes the
|
||||||
|
client configurations generated by this add-on.
|
||||||
|
|
||||||
|
Each peer/client will have its own folder, by the name specified in the
|
||||||
|
add-on configuration. The add-on additionally generates an image for each
|
||||||
|
client containing a QR code, to allow a quick an easy set up on, e.g., your
|
||||||
|
mobile phone.
|
||||||
|
|
||||||
|
## Using on a Generic Linux/Debian/Ubuntu-based Hass.io system
|
||||||
|
|
||||||
|
The HassOS operating system for Hass.io by default has installed WireGuard
|
||||||
|
support in its Linux kernel. However, if you run Hass.io on a generic Linux
|
||||||
|
installation (e.g., based on Ubuntu or Debian), WireGuard support is not
|
||||||
|
available by default.
|
||||||
|
|
||||||
|
This will cause the add-on to throw a large warning during the start up.
|
||||||
|
However, the add-on will work as advertised!
|
||||||
|
|
||||||
|
When this happens, the add-on falls back on a standalone instance of WireGuard
|
||||||
|
running inside the add-on itself. This method has drawbacks in terms of
|
||||||
|
performance.
|
||||||
|
|
||||||
|
In order to run WireGuard optimal, you should install WireGuard on your
|
||||||
|
host system. The add-on will pick that up automatically on the next start.
|
||||||
|
|
||||||
|
### Ubuntu
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo add-apt-repository ppa:wireguard/wireguard
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install wireguard
|
||||||
|
```
|
||||||
|
|
||||||
|
### Debian
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo echo "deb http://deb.debian.org/debian/ unstable main" > /etc/apt/sources.list.d/unstable.list
|
||||||
|
sudo printf 'Package: *\nPin: release a=unstable\nPin-Priority: 90\n' > /etc/apt/preferences.d/limit-unstable
|
||||||
|
sudo apt update
|
||||||
|
sudo apt install wireguard
|
||||||
|
```
|
||||||
|
|
||||||
|
### Fedora
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo dnf copr enable jdoss/wireguard
|
||||||
|
sudo dnf install wireguard-dkms wireguard-tools
|
||||||
|
```
|
||||||
|
|
||||||
|
### Other
|
||||||
|
|
||||||
|
If you have a different operating system on which you run Hass.io on, please
|
||||||
|
consult [WireGuard installation manual][wireguard-install]
|
||||||
|
|
||||||
|
## _"Missing WireGuard kernel module. Falling back to slow userspace implementation."_
|
||||||
|
|
||||||
|
If you've seen this warning in the add-on logs files, please check the chapter
|
||||||
|
above for more information.
|
||||||
|
|
||||||
|
## _"IP forwarding is disabled on the host system!"_
|
||||||
|
|
||||||
|
IP forwarding is the ability for an operating system to accept incoming
|
||||||
|
network packets on one interface, recognize that it is not meant for the
|
||||||
|
system itself, but that it should be passed on to another network,
|
||||||
|
and then forwards it accordingly.
|
||||||
|
|
||||||
|
Basically, it allows for data coming in from your VPN client will be routed to
|
||||||
|
other places like your home network, or the internet.
|
||||||
|
|
||||||
|
To enable IP forwarding, run the following commands directly on your **host**
|
||||||
|
system (e.g., Ubuntu, Debian).
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo sysctl -w net.ipv4.ip_forward=1
|
||||||
|
echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf
|
||||||
|
sudo sysctl -p /etc/sysctl.conf
|
||||||
|
```
|
||||||
|
|
||||||
|
## Snapshots
|
||||||
|
|
||||||
|
The WireGuard add-on can be backed up using Hass.io snapshots. There is one
|
||||||
|
caveat to take into account: A partial snapshot of the add-on DOES NOT contain
|
||||||
|
the generated client configurations, including their public/private keys
|
||||||
|
(if those keys are generated by the add-on).
|
||||||
|
|
||||||
|
Client configurations are stored in the `/ssl/wireguard` folder. If you
|
||||||
|
use partial snapshots, please be sure to backup both the `ssl` folder and the
|
||||||
|
add-on.
|
||||||
|
|
||||||
|
## WireGuard status API
|
||||||
|
|
||||||
|
This add-on provides a simple WireGuard status API. This API is not an
|
||||||
|
official API, darn simple, and experimental, but does allow you to pull
|
||||||
|
in data from the add-on into Home Assistant.
|
||||||
|
|
||||||
|
With the use of the [Home Assistant RESTful][ha-rest] integration, one should
|
||||||
|
be able to grab some interesting data from this add-on.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
sensor:
|
||||||
|
- platform: rest
|
||||||
|
resource: http://a0d7b954-wireguard
|
||||||
|
```
|
||||||
|
|
||||||
|
At this moment, we do not have template or examples on how this could be
|
||||||
|
used effectively with Home Assistant.
|
||||||
|
If you have, sharing would be appreciated!
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
- You can test if the tunnel works (when not using custom DNS servers), by
|
||||||
|
visiting <http://homeassistant:8123>. If a Home Assistant login page appears,
|
||||||
|
it is working!
|
||||||
|
- Changes to peer/client configuration of this add-on, are not automatically
|
||||||
|
passed to your (already) configured clients. You have to change those
|
||||||
|
manually on your client device OR remove the WireGuard profile on the client
|
||||||
|
device and load the new client configuration (e.g., by scanning the QR
|
||||||
|
code).
|
||||||
|
- If you are running the [AdGuard][adguard] or [Pi-hole][pihole] add-on,
|
||||||
|
you can add `172.30.32.1` as a DNS IP address the list to use it.
|
||||||
|
- If you are running the [Pi-hole][pihole] add-on and facing DNS issues when
|
||||||
|
connected through WireGuard, make sure the option `Listen on all interfaces`
|
||||||
|
is selected in Pi-hole. This option is located under `Settings` > `DNS` >
|
||||||
|
`Interface listening behavior`.
|
||||||
|
- If you run a protection service like CloudFlare on your `server.host`
|
||||||
|
address, please remember, that WireGuard will try to connect to CloudFlare
|
||||||
|
in that case (and not your Home). Please consider using your IP
|
||||||
|
address in the `server.host` field, or get an addition DNS record (e.g.,
|
||||||
|
using DuckDNS) that does point directly to your IP address.
|
||||||
|
- If the initial connection from you client fails, this can be caused by
|
||||||
|
resolving issues of `server.host` on the client device. You can consider
|
||||||
|
solving this by editing the "Endpoint" setting on the client on the device
|
||||||
|
in the connection profile.
|
||||||
|
- We had reports of people with connection issues on the client side, being
|
||||||
|
resolved by configuring/setting the "Listen port" to `51820` on the client
|
||||||
|
device in the connection profile.
|
||||||
|
|
||||||
|
## Changelog & Releases
|
||||||
|
|
||||||
|
This repository keeps a change log using [GitHub's releases][releases]
|
||||||
|
functionality. The format of the log is based on
|
||||||
|
[Keep a Changelog][keepchangelog].
|
||||||
|
|
||||||
|
Releases are based on [Semantic Versioning][semver], and use the format
|
||||||
|
of ``MAJOR.MINOR.PATCH``. In a nutshell, the version will be incremented
|
||||||
|
based on the following:
|
||||||
|
|
||||||
|
- ``MAJOR``: Incompatible or major changes.
|
||||||
|
- ``MINOR``: Backwards-compatible new features and enhancements.
|
||||||
|
- ``PATCH``: Backwards-compatible bugfixes and package updates.
|
||||||
|
|
||||||
|
## Support
|
||||||
|
|
||||||
|
Got questions?
|
||||||
|
|
||||||
|
You have several options to get them answered:
|
||||||
|
|
||||||
|
- The [Home Assistant Community Add-ons Discord chat server][discord] for add-on
|
||||||
|
support and feature requests.
|
||||||
|
- The [Home Assistant Discord chat server][discord-ha] for general Home
|
||||||
|
Assistant discussions and questions.
|
||||||
|
- The Home Assistant [Community Forum][forum].
|
||||||
|
- Join the [Reddit subreddit][reddit] in [/r/homeassistant][reddit]
|
||||||
|
|
||||||
|
You could also [open an issue here][issue] GitHub.
|
||||||
|
|
||||||
|
## Authors & contributors
|
||||||
|
|
||||||
|
The original setup of this repository is by [Franck Nijhof][frenck].
|
||||||
|
|
||||||
|
For a full list of all authors and contributors,
|
||||||
|
check [the contributor's page][contributors].
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2019-2020 Franck Nijhof
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
|
||||||
|
[adguard]: https://github.com/hassio-addons/addon-adguard-home
|
||||||
|
[contributors]: https://github.com/hassio-addons/addon-wireguard/graphs/contributors
|
||||||
|
[discord-ha]: https://discord.gg/c5DvZ4e
|
||||||
|
[discord]: https://discord.me/hassioaddons
|
||||||
|
[forum]: https://community.home-assistant.io/t/home-assistant-community-add-on-wireguard/134662?u=frenck
|
||||||
|
[frenck]: https://github.com/frenck
|
||||||
|
[ha-rest]: https://www.home-assistant.io/components/rest/
|
||||||
|
[issue]: https://github.com/hassio-addons/addon-wireguard/issues
|
||||||
|
[keepchangelog]: http://keepachangelog.com/en/1.0.0/
|
||||||
|
[reddit]: https://reddit.com/r/homeassistant
|
||||||
|
[releases]: https://github.com/hassio-addons/addon-wireguard/releases
|
||||||
|
[semver]: http://semver.org/spec/v2.0.0.htm
|
||||||
|
[wireguard-install]: https://www.wireguard.com/install/
|
||||||
|
[wireguard]: https://www.wireguard.com
|
Loading…
Add table
Add a link
Reference in a new issue