Same use case — accessing company services via your identity — shown step by step in both UIs.
Two internal services running on company servers. You want to access them securely from your laptop — no VPN, no open firewall ports.
zitiName = networkId|name|dialgateway.production.netfoundry.io API, just generated automatically.
Go to Networks → Create Network. Choose a region for the controller.
Network name RegionAdd hosted or customer-managed Edge Routers to the network so identities can connect.
Services → New Service. Configure intercept (what clients see) and host (where traffic goes).
Name: Company CRM Intercept: TCP / port 8080 Host: 192.168.1.10:8080Repeat the above for the database service.
Name: Company DB Intercept: TCP / port 5432 Host: 192.168.1.20:5432Identities → New Identity. This identity runs ziti-edge-tunnel on the server and BINDS (hosts) the services.
SSH into the company server. Install ziti-edge-tunnel, then enroll using the JWT.
Policies → New Service Policy. Type = Bind. Links the server tunneler identity to the services it hosts.
Type: Bind Identity: #server-tunneler-01 Services: #company-crm, #company-dbLinks the server tunneler identity to the Edge Routers it can use.
Identity: #server-tunneler-01 Edge Routers: #allIdentities → New Identity. This identity is for the employee's laptop (Ziti Desktop Edge).
Name: john.doe@company.com Type: DevicePolicies → New Service Policy. Type = Dial. Grants the employee identity permission to access the services.
Type: Dial Identity: #john.doe Services: #company-crm, #company-dbLinks the employee identity to the Edge Routers it can use.
Identity: #john.doe Edge Routers: #allEmployee opens Ziti Desktop Edge → Add Identity → paste JWT token from step 9.
Provider already provisioned the Ziti network and deployed Edge Routers. You never touch these.
Setup → Location Details → Add Location. Represents the site where your company servers live.
Name: Company Server Room Address / regionAdd Connector → Gateway. Point it at the CRM service. Add the application config.
Type: Gateway Name: CRM Access Target: 192.168.1.10 Port: 8080Same as above for the database. Or add a second Application to the same connector if on the same server.
Type: Gateway Name: DB Access Target: 192.168.1.20:5432Setup → Connections → Add Connection. Link the employee user to both connectors.
Name: Employee Access Source: john.doe (user identity) Destination: CRM Access, DB AccessSetup → Users → Invite. Enter employee email + role.
Email: john.doe@company.com Role: Admin or Read-OnlyDeployment Summary → Save Customer. Progress bar shows each resource being created on the API.
Go to the connector's Setup tab → copy the install command → SSH into the server and run it.
Ziti tunneler install + enrollmentJwt embeddedziti-edge-tunnel enroll step from NF Console, but the JWT is pre-filled.Employee gets an invitation email. Opens Ziti Desktop Edge → Add Identity → uses the token from the email.
| You configure in NetFoundry Console | Customer Connect equivalent | What CC auto-creates in Ziti |
|---|---|---|
| Network Edge Routers | Provider Setup (done once by provider) | Ziti Network + Hosted Edge Routers — pre-provisioned, customers never touch these. |
|
Service (intercept config + host config) |
Connector +
Application (Gateway/Host type + target IP:port) |
Connector.zitiName = providerId|locationId|nameOne Ziti Service per Application on the Connector. Application.zitiServiceId
|
|
Identity (server tunneler) Bind Service Policy Edge Router Policy (tunneler) |
Connector created (all three auto-created) |
Ziti Identity for the tunneler (Connector.zitiId)Bind Service Policy → tunneler binds the service Edge Router Policy → tunneler can reach all ERs |
|
Identity (employee) Dial Service Policy Edge Router Policy (employee) |
Invite User + Create Connection |
Ziti Identity for the user (identityId)Dial Service Policy ( ApiConnection.zitiName = networkId|name|dial)Edge Router Policy for the user identity |
|
Enrollment JWT (downloaded manually, emailed manually) |
Connector Setup tab User invitation email |
Connector.enrollmentJwt — shown in Setup tab with install commandUser enrollment JWT — sent automatically via invitation email |
sudo systemctl status ziti-edge-tunnel
sudo journalctl -u ziti-edge-tunnel -n 30 --no-pager
sudo ls -la /opt/openziti/etc/identities/
sudo find /opt/openziti /root /home -name "*.json" 2>/dev/null
sudo mv /home/ubuntu/<identity>.json /opt/openziti/etc/identities/
sudo chown ziti:ziti /opt/openziti/etc/identities/<identity>.json
sudo chmod 660 /opt/openziti/etc/identities/<identity>.json
sudo systemctl restart ziti-edge-tunnel
ziti-edge-tunnel version
sudo ziti-edge-tunnel enroll --jwt "<paste-jwt>" --identity /opt/openziti/etc/identities/connector.json
sudo ziti-edge-tunnel enroll --jwt /path/to/connector.jwt --identity /opt/openziti/etc/identities/connector.json
sudo ziti-edge-tunnel run --identity-dir /opt/openziti/etc/identities --verbose=debug
sudo ziti-edge-tunnel dump -p /var/run/ziti-edge-tunnel.sock
sudo ziti-edge-tunnel add-identity -i /opt/openziti/etc/identities/connector.json