dimkinthepro / wireguard-bundle
Wireguard bundle for Symfony
Installs: 8
Dependents: 0
Suggesters: 0
Security: 0
Stars: 1
Watchers: 1
Forks: 0
Open Issues: 0
Type:symfony-bundle
Requires
- php: >=8.2
- ext-mbstring: *
- chillerlan/php-qrcode: ^4.3
- symfony/dotenv: ^6.3
- symfony/framework-bundle: ^6.3
- symfony/twig-bundle: ^6.3
- symfony/yaml: 6.3.*
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.26
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^10.3
- squizlabs/php_codesniffer: dev-master
This package is auto-updated.
Last update: 2025-03-12 09:59:21 UTC
README
1. Create wireguard bundle configuration:
# config/packages/dimkinthepro_wireguard.yaml dimkinthepro_wireguard: wg_interface: 'wg0' server_interface: 'eth0' # External interface of the server server_external_ip: '93.88.75.12' # External IP of the server server_internal_ip: '10.0.0.1/8' # Will be used for wireguard users peer_allowed_ips: '0.0.0.0/0' # Can be separated by comma: '192.168.1.0/24, 192.168.2.0/24' dns: '8.8.8.8,8.8.4.4' port: '51999'
2. Installation:
composer require dimkinthepro/wireguard-bundle
3. Check bundles config:
# config/bundles.php return [ #... Dimkinthepro\Wireguard\DimkintheproWireguardBundle::class => ['all' => true], ];
4. Grand access to wireguard config for php
chown "www-data:www-data" /etc/wireguard
5. Grand access for php
echo 'www-data ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers
6. Usage example
# src/Infrastructure/Service/VpnService.php <?php declare(strict_types=1); namespace App\Infrastructure\Service; use Dimkinthepro\Wireguard\Application\PeerManager; use Dimkinthepro\Wireguard\Application\QrCodeGenerator; use Dimkinthepro\Wireguard\Application\VpnConfigMaker; use Dimkinthepro\Wireguard\Application\VpnManager; use Dimkinthepro\Wireguard\Domain\Entity\Peer; class VpnService { public function __construct( private readonly VpnManager $vpnManager, private readonly PeerManager $peerManager, private readonly VpnConfigMaker $vpnConfigMaker, private readonly QrCodeGenerator $qrCodeGenerator, ) { } public function createPeer(): Peer { $peer = new Peer(); $peer->setId(1); $this->peerManager->setupKeyPairs($peer); $this->peerManager->setupIp($peer); return $peer; } public function upServer(Peer $peer): void { $config = $this->vpnConfigMaker->makeServerConfig($peer); $this->vpnManager->applyConfig($config); $this->vpnManager->up(); } public function getQrCode(Peer $peer): string { $peerConfig = $this->vpnConfigMaker->makePeerConfig($peer); return $this->qrCodeGenerator->getQrCodeImage($peerConfig); } }