---
title: "Satellite internet on a Mac: drops, data caps and CGNAT explained · Kilobat"
url: "https://kilobat.app/satellite-internet"
description: "Starlink, Viasat, HughesNet and other satellite links on a Mac: tell a dish drop from bad Wi-Fi, read latency history, name call freezes, save capped data and spot CGNAT."
---

Satellite internet

# Was it the dish, or the Wi-Fi?

A satellite link fails in its own ways. A second lost to a tree, a ping that never drops below 600 ms, a data allowance gone by the 12th. Kilobat measures your router and the internet from your Mac to help you narrow down the cause.

[Download for Mac ↓](https://kilobat.app/downloads/Kilobat-1.31.1.dmg?via=site)

```
brew install seifip/kilobat/kilobat
```

## Sound familiar?

- “My call freezes for two seconds every few minutes.”
- “The speed test says 150 Mbps. Why does the game lag?”
- “Was that the dish, or the router?”
- “Half my priority data is gone and it’s the 12th.”
- “Why can’t I open a port on Starlink?”

## Seven links, one of them in orbit.

A satellite connection is the usual chain with a very long middle. Kilobat measures what it can reach from your Mac, and on Starlink it reads the dish too.

1. **Your Mac**Other apps uploading, a VPN in the way
2. **Wi-Fi**Signal, noise and a crowded channel
3. **Router**Kilobat pings it, so the Wi-Fi is measured apart
4. **Dish or modem**On Starlink, Kilobat reads the dish’s own status
5. **Satellite**Obstructions, rain, handovers
6. **Ground station**The dish’s ping to it, on Starlink
7. **Internet**Latency, jitter and loss past your router

## What goes wrong on a satellite link.

Satellite links fail differently from cable or fibre. Low-orbit services like Starlink drop for seconds at a time; geostationary ones like Viasat and HughesNet are slow to answer all the time. Both may come with data rules. Some plans also use a shared IPv4 address.

1. ### A call freezes for a second or two, a few times an hour

   Obstructions, weather or other network events can interrupt a connection. A speed test can average over brief drops.

   After each call, a report card names every freeze. On Starlink it checks the dish’s log for a blocked sky, no satellite in view or a restart before it looks at your Wi-Fi. Pro:
2. ### Game ping jumps every 15 seconds on Starlink

   Researchers observed a 15-second reconfiguration cycle at :12, :27, :42 and :57 past each minute. The schedule and its effects may change.

   The stutter test pings every 50 ms for 20 seconds and says when the spikes land on those seconds. Free:
3. ### Ping never drops below 500 ms

   A geostationary orbit, 35,786 km up. On Viasat or HughesNet that’s normal, not a fault.

   Router and internet latency side by side help you distinguish Wi-Fi trouble from delay beyond your router. Game-server ping shows each region’s round trip before you queue. Free:
4. ### The internet is gone for minutes

   The dish, the satellite or the provider, or your own router.

   History logs each outage with whether your router kept answering. On Starlink, the dish’s own log sorts it into your setup, Starlink’s network or a restart. Pro:
5. ### The data allowance runs out before the month does

   Updates, photo sync, backups and video, all assuming unlimited data.

   Live usage for every app is free. Mark the network metered, and updaters wait, Travel holds back the rest and a budget starts over on your billing day. Pro:
6. ### You can’t host a game, open a port or reach home from outside

   CGNAT. Many customers share one public IPv4 address, and nothing outside can open a connection in.

   `kilobat ip --public` shows the address the internet sees, to compare with your router’s. Kilobat doesn’t test for CGNAT itself. Free:
7. ### The VPN is slow or won’t connect

   A VPN adds its own trip. Viasat says VPNs on its service may be slow or not work at all.

   Health shows whether the VPN carries everything, some traffic or nothing. Each speed test records the VPN it went through, so you can compare two tests. Free:
8. ### Slack or Zoom won’t load, everything else does

   An outage at that service, not your dish.

   Kilobat reads the service’s status page and says “down for everyone, not you” only when its page says so. Free:

## How to read a satellite link’s history.

History › Where the delay starts plots two lines: your router and the internet. Kilobat checks about once a minute in the background, and more often while Health is open. Drops of a few seconds fall between those checks; call reports, the stutter test and, on Starlink, the dish’s own log catch them.

1. Both lines low

   ### A healthy low-orbit link.

   Starlink reports a median of 25.7 ms at peak hours across its US customers, as of June 2025. Your Wi-Fi adds a little on top.
2. Internet flat near 600 ms

   ### A healthy geostationary link.

   Health’s tips will call the path past the router slow, since they’re set for land lines. That’s the orbit. Watch for changes from the usual level instead.
3. Internet spikes, router flat

   ### The satellite side.

   Handovers, an obstruction, rain or a busy cell. The delay appears beyond your router, though the checks cannot pinpoint its cause. Run the stutter test to see whether the spikes repeat.
4. Router high or jumpy

   ### Your Wi-Fi.

   Weak signal, a crowded channel or a busy router. Fix this first; it adds to every trip, satellite or not.
5. Outage, router answering

   ### Beyond your home.

   The dish, the satellites or the provider may be involved. Outage credit counts only outages with enough checks to identify the provider side; a responding router alone is not conclusive.

   Pro:
6. Outage, router silent

   ### Your side.

   The router, its power or the Wi-Fi. On Starlink, a dish restart shows in the dish’s own log.

   Pro:

## Your provider, in detail.

Latency, data rules, the router or dish address and the quirks, from each provider’s own pages, with what isn’t documented marked as such.

[**Starlink**Low latency, short drops, CGNAT by default, plans that slow after their data.](https://kilobat.app/satellite-internet/starlink)[**Amazon Leo**Formerly Project Kuiper. Amazon announced an enterprise preview.](https://kilobat.app/satellite-internet/amazon-leo)[**Viasat**About about 600 ms, “typical usage” rules, and gateway details.](https://kilobat.app/satellite-internet/viasat)[**HughesNet**Priority Data, then Standard Data that may slow during congestion.](https://kilobat.app/satellite-internet/hughesnet)[**Eutelsat OneWeb**Low orbit, for business, ships and planes.](https://kilobat.app/satellite-internet/eutelsat-oneweb)

On a plane? In-flight Wi-Fi often runs over the same satellites; see [in-flight Wi-Fi](https://kilobat.app/in-flight-wifi).

Starlink

## On Starlink, Kilobat reads the dish.

The dish keeps a map of the sky and a log of every outage with its cause. Kilobat reads both on your own network, read-only, and turns them into sentences you can act on, such as “Blocked to the north-east, low in the sky, like a tree.”

- Status, ping to Starlink’s ground station and alerts, free.
- Each outage sorted into your setup, Starlink’s network or a dish restart, with Pro.
- On a capped Roam plan, one tap marks the network metered.

[Kilobat for Starlink](https://kilobat.app/starlink) has the rest.

Kilobat’s Starlink panel in Health: ground-station ping 31 ms, 0.4% ping loss, a snow-melt alert, the sky map with 2.1% obstructed, and outages for the last 24 hours split into your setup, Starlink’s network and dish restarts

Calls and games

## A freeze gets a cause.

During a Zoom, Teams, FaceTime or Meet call, Kilobat pings your router and the internet once a second. Two seconds lost in a row, or a ping 200 ms over the call’s usual, counts as a freeze, and each freeze gets a cause. On a satellite link that’s often beyond your router, and the card says so instead of blaming your Wi-Fi.

- The stutter test can show short spikes that a speed test averages away. Timing alone does not establish their cause.
- Game-server ping lists each region’s round trip, jitter and loss.
- After an SSH session that lagged on Starlink, the report suggests Mosh.

A Kilobat call report: Zoom call, 41 minutes, 2 freezes, one when something blocked the Starlink dish’s view of the sky and one on Starlink’s side with no satellite in view

Data caps

## Make the allowance last the month.

Starlink Roam and Priority plans, Viasat Essentials and HughesNet’s Priority Data all run out or slow down. Kilobat shows which app used the data, holds updaters back on metered networks and stops new connections when your budget is spent.

Terminal

```
# Treat the satellite link as metered
$ kilobat networks cost metered
# A 100 GB budget that starts over on the 14th
$ kilobat limit 100 --cycle monthly --reset-day 14
# Which updaters are waiting
$ kilobat updaters
```

Kilobat’s own speed tests use 80 MB at most and skip metered networks unless you start one. Put your provider’s usage figure beside Kilobat’s in History › Compare with your router or provider.

**Budgets that work like your plan.** Start over daily, weekly or on the day it renews, and give any app its own quota, or one just for uploads.

**Your provider says more?** Put their figure beside Kilobat’s for the same period, with the hours Kilobat recorded and the likely reasons for a difference.

## CGNAT, and what it breaks.

Some satellite plans share public IPv4 addresses between customers, behind carrier-grade NAT (CGNAT). Going out works as usual. Coming in doesn’t: nothing on the internet can open a connection to your home over IPv4. That breaks port forwarding, hosting a game lobby or a Minecraft server, and reaching a camera, NAS or Plex at home from outside.

- Starlink uses CGNAT by default, from 100.64.0.0/10, with public IPv4 only on Local and Global Priority plans and your own router. Every Starlink plan has native IPv6.
- For Viasat, HughesNet, Eutelsat OneWeb and Amazon Leo, ask your provider whether your plan has IPv6, a public IPv4 address or CGNAT.

To check, look up your router’s internet (WAN) address and compare it with the one `kilobat ip --public` reports, asked from Cloudflare. If they differ, there may be another layer of NAT, including CGNAT or a VPN. A router WAN address in 100.64.0.0/10 indicates shared address space; ask your provider if you need to confirm CGNAT. Workarounds: IPv6 where both ends have it, a relay such as Tailscale, or a plan with a public address.

## What’s free, and what Pro adds

### Free, for good

- Live upload and download for every app
- Router and internet latency, jitter and loss, now
- The stutter test and game-server ping
- On Starlink: the dish’s status, alerts and sky map
- Marking a network metered; speed tests skip it
- Whether a service is down for everyone
- A report for your provider
- `kilobat health-history`, `starlink`, `ip` and the rest of the CLI

### Pro, $29 once

- History of router and internet latency, with outages
- Call reports that name each freeze’s cause
- On Starlink: outages by side, and which way the dish is blocked
- Travel and paused updaters on metered networks
- Budgets that start over on your billing day
- Outage credit, and the dish’s log in the report on Starlink

Pro is $29 once for two Macs, with a 7-day free trial and 14-day refunds. [Free for students](https://kilobat.app/students).

## Questions

**Does Kilobat work with Viasat, HughesNet or OneWeb?**

Yes, like any connection. It measures your router and the internet from your Mac, records outages and counts data by app. Only Starlink’s dish can be read directly, because it answers on your network the way the Starlink app reads it.

**Why does Kilobat say my internet is slow on Viasat?**

Its tips are set for land lines, where 120 ms is a lot. On a geostationary link, about 600 ms is normal. Look at the history for changes from that level, and at the router line for your Wi-Fi.

**Will Kilobat use my satellite data?**

Very little. Its checks are pings and small requests. Speed tests use 80 MB at most and are skipped on metered networks unless you start one, and the scheduled plan check never runs on a metered network.

**Can Kilobat tell me if I’m behind CGNAT?**

Not by itself. It shows the public address the internet sees, with `kilobat ip --public` or the setting Look up public IP. Compare that with your router’s internet address.

**Why doesn’t the history show a two-second drop?**

Background checks run about once a minute, so the history catches drops of a minute or more. Short drops show in call reports, the stutter test and, on Starlink, the dish’s own outage log.

**Is it free?**

Live usage, latency, the stutter test, game-server ping, the Starlink dish’s status and the whole CLI are free. History, call-freeze causes, Travel and budgets are part of Kilobat Pro, $29 once, with a 7-day free trial.

## Kilobat for…

[**Digital nomads**Café Wi-Fi, hotspots and captive portals, checked in seconds.](https://kilobat.app/digital-nomads)[**Hotspot data**Keep backups and updaters off your phone’s data plan.](https://kilobat.app/save-hotspot-data)[**Video calls**A report card after every call that says why it froze.](https://kilobat.app/video-calls)[**Gamers**Ping to CS2, Fortnite, Apex, Siege and Age of Empires servers, or your match’s, lag spikes named, ping on stream.](https://kilobat.app/gaming)

## See which link failed, and when.

[Download for Mac ↓](https://kilobat.app/downloads/Kilobat-1.31.1.dmg?via=site)

```
brew install seifip/kilobat/kilobat
```
