You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The ARM variants can be built on x86_64 hardware using `multiarch/qemu-user-static`
109
-
```
109
+
110
+
```bash
110
111
docker run --rm --privileged multiarch/qemu-user-static:register --reset
111
112
```
112
113
113
114
Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64`.
114
115
115
-
## Update the chagelog
116
+
## Update the changelog
116
117
117
118
If you are modifying the Dockerfiles or any of the startup scripts in [root](https://github.com/linuxserver/docker-wireguard/tree/master/root), add an entry to the changelog
Copy file name to clipboardExpand all lines: .github/workflows/external_trigger.yml
+1-1Lines changed: 1 addition & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -18,7 +18,7 @@ jobs:
18
18
fi
19
19
echo "**** External trigger running off of master branch. To disable this trigger, set a Github secret named \"PAUSE_EXTERNAL_TRIGGER_WIREGUARD_MASTER\". ****"
20
20
echo "**** Retrieving external version ****"
21
-
EXT_RELEASE=$(curl -sX GET https://api.github.com/repos/WireGuard/wireguard-tools/tags | jq -r .[0].name)
The [LinuxServer.io](https://linuxserver.io) team brings you another container release featuring:
14
14
15
-
* regular and timely application updates
16
-
* easy user mappings (PGID, PUID)
17
-
* custom base image with s6 overlay
18
-
* weekly base OS updates with common layers across the entire LinuxServer.io ecosystem to minimise space usage, down time and bandwidth
19
-
* regular security updates
15
+
* regular and timely application updates
16
+
* easy user mappings (PGID, PUID)
17
+
* custom base image with s6 overlay
18
+
* weekly base OS updates with common layers across the entire LinuxServer.io ecosystem to minimise space usage, down time and bandwidth
19
+
* regular security updates
20
20
21
21
Find us at:
22
+
22
23
*[Blog](https://blog.linuxserver.io) - all the things you can do with our containers including How-To guides, opinions and much more!
23
24
*[Discord](https://discord.gg/YWrKVTn) - realtime support / chat with the community and the team.
24
25
*[Discourse](https://discourse.linuxserver.io) - post on our community forum.
@@ -55,6 +56,53 @@ The architectures supported by this image are:
55
56
| arm64 | arm64v8-latest |
56
57
| armhf | arm32v7-latest |
57
58
59
+
## Application Setup
60
+
61
+
This image is designed for Ubuntu and Debian based systems mainly (it works on some others, but ymmv). During container start, it will first check if the wireguard module is already installed and loaded. If not, it will then check if the kernel headers are already installed (in `/usr/src`) and if not, attempt to download the necessary kernel headers from the ubuntu/debian/raspbian repos; then will compile and install the kernel module.
62
+
63
+
If you're on a debian/ubuntu based host with a custom or downstream distro provided kernel (ie. Pop!_OS), the container won't be able to install the kernel headers from the regular ubuntu and debian repos. In those cases, you can try installing the headers on the host via `sudo apt install linux-headers-$(uname -r)` (if distro version) and then add a volume mapping for `/usr/src:/usr/src`, or if custom built, map the location of the existing headers to allow the container to use host installed headers to build the kernel module (tested successful on Pop!_OS, ymmv).
64
+
65
+
With regards to arm32/64 devices, Raspberry Pi 2-4 running the [official ubuntu images prior to focal](https://ubuntu.com/download/raspberry-pi) or Raspbian Buster are supported out of the box. For all other devices and OSes, you can try installing the kernel headers on the host, and mapping `/usr/src:/usr/src` and it may just work (no guarantees).
66
+
67
+
This can be run as a server or a client, based on the parameters used.
68
+
69
+
## Server Mode
70
+
If the environment variable `PEERS` is set to a number or a list of strings separated by comma, the container will run in server mode and the necessary server and peer/client confs will be generated. The peer/client config qr codes will be output in the docker log. They will also be saved in text and png format under `/config/peerX` in case `PEERS` is a variable and an integer or `/config/peer_X` in case a list of names was provided instead of an integer.
71
+
72
+
Variables `SERVERURL`, `SERVERPORT`, `INTERNAL_SUBNET` and `PEERDNS` are optional variables used for server mode. Any changes to these environment variables will trigger regeneration of server and peer confs. Peer/client confs will be recreated with existing private/public keys. Delete the peer folders for the keys to be recreated along with the confs.
73
+
74
+
To add more peers/clients later on, you increment the `PEERS` environment variable or add more elements to the list and recreate the container.
75
+
76
+
To display the QR codes of active peers again, you can use the following command and list the peer numbers as arguments: `docker exec -it wireguard /app/show-peer 1 4 5` or `docker exec -it wireguard /app/show-peer myPC myPhone myTablet` (Keep in mind that the QR codes are also stored as PNGs in the config folder).
77
+
78
+
The templates used for server and peer confs are saved under `/config/templates`. Advanced users can modify these templates and force conf generation by deleting `/config/wg0.conf` and restarting the container.
79
+
80
+
## Client Mode
81
+
Do not set the `PEERS` environment variable. Drop your client conf into the config folder as `/config/wg0.conf` and start the container.
82
+
83
+
If you get IPv6 related errors in the log and connection cannot be established, edit the `AllowedIPs` line in your peer/client wg0.conf to include only `0.0.0.0/0` and not `::/0`; and restart the container.
84
+
85
+
## Road warriors, roaming and returning home
86
+
If you plan to use Wireguard both remotely and locally, say on your mobile phone, you will need to consider routing. Most firewalls will not route ports forwarded on your WAN interface correctly to the LAN out of the box. This means that when you return home, even though you can see the Wireguard server, the return packets will probably get lost.
87
+
88
+
This is not a Wireguard specific issue and the two generally accepted solutions are NAT reflection (setting your edge router/firewall up in such a way as it translates internal packets correctly) or split horizon DNS (setting your internal DNS to return the private rather than public IP when connecting locally).
89
+
90
+
Both of these approaches have positives and negatives however their setup is out of scope for this document as everyone's network layout and equipment will be different.
91
+
92
+
## Maintaining local access to attached services
93
+
94
+
** Note: This is not a supported configuration by Linuxserver.io - use at your own risk.
95
+
96
+
When routing via Wireguard from another container using the `service` option in docker, you might lose access to the containers webUI locally. To avoid this, exclude the docker subnet from being routed via Wireguard by modifying your `wg0.conf` like so (modifying the subnets as you require):
97
+
98
+
```
99
+
[Interface]
100
+
PrivateKey = <private key>
101
+
Address = 9.8.7.6/32
102
+
DNS = 8.8.8.8
103
+
PostUp = DROUTE=$(ip route | grep default | awk '{print $3}'); HOMENET=192.168.0.0/16; HOMENET2=10.0.0.0/8; HOMENET3=172.16.0.0/12; ip route add $HOMENET3 via $DROUTE;ip route add $HOMENET2 via $DROUTE; ip route add $HOMENET via $DROUTE;iptables -I OUTPUT -d $HOMENET -j ACCEPT;iptables -A OUTPUT -d $HOMENET2 -j ACCEPT; iptables -A OUTPUT -d $HOMENET3 -j ACCEPT; iptables -A OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT
104
+
PreDown = HOMENET=192.168.0.0/16; HOMENET2=10.0.0.0/8; HOMENET3=172.16.0.0/12; ip route del $HOMENET3 via $DROUTE;ip route del $HOMENET2 via $DROUTE; ip route del $HOMENET via $DROUTE; iptables -D OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT; iptables -D OUTPUT -d $HOMENET -j ACCEPT; iptables -D OUTPUT -d $HOMENET2 -j ACCEPT; iptables -D OUTPUT -d $HOMENET3 -j ACCEPT
105
+
```
58
106
59
107
## Usage
60
108
@@ -96,7 +144,7 @@ services:
96
144
97
145
### docker cli
98
146
99
-
```
147
+
```bash
100
148
docker run -d \
101
149
--name=wireguard \
102
150
--cap-add=NET_ADMIN \
@@ -118,7 +166,6 @@ docker run -d \
118
166
ghcr.io/linuxserver/wireguard
119
167
```
120
168
121
-
122
169
## Parameters
123
170
124
171
Container images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate `<external>:<internal>` respectively. For example, `-p 8080:80` would expose port `80` from inside the container to be accessible from the host's IP on port `8080` outside the container.
@@ -145,7 +192,7 @@ You can set any environment variable from a file by using a special prepend `FIL
145
192
146
193
As an example:
147
194
148
-
```
195
+
```bash
149
196
-e FILE__PASSWORD=/run/secrets/mysecretpassword
150
197
```
151
198
@@ -164,68 +211,17 @@ Ensure any volume directories on the host are owned by the same user you specify
164
211
165
212
In this instance `PUID=1000` and `PGID=1000`, to find yours use `id user` as below:
This image is designed for Ubuntu and Debian based systems mainly (it works on some others, but ymmv). During container start, it will first check if the wireguard module is already installed and loaded. If not, it will then check if the kernel headers are already installed (in `/usr/src`) and if not, attempt to download the necessary kernel headers from the ubuntu/debian/raspbian repos; then will compile and install the kernel module.
177
-
178
-
If you're on a debian/ubuntu based host with a custom or downstream distro provided kernel (ie. Pop!_OS), the container won't be able to install the kernel headers from the regular ubuntu and debian repos. In those cases, you can try installing the headers on the host via `sudo apt install linux-headers-$(uname -r)` (if distro version) and then add a volume mapping for `/usr/src:/usr/src`, or if custom built, map the location of the existing headers to allow the container to use host installed headers to build the kernel module (tested successful on Pop!_OS, ymmv).
179
-
180
-
With regards to arm32/64 devices, Raspberry Pi 2-4 running the [official ubuntu images prior to focal](https://ubuntu.com/download/raspberry-pi) or Raspbian Buster are supported out of the box. For all other devices and OSes, you can try installing the kernel headers on the host, and mapping `/usr/src:/usr/src` and it may just work (no guarantees).
181
-
182
-
This can be run as a server or a client, based on the parameters used.
183
-
184
-
## Server Mode
185
-
If the environment variable `PEERS` is set to a number or a list of strings separated by comma, the container will run in server mode and the necessary server and peer/client confs will be generated. The peer/client config qr codes will be output in the docker log. They will also be saved in text and png format under `/config/peerX` in case `PEERS` is a variable and an integer or `/config/peer_X` in case a list of names was provided instead of an integer.
186
-
187
-
Variables `SERVERURL`, `SERVERPORT`, `INTERNAL_SUBNET` and `PEERDNS` are optional variables used for server mode. Any changes to these environment variables will trigger regeneration of server and peer confs. Peer/client confs will be recreated with existing private/public keys. Delete the peer folders for the keys to be recreated along with the confs.
188
-
189
-
To add more peers/clients later on, you increment the `PEERS` environment variable or add more elements to the list and recreate the container.
190
-
191
-
To display the QR codes of active peers again, you can use the following command and list the peer numbers as arguments: `docker exec -it wireguard /app/show-peer 1 4 5` or `docker exec -it wireguard /app/show-peer myPC myPhone myTablet` (Keep in mind that the QR codes are also stored as PNGs in the config folder).
192
-
193
-
The templates used for server and peer confs are saved under `/config/templates`. Advanced users can modify these templates and force conf generation by deleting `/config/wg0.conf` and restarting the container.
194
-
195
-
## Client Mode
196
-
Do not set the `PEERS` environment variable. Drop your client conf into the config folder as `/config/wg0.conf` and start the container.
197
-
198
-
If you get IPv6 related errors in the log and connection cannot be established, edit the `AllowedIPs` line in your peer/client wg0.conf to include only `0.0.0.0/0` and not `::/0`; and restart the container.
199
-
200
-
## Road warriors, roaming and returning home
201
-
If you plan to use Wireguard both remotely and locally, say on your mobile phone, you will need to consider routing. Most firewalls will not route ports forwarded on your WAN interface correctly to the LAN out of the box. This means that when you return home, even though you can see the Wireguard server, the return packets will probably get lost.
202
-
203
-
This is not a Wireguard specific issue and the two generally accepted solutions are NAT reflection (setting your edge router/firewall up in such a way as it translates internal packets correctly) or split horizon DNS (setting your internal DNS to return the private rather than public IP when connecting locally).
204
-
205
-
Both of these approaches have positives and negatives however their setup is out of scope for this document as everyone's network layout and equipment will be different.
206
-
207
-
## Maintaining local access to attached services
208
-
209
-
** Note: This is not a supported configuration by Linuxserver.io - use at your own risk.
210
-
211
-
When routing via Wireguard from another container using the `service` option in docker, you might lose access to the containers webUI locally. To avoid this, exclude the docker subnet from being routed via Wireguard by modifying your `wg0.conf` like so (modifying the subnets as you require):
212
-
213
-
```
214
-
[Interface]
215
-
PrivateKey = <private key>
216
-
Address = 9.8.7.6/32
217
-
DNS = 8.8.8.8
218
-
PostUp = DROUTE=$(ip route | grep default | awk '{print $3}'); HOMENET=192.168.0.0/16; HOMENET2=10.0.0.0/8; HOMENET3=172.16.0.0/12; ip route add $HOMENET3 via $DROUTE;ip route add $HOMENET2 via $DROUTE; ip route add $HOMENET via $DROUTE;iptables -I OUTPUT -d $HOMENET -j ACCEPT;iptables -A OUTPUT -d $HOMENET2 -j ACCEPT; iptables -A OUTPUT -d $HOMENET3 -j ACCEPT; iptables -A OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT
219
-
PreDown = HOMENET=192.168.0.0/16; HOMENET2=10.0.0.0/8; HOMENET3=172.16.0.0/12; ip route del $HOMENET3 via $DROUTE;ip route del $HOMENET2 via $DROUTE; ip route del $HOMENET via $DROUTE; iptables -D OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT; iptables -D OUTPUT -d $HOMENET -j ACCEPT; iptables -D OUTPUT -d $HOMENET2 -j ACCEPT; iptables -D OUTPUT -d $HOMENET3 -j ACCEPT
220
-
```
221
-
222
-
223
219
## Docker Mods
220
+
224
221
[](https://mods.linuxserver.io/?mod=wireguard"view available mods for this container.")[](https://mods.linuxserver.io/?mod=universal"view available universal mods.")
225
222
226
223
We publish various [Docker Mods](https://github.com/linuxserver/docker-mods) to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.
227
224
228
-
229
225
## Support Info
230
226
231
227
* Shell access whilst the container is running: `docker exec -it wireguard /bin/bash`
@@ -242,38 +238,45 @@ Most of our images are static, versioned, and require an image update and contai
242
238
Below are the instructions for updating containers:
243
239
244
240
### Via Docker Compose
241
+
245
242
* Update all images: `docker-compose pull`
246
243
* or update a single image: `docker-compose pull wireguard`
247
244
* Let compose update all containers as necessary: `docker-compose up -d`
248
245
* or update a single container: `docker-compose up -d wireguard`
249
246
* You can also remove the old dangling images: `docker image prune`
250
247
251
248
### Via Docker Run
249
+
252
250
* Update the image: `docker pull ghcr.io/linuxserver/wireguard`
253
251
* Stop the running container: `docker stop wireguard`
254
252
* Delete the container: `docker rm wireguard`
255
253
* Recreate a new container with the same docker run parameters as instructed above (if mapped correctly to a host folder, your `/config` folder and settings will be preserved)
256
254
* You can also remove the old dangling images: `docker image prune`
257
255
258
256
### Via Watchtower auto-updater (only use if you don't remember the original parameters)
257
+
259
258
* Pull the latest image at its tag and replace it with the same env variables in one run:
260
-
```
259
+
260
+
```bash
261
261
docker run --rm \
262
262
-v /var/run/docker.sock:/var/run/docker.sock \
263
263
containrrr/watchtower \
264
264
--run-once wireguard
265
265
```
266
+
266
267
* You can also remove the old dangling images: `docker image prune`
267
268
268
269
**Note:** We do not endorse the use of Watchtower as a solution to automated updates of existing Docker containers. In fact we generally discourage automated updates. However, this is a useful tool for one-time manual updates of containers where you have forgotten the original parameters. In the long term, we highly recommend using [Docker Compose](https://docs.linuxserver.io/general/docker-compose).
* We recommend [Diun](https://crazymax.dev/diun/) for update notifications. Other tools that automatically update containers unattended are not recommended or supported.
272
274
273
275
## Building locally
274
276
275
277
If you want to make local modifications to these images for development purposes or just to customize the logic:
0 commit comments