Skip to content

Commit c70a1c9

Browse files
committed
[gsoc26] Improved VPN deployer idea
1 parent 70e09e2 commit c70a1c9

File tree

1 file changed

+88
-18
lines changed

1 file changed

+88
-18
lines changed

developer/gsoc-ideas-2026.rst

Lines changed: 88 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -413,33 +413,61 @@ Key Features
413413
The program will run on Linux-based servers and will:
414414

415415
- Be implemented in **Python** to ensure maintainability and
416-
extensibility.
416+
extensibility, it should be a Python package installable via ``pip``.
417417
- Use a **Makefile** to generate installation packages for major Linux
418418
distributions:
419419

420420
- **DEB** (for Debian, Ubuntu, and related distributions)
421421
- **RPM** (for Red Hat, Fedora, and similar systems)
422-
- **Snap** (for broader Linux compatibility)
423422

423+
- Provide **Docker support** to run the VPN deployer as a containerized
424+
service, enabling easy deployment alongside docker-openwisp. We suggest
425+
running the deployer and VPN server(s) within the same container to keep
426+
the architecture simple, using host networking mode. Configuration
427+
management could be achieved via a configuration file (YAML is
428+
recommended for readability) mountable into the container. Contributors
429+
should verify these suggestions through research and propose the most
430+
suitable approach for their implementation.
424431
- Establish a **WebSocket connection** with OpenWISP to listen for changes
425432
in VPN server configurations and synchronize local settings accordingly.
426-
- Keep the local list of peers and the **certificate revocation list
427-
(CRL)** updated whenever VPN clients are added, removed, or modified.
428-
- Support the following VPN tunneling technologies:
429-
430-
- **OpenVPN**
431-
- **WireGuard**
432-
- **WireGuard over VXLAN**
433-
- **ZeroTier**
433+
The connection should handle reconnection automatically. We suggest
434+
retrying WebSocket connections indefinitely and using exponential
435+
backoff for HTTP requests, but contributors should propose a robust
436+
reconnection strategy.
437+
- Keep the local list of peers updated whenever VPN clients are added,
438+
removed, or modified.
439+
- Receive **real-time updates** via WebSocket when certificate revocation
440+
occurs, ensuring the **Certificate Revocation List (CRL)** is always
441+
current. The deployer needs to handle OpenVPN server reload when CRL
442+
updates are received. Initial research indicates that OpenVPN does not
443+
automatically reload CRL files when they change, and that sending a
444+
``SIGUSR1`` signal to the OpenVPN process may reload the CRL without
445+
disconnecting existing clients. Contributors must verify this approach
446+
and propose the best solution based on their findings.
447+
- Support the following VPN tunneling technologies (in order of
448+
implementation priority):
449+
450+
1. **OpenVPN** (most complex due to CRL requirements)
451+
2. **WireGuard**
452+
3. **ZeroTier**
453+
4. **WireGuard over VXLAN** (VXLAN part is tricky)
434454

435455
- Provide a **command-line utility** to simplify the initial setup. This
436456
utility will:
437457

438458
- Guide users step by step, making it accessible even to those with
439459
limited experience.
460+
- Support **non-interactive/scripted mode** for automation and Docker
461+
deployments (minimal implementation).
440462
- Allow users to select the VPN technology to be deployed.
441463
- Verify that the necessary system packages are installed and provide
442-
clear warnings if dependencies are missing.
464+
clear warnings if dependencies are missing. We suggest maintaining a
465+
mapping of required packages per distribution and VPN technology, as
466+
package names vary between Linux distributions (e.g., Debian
467+
``openvpn`` vs. RHEL ``openvpn``), but contributors should propose
468+
their approach.
469+
- Store configuration in a YAML configuration file (mountable in Docker
470+
environments). Other formats may be considered if justified.
443471
- Assist in securely connecting and synchronizing with OpenWISP.
444472

445473
.. note::
@@ -455,9 +483,11 @@ The program will run on Linux-based servers and will:
455483
<https://github.com/openwisp/openwisp-users/issues/240>`_. A
456484
proposed approach is to provide a link to the OpenWISP admin
457485
interface, where users can generate and copy their API token easily.
486+
The WebSocket connection should authenticate using this API token.
458487

459488
- Support running **multiple instances**, where each instance manages a
460-
separate VPN server independently.
489+
separate VPN server independently. Each instance could be identified by
490+
a dedicated configuration file or other suitable mechanism.
461491
- Implement **structured logging** with dedicated log files for each
462492
instance, adhering to Linux logging best practices and supporting log
463493
rotation.
@@ -472,8 +502,22 @@ The program will run on Linux-based servers and will:
472502
- Update the **OpenWISP documentation** to cover installation,
473503
configuration, and best practices.
474504
- To support this project, **OpenWISP Controller** will need to be updated
475-
to expose a **WebSocket endpoint**. This will allow the VPN
476-
synchronization program to receive real-time configuration updates.
505+
as follows:
506+
507+
- Expose a **WebSocket endpoint** to allow the VPN synchronization
508+
program to receive real-time configuration updates.
509+
- **Automatically include the Certificate Revocation List (CRL)** in
510+
generated OpenVPN server configurations. The CRL content should be
511+
provided as a configuration variable (e.g., ``crl_content``, similar
512+
to x509 certificates), eliminating the need for manual CRL file
513+
management. The CRL file path should be determined as part of the
514+
implementation. When certificates are revoked, the system must trigger
515+
WebSocket notifications to connected VPN deployer instances to ensure
516+
immediate CRL updates. Additionally, the deployer should periodically
517+
poll the CRL checksum via HTTP API as a redundancy measure.
518+
- Define a **permission model** for the VPN deployer: the deployer
519+
requires a dedicated user account with organization manager role and
520+
permissions to add/change VPN servers within that organization.
477521

478522
Prerequisites to work on this project
479523
+++++++++++++++++++++++++++++++++++++
@@ -482,6 +526,13 @@ Applicants should have a solid understanding of:
482526

483527
- **Python** and **Django**.
484528
- **WebSockets**.
529+
- Experience with `OpenWISP Controller
530+
<https://github.com/openwisp/openwisp-controller>`__ is essential.
531+
Experience with `django-x509
532+
<https://github.com/openwisp/django-x509>`__ `netjsonconfig
533+
<https://github.com/openwisp/netjsonconfig>`__ is considered as a strong
534+
favorable point. Contributions in these repositories are considered
535+
strong evidence of the required proficiency.
485536
- At least one of the supported VPN technologies (**OpenVPN, WireGuard,
486537
WireGuard over VXLAN, ZeroTier**).
487538
- **System administration and Linux packaging** (preferred but not
@@ -493,11 +544,30 @@ Expected Outcomes
493544
- A Python-based VPN synchronization tool.
494545
- A command-line setup utility for easy first-time configuration.
495546
- WebSocket-based synchronization between VPN servers and OpenWISP.
496-
- Automated packaging for major Linux distributions.
547+
- Automated packaging for major Linux distributions (**DEB** and **RPM**).
548+
- **Docker support** for running the VPN deployer as a containerized
549+
service, including integration with docker-openwisp.
497550
- Structured logging with proper log rotation.
498-
- Enhancements to **OpenWISP Controller** to support WebSocket-based
499-
synchronization and any required REST API modifications.
500-
- Automated tests to ensure reliability and stability.
551+
- Enhancements to **OpenWISP Controller**:
552+
553+
- Support for WebSocket-based synchronization.
554+
- Automatic inclusion of **Certificate Revocation List (CRL)** in
555+
OpenVPN server configurations with variable-based CRL content.
556+
- WebSocket notifications triggered when certificates are revoked.
557+
- Any required REST API modifications.
558+
559+
- Automated tests to ensure reliability and stability:
560+
561+
- **Unit tests** with mocks for both openwisp-controller and VPN server
562+
interactions to enable fast development and testing of individual
563+
components.
564+
- **Integration tests** using real openwisp-controller and VPN server
565+
instances to test core functionality: installation, configuration
566+
synchronization, and basic VPN server health checks. While initially
567+
minimal, these provide reliability and establish a foundation for
568+
expanded integration testing as the project matures and sees wider
569+
adoption.
570+
501571
- Comprehensive **documentation**, including setup guides and best
502572
practices.
503573
- A **short tutorial video** demonstrating installation and usage.

0 commit comments

Comments
 (0)