Skip to main content

How to Monitor Private Networks Without Opening Inbound Ports

GuideWritten by oncall.fyi editorialPublication approved by Burak YApproval recorded 11 September 2026
Sources and verification
Source dates
Oldest source check: 10 September 2026.
Technical verification
Separate technical verification has not been recorded.

Publication approval and technical verification are recorded separately. Automated link checks establish reachability, not accuracy. A checked example verifies only its stated test cases, not the whole article or your production setup.

In short

Run a small checker inside the private network and let it send an outbound heartbeat to an independent receiver only after a local service check passes. Give each important service its own identity and deadline. Test the service, checker and internet connection independently. This observes local health without inbound port forwarding, but cannot by itself tell the receiver why reports stopped.

Key takeaways

  • Check the actual device or service before reporting success.
  • Use per-service identities so one sender cannot conceal another failure.
  • Missing reports indicate uncertainty; they do not identify the failed component.

Start from the service you care about

For a camera system, a helper PC being powered on is not enough. Choose a local observation that represents the need: camera health endpoint, NVR status, or age of the newest completed recording. Avoid sending video, personal data or credentials to the heartbeat receiver. It usually needs a check identifier and result, not the recording itself.

The architecture is simple: local service → local checker → outbound HTTPS → outside deadline detector → responder. The receiver does not connect back into the camera network.

Define the checks before the timer

CheckSuccess conditionWhat it cannot prove
Helper hostChecker completed a cycleCameras are recording
NVR APIAuthenticated health responseA recording can be played back
Recording freshnessA completed file belongs to the expected periodEvery frame is usable
Playback sampleA selected sample can be decodedEvery retained recording is valid

Use a low-impact health API where available. Match the check to the problem instead of reading every recording each minute.

Implement the outbound path

On Linux, use a timer or cron job to run the checker. On Windows, use Task Scheduler and a script that exits nonzero on failed validation. In both cases set an execution timeout, a working directory, restricted credentials and a non-overlap rule. Test under the scheduled account, not only your interactive login.

The control flow should be:

text
identify site and service
perform bounded local health check
if local check passed:
    send this service's success heartbeat over HTTPS
    record whether the receiver accepted it
else:
    record the local failure; do not send success

Configure each receiver check before enabling its timer. Healthchecks documents interval, grace and schedule settings (opens in a new tab); other receivers may measure lateness differently. Keep secret check URLs in restricted configuration and verify outbound HTTPS and DNS are available under the scheduled account.

Do not share a heartbeat identifier across customer sites. A success from site A must never reset site B's deadline.

Validate four independent failures

Use a spare device or a maintenance window with the owner present.

  1. Stop the demo camera service while leaving the helper running. The service heartbeat should stop succeeding, while the helper check can remain healthy.
  2. Stop the helper checker. All checks owned by that checker should become late.
  3. Block the helper's outbound access. Local logs should distinguish a valid local check from a failed report; the receiver sees silence.
  4. Restore access. Confirm a new health check occurs before success is sent. Replaying an old success must not mark the current service healthy.

Record the elapsed time to the responder as well as the receiver's state change. Follow the paging test guide if the detector changes state but nobody hears it.

Decide how much uncertainty is acceptable

One helper is a single observation point. If it fails, you may know the site needs investigation but not which devices are healthy. More checkers can improve diagnosis at the cost of maintenance. Start with one clearly documented boundary and add redundancy when the response requirement justifies it.

For sites that intentionally disconnect, use connection windows and freshness states, not a permanently suppressed missing-heartbeat alarm.

Did this help?

Your answer helps us improve this guide. We save only the page and your choice for 30 days.

No name, email, or incident details are requested.

Frequently asked

Do I need to expose my camera to the internet?
No. The checker makes outbound requests after local validation. No inbound camera port is required for this pattern.
Can I run the checker on Windows?
Yes, using a scheduled script with explicit failure exits and timeouts. Verify its permissions and network access under the account that Task Scheduler actually uses.

Sources

Vendor facts change. Each source below shows the date this page last checked it.

  1. Configuring checks Healthchecks. Checked 10 September 2026.
  2. Monitoring cron jobs Healthchecks. Checked 10 September 2026.

Related

One practical idea, occasionally

The On-Call Brief: short field notes, templates, and operational lessons.

Follow the field guide

Email subscriptions are not open yet. Read new guides in your feed reader — no email address needed.

Subscribe with RSS