helps to manage wg connections in a client/server scenario
Find a file
Andrea Zucchelli 5cb34f9089
All checks were successful
Create and publish Frontend container image / build-and-push-image (push) Successful in 13m50s
Create and publish Worker container image / build-and-push-image (push) Successful in 4m32s
fix: settings.py only amd64
2024-11-14 23:49:45 +01:00
.forgejo/workflows fix: settings.py only amd64 2024-11-14 23:49:45 +01:00
static/css chore: css 2024-10-22 23:56:01 +02:00
templates chore: css 2024-10-22 23:56:01 +02:00
test feat: test 2024-10-09 18:44:53 +02:00
wg_connection_manager fix: task data marshall 2024-10-27 16:28:57 +01:00
wg_connection_manager_worker fix: task data marshall 2024-10-27 16:28:57 +01:00
wg_manager fix(otp): redirect to setup otp 2024-10-20 12:11:51 +02:00
.env-dist feat: containers and celery worker 2024-10-13 23:49:48 +02:00
.gitignore Merge remote-tracking branch 'origin/feat/css' 2024-10-07 14:41:34 +02:00
compose.yaml feat: containers and celery worker 2024-10-13 23:49:48 +02:00
Containerfile feat(container): run django as user 2024-10-15 23:03:49 +02:00
Containerfile-worker feat: containers and celery worker 2024-10-13 23:49:48 +02:00
LICENSE first import 2024-10-06 12:56:12 +02:00
manage.py first import 2024-10-06 12:56:12 +02:00
pyproject.toml feat: test wip 2024-10-08 23:37:00 +02:00
README.md chore: trigger workflow 2024-11-14 21:26:22 +01:00
requirements-test.txt chore: requirements-test.txt 2024-10-09 18:56:11 +02:00
requirements-worker.txt feat: containers and celery worker 2024-10-13 23:49:48 +02:00
requirements.txt fix: requirements 2024-10-23 00:00:15 +02:00

WG-MANAGER

This simple Django web interface helps to manage wg connections in a client/server scenario. Users are allowed to create, enable and disable wg peers.

Warning
this program is alpha quality, not fully tested and can break your computer :D also it must run with root privileges :(

Quickstart container

The container version is made of 3 containers a valkey/redis container a celery worker backend and the django app as frontend.
The django apps invokes the worker via celery through valkey, the worker executes the privileged operations on the wireguard interfaces, the celery worker container ha NET_ADMIN capability and lives in the host network

there's a sample compose file compose.yaml.

first prepare the environment

in wg_manager dir create your own settings.py:

from .settings_dist import *
# your customization here

or simply make a symbolic link:

ln -s settings_dist.py settings.py

copy .env-dist and create your own .env set the variable WG_INTERFACE according to the name of the wg interface you want to manage

start the service

you can start the service running:

docker compose up

The you can connect to the web interface on http://127.0.0.1:4000 default superuser credentials are:

  • user: admin
  • password: admin

you can import existing wireguard peer by visiting the /sync url http://127.0.0.1:4000/sync

Remember that the db inside the container get destroyed every time the container get destroyed.
You can mount the db as a volume by adding the db as volume in the wg-manager service:

volumes:
    #...
    - ./db.sqlite3:/app/db.sqlite3
    #...

WARNING: the db.sqlite3 must exists in the host directory before starting the containers.

Quickstart standalone

create a python venv:

python -m venv venv

activate it

. venv/bin/activate

install the requirements

pip install -r requirements.txt

in wg_manager dir create your own settings.py:

from .settings_dist import *
# your customization here

or simply make a symbolic link:

ln -s settings_dist.py settings.py

copy .env-dist and create your own .env set the variable WG_INTERFACE according to the name of the wg interface you want to manage

set USE_CELERY=False in environemnt to use only the django app without the privileged worker

create the sqlite db:

./manage.py migrate

collect static assets:

./manage.py collectstatic

create the superuser:

./manage.py createsuperuser

if you already have connections you can import them in the db with:

./manage.py sync

you can test with the integrated dev server:

./manage.py runserver

and then deploy it using a proper web server like gunicorn:

gunicorn wg_manager.wsgi

with a proper tls enabled reverse proxy before it.