引言
Tailscale 是一种基于 WireGuard® 的零配置 VPN 解决方案,通过其 tailnet(Tailscale 网络)提供安全、简便的点对点连接。在 AWS 环境中,Tailscale 可以无缝集成 VPC(Virtual Private Cloud),实现对 EC2、RDS 等资源的私有访问。本文深入探讨 Tailscale 与 AWS Transit Gateway(TGW)、PrivateLink 以及 Gateway Load Balancer(GWLB)的集成方式,涵盖架构设计、交通流向、IAM 权限配置及实际部署示例。
Tailscale 的子网路由器(Subnet Router)是核心组件,它允许 tailnet 设备访问 VPC 内未运行 Tailscale 客户端的资源。通过高可用性(HA)配置和区域路由(Regional Routing),Tailscale 可扩展至企业级网络架构。
AWS Transit Gateway 与 Tailscale 集成
Transit Gateway 概述
AWS Transit Gateway(TGW)是一种区域性虚拟路由器,支持 VPC、VPN 和 Direct Connect 的集中连接。Tailscale 通过子网路由器与 TGW 集成,实现 tailnet 到多 VPC 或混合云环境的流量引入(on-ramp)。
集成架构
部署 Tailscale 子网路由器于 VPC 的公共子网(Public Subnet),并将其路由指向 TGW。启用 Tailscale 的区域路由功能,将流量自动导向最近的子网路由器。
文本流量图示:
使用多个子网路由器跨可用区(AZ)部署,实现故障转移(Failover)。
Terraform 示例
provider "aws" {
region = "us-east-1"
}
resource "aws_ec2_instance" "tailscale_subnet_router" {
ami = "ami-0abcdef1234567890"
instance_type = "m5.large"
subnet_id = aws_subnet.public.id
key_name = "ssh-key"
user_data = <<-EOF
#!/bin/bash
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up --advertise-routes=10.0.0.0/16 --accept-routes
EOF
}
resource "aws_ec2_transit_gateway_vpc_attachment" "tgw_attachment" {
transit_gateway_id = "tgw-12345678"
vpc_id = aws_vpc.main.id
subnet_ids = [aws_subnet.public.id]
}
AWS PrivateLink 与 Tailscale 集成
PrivateLink 概述
PrivateLink 允许通过 VPC 端点(Endpoint)私有访问 AWS 服务(如 S3、RDS)或第三方服务,而无需穿越互联网。
Tailscale 集成
Tailscale 子网路由器可访问 VPC 端点服务。部署子网路由器于 VPC 内,advertise VPC CIDR,并通过 PrivateLink 端点访问服务。
IAM 权限表:子网路由器 EC2 实例角色
| 权限动作 | 资源类型 | 描述 |
|---|---|---|
| ec2:DescribeSubnets | VPC 子网 | 查询子网信息 |
| ec2:DescribeNetworkInterfaces | ENI | 网络接口管理 |
| route53:ChangeResourceRecordSets | Hosted Zone | Split DNS 配置 |
| logs:CreateLogGroup | CloudWatch Logs | 日志记录 |
AWS CLI 示例:创建 Interface VPC Endpoint
aws ec2 create-vpc-endpoint \
--vpc-id vpc-12345678 \
--service-name com.amazonaws.us-east-1.s3 \
--vpc-endpoint-type Interface \
--subnet-ids subnet-123 subnet-456 \
--security-group-ids sg-789
Gateway Load Balancer(GWLB)用于内联检查
GWLB 概述
GWLB 支持第三方网络虚拟设备(NVA,如防火墙)进行内联流量检查。Tailscale 流量可通过 GWLB 路由,实现安全检查。
集成方式
- 在 VPC 中部署 GWLB
- Tailscale 子网路由器流量指向 GWLB Endpoint
- GWLB 后置安全设备检查流量,再转发至目标
GWLB 与 Tailscale 比较表
| 特性 | Tailscale 子网路由器 | GWLB |
|---|---|---|
| 加密传输 | WireGuard 端到端 | IP-in-IP 封装 |
| 零信任访问 | ACL 策略 | Security Group |
| 高可用性 | 区域路由/HA | 跨 AZ 端点 |
| 部署复杂度 | 低(单 EC2) | 中(Target Group) |
Terraform 示例:GWLB 配置
resource "aws_lb_gateway_load_balancer" "tailscale_gwlb" {
name = "tailscale-gwlb"
type = "gateway"
}
resource "aws_lb_target_group" "nva" {
name = "nva-targets"
protocol = "GENEVE"
port = 6081
vpc_id = aws_vpc.main.id
target_type = "ip"
}
IAM 权限与安全最佳实践
Tailscale 子网路由器需遵循最小权限原则:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:Describe*",
"route53:AssociateVPCWithHostedZone"
],
"Resource": "*"
}
]
}
实际架构示例
多区域混合云架构
- us-east-1:Tailscale 子网路由器 → TGW → VPC A (PrivateLink to S3)
- eu-west-1:GWLB 内联检查 → RDS
部署步骤:
- 部署 EC2 子网路由器
- 配置
--advertise-routes=10.0.0.0/8 - Tailscale Admin Console 批准路由
- ACL 规则:
{"action": "accept", "src": ["group:eng"], "dst": ["10.0.0.0/8"]}