Paid 24 h
Customer balances
Open support
Jobs failed
Needs attention
Dedicated to deliver Payouts queued Reseller applications Open abuse reports Failed jobsFleet
Integrations
No mailboxes yet
Add one in the Password vault with the category Mail (IMAP and SMTP server, login and password), for example abuse@. It shows up here for staff with the support role and up.
Open the vaultNo dedicated servers waiting.
serveroffer.lt account
Balance
Monthly cost
Synced
Set the serveroffer.lt username and password in Settings, Dedicated stock, then press Refresh.
Loading from serveroffer.lt…
- Status
- Processor
- Memory
- Disks
- Extras
- Extra IPs
- Paid until
Locked in Settings, the panel sends no actions to this server.
Reinstall, erases every disk (the rescue images only boot a rescue system)
User password
serveroffer.lt takes one action every few minutes per server, a second one right after is refused as busy. Reboot also powers a stopped server on.
Loading graphs…
No bandwidth graphs returned.
Our servers at serveroffer.lt, read from its client area every 10 minutes. Locked servers (Settings, Dedicated stock) never get actions. A delivered customer server linked to one of these (Dedicated queue, Deliver) follows its power state, and the customer's reboot, stop and start go to serveroffer.lt. Staff get a Telegram alert when a service expires within 3 days and the balance does not cover it.
| Supplier # | Processor | RAM | Disks | Stock | Held | Cost | Our price | Margin | Shown |
|---|---|---|---|---|---|---|---|---|---|
| aapi('PATCH', '/stock/' + o.id, { hidden: $event.target.checked ? 0 : 1 }), $event.target.checked ? 'Shown' : 'Hidden')" class="size-4"> |
Vilnius dedicated servers are resold from the serveroffer.lt stock feed (every 5 minutes, and again right before each order). Our price is the supplier price plus the markup in Settings, rounded up to x.99. Held means sold by us and not delivered yet, so it is not offered again. Untick Shown to stop selling one model.
| Account | Services | Monthly | Deposited | Balance | Next expiry | Tickets | Last active | Status |
|---|---|---|---|---|---|---|---|---|
- |
- |
resellersub-account2FA |
No accounts match.
Opens the client panel in a new tab as this customer for up to 2 hours. Security settings stay locked, it is written to the audit log, and the customer sees it in their session list.
| Service | Type | Details | Status | Expires | |
|---|---|---|---|---|---|
| No services. | |||||
| Invoice | Item | Amount | Status |
|---|---|---|---|
| Payment | Coin | Amount | Credited | Status |
|---|---|---|---|---|
| No crypto payments. | ||||
| Thread | Status | Updated |
|---|---|---|
The customer sees every change in their activity log. The site password stays theirs.
Live metrics
CPU
Memory
Download
Upload
Disk
Memory on Windows reads close to 100% here. Windows takes its RAM at boot and uses the free part as cache; Task Manager inside Windows shows what your programs use.
CPU, live
A reading every 3 seconds, last 3 minutes
Network, live
A reading every 3 seconds, last 3 minutes
History
Loading samples
CPU
Memory
Network
Disk
Traffic
Counted every 2 minutes, in UTC days. Download is what reaches the server, upload what it sends.
This month
Last month
All time
Credentials
user
password
root (su, sudo)
rescue system
| Invoice | Date | Item | Amount | Status |
|---|---|---|---|---|
| No invoices for this service yet. | ||||
Customers type the code when they order a VPS, a dedicated server, web hosting or a domain. Automatic ones apply without a code (the biggest discount wins) and show on the public site. Domain transfers never get promos.
No promo codes yet
Create one for an opening offer, a season or a single customer.
automaticnew customers
used
off at order
Fixed costs per month
Active recurring, quarterly and yearly spread per month
Paid out this month
Customer top-ups this month
Crypto payments credited
Result
Top-ups minus expenses paid
Due in the next 14 days
| Expense | Category | Amount | Cycle | Next due | Last paid | Status | |
|---|---|---|---|---|---|---|---|
No expenses yet.
| Date | Expense | Amount | Method | Note | By | |
|---|---|---|---|---|---|---|
Nothing paid this month.
Env file only
These are read before the database opens, so they stay in the env file. A value in the server environment always wins over this page.
Deleted |
No traffic counted for this period yet.
Loading
Who uses what right now, across every cluster. Network and disk are speeds since the last refresh (every 5 seconds), CPU is the share of the VM's own vCPUs.
Nothing matches.
Reading the clusters
Nameservers
Each public nameserver is asked for the SOA of every zone and compared with the primary.
Primary (hidden)
| Zone | Owner | Kind | Records | DNSSEC | Delegated | On our servers |
|---|---|---|---|---|---|---|
| Bulletproof.to | Custom NS | YesNot yet- |
No zones match.
How our DNS is built, and adding a nameserver
The panel writes every change to a hidden primary (PowerDNS, not listed anywhere public). The public nameservers are copies that follow it on their own through a catalog zone, so a zone added or deleted here appears or disappears on all of them within seconds. Customer zones are kept in our database and pushed by the job dns.sync, never edit them on the servers by hand. Our own zones (the one holding the nameserver names, reverse zones) are edited here record by record.
- Order an Ubuntu 24.04 VPS at a provider and in a country we do not use yet, with our DNS SSH key.
- Run docs/dns/repo.sh and docs/dns/secondary.sh on it, then add its IP to SECONDARIES in docs/dns/primary.sh and run that on the primary.
- Open the zone holding the nameserver names below and add an A record for the new name (for example ns3).
- At the registrar of that domain add a child nameserver (glue) with the same name and IP.
- Put the name in Settings, DNS, Nameserver 3, then press Push every zone. Reverse zones registered at RIPE need the new nserver added to their domain object too.
Where it is served
| Nameserver | Answer | Serial |
|---|---|---|
| primary | Source |
DS records for the registrar
Records
Kept in our database, the customer sees every change in their activity log. The apex NS and SOA are added by the system.
| Type | Name | Value | TTL | |
|---|---|---|---|---|
No records yet.
| Type | Name | Values | TTL | |
|---|---|---|---|---|
One reverse zone per /24. A PTR is only visible on the internet once whoever holds the range (the RIR or the provider) delegates the zone to our nameservers. Open a subnet for its addresses and the exact steps.
| Subnet | Reverse zone | Where | Addresses | PTRs | On our servers | Delegated to us |
|---|---|---|---|---|---|---|
| YesNo | Yes |
No subnets yet. Add an IP pool in Clusters, or Add subnet here.
Who holds this range
The RIPE database did not answer, try again later.
Not in the RIPE database, so it is outside Europe and the Middle East (ARIN, APNIC, AFRINIC or LACNIC). Ask the provider that gave us the range to delegate the zone, or to set the PTRs for us.
Steps to get the delegation
- The zone exists on our servers (it does once this page lists it under On our servers, Add subnet creates it). RIPE tests it before accepting anything, so it must answer on every nameserver first.
- If we are the LIR, or the holder gave our maintainer in mnt-domains, log in at apps.db.ripe.net, Create an object, type domain, paste the object below with our own handles and maintainer, and submit. RIPE checks every nserver right away and refuses the object if one does not answer for the zone.
- If someone else holds the range (Maintained by above is not us, as with a range rented from a LIR), send them the object below and ask them to create it, or to add our maintainer to mnt-domains of the inetnum so we can do it ourselves.
- Wait a few minutes, then reload this page. Delegated to us turns green on the subnet list once the public DNS follows. PTRs set before that start working by themselves.
- When a nameserver is added or removed later, the domain object has to list the same set (update its nserver lines).
The handles (ADMIN-HANDLE, TECH-HANDLE) are person or role objects of ours in RIPE, MNT-OURS is our maintainer. For the holder a short message is enough, asking them to create a reverse DNS domain object for this range with these nservers, or to add our maintainer to mnt-domains of the inetnum.
VPS for our own use, created and managed only here. They belong to no customer, have no price or expiry and are never suspended or deleted on their own. They take their IPv4 from the same pools and run on the same clusters as customer VPS.
| Name | Status | IPv4 | System | Size | Where | Note | |
|---|---|---|---|---|---|---|---|
No staff VPS yet. Create one, or open a cluster and use Make staff VPS on a VM that already exists.
Storage
| Storage | Node | Content | Used |
|---|---|---|---|
Network security
Every new VPS gets, per VM, the Proxmox firewall on its network card, an IP filter (it can only send from its own IPv4, its ARP replies included, so it cannot take over a neighbour's address), a MAC filter, no DHCP or router advertisements, and the rate limit of its plan. Traffic itself is not filtered. Use the button for VMs made before this was in place, or after changing anything by hand.
Thin provisioning
New VPS are cloned thin, qcow2 on directory storage and as they are on LVM-thin, ZFS or Ceph, with discard on so space the guest frees goes back. A storage that is not thin (thick LVM, preallocated files) makes the panel refuse new VPS.
| VM | Owner | Disk | Format | Size | Really used | Thin |
|---|---|---|---|---|---|---|
| thin |
VMs and containers
Guests the panel did not create are never deleted from here. Staff can start, stop, reboot and open the console, move a guest to another node, protect them, or give a VM to a customer account. The VM this web server runs on and protected guests get no actions.
Nothing here.
Loading the cluster
Switch them to live in Settings once the clusters are ready, the fake drivers only simulate.
Proxmox clusters
Add each Proxmox cluster once, with the address of any of its nodes. Every new VPS goes to the online node with the lowest RAM use, across all enabled clusters of its location that have the image.
IPv4 pools
| Subnet | Location | Gateway | Bridge / VLAN | Free / used / total | |
|---|---|---|---|---|---|
Before an address goes to a new VPS the panel checks that nothing answers on it (this web server, ARP on its own network, common open ports). Addresses that answer are set aside here and staff get an alert.
Set aside
Plesk servers (web hosting)
No Plesk server yet. Hosting orders stay closed while the driver is live and no server is enabled.
| TLD | Enabled | Cost reg / renew (USD) | Own markup | Price | Renew | Transfer | Synced |
|---|---|---|---|---|---|---|---|
With REGISTRAR=nicenic, prices are recomputed every 5 minutes from the NiceNIC cost plus the markup in Settings (percent or a fixed euro amount), rounded to the nearest x.90 and never below cost. Own markup overrides it for one TLD, in the same unit as the markup type. Manual prices are overwritten at the next sync. Premium names and names above the highest registry cost are never sold.
A job fails after 6 attempts and staff get an alert. Retry runs it again from the start, Dismiss marks it as seen when it does not need to run any more.
| # | Type | Payload | Attempts | Run at | Error | |
|---|---|---|---|---|---|---|
Domain abuse cases from NiceNIC are imported hourly when REGISTRAR=nicenic.
| Username | Support name | Role | TOTP | Telegram user id | Last login | |
|---|---|---|---|---|---|---|
| aapi('PATCH', '/staff/' + s.id, { handle: $event.target.value }), 'Name saved')"> | aapi('PATCH', '/staff/' + s.id, { tgUser: $event.target.value }), 'Saved')"> |
| When | Staff | Action | Target | Details |
|---|---|---|---|---|