2023-09-30 01:49:33 +02:00
# WireGuard
2020-12-12 08:47:06 +01:00
2023-09-30 01:49:33 +02:00
This is a simple 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
2023-09-30 01:49:33 +02: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 ).
2019-02-14 21:00:51 +01:00
2023-09-30 01:49:33 +02:00
You will need a configuration file for your WireGuard interface. Many VPN providers will create this configuration file for you. If your VPN provider offers to include a kill switch in the configuration file, be sure to DECLINE, since this container image already has one.
2019-02-14 21:00:51 +01:00
2023-09-30 01:49:33 +02:00
Now simply mount the configuration file and run!
## Docker
2019-02-14 21:00:51 +01:00
```bash
2023-09-30 01:49:33 +02:00
$ docker run --name wireguard \
--cap-add NET_ADMIN \
--cap-add SYS_MODULE \
--sysctl net.ipv4.conf.all.src_valid_mark=1 \
-v /path/to/your/config.conf:/etc/wireguard/wg0.conf \
jordanpotter/wireguard
2019-02-14 21:00:51 +01:00
```
Afterwards, you can link other containers to this one:
```bash
2023-09-30 01:49:33 +02:00
$ docker run --rm \
--net=container:wireguard \
curlimages/curl ifconfig.io
2019-02-14 21:00:51 +01:00
```
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:
2023-09-30 01:49:33 +02:00
- /path/to/your/config.conf:/etc/wireguard/wg0.conf
2021-06-20 23:35:10 +02:00
restart: unless-stopped
curl:
2023-09-30 01:49:33 +02:00
image: curlimages/curl
command: ifconfig.io
2021-08-30 23:28:18 +02:00
network_mode: service:wireguard
2021-06-20 23:35:10 +02:00
depends_on:
- wireguard
```
2023-09-30 01:49:33 +02:00
## Podman
2021-03-07 05:20:15 +01:00
```bash
2023-09-30 01:49:33 +02:00
$ podman run --name wireguard \
--cap-add NET_ADMIN \
--cap-add NET_RAW \
--sysctl net.ipv4.conf.all.src_valid_mark=1 \
-v /path/to/your/config.conf:/etc/wireguard/wg0.conf \
docker.io/jordanpotter/wireguard
2021-03-07 05:20:15 +01:00
```
2023-09-30 01:49:33 +02:00
Afterwards, you can link other containers to this one:
2021-03-07 05:20:15 +01:00
```bash
2023-09-30 01:49:33 +02:00
$ podman run --rm \
--net=container:wireguard \
docker.io/curlimages/curl ifconfig.io
2021-03-07 05:20:15 +01:00
```
2023-09-30 01:49:33 +02:00
## Local Network
If you wish to allow traffic to your local network, specify the subnet(s) using the `LOCAL_SUBNETS` environment variable:
2021-03-07 05:20:15 +01:00
```bash
2023-09-30 01:49:33 +02:00
$ docker run --name wireguard \
--cap-add NET_ADMIN \
--cap-add SYS_MODULE \
--sysctl net.ipv4.conf.all.src_valid_mark=1 \
-v /path/to/your/config.conf:/etc/wireguard/wg0.conf \
-e LOCAL_SUBNETS=10.1.0.0/16,10.2.0.0/16,10.3.0.0/16 \
jordanpotter/wireguard
2021-03-07 05:20:15 +01:00
```
2023-09-30 01:49:33 +02:00
Additionally, you can expose ports to allow your local network to access services linked to the WireGuard container:
2021-03-07 05:20:15 +01:00
2023-09-30 01:49:33 +02: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/your/config.conf:/etc/wireguard/wg0.conf \
-p 8080:80 \
jordanpotter/wireguard
```
2021-03-07 05:20:15 +01:00
2023-09-30 01:49:33 +02:00
```bash
$ docker run --rm \
--net=container:wireguard \
nginx
```