@@ -413,33 +413,61 @@ Key Features
413413The 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
478522Prerequisites 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