2019-02-14 21:00:51 +01:00
# Wireguard
2020-12-12 08:47:06 +01:00
2021-03-07 05:20:15 +01:00
This is a simple Docker image to run a Wireguard client. It includes a kill switch to ensure that any traffic not encrypted via Wireguard is dropped.
2019-02-14 21:00:51 +01:00
Wireguard is implemented as a kernel module, which is key to its performance and simplicity. However, this means that Wireguard _must_ be installed on the host operating system for this container to work properly. Instructions for installing Wireguard can be found [here ](http://wireguard.com/install ).
2021-03-07 05:20:15 +01:00
You will need a configuration file for your Wireguard interface. Many VPN providers will create this configuration file for you. For example, [here ](http://mullvad.net/en/download/wireguard-config ) is the configuration generator for Mullvad. Be sure to NOT include a kill switch in the configuration file, since the Docker image already has one.
2019-02-14 21:00:51 +01:00
2020-09-10 04:58:55 +02:00
Now simply mount the configuration file and run! For example, if your configuration file is located at `/path/to/conf/mullvad.conf` :
2019-02-14 21:00:51 +01:00
```bash
2019-02-14 21:15:29 +01:00
docker run --name wireguard \
2020-09-12 23:26:51 +02:00
--cap-add NET_ADMIN \
--cap-add SYS_MODULE \
--sysctl net.ipv4.conf.all.src_valid_mark=1 \
2020-09-10 04:58:55 +02:00
-v /path/to/conf/mullvad.conf:/etc/wireguard/mullvad.conf \
2019-02-14 21:00:51 +01:00
jordanpotter/wireguard
```
Afterwards, you can link other containers to this one:
```bash
2019-02-14 21:15:29 +01:00
docker run -it --rm \
--net=container:wireguard \
2019-02-14 21:00:51 +01:00
appropriate/curl http://httpbin.org/ip
```
2020-09-15 02:26:38 +02:00
2021-06-20 23:35:10 +02:00
## Docker Compose
Here is the same example as above, but using Docker Compose:
```yml
services:
wireguard:
container_name: wireguard
image: jordanpotter/wireguard
cap_add:
- NET_ADMIN
- SYS_MODULE
sysctls:
net.ipv4.conf.all.src_valid_mark: 1
volumes:
- /path/to/conf/mullvad.conf:/etc/wireguard/mullvad.conf
restart: unless-stopped
curl:
image: appropriate/curl
command: http://httpbin.org/ip
2021-08-30 23:28:18 +02:00
network_mode: service:wireguard
2021-06-20 23:35:10 +02:00
depends_on:
- wireguard
```
2021-03-07 05:20:15 +01:00
## Local Network
2021-03-09 04:17:08 +01:00
If you wish to allow traffic to your local network, specify the subnet using the `LOCAL_SUBNET` environment variable:
2021-03-07 05:20:15 +01:00
```bash
docker run --name wireguard \
--cap-add NET_ADMIN \
--cap-add SYS_MODULE \
--sysctl net.ipv4.conf.all.src_valid_mark=1 \
-v /path/to/conf/mullvad.conf:/etc/wireguard/mullvad.conf \
2021-03-09 04:17:08 +01:00
-e LOCAL_SUBNET=10.0.0.0/8 \
2021-03-07 05:20:15 +01:00
jordanpotter/wireguard
```
Additionally, you can expose ports to allow your local network to access services linked to the Wireguard container:
```bash
docker run --name wireguard \
--cap-add NET_ADMIN \
--cap-add SYS_MODULE \
--sysctl net.ipv4.conf.all.src_valid_mark=1 \
-v /path/to/conf/mullvad.conf:/etc/wireguard/mullvad.conf \
-p 8080:80 \
jordanpotter/wireguard
```
```bash
2021-03-07 05:53:26 +01:00
docker run -it --rm \
2021-03-07 05:20:15 +01:00
--net=container:wireguard \
nginx
```
## Versioning
2021-11-02 16:34:39 +01:00
Wireguard is new technology and its behavior may change in the future. For this reason, it's recommended to specify an image tag when running this container, such as `jordanpotter/wireguard:2.1.3` .
2021-03-07 05:20:15 +01:00
The available tags are listed [here ](https://hub.docker.com/r/jordanpotter/wireguard/tags ).