引言

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 的区域路由功能,将流量自动导向最近的子网路由器。

文本流量图示:

T a i l n e t ( T D a E i R l P s c a l e ) ( V P C ) T G W V P C /

使用多个子网路由器跨可用区(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]
}

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 路由,实现安全检查。

集成方式

  1. 在 VPC 中部署 GWLB
  2. Tailscale 子网路由器流量指向 GWLB Endpoint
  3. 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

部署步骤:

  1. 部署 EC2 子网路由器
  2. 配置 --advertise-routes=10.0.0.0/8
  3. Tailscale Admin Console 批准路由
  4. ACL 规则:{"action": "accept", "src": ["group:eng"], "dst": ["10.0.0.0/8"]}

参考文献