Skip to content

Commit 3c9a5c7

Browse files
Bot Updating Templated Files
1 parent 24c11f3 commit 3c9a5c7

File tree

3 files changed

+74
-69
lines changed

3 files changed

+74
-69
lines changed

.github/CONTRIBUTING.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ If you are proposing additional packages to be added, ensure that you added the
9696

9797
### Testing your changes
9898

99-
```
99+
```bash
100100
git clone https://github.com/linuxserver/docker-wireguard.git
101101
cd docker-wireguard
102102
docker build \
@@ -106,13 +106,14 @@ docker build \
106106
```
107107

108108
The ARM variants can be built on x86_64 hardware using `multiarch/qemu-user-static`
109-
```
109+
110+
```bash
110111
docker run --rm --privileged multiarch/qemu-user-static:register --reset
111112
```
112113

113114
Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64`.
114115

115-
## Update the chagelog
116+
## Update the changelog
116117

117118
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
118119

.github/workflows/external_trigger.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ jobs:
1818
fi
1919
echo "**** External trigger running off of master branch. To disable this trigger, set a Github secret named \"PAUSE_EXTERNAL_TRIGGER_WIREGUARD_MASTER\". ****"
2020
echo "**** Retrieving external version ****"
21-
EXT_RELEASE=$(curl -sX GET https://api.github.com/repos/WireGuard/wireguard-tools/tags | jq -r .[0].name)
21+
EXT_RELEASE=$(curl -u ${{ secrets.CR_USER }}:${{ secrets.CR_PAT }} -sX GET https://api.github.com/repos/WireGuard/wireguard-tools/tags | jq -r .[0].name)
2222
if [ -z "${EXT_RELEASE}" ] || [ "${EXT_RELEASE}" == "null" ]; then
2323
echo "**** Can't retrieve external version, exiting ****"
2424
FAILURE_REASON="Can't retrieve external version for wireguard branch master"

README.md

Lines changed: 69 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<!-- DO NOT EDIT THIS FILE MANUALLY -->
2-
<!-- Please read the CONTRIBUTING.md -->
2+
<!-- Please read the https://github.com/linuxserver/docker-wireguard/blob/master/.github/CONTRIBUTING.md -->
33

44
[![linuxserver.io](https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/linuxserver_medium.png)](https://linuxserver.io)
55

@@ -12,13 +12,14 @@
1212

1313
The [LinuxServer.io](https://linuxserver.io) team brings you another container release featuring:
1414

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
2020

2121
Find us at:
22+
2223
* [Blog](https://blog.linuxserver.io) - all the things you can do with our containers including How-To guides, opinions and much more!
2324
* [Discord](https://discord.gg/YWrKVTn) - realtime support / chat with the community and the team.
2425
* [Discourse](https://discourse.linuxserver.io) - post on our community forum.
@@ -55,6 +56,53 @@ The architectures supported by this image are:
5556
| arm64 | arm64v8-latest |
5657
| armhf | arm32v7-latest |
5758

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+
```
58106

59107
## Usage
60108

@@ -96,7 +144,7 @@ services:
96144
97145
### docker cli
98146
99-
```
147+
```bash
100148
docker run -d \
101149
--name=wireguard \
102150
--cap-add=NET_ADMIN \
@@ -118,7 +166,6 @@ docker run -d \
118166
ghcr.io/linuxserver/wireguard
119167
```
120168

121-
122169
## Parameters
123170

124171
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
145192

146193
As an example:
147194

148-
```
195+
```bash
149196
-e FILE__PASSWORD=/run/secrets/mysecretpassword
150197
```
151198

@@ -164,68 +211,17 @@ Ensure any volume directories on the host are owned by the same user you specify
164211

165212
In this instance `PUID=1000` and `PGID=1000`, to find yours use `id user` as below:
166213

167-
```
214+
```bash
168215
$ id username
169216
uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
170217
```
171218

172-
173-
&nbsp;
174-
## Application Setup
175-
176-
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-
223219
## Docker Mods
220+
224221
[![Docker Mods](https://img.shields.io/badge/dynamic/yaml?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=wireguard&query=%24.mods%5B%27wireguard%27%5D.mod_count&url=https%3A%2F%2Fraw.githubusercontent.com%2Flinuxserver%2Fdocker-mods%2Fmaster%2Fmod-list.yml)](https://mods.linuxserver.io/?mod=wireguard "view available mods for this container.") [![Docker Universal Mods](https://img.shields.io/badge/dynamic/yaml?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=universal&query=%24.mods%5B%27universal%27%5D.mod_count&url=https%3A%2F%2Fraw.githubusercontent.com%2Flinuxserver%2Fdocker-mods%2Fmaster%2Fmod-list.yml)](https://mods.linuxserver.io/?mod=universal "view available universal mods.")
225222

226223
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.
227224

228-
229225
## Support Info
230226

231227
* 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
242238
Below are the instructions for updating containers:
243239

244240
### Via Docker Compose
241+
245242
* Update all images: `docker-compose pull`
246243
* or update a single image: `docker-compose pull wireguard`
247244
* Let compose update all containers as necessary: `docker-compose up -d`
248245
* or update a single container: `docker-compose up -d wireguard`
249246
* You can also remove the old dangling images: `docker image prune`
250247

251248
### Via Docker Run
249+
252250
* Update the image: `docker pull ghcr.io/linuxserver/wireguard`
253251
* Stop the running container: `docker stop wireguard`
254252
* Delete the container: `docker rm wireguard`
255253
* 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)
256254
* You can also remove the old dangling images: `docker image prune`
257255

258256
### Via Watchtower auto-updater (only use if you don't remember the original parameters)
257+
259258
* Pull the latest image at its tag and replace it with the same env variables in one run:
260-
```
259+
260+
```bash
261261
docker run --rm \
262262
-v /var/run/docker.sock:/var/run/docker.sock \
263263
containrrr/watchtower \
264264
--run-once wireguard
265265
```
266+
266267
* You can also remove the old dangling images: `docker image prune`
267268

268269
**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).
269270

270271
### Image Update Notifications - Diun (Docker Image Update Notifier)
272+
271273
* We recommend [Diun](https://crazymax.dev/diun/) for update notifications. Other tools that automatically update containers unattended are not recommended or supported.
272274

273275
## Building locally
274276

275277
If you want to make local modifications to these images for development purposes or just to customize the logic:
276-
```
278+
279+
```bash
277280
git clone https://github.com/linuxserver/docker-wireguard.git
278281
cd docker-wireguard
279282
docker build \
@@ -283,7 +286,8 @@ docker build \
283286
```
284287

285288
The ARM variants can be built on x86_64 hardware using `multiarch/qemu-user-static`
286-
```
289+
290+
```bash
287291
docker run --rm --privileged multiarch/qemu-user-static:register --reset
288292
```
289293

0 commit comments

Comments
 (0)