SaaS Reachability Test Guide
A reference for the desktest.net SaaS Reachability Test. It answers one question for each cloud app: can this workstation reach it, and if not, is the fault your network or the vendor? For every service it runs the same host check twice - once from this browser, once from an independent Cloudflare edge - and compares the two. Use it to triage "Outlook is down" or "myHub won't load" tickets before you escalate to the wrong team.
Open the SaaS Reachability Test ->
What does the SaaS Reachability Test check?
The tool does not log you in and it does not measure speed. It checks whether the hosts your cloud apps live on will answer a network connection from this workstation, and it cross-checks that answer against a vantage point outside your network. Five services are covered today:
- Microsoft 365 (Outlook on the web). Two hosts:
outlook.office365.com(the mailbox) andlogin.microsoftonline.com(sign-in). Both must be reachable for M365 login to complete, so the step only passes when both answer. - Google Workspace. One host:
accounts.google.com(Google and Workspace sign-in). - Zoom. One host:
zoom.us. - Slack. One host:
slack.com. - SiteLink myHub. One host:
myhub.sitelink.com.
For each host the test does two things at once:
- Client reachability. A passive no-cors
fetch()from this browser to the host. It resolves on a successful TCP and TLS handshake (the host answered from here) and rejects on a DNS, firewall, or TLS failure. The response is opaque, so the status code is not readable - resolution alone is treated as "the host answered." - Edge reachability. A small GET to
edge.desktest.net/reach?target=<key>, a Cloudflare Worker that lives off your network. It reports, in readable JSON, whether the Cloudflare edge can reach the same host:{ ok, target, reachable, status, ms }.
Comparing the two is the whole point. One check alone can only tell you "it worked" or "it didn't." Two checks from two different networks tell you where it didn't work.
The targets, one by one
Microsoft 365 (Outlook on the web)
Microsoft 365 sign-in is a two-host handshake. The browser first talks to login.microsoftonline.com to authenticate, then to outlook.office365.com to open the mailbox. If a proxy allowlist covers one host but not the other, users see a half-broken experience: the login page loads but the mailbox spins forever, or the reverse. That is why this step checks both hosts and only reports the service reachable when both answer from this browser.
outlook.office365.com- Outlook on the web / the mailbox. Edge keym365.login.microsoftonline.com- Microsoft Entra ID / Azure AD sign-in. Edge keymslogin.
Both hosts sit behind Microsoft's global front end and are almost never down at the same time, so a genuine "both unreachable from the edge too" result usually means a regional Microsoft incident rather than a full outage. Check the tenant's service health before you assume the worst.
Google Workspace
accounts.google.com is the sign-in host for Google and Google Workspace (Gmail, Drive, Docs). If a proxy or content filter blocks it, users cannot sign in to any Google service, so it is the single most useful Google host to probe. Edge key google.
Zoom
zoom.us is Zoom's main host; a GET to the root typically redirects to www.zoom.us, which the client check does not follow (an opaque redirect already proves the host answered). Unreachable from the browser but fine from the edge usually means a meeting-blocking web filter on this network. Edge key zoom.
Slack
slack.com is Slack's front door and sign-in host. Slack also opens WebSocket connections to *.slack.com subdomains once you are in a workspace; this test only confirms the main host is reachable, which is the usual failure point on a filtered network. Edge key slack.
SiteLink myHub
myhub.sitelink.com is the Storable / SiteLink self-storage management front end. A GET to its root typically issues a cross-origin redirect toward myhub.smdservers.net; the client check uses redirect: 'manual' so that redirect is not followed (following it would need the redirect target in this page's connect-src). An opaque-redirect response still resolves, which already proves the host answered. Edge key sitelink.
If you want an end-to-end SiteLink readiness check - browser support matrix, cookies, popups, and a guided login confirmation - use the dedicated SiteLink Readiness Check. This SaaS test is the narrower "is myHub reachable, and whose fault is it?" slice.
The "is it me or them?" logic
Each host produces a pair of answers: did this browser reach it, and did the Cloudflare edge reach it? The four combinations map to four conclusions:
| This browser | Cloudflare edge | Conclusion | Who fixes it |
|---|---|---|---|
| Reached | Reached | Reachable, all good. The service is up and this network is not blocking it. | Nobody - it works. |
| Could not reach | Reached | Your network, proxy, or firewall is blocking it - not the vendor. | You / your network admin (local fix). |
| Could not reach | Could not reach | The service is unreachable from the public internet right now - likely a vendor outage or maintenance. | The vendor. Wait it out. |
| Reached | Could not reach | Unusual. Usually a transient edge hiccup; trust the successful in-browser reach. | Nobody - noted for context. |
The middle two rows are the ones that save a ticket from going to the wrong team. "Could not reach here, but the edge reached it fine" means the outage is inside your walls: a firewall rule, a web filter category, or a TLS-intercepting proxy that does not recognise the destination. "Could not reach here, and the edge could not either" means the problem is out on the internet and no change on the workstation will help.
For Microsoft 365 the two hosts are combined: if either host is blocked locally the whole service is flagged as a local block; if either is unreachable from the edge too it is flagged as a likely vendor outage. When the two hosts disagree - one blocked locally, one down at the vendor - the step reports the mixed result and shows both fixes, labelling each host.
Reading the results
Each service renders a row with a status badge: Pending (grey), Running (yellow), Pass (green), Warn (yellow), or Fail (red). Expand a row to see the two subcheck lines per host - one for this browser, one for the Cloudflare edge - each with its round-trip time in milliseconds, plus a plain-language note explaining who is at fault.
The verdict panel at the top summarises the whole run with a likely cause and a recommended next step. When a service fails, it names whether the block is local or vendor-side so you know which team to hand it to. A failing verdict also offers a fix checklist under the failing row: the local-block fix (allowlist the host through your firewall/proxy) or the outbound-DNS/UDP fix (resolver, VPN, and UDP 443 checks).
Copy Diagnostic Report copies a plain-text report: timestamps, user agent, and for every host the client result, the edge result, and the second-opinion conclusion. Paste it into a ticket or an email to your network team or the vendor's support. Send to your IT opens the same report in a pre-filled email.
For IT admins: proxy and firewall allowlisting
The test page itself has to load through whatever proxy sits between the user and the internet. If the page will not load at all, allow desktest.net through the edge first. The page has no third-party scripts, analytics, or CDN fonts, so there is nothing else to allowlist for it to render.
The diagnostic contacts these hosts. On a strict allowlist egress, the vendor hosts must be reachable for a clean pass, and edge.desktest.net must be reachable for the second opinion to work:
| Host | Port / scheme | Why |
|---|---|---|
outlook.office365.com | 443 / https | Microsoft 365 mailbox (Outlook on the web). |
login.microsoftonline.com | 443 / https | Microsoft 365 / Entra ID sign-in. |
myhub.sitelink.com | 443 / https | SiteLink myHub front end. |
edge.desktest.net | 443 / https | desktest.net's own Cloudflare Worker (the edge second opinion). Stores nothing. |
Microsoft 365
Microsoft publishes its full endpoint list at the Office 365 IP Address and URL web service (the "Microsoft 365 endpoints" documentation). For the two hosts this tool checks, the practical rules are:
- Allow
*.office365.comand*.microsoftonline.com(or at minimum the two exact hosts above) outbound on TCP 443. These are in Microsoft's "Optimize" and "Allow" categories and should never be sent through a TLS-decrypting proxy. - Do not TLS-intercept the Optimize endpoints. Microsoft explicitly asks that Outlook and authentication traffic bypass SSL inspection; decryption there causes exactly the "reaches the login page but the mailbox stalls" symptom.
- Microsoft 365 favours a large pool of IPs and HTTP/2 / HTTP/3. If your firewall pins destinations by IP, keep the ranges in sync with Microsoft's published list rather than hard-coding addresses.
- On Zscaler / Netskope, the Microsoft 365 hosts are usually in the default one-click bypass; confirm that bypass is enabled for the segment the workstation is on.
SiteLink myHub
- Allow
myhub.sitelink.com,www.sitelink.com, and*.smdservers.netoutbound on TCP 443. myHub redirects into thesmdservers.netback end, so allowlisting only the front-end host will leave users stuck after the first redirect. - If a TLS-intercepting proxy is re-signing certificates, add a decryption exception for the SiteLink hosts, or import the proxy CA so the browser trusts the re-signed chain. A certificate on the myHub tab issued by your corporate CA rather than by Storable's / DigiCert's CA is the tell that interception is happening.
- Confirm the workstation clock is correct. TLS rejects certificates when the clock is off by more than a few minutes, which reads as "cannot reach SiteLink" even though the network path is open.
General
- DNS must resolve these hostnames. If
nslookup outlook.office365.comfails on the workstation, fix the resolver first - nothing else can start. - A half-up VPN (AnyConnect, GlobalProtect, Zscaler ZIA tunnel) commonly breaks egress while the routing table still claims the link is up. Re-test after a full disconnect / reconnect.
- To test a specific network segment, open this page from a workstation in that segment. The per-host detail shows exactly which hosts that segment's egress allows.
Behind the scenes
The client check uses fetch() with mode: 'no-cors', cache: 'no-store', credentials: 'omit', and redirect: 'manual', wrapped in an AbortController with an 8 second timeout. No-cors gives back an opaque response: JavaScript cannot read the status, headers, or body, but the promise still resolves on a successful TCP and TLS handshake. Resolution is treated as "the host answered." No cookies or credentials are attached, so the vendor sees only an anonymous connection - the same handshake that opening the login page would make, minus the sign-in.
The edge check is a GET to edge.desktest.net/reach?target=<key> where the key is one of the allowlisted values (m365, mslogin, sitelink). The Worker performs its own server-side reachability test to the mapped host and returns readable JSON. Because the Worker sends access-control-allow-origin: *, the browser can read that JSON directly. The Worker keeps no logs of who asked; it is a stateless reflector.
No business data leaves the browser. There is no telemetry to desktest.net, no analytics beacon, and the only values sent are the fixed target keys to the edge and an anonymous opaque GET to each vendor host. View the page source to confirm the target list.
Related
- SaaS Reachability Test - the diagnostic itself
- SiteLink Readiness Check - full myHub readiness with a guided login confirmation
- Network Test - general browser egress, DNS, and WebSocket reachability
- Proxy Test - detect a corporate proxy or TLS-inspection in the path
- About desktest.net
- desktest.net home
Elsewhere on the web:
- Microsoft 365 service health - Microsoft's own status board for the tenant (sign-in required for the admin view).
- Microsoft 365 URLs and IP address ranges - the authoritative endpoint and allowlist reference for firewalls and proxies.