跳到主要内容

AWS 极致低成本双栈代理搭建手册 (纯 IPv6 版)

这是一个关于在 AWS 上利用 Spot 实例搭建低成本、高匿名、双栈代理服务的完整实施手册。本方案通过纯 IPv6 网络架构彻底免除了 IPv4 地址费用,并利用 Cloudflare 生态实现了全自动化的网络穿透与分流。

1. 方案概述

本方案旨在构建一个无需公网 IPv4 地址、无 NAT 网关费用、具备自动故障恢复能力的代理服务。

  • 核心架构:AWS Spot Instance (t4g.micro) + Cloudflare Tunnel + Docker (Xray) + WARP。
  • 成本优势:利用 Spot 竞价实例和纯 IPv6 网络,费用低廉。
  • 网络逻辑
    • 入站:通过 Cloudflare Tunnel (IPv6) 穿透内网,无需公网 IP,无需开放安全组入站端口。
    • 出站 (IPv6):通过 AWS Egress-only Internet Gateway 直连,低延迟访问 Google/Netflix。
    • 出站 (IPv4):通过 Cloudflare WARP 代理模式转发,解决 GitHub/Twitter 等纯 IPv4 站点的访问问题。

2. 前置准备

  1. AWS 账户:已开通 EC2 Spot 实例使用权限。
  2. Cloudflare 账户:拥有一个托管在 Cloudflare 上的域名。
  3. 获取 Tunnel Token
    • 登录 Cloudflare Zero Trust > Networks > Tunnels
    • 点击 Create a tunnel,选择 Cloudflared
    • 命名隧道(如 aws-proxy),在安装页面复制 Token(以 ey 开头的长字符串),保存备用。

3. AWS 网络环境配置 (关键)

为了实现“零 IPv4 费用”且能联网,必须严格按照以下步骤创建 VPC。此步骤基于 "Create VPC and more" 向导配置。

  1. 登录 AWS 控制台,进入 VPC 服务。
  2. 点击 Create VPC,选择 VPC and more
  3. 配置参数如下(严禁选错)
    • IPv4 CIDR block: 10.0.0.0/16 (保留默认,内网用,不收费)。
    • IPv6 CIDR block: 选择 Amazon-provided IPv6 CIDR block (必须选此项,否则机器无法上网)。
    • Tenancy: Default。
    • Number of Availability Zones (AZs): 1 (单可用区即可)。
    • Number of public subnets: 0 (关键:设为 0 以杜绝 IPv4 公网网关创建)。
    • Number of private subnets: 1
    • NAT gateways: None (关键:NAT 网关非常昂贵,必须选无)。
    • VPC endpoints: S3 Gateway (可选,推荐保留,免费)。
    • Egress only internet gateway: Yes (核心组件:允许 IPv6 单向出站访问互联网,免费)。
  4. 点击 Create VPC 等待资源创建完成。
  5. 修改子网设置
    • 进入 Subnets,选中刚才创建的 Private Subnet。
    • 点击 Actions > Edit subnet settings
    • 勾选 Enable auto-assign IPv6 address
    • 确保未勾选 Enable auto-assign public IPv4 address
    • 点击保存。

4. 创建 Spot 实例与部署

我们将使用 User Data 脚本在实例启动时自动完成所有软件(Docker, Xray, WARP, Cloudflared)的安装与配置。

  1. 进入 EC2 控制台 > Spot Requests > Request Spot Instances
  2. 启动模板设置
    • AMI: 选择 Ubuntu Server 24.04 LTS (64-bit Arm)
      • 注意:必须选 ARM 架构以匹配 t4g 机型。
    • Instance type: 选择 t4g.micro
    • Key pair: 选择你的 SSH 密钥对(虽然我们主要通过 SSM 或串口调试,但建议绑定)。
    • Network settings:
      • VPC: 选择第 3 步创建的 VPC。
      • Subnet: 选择第 3 步配置的子网。
      • Auto-assign public IP: Disable (禁用)。
  3. 高级详情 (Advanced details)
    • 找到 User data 文本框,复制并粘贴以下脚本。
    • ⚠️ 务必修改脚本开头的 4 个变量。
#!/bin/bash
# ==========================================================
# AWS Spot (Ubuntu 24.04 ARM64) 终极双栈代理方案
# 架构:原生 Cloudflare 工具 + Docker (Xray) + WARP Proxy
# ==========================================================

# --- [用户配置区 - 请修改以下内容] ---
CF_TOKEN="你的_CLOUDFLARE_TUNNEL_TOKEN"
XRAY_PWD="设置_XRAY_连接密码"
WS_PATH="/你的秘密路径" # 例如 /trojan-ws
ROOT_PASSWORD="设置_ROOT_登录密码" # 用于 AWS 串口控制台调试
# ----------------------------------

# 1. 设置系统密码 (开启 Root 和 Ubuntu 用户串口登录权限)
echo "root:${ROOT_PASSWORD}" | chpasswd
echo "ubuntu:${ROOT_PASSWORD}" | chpasswd

# 2. 基础环境安装
export DEBIAN_FRONTEND=noninteractive
apt-get update -y
apt-get install curl ca-certificates gnupg lsb-release docker.io -y
systemctl start docker
systemctl enable docker

# 3. 添加 Cloudflare 官方源 (修复 GPG 签名问题)
mkdir -p --mode=0755 /usr/share/keyrings

# Cloudflared (Tunnel) 源
curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg | gpg --dearmor -o /usr/share/keyrings/cloudflare-main.gpg
echo "deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/cloudflared.list

# Cloudflare Client (WARP) 源
curl -fsSL https://pkg.cloudflareclient.com/pubkey.gpg | gpg --dearmor -o /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/cloudflare-client.list

# 4. 安装软件
apt-get update -y
apt-get install cloudflared cloudflare-warp -y

# 5. 配置 WARP (代理模式,监听 127.0.0.1:40000)
# 作用:提供 IPv4 出站能力,且不干扰原生 IPv6 路由
systemctl enable --now warp-svc
sleep 5
warp-cli --accept-tos registration new
warp-cli --accept-tos mode proxy
warp-cli --accept-tos connect

# 6. 配置 Xray (Docker 运行,Host 模式)
# 作用:Trojan 协议解包、分流 (IPv6 直连 / IPv4 走 WARP)
mkdir -p /etc/xray
cat > /etc/xray/config.json <<EOF
{
"log": { "loglevel": "warning" },
"dns": { "servers": [ "2001:4860:4860::8888", "2001:4860:4860::8844", "localhost" ] },
"routing": {
"domainStrategy": "IPOnDemand",
"rules": [
{ "type": "field", "ip": [ "::/0" ], "outboundTag": "direct-v6" },
{ "type": "field", "ip": [ "0.0.0.0/0" ], "outboundTag": "warp-v4" }
]
},
"inbounds": [
{
"port": 10000,
"listen": "0.0.0.0",
"protocol": "trojan",
"settings": {
"clients": [ { "password": "${XRAY_PWD}" } ]
},
"streamSettings": {
"network": "ws",
"wsSettings": { "path": "${WS_PATH}" }
}
}
],
"outbounds": [
{ "tag": "direct-v6", "protocol": "freedom", "settings": { "domainStrategy": "UseIPv6" } },
{ "tag": "warp-v4", "protocol": "socks", "settings": { "servers": [ { "address": "127.0.0.1", "port": 40000 } ] } }
]
}
EOF

# 启动 Xray 容器
docker run -d --name xray \
--restart always \
--network host \
-v /etc/xray:/etc/xray \
teddysun/xray:latest

# 7. 配置 Cloudflare Tunnel (入站入口)
cloudflared service install ${CF_TOKEN}

# 修正启动参数:强制使用 IPv6 连接 Cloudflare 边缘节点
sed -i 's/tunnel run/tunnel --edge-ip-version 6 run/g' /etc/systemd/system/cloudflared.service

systemctl daemon-reload
systemctl restart cloudflared
systemctl enable cloudflared

# 8. 系统内核优化 (开启 Ping 权限)
sysctl -w net.ipv4.ping_group_range="0 2147483647"
  1. Target capacity: 设置为 1
  2. Fleet 维护策略: 确保勾选 Maintain target capacity
    • 作用:当 Spot 实例被回收时,AWS 会自动启动新实例并重新运行上述脚本,实现自动复活。
  3. 点击 Launch

5. Cloudflare 后台配置

实例启动约 2-3 分钟后,Cloudflare Tunnel 状态应显示为 Healthy。此时需要配置流量入口。

  1. 回到 Cloudflare Zero Trust Dashboard > Tunnels
  2. 找到你的 Tunnel,点击 Configure
  3. 点击 Public Hostname 标签页,点击 Add a public hostname
  4. 填写信息
    • Subdomain: 输入你想要的前缀(如 proxy)。
    • Domain: 选择你的域名(如 example.com)。
    • Service Type: HTTP (注意不是 HTTPS,也不是 TCP)。
    • URL: localhost:10000 (对应 User Data 脚本中 Xray 的监听端口)。
  5. 点击 Save hostname

6. 客户端连接配置

请在 Clash、Shadowrocket 或其他支持 Trojan-WS 的客户端中添加节点。

  • 服务器 (Address): proxy.example.com (你刚才绑定的域名)
  • 端口 (Port): 443
  • 密码 (Password): 脚本中设置的 XRAY_PWD
  • 传输协议 (Network): ws (WebSocket)
  • 路径 (Path): 脚本中设置的 WS_PATH (例如 /trojan-ws)
  • TLS (SSL): 开启 (Enable)
  • SNI / Peer Name: proxy.example.com
  • UDP 转发: 开启 (支持 QUIC 访问)

7. 故障排查与维护

由于机器没有公网 IP,无法直接 SSH。如果遇到连接问题,请使用 AWS EC2 Serial Console 进行调试。

  1. 连接控制台
    • AWS EC2 列表 > 选中实例 > 点击 Connect > 选择 EC2 Serial Console > Connect
  2. 登录
    • 在黑色终端界面按回车。
    • 输入用户名:root
    • 输入密码:脚本中设置的 ROOT_PASSWORD
  3. 常用排查命令
    • 检查 Docker 容器状态:docker ps
    • 查看 Xray 日志:docker logs xray
    • 查看 Tunnel 状态:systemctl status cloudflared
    • 查看 WARP 状态:warp-cli --accept-tos status
    • 测试 IPv6 连通性:curl -6 https://ifconfig.co
    • 测试 IPv4 (WARP) 连通性:curl -x socks5h://127.0.0.1:40000 -4 https://ifconfig.co

8. 安全建议

  1. 路径保护:不要将 WS_PATH 设为根目录 / 或简单路径,建议使用复杂的随机字符串,防止被主动探测。
  2. 浏览器访问行为:直接用浏览器访问你的域名会显示 400 Bad Request,这是正常现象(因为 Xray 拒绝非 Trojan 流量),证明服务已生效。

通过以上步骤,你已成功部署了一套全自动、低成本、高可用的 AWS 双栈代理系统。