For your security & risk team. What BareMetalRT does — and provably does not do — on the network when run in air-gap mode, and how to verify it yourself. BMRT_AIRGAP Off by default
With BMRT_AIRGAP=1 set in the daemon's environment, BareMetalRT makes
zero unsolicited outbound internet connections. It does not phone home, check for
updates, send telemetry, or contact any vendor service. Inference, your data, your prompts, and your
documents never leave the machine. The only network traffic the product originates is to endpoints
you explicitly configure (your own fleet nodes on your LAN, or a connector you turn on).
The product's only autonomous outbound internet path is the in-app updater. Air-gap mode closes every part of it:
| Behavior (default install) | Endpoint | With BMRT_AIRGAP=1 |
|---|---|---|
| Update check at boot + every 6 h | api.github.com | Thread never starts |
| On-demand "check for updates" | api.github.com | Served from cache; no request |
| Download & apply an update | GitHub release asset | Refused |
| Restart-time source pull (dev installs) | git pull | Skipped |
For completeness, here is every other place the daemon can open a socket, and why none of it is an unsolicited call home:
Don't take our word for it. The guarantee is observable from outside the process. Any of these is sufficient evidence for an accreditation package:
Deploy on a host or VLAN with all outbound internet denied at the firewall, allowing only your own LAN ranges. BareMetalRT runs normally; there is nothing to allow-list. This is the deployment an air-gapped site uses anyway, and the firewall logs are your proof.
Capture for the daemon's full lifetime (boot, idle, and a few inferences) and confirm no traffic leaves your network. On the host:
:: Set air-gap mode and (re)start the daemon, then capture. set BMRT_AIRGAP=1 :: Windows: log all egress that is NOT to private ranges. :: (Run a packet capture — e.g. Wireshark/pktmon — with a display filter:) :: ip.dst != 10.0.0.0/8 and ip.dst != 172.16.0.0/12 and ip.dst != 192.168.0.0/16 :: and ip.dst != 127.0.0.0/8 :: Expected result over the full session: zero packets.
Watch the daemon's established connections during a boot + 6 hour window (longer than the default update interval) and confirm none are to a public address:
:: Windows — established remote endpoints for the daemon process: netstat -ano | findstr ESTABLISHED :: Cross-reference the PID with baremetalrt.exe (tasklist). :: With BMRT_AIRGAP=1: only LAN/loopback peers, never a public IP.
BMRT_AIRGAP: you'll see one outbound TLS connection to
api.github.com shortly after boot (the update check). Set the flag and it disappears. That
single, consent-gated, signature-pinned call is the entire difference.Updates are applied the way air-gapped sites always apply them — deliberately, by an operator, on your schedule:
BareMetalRT-<version>-Setup.exe) through your normal
media-transfer process.Air-gap mode governs the daemon's autonomous outbound behavior. It does not, and is not intended to, block traffic that an operator or user explicitly initiates (enabling an internet connector, configuring a remote audit collector, joining nodes across a routed network). Enforce those with your network controls as usual. The product's role is to add no egress of its own.
Questions from a security review? This page pairs with the SSO / Identity architecture doc. Both features are off by default.