Heard back from Zenarmor after the 2.7.2 update... "this got pushed to 2.7.3 because of the urgent fixes in 2.7.2"
This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.
Show posts Menu19:16:12 heartbeat: not due last_sent=15:18:06 next_in=1m53s
20:16:12 -> collected (took 3m29s)
Because each collection finishes ~3.5 minutes after its check starts, the 4-hour mark always falls just after an hourly check, so it runs every 5th hour. The agent does the same thing with checks every 4 hours, so the two coincide every 20 hours.16:19:53.214 heartbeat: collected took=3m40.688s
16:19:53.214 heartbeat: collected triggered_by=agent took=3m35.185s
So the agent's request appears to join the collection already in progress. Only one 30-day aggregation runs, CPU stays around 55-60%, and there were no alerts.2026-10-25T22:51:54 heartbeat: collected took=405ms
2026-10-26T02:51:54 heartbeat: collected took=354ms
2026-10-26T06:51:54 heartbeat: collected took=416ms
# ipdrstreamer's own scheduler, every 5h from its start (22:14:38 on Oct 26)
2026-10-28T23:18:10 heartbeat: collected took=3m32.228s
2026-10-29T04:18:02 heartbeat: collected took=3m24.436s
2026-10-29T09:18:05 heartbeat: collected took=3m26.881s
2026-10-29T14:19:27 heartbeat: collected took=4m49.409s
# agent-triggered (cli.log), fired only 4 times since the upgrade
2026-10-27T02:19:07 heartbeat: collected triggered_by=agent took=3m59.286s
2026-10-27T22:19:34 heartbeat: collected triggered_by=agent took=4m26.416s
2026-10-28T18:20:01 heartbeat: collected triggered_by=agent took=4m53.923s
2026-10-29T14:19:55 heartbeat: collected triggered_by=agent took=4m47.296s
curl -s -X POST 'https://api.mullvad.net/auth/v1/token' \
-H 'Content-Type: application/json' \
-d '{"account_number": "YOUR_ACCOUNT_NUMBER"}'
curl -s -X POST 'https://api.mullvad.net/accounts/v1/devices' \
-H "Authorization: Bearer <token from above>" \
-H 'Content-Type: application/json' \
-d '{"pubkey":"<your public key>","hijack_dns":false}'#!/usr/local/bin/php
<?php
require_once 'config.inc';
require_once 'interfaces.inc';
require_once 'util.inc';
require_once 'plugins.inc.d/dpinger.inc';
$gwname = 'YOUR_GATEWAY_NAME';
$groupname = 'YOUR_GATEWAY_GROUP_NAME';
$gateways_status = dpinger_status();
if (empty($gateways_status[$gwname])) {
echo "Gateway {$gwname} status could not be determined." . PHP_EOL;
exit(1);
}
$status = $gateways_status[$gwname]['status'];
$delay = $gateways_status[$gwname]['delay'];
$loss = $gateways_status[$gwname]['loss'];
if (stristr($status, 'down') !== false) {
echo "MONITOR: {$gwname} is down, removing from routing group {$groupname}." . PHP_EOL;
exit(1);
}
echo "MONITOR: {$gwname} is up (delay {$delay}, loss {$loss}), rejoining routing group {$groupname}." . PHP_EOL;
exit(0);
Primary (existing) ......... 10.2.0.2/32
Second tunnel (new) ........ 10.4.0.2/32
Public/Private Key .... from the new config
Listen Port ............ any unused port
Addresses ............... 10.4.0.2/32 (edited, NOT the file's original 10.2.0.2/32)
MTU ..................... match your primary (commonly 1420)
DNS Server .............. file also shows a shared 10.2.0.1 - edit this too,
following the same pattern (10.4.0.1). Note: ProtonVPN
only confirmed the Address field is shared-by-design;
I haven't gotten separate confirmation the DNS Server
field behaves the same way. If DNS fails over the new
tunnel, fall back to testing the original literal value.
Disable Routes .......... checked - leave routing entirely to the System
Gateway object, don't let the WireGuard instance
push its own routes
Gateway ................. LEAVE BLANK FOR NOW
Interface ........... the interface assigned in Part 3
IP Address ........... EXACTLY the Gateway field value from Part 2
Far Gateway ........... checked
Monitor IP ............ anything distinct from your primary tunnel's
monitor IP, for easy at-a-glance distinction
Disable Host Route .... unchecked
route get <monitor IP>Should resolve via the new tunnel interface.tcpdump -ni <new interface> icmpConfirm real ICMP traffic while pinging the monitor IP from the firewall.<new tunnel's real address> > <monitor IP>: ICMP echo request
<monitor IP> > 10.2.0.2: ICMP echo reply
Interface ........ your new tunnel's interface - CRITICAL: must not be
your primary tunnel's interface
Type .............. BINAT
External network .. 10.2.0.2/32
Source ............ Single host or Network â†' your tunnel's real edited
address (e.g. 10.4.0.2/32)
Destination ....... any
Interface ............. your new tunnel's interface
Source ................ LAN network
Destination ........... any
Translate Source IP ... Single host or Network â†' 10.2.0.2 (literal) -
do NOT use "Interface address", which would
translate to your synthetic edited address,
which ProtonVPN doesn't recognize as a
registered device; traffic would go out and
get silently dropped
pluginctl -s dpinger restartThe new gateway should now show status => none with real non-zero delay/stddev and 0.0% loss.Interface ................. any
Direction .................. In
Action ...................... Pass
Source ....................... new tunnel's interface address alias
Destination ................... new tunnel's interface network alias
Gateway (Source Routing) ...... your new System Gateway
Gateway Priority ... primary â†' Tier 1, new tunnel â†' Tier 2
Trigger Level ....... Member Down to start (tighten to packet-loss/
latency thresholds later once you trust it)