đ I Stopped Using VPN GatewaysâHereâs How I Built a Multi-Cloud Network Instead
đ Building a Low-Cost Multi-Cloud Network with Tailscale (Azure + AWS + On-Prem)
For years, the default way to connect networks across environmentsâon-premises, Azure, AWSâhas been through traditional site-to-site VPNs. You deploy a VPN gateway, configure IPSec tunnels, manage pre-shared keys, deal with routing quirks, and pay a fixed monthly cost whether you use it heavily or not.
It works. But itâs heavy, rigid, and for many small-to-medium businesses, unnecessarily expensive.
So I explored a different approachâone that removes the dependency on traditional VPN gateways entirely. Instead of building tunnels between networks, I focused on building a secure, identity-based network overlay using Tailscale, and combining it with native cloud routing mechanisms like VNet peering and VPC peering.
What came out of that is a fully functional, multi-cloud network that behaves like a site-to-site VPNâbut is far more flexible and cost-efficient.
đ§ Architecture at a Glance

đ The Idea: Donât Tunnel NetworksâOverlay Them
At the core of this design is a simple shift in thinking.
Instead of asking:
âHow do I connect Site A to Site B with a tunnel?â
We ask:
âHow do I make all sites part of the same secure network, regardless of where they live?â
This is exactly what Tailscale does.
Tailscale creates a private mesh network across all participating nodes using WireGuard. Every node gets an identity and a private IP, and communication between nodes is encrypted end-to-end. Thereâs no central VPN gateway, no single choke pointâjust direct, secure connectivity between peers.
But the real power comes when you introduce subnet routers.
đ Turning Individual Nodes into Network Gateways
In a normal Tailscale setup, only the devices running Tailscale can communicate. Thatâs useful, but not enough when you want entire subnetsâlike 192.168.0.0/24 or 10.0.1.0/24âto be reachable.
This is where subnet routers come in.
By enabling route advertisement on a node, you essentially tell Tailscale:
âIf anyone needs to reach this subnet, send the traffic to me.â
For example, on an on-prem server:
tailscale up --advertise-routes=192.168.0.0/24
Now, any device in the Tailscale network can reach the entire on-prem subnet through that single node.
The same concept applies in the cloud.
- In Azure, a VM advertises
10.0.0.0/16 - In AWS N. Virginia, another VM advertises
172.0.1.0/24
These nodes stop being just serversâthey become routing points between the overlay network and their local environments.
But for this to work correctly, one critical setting must be enabled:
sysctl -w net.ipv4.ip_forward=1
Without IP forwarding, the node can receive trafficâbut wonât pass it along.
âď¸ Azure: Acting as the Aggregation Layer
In Azure, I used two VNetsâEast US and Central USâconnected via VNet peering. This part is important because Azure peering provides high-speed, low-latency private connectivity between networks without needing a gateway.
Inside East US, I deployed a Tailscale router VM and advertised the Azure address space.
Now, Azure effectively becomes a hub in the design. It can reach:
- On-prem via Tailscale
- AWS via Tailscale
- Other Azure VNets via peering
To make this work cleanly, Azure uses User Defined Routes (UDRs).
For example:
Destination: 172.0.0.0/16
Next hop: Tailscale router VM
This ensures that any traffic destined for AWS is forwarded into the Tailscale overlay instead of being dropped or sent to the internet.
At the same time, Network Security Groups (NSGs) must allow traffic from the AWS and on-prem CIDRs. Without that, packets arriveâbut never make it to the VM.
âď¸ AWS: Where Routing Gets Interesting
AWS introduces a key constraint that shapes the design:
VPC peering is not transitive.
This means AWS will not automatically route traffic from one VPC to another through a third VPC.
So if you have:
- N. Virginia (
172.0.1.0/24) - Oregon (
172.0.2.0/24)
Even with peering in place, traffic wonât magically flow across multiple hops.
To solve this, I used the N. Virginia Tailscale router as a controlled transit point.
Hereâs how it works in practice.
When Azure wants to reach a VM in Oregon:
- The packet is sent to the Azure Tailscale router (via UDR)
- It enters the Tailscale network (encrypted)
- It reaches the AWS N. Virginia router
- That router checks its route table:172.0.2.0/24 â VPC Peering (pcx-xxxx)
- The packet is forwarded across the peering connection into Oregon
The return path follows the same logic in reverse.
This works not because AWS allows transitive routingâbut because the N. Virginia router is acting as a Layer 3 forwarding device, making an explicit routing decision.
đ On-Prem: No Static IP, No Problem
On the on-prem side, things are surprisingly simple.
A single machine running Tailscale advertises the local subnet:
tailscale up --advertise-routes=192.168.0.0/24
Thatâs it.
Thereâs no need for:
- Static public IPs
- Port forwarding
- Edge firewall changes
Tailscale handles NAT traversal automatically. Even behind typical ISP setups, the on-prem network becomes fully reachable from Azure and AWSâsecurely and privately.
đ Security: Identity Over Perimeter
Traditional VPNs rely heavily on network boundariesâif youâre inside, youâre trusted.
This design flips that model.
- Every connection is encrypted using WireGuard
- Every node is authenticated via identity
- Access can be restricted using Tailscale ACLs, Azure NSGs, and AWS Security Groups
Instead of trusting a subnet, you trust who and what is connecting.
đ° Cost: Where This Really Shines
In a traditional setup, just enabling connectivity between Azure and AWS could require:
- Azure VPN Gateway
- AWS Site-to-Site VPN
- Possibly a Transit Gateway
- NAT Gateways for outbound access
Even a basic setup can easily exceed $200â$400 per month, before considering data transfer.
In this design, the only real cost is:
- A few small VMs acting as routers
- Minimal peering costs
- Tailscale (often free or low-tier)
That brings the cost down dramaticallyâoften to under $30/month for the same functional outcome.
âď¸ What This Design Really Is
Itâs tempting to call this a âsite-to-site VPN,â but thatâs not entirely accurate.
There are no static tunnels. No IPSec. No centralized gateways.
Instead, this is:
A multi-cloud, identity-based network built using an encrypted overlay (Tailscale) and native cloud routing (peering + route tables).
It behaves like a site-to-site networkâbut itâs far more flexible.
đ§Š Scaling and High Availability
As demand grows, this design can evolve.
You can deploy multiple subnet routers advertising the same CIDR. Tailscale will automatically choose the best path, providing failover without complex routing protocols.
In cloud environments, you can go further:
- Azure VM Scale Sets
- AWS Auto Scaling Groups
High availability becomes a matter of adding more routers, not redesigning the network.
đ Final Thoughts
What started as an experiment turned into a clear realization:
You donât always need heavy, traditional VPN infrastructure to build a secure, multi-site network.
By combining:
- Tailscale for secure overlay connectivity
- Cloud-native peering for efficient intra-cloud routing
- Proper route table design for traffic control
You can build a network that is:
- Secure
- Flexible
- Cost-efficient
- Multi-cloud ready
And most importantlyâsimple enough to deploy and manage without overengineering.
If youâre exploring hybrid or multi-cloud networking, this approach is worth considering. It challenges the default assumptionsâand in many cases, delivers a better outcome with fewer moving parts.