T Techclick ← All lessons
Zscaler · ZIA · Batch 11 · Lesson 3

ZIA traffic forwarding — five ways in

A ticket says “Zscaler is down.” Chrome still loads. Slack voice dies. Web Insights show Road Warrior for an office that should be Pune-HQ. The policy is fine. The packet never arrived on the path you think it did. This lesson is how production traffic actually reaches a Public Service Edge — and how you prove it.

18 min read · L2 primary · Quiz at end

⚡ Quick Answer

ZIA traffic forwarding lesson: choose among ZCC, PAC, GRE, IPSec, and explicit proxy. Location object, failover, PAC + ZCC runbook, and how to prove traffic hits ZIA. 6-question scored quiz.

After this page you can

Quick answer (say this out loud)

ZIA only inspects what it receives. Roaming managed endpoints → Zscaler Client Connector (Z-Tunnel 2.0 off-trusted). Site LAN (printers, IoT, no agent) → GRE if you have a static public IP and no encrypt mandate, else IPSec IKEv2 (NAT-T / crypto). Browser-only or contractors → hosted PAC. Existing on-prem proxy → explicit proxy / proxy chaining with Use XFF from Client Request. Bind a Location. Fail over. Prove on ip.zscaler.com — if Location is wrong, policy is wrong even when the cloud is up.

Hero · on-ramp to the Service Edge
Laptop and office router sending traffic through a cloud security edge before the internet
Notice: users and the office stay on the left. Policy starts only after the packet hits the cloud edge — not at the ISP.

1. Why forwarding is the ticket

URL Filtering, SSL inspection, and DLP cannot see a request that never arrived. Most “Zscaler is broken” incidents in the first 90 days of a rollout are forwarding incidents wearing a policy costume.

Zscaler’s own guidance is a combination, not a single method: tunnels for sites, Client Connector for laptops, PAC files where you need explicit browser control, and proxy chaining where an existing forward proxy already owns the path. Cloud Connector exists for cloud workloads — it is not one of the five user-path methods in this lesson.

Three words that close the ticket: method (how the packet is steered), Location (how ZIA names the source), proof (My IP Address page + logs).

Known location

Source matches a Location (static IP, VPN credential, or dedicated proxy port). Office policy + Surrogate IP can apply.

Unknown / Road Warrior

Source does not match. Auth is usually required. The user is treated as roaming even if they sat in Pune-HQ.

2. Mental model — three parts only

Pre-train these before you open the Admin Portal.

  1. Forwarding method — ZCC, PAC, GRE, IPSec, or explicit proxy. This is transport. It does not write URL policy.
  2. Location object — the named site ZIA attaches to the session. Fields you will actually click: Name, Country, Time Zone, Static IP Addresses, VPN Credentials, Proxy Ports, and under Gateway Options: Use XFF from Client Request, Enable IP Surrogate, Enforce Surrogate IP for Known Browsers.
  3. Public Service Edge (PSE) — where inspection and Nanolog happen. Failover is primary + secondary (tunnels / PAC return list) or nearest-edge (ZCC).
Say this out loud

Tunnel or PAC is the road. Location is the street address. Policy is what happens after you knock. If the address is wrong, the right house never sees you.

Flow · three-part model
1 · Method ZCC · PAC · GRE IPSec · explicit proxy 2 · Location Static IP / VPN cred / dedicated proxy port 3 · PSE + logs Policy · SSL · Nanolog ip.zscaler.com proof

Read left → right. Skip step 2 and every office looks like a road warrior.

3. Decision flow — pick the method first

Decision · five production methods
What must ZIA see? Managed laptop that also roams? Yes ZCC Z-Tunnel 2.0 off-trusted No / site LAN Need whole-LAN IP (printers, IoT, no agent)? No Browser only? or existing proxy? PAC (hosted) Explicit proxy + XFF / dedicated port Yes Encrypt path or sit behind NAT? No GRE Protocol 47 · dual DC Yes IPSec IKEv2 NAT-T UDP/4500 · VPN cred Then always: bind Location → Activate → prove ip.zscaler.com must show your Location name, not Road Warrior GRE/IPSec click-path lives in the tunnel lesson — this page ships PAC + ZCC

Diamond = decision. Production orgs usually run two: GRE or IPSec at the site, ZCC off-trusted for laptops. PAC is the overlay, not the only on-ramp.

Feel · Path A office vs Path B roam
Decision diamond splitting incoming traffic into Path A office and Path B roaming
Path A is the site (GRE / IPSec / explicit). Path B is the laptop (ZCC, with PAC as a browser overlay). The SVG above names the real forks.

Read the diagram first, then the table. Do not start in Hosted PAC Files because “everyone has a browser.”

4. Choose-when — all five methods

Zscaler Help Choosing Traffic Forwarding Methods and Best Practices for Traffic Forwarding treat these as complementary. Government clouds are stricter: PAC or explicit proxy sent directly to Zscaler is not supported there — those tenants send PAC/explicit traffic through GRE or IPSec.

MethodChoose whenDo not choose whenLocation bindFailover
ZCC
Client Connector
Managed Windows/macOS/iOS/Android that leave the building. Need TCP+UDP (Slack, Zoom, native Outlook). Off-trusted = Tunnel / Z-Tunnel 2.0. On-trusted often None so the site tunnel owns the path. Printers, IP cameras, kiosks you cannot agent. Unmanaged contractor PCs you will never enroll. Roaming = unknown location + user auth. On a trusted site, traffic should inherit the site Location via GRE/IPSec (TND must actually fail at home). Connector picks the nearest PSE. App Profile can Fallback to gateway domain if PAC proxies die.
PAC
hosted PAC file
Browser-only control, contractors, or a surgical overlay (DIRECT exceptions, Kerberos PAC). Defaults on the cloud: recommended.pac, proxy.pac, mobile_proxy.pac, kerberos.pac. You need Slack RTP, SMB, or any non-proxied socket. Users can clear the proxy. PAC cache will lie to you for hours. Browser hits ${GATEWAY} — Location comes from the egress IP (if it is a static you registered) or from a dedicated proxy port. PROXY ${GATEWAY}:80; PROXY ${SECONDARY_GATEWAY}:80; DIRECT — that last DIRECT is the safety valve, not the plan.
GRE
protocol 47
Branch/DC with a static public IP, no “encrypt the underlay” mandate, and you want the whole LAN (including devices that will never run ZCC). Highest throughput of the site methods. Router sits behind ISP PAT. Auditor requires IPSec. You only need Chrome covered. Location ← Static IP Addresses of the GRE source. Dual tunnels still share that source identity. Primary + secondary Public Service Edge in different data centers. Keepalives / IPSLA / RPM — not hope.
IPSec
IKEv2 + PSK/cert
Same site job as GRE, but you need encryption on the path to ZIA, or GRE (protocol 47) is blocked, or the edge is behind NAT (NAT-T wraps ESP in UDP 4500). You have a clean public IP and no crypto mandate — GRE is simpler. You expected Gbps on a small firewall CPU. Location ← VPN Credentials (FQDN + PSK typical). Create the credential first, then attach it. Same dual-DC rule. IKEv2 for new tenants. Tunnel Insights is the health source of truth.
Explicit proxy
proxy chaining
An existing forward proxy or firewall already owns HTTP(S) and will chain to a Zscaler gateway. Or you need a dedicated proxy port so a site without a static IP is still a known Location. You can deploy ZCC or a tunnel. You forgot Use XFF from Client Request and now every user is one IP. Location ← Proxy Ports and/or the chaining egress IP. Enable Use XFF from Client Request so sublocations and Surrogate IP see the real client. Point the chain at primary then secondary gateway. Dedicated ports stay known locations even when the public IP changes.
Hard words, once

Z-Tunnel 2.0 — Client Connector tunnel (DTLS, TLS fallback) for supported IP traffic, not just HTTPS. Tunnel with Local Proxy (TWLP) — Connector sets a loopback proxy; PAC still decides DIRECT vs proxy. Dedicated proxy port — a subscribed port that makes the session a known Location without a static IP. Road Warrior — the default unknown-location bucket when nothing matched.

5. Mini runbook — PAC + ZCC (tunnels live next door)

GRE and IPSec get their own click-path, VIP math, and Tunnel Insights proof in ZIA GRE & IPSec tunnels. Do not paste a GRE wizard into this page and call the job done. Here you ship the two methods L2 actually configures in week one of a laptop-first rollout.

Side A — Hosted PAC (ZIA Admin)

Primary source: Zscaler Help About Hosted PAC Files / Writing a PAC File.

  1. Open Hosted PAC Files

    Path: Administration → Hosted PAC Files. The cloud already hosts four defaults: recommended.pac, proxy.pac, mobile_proxy.pac, kerberos.pac. Copy a default, do not edit it in place.

  2. Add a versioned custom PAC

    Add PAC File → name it for the pilot (example: pune-pilot-v2). Use a new filename or ?v= on the URL so browsers do not keep yesterday’s file. Run Validate in that same window before Save — a missing semicolon returns DIRECT for everything.

  3. Write the return list

    Official shape uses the ${GATEWAY} and ${SECONDARY_GATEWAY} variables. Common ports in Help examples: 80, 443, 9400, 9443. Put RFC1918, Zscaler PAC host, and IdP/ACS hosts on DIRECT first — that is how you prevent a PAC loop and a SAML hairpin.

  4. Activate, then publish the HTTPS PAC URL

    Save + Activate. Hand the hosted HTTPS URL to GPO/MDM or to the ZCC App Profile Custom PAC URL field (512-character max; HTTPS required if Enforce Secure PAC URLs is on).

Hosted PAC skeleton (training — ports from Zscaler Help examples)
function FindProxyForURL(url, host) {
  var lan = /^(10|127|192\.168|172\.(1[6-9]|2[0-9]|3[01]))\./;
  if (isPlainHostName(host) || shExpMatch(host, "*.corp.example") ||
      dnsDomainIs(host, ".zscaler.net") || dnsDomainIs(host, ".zscalerthree.net") ||
      dnsDomainIs(host, "login.microsoftonline.com") ||
      dnsDomainIs(host, "login.windows.net"))
    return "DIRECT";
  if (lan.test(host)) return "DIRECT";
  return "PROXY ${GATEWAY}:80; PROXY ${SECONDARY_GATEWAY}:80; DIRECT";
}
admin.zscalerthree.net · Administration → Hosted PAC Files → Add PAC File
Training mock · not live

Administration / Hosted PAC Files / Add PAC File

Add PAC File

pune-pilot-v2.pac
Pilot · versioned URL · not recommended.pac
https://pac.zscalerthree.net/example.com/pune-pilot-v2.pac
return "PROXY ${GATEWAY}:80; PROXY ${SECONDARY_GATEWAY}:80; DIRECT";
Validate Save

Validate before Save. Then Activate on the banner. A saved-but-not-activated PAC is still the old file in production.

Source: Zscaler Help · About Hosted PAC Files / Writing a PAC File. Values are RFC-style training placeholders, not a customer tenant.

Side B — ZCC Forwarding Profile + App Profile

Primary source: Zscaler Help Configuring Forwarding Profiles for Zscaler Client Connector / Configuring Zscaler Client Connector App Profiles.

  1. Add Forwarding Profile

    Path (Experience Center): Infrastructure → Connectors → Client → Forwarding Profile for Platforms → Add Forwarding Profile. Older Client Connector Portal label: Administration → Forwarding Profile.

  2. Map each network state to a mode

    States you will see: On Trusted Network, Off Trusted Network, VPN Trusted Network, Split VPN Trusted Network. Modes: Tunnel, Tunnel with Local Proxy, Enforce Proxy, None.

    Laptop-first default that does not double-tunnel a GRE site: Off Trusted = Tunnel (Z-Tunnel 2.0). On Trusted = None so the branch GRE/IPSec owns the LAN.

  3. Trusted Network Detection must fail at home

    Use a hostname that exists only on internal DNS (or a gateway-IP test). If portal.company.com resolves on the public internet, TND passes at home, ZCC stays None, and the laptop is naked.

  4. App Profile PAC + Z-Tunnel 2.0

    App Profile holds Custom PAC URL and ZIA enablement. In Tunnel mode, the Forwarding Profile PAC is for bypass / ${ZAPP_TUNNEL2_BYPASS} — do not use it to aim traffic at the Zscaler cloud. The App Profile PAC is what returns PROXY ${GATEWAY}:443.

admin.zscalerthree.net · Infrastructure → Connectors → Client → Forwarding Profile
Training mock · not live

Infrastructure / Connectors / Client / Forwarding Profile for Platforms / Add

Add Forwarding Profile

WIN-laptops-default
Windows
Tunnel · Z-Tunnel 2.0
None
None
Tunnel with Local Proxy
TND-corp-internal · dnsResolve(nas.corp.example) only
Cancel Save

None on trusted is correct only after the site GRE/IPSec Location is proven. Otherwise office laptops bypass ZIA the moment TND passes.

Source: Zscaler Help · Configuring Forwarding Profiles for Zscaler Client Connector. Modes and state names are documented field labels.

Side C — Location object (the bind everyone skips)

Primary source: Zscaler Help Configuring Locations / Configuring Dedicated Proxy Ports / Configuring Proxy Chaining.

Path: Infrastructure → Locations → Legacy Locations → Add Location (UI may say Location Management). A method without this bind still reaches a PSE — it just lands in the wrong policy stack.

admin.zscalerthree.net · Infrastructure → Locations → Legacy Locations → Add Location
Training mock · not live

Infrastructure / Locations / Legacy Locations / Add Location

Add Location

Pune-HQ
India · Asia/Kolkata
203.0.113.40
— none (GRE site)
— none unless dedicated port
Use XFF from Client Request · off
Enable IP Surrogate    Enforce Surrogate IP for Known Browsers
Cancel Save + Activate

If this static IP is stale, ip.zscaler.com prints Location: Road Warrior and every office policy miss-fires.

Source: Zscaler Help · Configuring Locations. Static IP is RFC 5737 documentation space — never a live customer WAN.

GRE / IPSec — stop here and switch lessons

Need Add GRE Tunnel, Domestic Preference, internal /30 VIPs, IKEv2 proposals, or Tunnel Insights failover? That runbook is ZIA GRE & IPSec tunnels. This page only tells you when to open it.

6. Runtime path — after go-live

Once forwarding is live, every request is the same four stations. The method only changes station 1.

Runtime · packet to proof
User / LAN browser or socket Method ZCC / PAC / GRE IPSec / explicit Location or Road Warrior PSE policy + SSL Internet Failover you can name in an interview PAC — PROXY ${GATEWAY}; PROXY ${SECONDARY_GATEWAY}; DIRECT GRE / IPSec — primary VIP + secondary VIP in a second data center, tracked ZCC — nearest Service Edge; App Profile Fallback to gateway domain if PAC proxies fail Explicit — chain to primary then secondary gateway; dedicated port keeps the Location known

If station 2 prints Road Warrior, do not debug URL Filtering. Fix the bind.

7. Traps + how to prove traffic hits ZIA

Proof · close the ticket with a named field
Operations desk monitor showing a green health check and a highlighted log row
Notice: proof is a named field on a timestamp, not a screenshot of a spinning tab.

Three production failures show up in every Batch 11 lab. Learn the evidence, not the folklore.

TrapWhat you seeWhat is actually wrongFix + proof
PAC loop Blank page, endless spinner, or SAML redirect loop after you published a PAC. Browser proxy shows “working.” The PAC (or ZCC App PAC) sends the PAC host, ${GATEWAY}, or the IdP/ACS back through itself. Or you used the Forwarding Profile PAC to aim at the cloud in Tunnel mode. DIRECT for PAC host, *.zscaler.net / your cloud, and login.microsoftonline.com (or your IdP). Validate the PAC. Re-test in a private window after bumping ?v=.
Wrong Location ip.zscaler.com says you are on Zscaler, but Location: Road Warrior. Office SSL/auth policy does not match. Web Insights username is empty or “unauthenticated.” Static IP / VPN credential / dedicated proxy port is missing, stale, or not Activated. ISP changed the WAN. XFF off on a chaining site, so every user is the proxy. Infrastructure → Locations → edit Pune-HQ → correct Static IP / VPN cred / Proxy Ports → Activate. Re-hit My IP Address. Location name must match.
Tunnel down, PAC still works Tunnel Insights red. Chrome users insist “Zscaler is fine.” Slack huddles and native Outlook fail. Printers go direct. Browsers still have an explicit PAC. HTTP(S) reaches a PSE. Everything that is not a proxied browser socket is unprotected. The ticket looks green if you only test Chrome. Test a non-browser flow. Check Tunnel Insights primary + secondary. If TND is None on-trusted, a down GRE is a down office. Do not close on ip.zscaler.com from Chrome alone.
Classic miss

You debug SSL inspection because Salesforce “half loads.” The GRE is up, the PAC is cached, and the Location is Road Warrior because last month’s WAN IP was never updated. Policy never had a chance.

Pilot proof checklist

Knowledge check

Six judgment items. Map each to a method, a Location bind, or a trap. Check answers, then reset and retry until you are 6/6.

Q1

Pune branch has a static public WAN IP, no encrypt-the-underlay mandate, and 40 printers that will never run an agent. What is the production forwarding choice?

Correct: c. Whole-LAN coverage without agents is a site tunnel. GRE is the documented default when you have a static public IP and no crypto mandate. Bind Static IP Addresses on the Location. PAC never sees a printer. Re-read the choose-when table.
Q2

You published a hosted PAC at 09:00. Entra login now spins forever. Chrome still has a proxy. What is the first fix?

Correct: b. That is a PAC loop / SAML hairpin. Help’s PAC examples put exceptions before the default PROXY return. Validate in Administration → Hosted PAC Files. Re-read traps.
Q3

A Pune user opens ip.zscaler.com. The page confirms traffic is on Zscaler, but Location is Road Warrior instead of Pune-HQ. What failed?

Correct: b. Reaching a PSE ≠ matching a Location. Road Warrior means unknown source. Fix the bind, Activate, re-test My IP Address. Re-read Side C.
Q4

Tunnel Insights shows the Pune GRE primary and secondary down. Helpdesk says “Zscaler works — Chrome is fine.” What should you tell them?

Correct: b. Tunnel down + PAC still works is the trap. Chrome is a terrible sole health check. Re-read traps + runtime failover.
Q5

A sales laptop at home must put Chrome, native Outlook, and Zoom/Slack UDP under ZIA. The office already has GRE. What do you set?

Correct: c. Z-Tunnel 2.0 is the documented all-TCP/UDP roaming method. None on trusted avoids double-tunnelling the GRE. TND must not pass from home. Re-read Side B.
Q6

How do you prove a pilot user’s traffic actually hits ZIA after a PAC + Location change?

Correct: b. Official verify path is the My IP Address page, then logs. Loading a public site only proves the ISP works. Re-read the proof checklist.

Sources

Related: ZIA GRE & IPSec tunnels · Zscaler authentication · ZIA architecture · ZIA traffic flow · ZCC App & Forwarding Profiles · Batch 11 · Lesson 4 — auth deployment