mirror of
https://github.com/donaldzou/WGDashboard.git
synced 2024-11-22 15:20:09 +01:00
Added context and refined code.
This commit is contained in:
parent
6991039640
commit
68d0ae4002
@ -10,7 +10,7 @@ ENV wg_net="10.0.0.1"
|
|||||||
ENV tz="Europe/Amsterdam"
|
ENV tz="Europe/Amsterdam"
|
||||||
ENV global_dns="1.1.1.1"
|
ENV global_dns="1.1.1.1"
|
||||||
ENV enable="none"
|
ENV enable="none"
|
||||||
ENV isolate="none"
|
ENV isolate="wg0"
|
||||||
ENV public_ip="0.0.0.0"
|
ENV public_ip="0.0.0.0"
|
||||||
|
|
||||||
# Doing basic system maintenance. Change the timezone to the desired timezone.
|
# Doing basic system maintenance. Change the timezone to the desired timezone.
|
||||||
|
@ -1,20 +1,20 @@
|
|||||||
# WG-Dashboard Docker Explanation:
|
# WGDashboard Docker Explanation:
|
||||||
|
|
||||||
Author: DaanSelen<br>
|
Author: DaanSelen<br>
|
||||||
|
|
||||||
This document delves into how the WG-Dashboard Docker container has been built.<br>
|
This document delves into how the WGDashboard Docker container has been built.<br>
|
||||||
Of course there are two stages, one before run-time and one at/after run-time.<br>
|
Of course there are two stages, one before run-time and one at/after run-time.<br>
|
||||||
The `Dockerfile` describes how the container image is made, and the `entrypoint.sh` is executed after running the container. <br>
|
The `Dockerfile` describes how the container image is made, and the `entrypoint.sh` is executed after running the container. <br>
|
||||||
In this example, WireGuard is integrated into the container itself, so it should be a run-and-go.<br>
|
In this example, WireGuard is integrated into the container itself, so it should be a run-and-go/out-of-the-box.<br>
|
||||||
For more details on the source-code specific to this Docker image, refer to the source files, they have lots of comments.
|
For more details on the source-code specific to this Docker image, refer to the source files, they have lots of comments.
|
||||||
|
|
||||||
I have tried to embed some new features such as `isolated_peers` and interface startup on container-start (through `enable_wg0`).
|
I have tried to embed some new features such as `isolate` and interface startup on container-start (through `enable`). I hope you enjoy!
|
||||||
|
|
||||||
<img src="https://raw.githubusercontent.com/donaldzou/WGDashboard/main/img/logo.png" alt="WG-Dashboard Logo" title="WG-Dashboard Logo" width="150" height="150" />
|
<img src="https://raw.githubusercontent.com/donaldzou/WGDashboard/main/src/static/img/logo.png" alt="WG-Dashboard Logo" title="WG-Dashboard Logo" width="150" height="150" />
|
||||||
|
|
||||||
## Getting the container running:
|
## Getting the container running:
|
||||||
|
|
||||||
To get the container running you either pull the image from the repository, at the moment: `repo.nerthus.nl/app/wireguard-dashboard:latest`.<br>
|
To get the container running you either pull the image from the repository, `dselen/wgdashboard:latest`.<br>
|
||||||
From there either use the environment variables describe below as parameters or use the Docker Compose file: `compose.yaml`.
|
From there either use the environment variables describe below as parameters or use the Docker Compose file: `compose.yaml`.
|
||||||
|
|
||||||
An example of a simple command to get the container running is show below:<br>
|
An example of a simple command to get the container running is show below:<br>
|
||||||
@ -28,7 +28,7 @@ docker run -d \
|
|||||||
-p 10086:10086/tcp \
|
-p 10086:10086/tcp \
|
||||||
-p 51820:51820/udp \
|
-p 51820:51820/udp \
|
||||||
--cap-add NET_ADMIN \
|
--cap-add NET_ADMIN \
|
||||||
repo.nerthus.nl/app/wireguard-dashboard:latest
|
dselen/wgdashboard:latest
|
||||||
```
|
```
|
||||||
<br>
|
<br>
|
||||||
If you want to use Compose instead of a raw Docker command, refer to the example in the `compose.yaml` or the one pasted below:
|
If you want to use Compose instead of a raw Docker command, refer to the example in the `compose.yaml` or the one pasted below:
|
||||||
@ -37,14 +37,14 @@ If you want to use Compose instead of a raw Docker command, refer to the example
|
|||||||
```yaml
|
```yaml
|
||||||
services:
|
services:
|
||||||
wireguard-dashboard:
|
wireguard-dashboard:
|
||||||
image: repo.nerthus.nl/app/wireguard-dashboard:latest
|
image: dselen/wgdashboard:latest
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
container_name: wire-dash
|
container_name: wire-dash
|
||||||
environment:
|
environment:
|
||||||
#- tz=
|
#- tz=
|
||||||
#- global_dns=
|
#- global_dns=
|
||||||
- enable_wg0=true
|
- enable=none
|
||||||
- isolated_peers=false
|
- isolate=wg0
|
||||||
#- public_ip=
|
#- public_ip=
|
||||||
ports:
|
ports:
|
||||||
- 10086:10086/tcp
|
- 10086:10086/tcp
|
||||||
@ -69,14 +69,33 @@ This setup is just generic and will use the Docker volumes.
|
|||||||
Once the container is running, the installation process is essentially the same as running it on bare-metal.<br>
|
Once the container is running, the installation process is essentially the same as running it on bare-metal.<br>
|
||||||
So go to the assign TCP port in this case HTTP, like the default 10086 one in the example and log into the WEB-GUI.<br>
|
So go to the assign TCP port in this case HTTP, like the default 10086 one in the example and log into the WEB-GUI.<br>
|
||||||
|
|
||||||
| Environment variable | Accepted arguments | Default value | Verbose |
|
| Environment variable | Accepted arguments | Default value | Example value | Verbose |
|
||||||
| -------------- | ------- | ------- | ------- |
|
| -------------- | ------- | ------- | ------- | ------- |
|
||||||
| tz | Europe/Amsterdam or any confirming timezone notation. | Europe/Amsterdam | Sets the timezone of the Docker container. This is to timesync the container to any other processes which would need it. |
|
| tz | Europe/Amsterdam or any confirming timezone notation. | `Europe/Amsterdam` | `America/New_York` | Sets the timezone of the Docker container. This is to timesync the container to any other processes which would need it. |
|
||||||
| global_dns | Any IPv4 address, such as my personal recommendation: 9.9.9.9 (QUAD9) | 1.1.1.1 | Set the default DNS given to clients once they connect to the WireGuard tunnel (VPN).
|
| global_dns | Any IPv4 address, such as my personal recommendation: 9.9.9.9 (QUAD9). | `1.1.1.1` | `8.8.8.8` or any IP-Address that resolves DNS-names, and of course is reachable | Set the default DNS given to clients once they connect to the WireGuard tunnel, and for new peers, set to Cloudflare DNS for reliability.
|
||||||
| enable_wg0 | `true` or `false` | `false` | Enables or disables the starting of the WireGuard interface on container 'boot-up'.
|
| enable | Anything, preferably an existing WireGuard interface name. | `none` | `wg0,wg2,wg13` | Enables or disables the starting of the WireGuard interface on container 'boot-up'.
|
||||||
| isolated_peers | `true` or `false` | `true` | For security the default is true, and it disables peers to ping or reach eachother, the WireGuard interface IS able to reach the peers (Done through `iptables`).
|
| isolate | Anything, preferably an existing WireGuard interface name. | `wg0` | `wg1,wg0` | For security premade `wg0` interface comes with this feature enabled by default. Declaring `isolate=` in the Docker Compose file will remove this. The WireGuard interface itself IS able to reach the peers (Done through the `iptables` package).
|
||||||
| public_ip | Any IPv4 (public recommended) address, such as the one returned by default | Default uses the return of `curl ifconfig.me` | To reach your VPN from outside your own network, you need WG-Dashboard to know what your public IP-address is, otherwise it will generate faulty config files for clients.
|
| public_ip | Any IPv4 (public recommended) address, such as the one returned by default | Default uses the return of `curl ifconfig.me` | `23.50.131.156` | To reach your VPN from outside your own network, you need WG-Dashboard to know what your public IP-address is, otherwise it will generate faulty config files for clients. This happends because it is inside a Docker/Kubernetes container. In or outside of NAT is not relevant as long as the given IP-address is reachable from the internet or the target network.
|
||||||
|
|
||||||
|
## Be careful with:
|
||||||
|
|
||||||
|
When you are going to work with multiple WireGuard interfaces, you need to also open them up to the Docker host. This done by either adding the port mappings like: `51821:51821/udp` in the Docker Compose file, or to open a range like: `51820-51830:51820-51830/udp`<br>
|
||||||
|
The latter opens up UDP ports from 51820 to 51830, so all ports in between as well! Be careful, it is good security practise to open only needed ports!
|
||||||
|
|
||||||
|
## Building the image yourself:
|
||||||
|
|
||||||
|
To build the image yourself, you need to do a couple things:<br>
|
||||||
|
1. Clone the Github repository containing the source code of WGDashboard including the docker directory. For example do: `git clone https://github.com/donaldzou/WGDashboard.git`
|
||||||
|
1. Navigate into the docker directory.
|
||||||
|
1. (Make sure you have Docker correctly installed, if not: [Click here](https://docs.docker.com/engine/install/)) and run: `docker build . -t <Image name>:<Image tag>` as an example: `docker build . -t dselen/wgdashboard:latest`.<br>This will make Docker compile the image from the resources in the directory you mention, in this case the current one. Let it compile, it takes about a minute or maximally two.
|
||||||
|
1. If all went well, see your image with `docker images`. Example below:
|
||||||
|
```
|
||||||
|
dselen@dev-mach:~/development/WGDashboard/docker$ docker images
|
||||||
|
REPOSITORY TAG IMAGE ID CREATED SIZE
|
||||||
|
dselen/wgdashboard dev c96fd96ee3b3 42 minutes ago 314MB
|
||||||
|
```
|
||||||
|
|
||||||
## Closing remarks:
|
## Closing remarks:
|
||||||
|
|
||||||
|
Excuse the large image size, whoops! Debian's big... sometimes.<br>
|
||||||
For feedback please submit an issue to the repository. Or message dselen@nerthus.nl.
|
For feedback please submit an issue to the repository. Or message dselen@nerthus.nl.
|
||||||
|
@ -6,8 +6,8 @@ services:
|
|||||||
environment:
|
environment:
|
||||||
#- tz= # <--- Set container timezone, default: Europe/Amsterdam.
|
#- tz= # <--- Set container timezone, default: Europe/Amsterdam.
|
||||||
#- global_dns= # <--- Set global DNS address, default: 1.1.1.1.
|
#- global_dns= # <--- Set global DNS address, default: 1.1.1.1.
|
||||||
- enable=wg0,wg1 # <--- Set the interfaces that will be enabled on startup, default: none. The option "off" is also allowed.
|
- enable=wg0,wg2 # <--- Set the interfaces that will be enabled on startup, default: none. The option "off" is also allowed.
|
||||||
- isolate=wg0 # <--- When set to true, it disallows peers to talk to eachother, setting to false, allows it, default: true.
|
- isolate=wg0,wg1 # <--- When set to true, it disallows peers to talk to eachother, setting to false, allows it, default: true.
|
||||||
#- public_ip= # <--- Set public IP to ensure the correct one is chosen, defaulting to the IP give by ifconfig.me.
|
#- public_ip= # <--- Set public IP to ensure the correct one is chosen, defaulting to the IP give by ifconfig.me.
|
||||||
ports:
|
ports:
|
||||||
- 10086:10086/tcp
|
- 10086:10086/tcp
|
||||||
|
@ -26,6 +26,9 @@ clean_up() {
|
|||||||
else
|
else
|
||||||
echo "No pycaches found, continuing."
|
echo "No pycaches found, continuing."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
echo "Setting permissions to not be world-accesible."
|
||||||
|
chmod 640 /etc/wireguard/*
|
||||||
}
|
}
|
||||||
|
|
||||||
# === CORE SERVICES ===
|
# === CORE SERVICES ===
|
||||||
@ -45,7 +48,7 @@ start_core() {
|
|||||||
cd "${WGDASH}"/src || return # If changing the directory fails (permission or presence error), then bash will exist this function, causing the WireGuard Dashboard to not be succesfully launched.
|
cd "${WGDASH}"/src || return # If changing the directory fails (permission or presence error), then bash will exist this function, causing the WireGuard Dashboard to not be succesfully launched.
|
||||||
bash wgd.sh start
|
bash wgd.sh start
|
||||||
|
|
||||||
# Isolated peers
|
# Isolated peers feature:
|
||||||
local configurations=(/etc/wireguard/*)
|
local configurations=(/etc/wireguard/*)
|
||||||
IFS=',' read -r -a do_isolate <<< "${isolate}"
|
IFS=',' read -r -a do_isolate <<< "${isolate}"
|
||||||
non_isolate=()
|
non_isolate=()
|
||||||
@ -64,9 +67,6 @@ start_core() {
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
echo "Isolate configurations: ${do_isolate[@]}"
|
|
||||||
echo "Non-Isolate configurations: ${non_isolate[@]}"
|
|
||||||
|
|
||||||
for interface in "${do_isolate[@]}"; do
|
for interface in "${do_isolate[@]}"; do
|
||||||
if [ -f "/etc/wireguard/${interface}.conf" ]; then
|
if [ -f "/etc/wireguard/${interface}.conf" ]; then
|
||||||
echo "Isolating:" $interface
|
echo "Isolating:" $interface
|
||||||
@ -84,7 +84,7 @@ start_core() {
|
|||||||
|
|
||||||
for interface in "${non_isolate[@]}"; do
|
for interface in "${non_isolate[@]}"; do
|
||||||
if [ -f "/etc/wireguard/${interface}.conf" ]; then
|
if [ -f "/etc/wireguard/${interface}.conf" ]; then
|
||||||
echo "Removing Isolation for:" $interface
|
echo "Removing Isolation if present for:" $interface
|
||||||
sed -i "/PostUp = iptables -I FORWARD -i ${interface} -o ${interface} -j DROP/d" /etc/wireguard/${interface}.conf
|
sed -i "/PostUp = iptables -I FORWARD -i ${interface} -o ${interface} -j DROP/d" /etc/wireguard/${interface}.conf
|
||||||
sed -i "/PreDown = iptables -D FORWARD -i ${interface} -o ${interface} -j DROP/d" /etc/wireguard/${interface}.conf
|
sed -i "/PreDown = iptables -D FORWARD -i ${interface} -o ${interface} -j DROP/d" /etc/wireguard/${interface}.conf
|
||||||
else
|
else
|
||||||
@ -108,8 +108,7 @@ start_core() {
|
|||||||
|
|
||||||
# === SET ENV VARS ===
|
# === SET ENV VARS ===
|
||||||
set_envvars() {
|
set_envvars() {
|
||||||
echo "------------------------------------------------------------"
|
echo "------------- SETTING ENVIRONMENT VARIABLES ----------------"
|
||||||
echo "Setting relevant variables for operation."
|
|
||||||
|
|
||||||
# If the timezone is different, for example in North-America or Asia.
|
# If the timezone is different, for example in North-America or Asia.
|
||||||
if [ "${tz}" != "$(cat /etc/timezone)" ]; then
|
if [ "${tz}" != "$(cat /etc/timezone)" ]; then
|
||||||
@ -142,7 +141,7 @@ set_envvars() {
|
|||||||
|
|
||||||
# === CLEAN UP ===
|
# === CLEAN UP ===
|
||||||
ensure_blocking() {
|
ensure_blocking() {
|
||||||
echo "------------------------------------------------------------"
|
echo "-------------- ENSURING CONTAINER CONTINUATION -------------"
|
||||||
sleep 1s
|
sleep 1s
|
||||||
echo "Ensuring container continuation."
|
echo "Ensuring container continuation."
|
||||||
|
|
||||||
@ -159,6 +158,7 @@ ensure_blocking() {
|
|||||||
|
|
||||||
# Execute functions for the WireGuard Dashboard services, then set the environment variables
|
# Execute functions for the WireGuard Dashboard services, then set the environment variables
|
||||||
clean_up
|
clean_up
|
||||||
|
repair
|
||||||
start_core
|
start_core
|
||||||
set_envvars
|
set_envvars
|
||||||
ensure_blocking
|
ensure_blocking
|
Loading…
Reference in New Issue
Block a user