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. 前置准备
- AWS 账户:已开通 EC2 Spot 实例使用权限。
- Cloudflare 账户:拥有一个托管在 Cloudflare 上的域名。
- 获取 Tunnel Token:
- 登录 Cloudflare Zero Trust > Networks > Tunnels。
- 点击 Create a tunnel,选择 Cloudflared。
- 命名隧道(如
aws-proxy),在安装页面复制 Token(以ey开头的长字符串),保存备用。
3. AWS 网络环境配置 (关键)
为了实现“零 IPv4 费用”且能联网,必须严格按照以下步骤创建 VPC。此步骤基于 "Create VPC and more" 向导配置。
- 登录 AWS 控制台,进入 VPC 服务。
- 点击 Create VPC,选择 VPC and more。
- 配置参数如下(严禁选错):
- 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 单向出站访问互联网,免费)。
- IPv4 CIDR block:
- 点击 Create VPC 等待资源创建完成。
- 修改子网设置:
- 进入 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)的安装与配置。
- 进入 EC2 控制台 > Spot Requests > Request Spot Instances。
- 启动模板设置:
- 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 (禁用)。
- AMI: 选择 Ubuntu Server 24.04 LTS (64-bit Arm)。
- 高级详情 (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"
- Target capacity: 设置为
1。 - Fleet 维护策略: 确保勾选
Maintain target capacity。- 作用:当 Spot 实例被回收时,AWS 会自动启动新实例并重新运行上述脚本,实现自动复活。
- 点击 Launch。
5. Cloudflare 后台配置
实例启动约 2-3 分钟后,Cloudflare Tunnel 状态应显示为 Healthy。此时需要配置流量入口。
- 回到 Cloudflare Zero Trust Dashboard > Tunnels。
- 找到你的 Tunnel,点击 Configure。
- 点击 Public Hostname 标签页,点击 Add a public hostname。
- 填写信息:
- Subdomain: 输入你想要的前缀(如
proxy)。 - Domain: 选择你的域名(如
example.com)。 - Service Type:
HTTP(注意不是 HTTPS,也不是 TCP)。 - URL:
localhost:10000(对应 User Data 脚本中 Xray 的监听端口)。
- Subdomain: 输入你想要的前缀(如
- 点击 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 进行调试。
- 连接控制台:
- AWS EC2 列表 > 选中实例 > 点击 Connect > 选择 EC2 Serial Console > Connect。
- 登录:
- 在黑色终端界面按回车。
- 输入用户名:
root。 - 输入密码:脚本中设置的
ROOT_PASSWORD。
- 常用排查命令:
- 检查 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
- 检查 Docker 容器状态:
8. 安全建议
- 路径保护:不要将
WS_PATH设为根目录/或简单路径,建议使用复杂的随机字符串,防止被主动探测。 - 浏览器访问行为:直接用浏览器访问你的域名会显示
400 Bad Request,这是正常现象(因为 Xray 拒绝非 Trojan 流量),证明服务已生效。
通过以上步骤,你已成功部署了一套全自动、低成本、高可用的 AWS 双栈代理系统。