[Unit] Description=Nostr VPN - Mesh VPN with Nostr identity After=network-online.target tor.service archipelago.service Wants=network-online.target [Service] Type=simple User=root EnvironmentFile=-/var/lib/archipelago/nostr-vpn/env ExecStartPre=/bin/bash -c 'test -f /var/lib/archipelago/nostr-vpn/env || { echo "NostrVPN not configured — waiting for onboarding"; exit 1; }' ExecStart=/usr/local/bin/nvpn daemon Restart=on-failure RestartSec=10 TimeoutStartSec=30 TimeoutStopSec=10 # Networking capabilities (required for TUN/WireGuard) AmbientCapabilities=CAP_NET_ADMIN CAP_NET_RAW CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_RAW CAP_NET_BIND_SERVICE # Security hardening NoNewPrivileges=yes ProtectSystem=strict ReadWritePaths=/var/lib/archipelago/nostr-vpn /run/nostr-vpn /dev/net/tun ProtectHome=yes PrivateTmp=yes RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6 AF_NETLINK RestrictRealtime=yes # Resource limits MemoryMax=256M TasksMax=64 # Logging StandardOutput=journal StandardError=journal [Install] WantedBy=multi-user.target