4. Use-Case D One Tenant, Three Exits

Advertisement on the enterprise link, Provider SNAT toward a shared-services network, Default Outbound NAT toward the Internet, all on one Transit Gateway. Part 4 builds the design, traces all nine source-and-exit combinations, and covers the enterprise edge cases.

4. Use-Case D One Tenant, Three Exits

This part builds the third steady-state design, which combines the previous ones. The tenant is Riyadh: workloads on all three subnet types, Public, Private-TGW and Private-VPC, showing their connectivity over three exits on one Transit Gateway: to the enterprise data centre over WAN, which routes the tenant's Private-TGW range as is (advertised, no NAT on the path); to the provider's shared services, which accept traffic only from a provider-assigned pool that is never handed to the tenant (Provider Outbound SNAT on the services connection); and to the Internet, which accepts only the public IP address.

The Requirement

Riyadh (project Tenant-Riyadh) has workloads on a public subnet, a Private-TGW subnet and a Private-VPC subnet. They need three exits, each with a different rule for the source address:

  • The enterprise data centre (10.100.0.0/16), over a VRF dedicated to the tenant. The data centre must be able to use the tenant's Private-TGW addresses directly, so Private-TGW workloads must arrive there untranslated.
  • The provider's shared services (10.33.0.0/24), a network the provider offers to all its tenants. The services network must see every tenant only through a provider-assigned pool, never through a tenant's own addressing.
  • The Internet, through the default route, where private workloads are hidden behind the tenant's Default Outbound NAT.

Topology

Use case D topology: one project with three External Connections, and a VPC with one workload on each subnet type
Figure 1 – One project with three External Connections, and a VPC with one workload on each subnet type.

Design at a glance.

Value
Project Tenant-Riyadh, one Default Transit Gateway (CTGW) with three attachments
Enterprise connection Riyadh-wan-conn, centralized, on VRF Riyadh-wan-vrf; remote network 10.100.0.0/16
Shared-services connection Shared-services-conn, centralized, on Tier-0 Shared-services-T0; remote network 10.33.0.0/24
Internet connection Riyadh-internet-conn, centralized, on Tier-0 Internet-T0; no remote networks (implicit default route)
Public block Riyadh-public-block_20.0.0.0/16, authorized on Riyadh-wan-conn and Riyadh-internet-conn; also the Auto SNAT block
Services SNAT block Shared-services-snat-block_10.99.0.0/24, authorized on Shared-services-conn and used as its SNAT IP Block
Workloads Riyadh-web-01 20.0.1.5 (public subnet), Riyadh-app-01 172.16.10.5 (Private-TGW subnet), Riyadh-db-01 192.168.10.5 (Private-VPC subnet)
Test destinations 10.100.0.10 in the enterprise DC, 10.33.0.10 in the provider services, 1.1.1.1 on the Internet

Address plan.

Range Name Kind / created in Authorized on / used by Role
20.0.0.0/16 Riyadh-public-block_20.0.0.0/16 External IP Block, Default project (Step 1) Riyadh-wan-conn, Riyadh-internet-conn; project Tenant-Riyadh Public subnet Riyadh-public-subnet 20.0.1.0/28 and the Auto SNAT block of the profile
10.99.0.0/24 Shared-services-snat-block_10.99.0.0/24 External IP Block, Default project (Step 1) Shared-services-conn Provider SNAT pool of the services connection; the only source the services network ever sees from this tenant
172.16.10.0/24 Riyadh-private-tgw-block_172.16.10.0/24 Private block, project Tenant-Riyadh Riyadh's profile Source of the Private-TGW subnet Riyadh-private-tgw-subnet 172.16.10.0/28; advertised over Riyadh-wan-conn
192.168.10.0/24 Riyadh-private-vpc-block_192.168.10.0/24 Private block, project Tenant-Riyadh Riyadh's VPC Source of the Private-VPC subnet Riyadh-private-vpc-subnet 192.168.10.0/28; never advertised
10.100.0.0/16 – Remote network, physical network Remote Networks of Riyadh-wan-conn The enterprise data centre
10.33.0.0/24 – Remote network, physical network Remote Networks of Shared-services-conn The provider's shared services
Note: The four ranges that define the design are 20.0.0.0/16, 10.99.0.0/24, 10.100.0.0/16 and 10.33.0.0/24. The private blocks, subnet sizes and host addresses are illustrative values chosen so the packet walks can show concrete addresses. 20.0.0.x means an address NSX allocates from the block.

Steady-State Design

Object (Step) Setting Value Purpose
External IP Blocks (1) Blocks Riyadh-public-block_20.0.0.0/16, Shared-services-snat-block_10.99.0.0/24 The tenant's public range, and the provider's SNAT pool for the services network
Riyadh-wan-conn (2) Type / gateway Centralized, VRF Riyadh-wan-vrf Private link to the enterprise DC
Remote Networks 10.100.0.0/16 Steers only DC traffic here
External IP Blocks Riyadh-public-block The public range is advertised to the DC
Provider Outbound SNAT Off Required: it cannot coexist with the next setting
Private – Transit Gateway IP Blocks On Permits the tenant to advertise its Private-TGW block to the DC
Shared-services-conn (2) Type / gateway Centralized, Tier-0 Shared-services-T0 Link to the provider's services network
Remote Networks 10.33.0.0/24 Steers only services traffic here
External IP Blocks Shared-services-snat-block The only range this connection authorizes
Provider Outbound SNAT / SNAT IP Blocks On / Shared-services-snat-block Every source not from Shared-services-snat-block is translated into the pool
Riyadh-internet-conn (2) Type / gateway Centralized, Tier-0 Internet-T0 Shared Internet exit
Remote Networks Empty (implicit 0.0.0.0/0) Everything not matched elsewhere
External IP Blocks / Provider SNAT / Private-TGW blocks Riyadh-public-block / Off / Off Accepts the public range and the Auto SNAT address as they are
Project Tenant-Riyadh (3) Connections / blocks All three connections / Riyadh-public-block Makes them selectable inside the project
Default Transit Gateway (4) Connections Riyadh-wan-conn, Shared-services-conn, Riyadh-internet-conn Three attachments, one default route
Advertise Rules Riyadh-wan-conn: type Private-Transit Gateway The tenant's half of the advertisement
VPC Connectivity Profile (5) External IP Blocks Riyadh-public-block The public range usable by VPCs
Private – Transit Gateway IP Blocks Riyadh-private-tgw-block_172.16.10.0/24 The block that will be advertised
Default Outbound NAT / Auto SNAT block On / Riyadh-public-block The tenant-side translation for private subnets
VPC Riyadh-vpc-01 Subnets Riyadh-public-subnet 20.0.1.0/28, Riyadh-private-tgw-subnet 172.16.10.0/28, Riyadh-private-vpc-subnet 192.168.10.0/28 One workload on each subnet type

The resulting CTGW forwarding table. Exactly one default route, as Rule 2 requires:

10.100.0.0/16   ->  Riyadh-wan-conn        (PROVIDER_STATIC, remote network)
10.33.0.0/24    ->  Shared-services-conn   (PROVIDER_STATIC, remote network)
0.0.0.0/0       ->  Riyadh-internet-conn   (default route: no remote networks configured)

Build Order

Provider first. Create the two External IP Blocks, Riyadh-public-block_20.0.0.0/16 and Shared-services-snat-block_10.99.0.0/24; then the three connections with their advanced settings (Private-Transit Gateway IP Blocks on Riyadh-wan-conn; Provider Outbound SNAT with Shared-services-snat-block on Shared-services-conn; nothing on Riyadh-internet-conn); then the project with the three connections and Riyadh-public-block.

Riyadh-wan-conn
  Type ................................ Centralized
  Tier-0 Gateway ...................... Riyadh-wan-vrf (VRF)
  Remote Networks ..................... 10.100.0.0/16
  External IP Blocks .................. Riyadh-public-block_20.0.0.0/16
  Provider Outbound SNAT .............. Off
  Private – Transit Gateway IP Blocks . On

Shared-services-conn
  Type ................................ Centralized
  Tier-0 Gateway ...................... Shared-services-T0 (Tier-0)
  Remote Networks ..................... 10.33.0.0/24
  External IP Blocks .................. Shared-services-snat-block_10.99.0.0/24
  Provider Outbound SNAT .............. On
  SNAT IP Blocks ...................... Shared-services-snat-block_10.99.0.0/24

Riyadh-internet-conn
  Type ................................ Centralized
  Tier-0 Gateway ...................... Internet-T0 (Tier-0)
  Remote Networks ..................... (empty — implicit default route)
  External IP Blocks .................. Riyadh-public-block_20.0.0.0/16
  Provider Outbound SNAT .............. Off
  Private – Transit Gateway IP Blocks . Off

Tenant next. Attach the second and third connections to the Default Transit Gateway (Networking > Transit Gateways > ⋮ > Edit, then wait for the status to change from In Progress to Success); set the profile (Auto SNAT block Riyadh-public-block, Private-TGW block Riyadh-private-tgw-block_172.16.10.0/24, Default Outbound NAT on); then add the advertise rule of type Private-Transit Gateway for Riyadh-wan-conn under Routing and Forwarding > Advertise Rules.

Note: Shared-services-snat-block is authorized on the connection and does not need to be assigned to the project. The tenant never allocates from it. It is a provider-owned pool with one job: to be the SNAT target on Shared-services-conn and to be advertised toward Shared-services-T0 so that replies come back.

What NSX Programs Automatically

  • On the VPC gateway: the Default Outbound NAT rule for the VPC, applied to Private-VPC traffic, translating to Riyadh-public-block.
  • On the CTGW: the same Default Outbound NAT rule for Private-TGW traffic, translating to Riyadh-public-block; plus, scoped to Shared-services-conn only, a Provider SNAT rule translating any source outside Shared-services-snat-block to an address from Shared-services-snat-block, and a No-SNAT rule for sources already inside it. Nothing is created for the other two connections.
  • Route advertisement: toward Riyadh-wan-vrf, the public prefixes from Riyadh-public-block and the Private-TGW block 172.16.10.0/24 as a tgws route; toward Shared-services-T0, prefixes from Shared-services-snat-block, which is what brings replies to the SNAT addresses back; toward Internet-T0, the public prefixes from Riyadh-public-block only.

Packet Walks: All Nine Combinations

Three subnet types and three exits give nine combinations. The matrix shows all of them; the hop tables that follow trace the two private workloads, which are the ones the settings act on.

Workload subnet → Riyadh-wan-conn (enterprise DC) → Shared-services-conn (provider services) → Riyadh-internet-conn (Internet)
Public, Riyadh-web-01 20.0.1.5 No NAT; the DC sees 20.0.1.5 Provider SNAT at the CTGW; the services see 10.99.0.x No NAT; the Internet sees 20.0.1.5
Private-TGW, Riyadh-app-01 172.16.10.5 Advertised, no NAT; the DC sees 172.16.10.5 Provider SNAT at the CTGW; the services see 10.99.0.x Default Outbound NAT at the CTGW; the Internet sees 20.0.0.x
Private-VPC, Riyadh-db-01 192.168.10.5 Default Outbound NAT at the VPC gateway; the DC sees 20.0.0.x Default Outbound NAT at the VPC gateway, then Provider SNAT at the CTGW; the services see 10.99.0.x Default Outbound NAT at the VPC gateway; the Internet sees 20.0.0.x

Two product behaviours explain the matrix:

Note: By default, traffic from Private-TGW subnets is actively dropped on an External Connection whenever its source is not authorized there, as it would be if the public block were not authorized on the WAN connection. That is why the advertisement is needed on Riyadh-wan-conn: without it, Private-TGW traffic toward the DC is translated by Default Outbound NAT to 20.0.0.x or, with Default Outbound NAT off, dropped.
Note: With Default Outbound NAT, traffic from a Private-VPC subnet can reach the Transit Gateway and be provider-SNATed. That is the double translation in the Private-VPC → Shared-services-conn cell: once at the VPC gateway, once more at the CTGW.

The Private-TGW workload, Riyadh-app-01

Use case D: the Private-TGW workload toward the three exits
Figure 2 – The Private-TGW workload toward the three exits. Untranslated to the DC, Provider SNAT toward the services, Default Outbound NAT toward the Internet.

Path A — to the enterprise DC (10.100.0.10)

Hop Source → Destination What happens
1. VM sends 172.16.10.5 → 10.100.0.10 Leaves the Private-TGW subnet
2. VPC gateway 172.16.10.5 → 10.100.0.10 No translation: for a Private-TGW subnet the Default Outbound NAT rule is at the CTGW (Rule 1)
3. CTGW route lookup – Rule 2: 10.100.0.10 matches the remote network 10.100.0.0/16 of Riyadh-wan-conn
4. CTGW source decision 172.16.10.5 → 10.100.0.10 Rule 3: the source is inside the block advertised on this connection, so it is forwarded untranslated. Without the advertisement it would be translated by Default Outbound NAT or, with Default Outbound NAT off, dropped
5. Exit to Riyadh-wan-vrf 172.16.10.5 → 10.100.0.10 The VRF holds 172.16.10.0/24 as a tgws route; the DC sees and answers the real private address
6. Reply 10.100.0.10 → 172.16.10.5 Plain routing back; no NAT state

Path B — to the provider services (10.33.0.10)

Hop Source → Destination What happens
1. VM sends 172.16.10.5 → 10.33.0.10 Leaves the same subnet
2. CTGW route lookup – 10.33.0.10 matches the remote network 10.33.0.0/24 of Shared-services-conn
3. CTGW source check – Provider SNAT is on here; 172.16.10.5 is compared with the authorized block 10.99.0.0/24: no match
4. CTGW Provider SNAT 10.99.0.x → 10.33.0.10 Translated once, to the SNAT IP Block Shared-services-snat-block. The Default Outbound NAT rule is not involved on this path
5. Exit to Shared-services-T0 10.99.0.x → 10.33.0.10 The services network sees a provider-owned address
6. Reply 10.33.0.10 → 10.99.0.x Returns to the CTGW through Shared-services-T0; the CTGW reverses the translation and delivers 10.33.0.10 → 172.16.10.5

Path C — to the Internet (1.1.1.1)

Hop Source → Destination What happens
1. VM sends 172.16.10.5 → 1.1.1.1 Leaves the same subnet
2. CTGW route lookup – No specific match: default route through Riyadh-internet-conn
3. CTGW Default Outbound NAT 20.0.0.x → 1.1.1.1 Rule 1 at the CTGW: one translation to the Auto SNAT block Riyadh-public-block. Provider SNAT is off and nothing is advertised on this connection
4. Exit to Internet-T0 20.0.0.x → 1.1.1.1 Leaves with an address Riyadh-internet-conn authorizes

The Private-VPC workload, Riyadh-db-01

Use case D: the Private-VPC workload toward the three exits
Figure 3 – The Private-VPC workload toward the three exits. Translated at the VPC gateway on every path, and a second time toward the services.

Paths A and C — to the enterprise DC and to the Internet. The VPC gateway translates the source to 20.0.0.x in the same way on both paths. Both Riyadh-wan-conn and Riyadh-internet-conn authorize Riyadh-public-block, so the packet passes with no further translation. The DC therefore sees this workload as 20.0.0.x, not as 192.168.10.5: the advertisement on Riyadh-wan-conn covers the Private-TGW block only, and a Private-VPC address is gone before the CTGW is reached (Rule 1).

Path B — to the provider services (10.33.0.10), the double translation

Hop Source → Destination What happens
1. VM sends 192.168.10.5 → 10.33.0.10 Leaves the Private-VPC subnet
2. VPC gateway 20.0.0.x → 10.33.0.10 Rule 1: Default Outbound NAT translates the source to the Auto SNAT block Riyadh-public-block. This is what lets the packet reach the CTGW at all
3. CTGW route lookup – 10.33.0.10 matches the remote network of Shared-services-conn
4. CTGW source check – Provider SNAT is on here; 20.0.0.x is compared with the authorized block 10.99.0.0/24: no match
5. CTGW Provider SNAT 10.99.0.x → 10.33.0.10 Second translation, to Shared-services-snat-block
6. Exit to Shared-services-T0 10.99.0.x → 10.33.0.10 The services network sees the same provider pool it sees for every workload of this tenant
7. Reply 10.33.0.10 → 10.99.0.x The CTGW reverses its translation, the VPC gateway reverses its own, and the VM receives 10.33.0.10 → 192.168.10.5

The public workload, Riyadh-web-01

Its address 20.0.1.5 belongs to Riyadh-public-block, which both Riyadh-wan-conn and Riyadh-internet-conn authorize, so it reaches the DC and the Internet untranslated. Toward Shared-services-conn it is translated by Provider SNAT like everything else, because 20.0.0.0/16 is not an authorized block on that connection; the services see 10.99.0.x.

Verification

Test each workload toward each exit. The expected source at the far end is the matrix above:

# Riyadh-app-01 (172.16.10.5, Private-TGW)
ping 10.100.0.10   # DC sees 172.16.10.5    — no translation
ping 10.33.0.10    # services see 10.99.0.x — one translation (Provider SNAT, CTGW)
ping 1.1.1.1       # Internet sees 20.0.0.x — one translation (Default Outbound NAT, CTGW)

# Riyadh-db-01 (192.168.10.5, Private-VPC)
ping 10.100.0.10   # DC sees 20.0.0.x       — one translation (VPC gateway)
ping 10.33.0.10    # services see 10.99.0.x — two translations (VPC gateway, then CTGW)
ping 1.1.1.1       # Internet sees 20.0.0.x — one translation (VPC gateway)

# Riyadh-web-01 (20.0.1.5, public)
ping 10.100.0.10   # DC sees 20.0.1.5       — no translation
ping 10.33.0.10    # services see 10.99.0.x — one translation (Provider SNAT, CTGW)
ping 1.1.1.1       # Internet sees 20.0.1.5 — no translation

On the provider side, Riyadh-wan-vrf should hold 172.16.10.0/24 as a tgws route alongside the Riyadh-public-block prefixes, Shared-services-T0 should hold the Shared-services-snat-block prefixes, and Internet-T0 should hold Riyadh-public-block only.

Enterprise Nuances and Edge Cases

One public block on two connections. Authorizing Riyadh-public-block on both Riyadh-wan-conn and Riyadh-internet-conn is a deliberate simplification: the public subnet is reachable from both the DC and the Internet, and Private-VPC workloads appear to the DC under the Auto SNAT address. If the DC must see Private-VPC workloads under a dedicated range, use two blocks and Provider SNAT on Riyadh-wan-conn, as in use case A (Part 2). That means giving up the advertisement on that connection, because the two settings cannot coexist.

Provider SNAT on the services connection catches the public subnet too. The public block is not authorized on Shared-services-conn, so public-subnet traffic is translated toward the services like everything else. The services network sees this tenant, and every other tenant configured the same way, only through provider-owned pools. That is the point of the design. Any services-side policy keyed on source address should reference the provider pool 10.99.0.0/24, never tenant addressing.

The services SNAT pool never touches the project. Shared-services-snat-block is a provider-owned block; the tenant never allocates from it and it does not need to be assigned to the project. Advertising it toward Shared-services-T0 is what makes the replies return.

Subnet placement is an exit-visibility decision. The Private-TGW workload is translated exactly once on every path except the DC path, where it is not translated at all. The Private-VPC workload is translated at the VPC gateway on every path and a second time toward the services. Placing a workload on one subnet type or the other therefore decides what each exit is allowed to see, not only about scoping inside the VPC.

Attaching a third connection changes nothing on the first two. Every advanced setting is scoped to its own connection. Adding Shared-services-conn with Provider SNAT did not alter the advertisement on Riyadh-wan-conn or the Default Outbound NAT behaviour toward Riyadh-internet-conn.

The routing constraints still apply. Three connections means one default route and two connections with explicit, non-overlapping remote networks. Remote networks must be unique per connection; listing a prefix on two connections is not a supported way to get ECMP.

What Comes Next

Four designs, three source-address behaviours, one set of rules. Part 5 puts the designs side by side, states the two constraints that apply to all of them, and turns the material into operating practice: changing the Auto SNAT block on a live profile, moving a connection between Provider SNAT and advertisement, and what to verify after every change.