Skip to content
Notifications
Clear all

Rolled out Twingate to 100 users - what we wish we knew before

1 Posts
1 Users
0 Reactions
2 Views
(@crusty_pipeline)
Estimable Member
Joined: 2 months ago
Posts: 142
Topic starter   [#7341]

Just finished rolling out Twingate to replace our crusty OpenVPN setup for about a hundred engineers. The marketing makes it look like flipping a switch. It's not. It's better, but it's still a VPN, just one that's been through a modern design workshop. Here's the brass tacks we learned the hard way, so you don't have to.

**The provisioning promise vs. the reality of existing infra**

The idea of "zero-trust" and just-in-time access is great until you realize your 15-year-old monolith of a data warehouse only speaks IP whitelists. Twingate doesn't magically make your legacy apps understand modern identity. You still have to create the Connectors (their replacement for VPN gateways) and define Resources (the things you're protecting). Mapping your existing access patterns into their model is the bulk of the work.

We thought we'd use the Terraform provider for everything. It's decent, but it's not complete. You'll likely end up with a hybrid mess:
* Terraform for core network objects (Connectors, Resources)
* Their CLI (`twingate resource create`) for one-off stuff because it's faster than writing a TF module for a single Postgres port.
* The Admin UI for debugging and testing.

A snippet of our Terraform to show the verbosity you're in for, even for a simple resource:

```hcl
resource "twingate_resource" "prod_warehouse" {
name = "prod-bi-warehouse"
address = "prod-warehouse.internal.corp.net"

remote_network_id = data.twingate_remote_network.prod_vpc.id

protocols {
allow_icmp = false
tcp {
policy = "RESTRICTED"
ports = ["5432"]
}
udp {
policy = "ALLOW_ALL"
}
}

access {
group_ids = [twingate_group.data_engineers.id]
}
}
```

**The client is mostly good, until it isn't**

The Twingate client is quiet and generally stays out of the way, which is a massive upgrade over fighting with VPN client interfaces. The "always-on" feature is what you want. However, we had about 5% of users (mostly on older Macs or weirdly configured Linux distros) where the client would silently fail to establish a connection. The logs are in `~/Library/Logs/Twingate/` but good luck getting an average user to find them. Build time into your rollout plan for hands-on client debugging. The "Diagnostic" tool in the client menu is your first friend.

**Cost optimization is on you**

They charge per user. A "user" is anyone with the client installed, even if they only access one thing once a month. We had a whole cohort of occasional users from finance who needed the warehouse twice a quarter. We solved this with a separate, cheaper "contractor" network in Twingate and a scheduled script that suspends their accounts when not in active use. Their API is solid for this kind of lifecycle management. If you don't think about this, you'll pay for 100 users when 70 would do.

**Observability is a double-edged sword**

The Admin console gives you nice graphs of connection attempts and data transfer. What it doesn't give you is deep packet inspection or a clear audit trail of *what* SQL query User X ran over that tunnel. It's a network access tool, not an application-layer audit tool. You still need your database logs and your own monitoring to stitch together the full picture. Don't expect it to replace your existing security information and event management (SIEM) integrations; it just feeds them differently.

In the end, we're keeping it. The reduction in support tickets for "VPN won't connect" is nearly 100%. But it's not magic. It's a well-built, API-driven overlay network that replaces your VPN concentrators. Treat the rollout like any other infrastructure migration: plan for edge cases, expect to write some glue code, and budget time to educate your users on the new mental model of "resources" instead of "being on the network."

-- old salt



   
Quote