相关信息
原理:阿里云香港最近表现不错,但新手轻量优惠不可选择香港,只能正价购买香港轻量,持有成本较高,所以我们可以利用阿里云(含阿里云国际版)每个账号免费赠送的 200 GB CDT(云数据传输)流量,配合配置最低的 ECS 实例,达到低成本搭乘阿里云香港网络快线的方法。
产品:
CDT 公网流量
免费额度与适用地域:
免费额度为 220 GB/月,其中:
- 中国内地地域:20 GB/月
- 非中国内地地域:200 GB/月
线路类型:
BGP(多线)
正文:
本文将介绍如何开启 CDT + 创建阿里云抢占式实例 + 保活,实现月付最低 4 元,享受 200G 单向出网高速流量的方法。
在控制台首页搜索框,直接输入“CDT”,自动弹出“控制台 > 云数据传输”选项,点击;或直接访问:https://cdt.console.aliyun.com/overview (阿里云国际站:https://cdt.console.alibabacloud.com/overview ),进入 CDT 工作台。
确认当前账户下的所有 CDT 子功能,如图示开通,如果还没有开通,选择未开通子项,点击“一键升级”:





下载apline镜像文件: 点击下载

点击上传文件,上传刚刚下载好的 alpine 镜像:



点击 https://ecs.console.aliyun.com/image/region/cn-hongkong (阿里云国际站:https://ecs.console.alibabacloud.com/image/region/cn-hongkong ),导入刚刚上传到 oss 的 alpine 镜像:

点击下一步:

“镜像检测 → 导入后执行检测”最好不勾:

“云盘配置 → 配置云盘属性”勾选,alpine virt ISO 镜像体积很小,虽然原文里给 1GB 空间启动足够,但保险起见,还是建议给 2GB 以上,除非你执意只给 ECS 配置 1GB 的硬盘,但安装许多系统会受限制(系统本体、应用、日志等)。后面创建机器时可选的硬盘容量,必须等于或大于导入镜像步骤设置的云盘容量。

耐心等待创建完成:

在 https://ecs.console.aliyun.com/server/region/cn-hongkong#/ (阿里云国际站:https://ecs.console.alibabacloud.com/server/region/cn-hongkong#/ )创建抢占式实例:
规格搜索:ecs.e-c4m1.large 选中该“经济型”:


先暂不分配 IPv4 地址,原因是该抢占式实例属于可被随时停机的那种,如果有大户开机,占据了某可用区(香港:B、C、D 区任意)的大量资源,这些抢占式实例被停机后,再次启动时,创建时自动分配的 IPv4 地址会被释放,所以我们需要使用 EIP 来使这台机器的 IPv4 地址固定;安全组、防火墙等自行做入网、出网设置,全开就行;如果对 IPv6 的使用没有强需求,建议不要为实例分配 IPv6 地址,阿里云对 IPv6 的支持仍然不是很好。

确认配置无误,开氪:

EIP 纯持有是持续扣费的,只要绑定到实例后,就不扣费了,后期机器如果不要了删除,记得把闲置的 EIP 也删掉,否则会产生额外费用。
访问:https://vpc.console.aliyun.com/eip/cn-hongkong/eips (阿里云国际:https://vpc.console.alibabacloud.com/eip/cn-hongkong/eips )创建:



访问:https://ecs.console.aliyun.com/server/region/cn-hongkong (阿里云国际:https://ecs.console.alibabacloud.com/server/region/cn-hongkong ),操作 → 三个点 → 绑定弹性公网 IP:



计费方式:按主流量(入出取大);
计费模式:按 CDT 计费;
带宽:根据需求自选,拉太大了会增加流量的消耗速度。


在阿里云国际版做过测试,如果下单失败,显示:因安全问题,此次下单被终止,Request ID: 一串 UUID。需要访问:https://account.alibabacloud.com/kyc/index#/kyc 做 KYC 验证,它的审核特别严格,且阿里云国际版注册时,仅支持选择海外地区,根据接码手机号区号,确定账号主体注册区域,如果没有当地合法的长期居留身份,这一步基本无法通过,只能退而求其次,使用实例自带的 200 Mbps 的口子。

现在就成为 2 Gbps 口子的服务器了。
首次需要登录 VNC,输入 root,密码为空,来到 Localhost#: 状态,输入
bashsetup-alpine
进行首次安装,这个跟平时我们安装软件差不多的,一路回车,下一步下一步基本就可以了,其中有几步需要修改一下的,我在图片上标出来。

这就配置好网络了,阿里云使用 DHCP,不需要手动配置网络。

这样配置好用户名和密码及时区,代理跳过(如果只按原文图示直接按“49”,有可能会连接到一个速度极慢的源,因为这个镜像列表是实时更新的,截止我做测试时,阿里云的镜像源序号是“49”,这个序号未来还会根据该列表的更新而随时变化,切勿刻舟求剑,需要先按“s show mirrorlist”显示镜像源列表,然后选择来自 https://mirrors.aliyun.com/alpine/ 的源)。

启用 root 用户,并使用密码方式验证登录。

这一步会提示 No disks available,Try boot media /media/vda ? 意思没有找到可用有磁盘,是否尝试安装到vda云盘上,改
y
安装完成后
reboot
重启,首次安装向导就完成了。
重要提示:从自制镜像中读取到的 alpine virt iso 救援系统,在 VNC 执行 setup-alpine,将正式系统写入到硬盘后,该临时系统还运行在内存中,必须要重启!必须要重启!必须要重启!重启后进入到的 alpine 系统,才是从系统硬盘中读取的正式系统,才可以进行设置 DNS、配置源、清除硬盘标签、执行脚本重装等后续工作。
由于 alpine 系统还未联网,所以这一步还是需要在 VNC 中操作,如果不设置 DNS,只能 ping 通 IP 地址,无法 ping 通域名。
输入: setup-dns

DNS domain name:nameserver
DNS 地址随意,推荐:1.1.1.1 8.8.8.8
当系统的网络连接功能完全正常后,便可使用 Xshell 等 ssh 工具进行远程连接。
先更新一下软件源:apk update
安装组件:apk add curl vim
其它应用也是类似。
仓库配置路径:/etc/apk/repositories
打开仓库配置文件:vim /etc/apk/repositories
将社区源开头注释去掉:
http://mirrors.aliyun.com/alpine/v3.23/main # 默认配置,主要的源 http://mirrors.aliyun.com/alpine/v3.23/community # 社区源,默认未开启,去掉前面#号
添加 edge 源,拥有很多第三方应用,旧版 alpine 配置 edge 源,安装软件时,会产生很多依赖问题,不推荐:
http://mirrors.aliyun.com/alpine/edge/community http://mirrors.aliyun.com/alpine/edge/testing
将仓库配置文件保存后,再次更新源:apk update
已经开好了,剩下的玩法大伙自己发掘吧,现在可以把 oss 与镜像删除了,防止额外扣费。



需要使用阿里云 sdk。
访问:https://ram.console.aliyun.com/users (阿里云国际版:https://ram.console.alibabacloud.com/users)

记得保存 AccessKey ID、AccessKey Secret,后面需要用到。

新建修改下列脚本,安装必要依赖,设定每分钟执行。切记在另外的机器上设置,不要在阿里云抢占式实例自己上运行。使用 crontab 设置为每分钟执行一次。
# -*- coding: utf-8 -*- from aliyunsdkcore.client import AcsClient from aliyunsdkcore.request import CommonRequest from aliyunsdkecs.request.v20140526 import StartInstancesRequest, StopInstancesRequest, DescribeInstancesRequest import json import sys import logging # pip install aliyun-python-sdk-core aliyun-python-sdk-ecs # ================== 1. 配置日志 ================== logging.basicConfig( level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s", stream=sys.stdout ) logger = logging.getLogger(__name__) # ================== 2. 配置阿里云凭证和ECS实例信息 ================== ACCESS_KEY_ID = 'LTAIxxxxxxx' # 您的AccessKey ID ACCESS_KEY_SECRET = 'xxxxxxxxxx' # 您的AccessKey Secret REGION_ID = 'cn-hongkong' # 区域ID ECS_INSTANCE_ID = 'i-xxxxxxxxx' # 您要控制的ECS实例ID # 流量阈值 (GB) TRAFFIC_THRESHOLD_GB = 180 # ================== 3. 初始化客户端 ================== try: client = AcsClient(ACCESS_KEY_ID, ACCESS_KEY_SECRET, REGION_ID) logger.info("AcsClient initialized successfully.") except Exception as e: logger.error(f"Failed to initialize AcsClient: {e}") sys.exit(1) # ================== 4. 查询当前总流量 ================== def get_total_traffic_gb(client): request = CommonRequest() request.set_domain('cdt.aliyuncs.com') request.set_version('2021-08-13') request.set_action_name('ListCdtInternetTraffic') request.set_method('POST') try: response = client.do_action_with_exception(request) response_json = json.loads(response.decode('utf-8')) total_bytes = sum(d.get('Traffic', 0) for d in response_json.get('TrafficDetails', [])) total_gb = total_bytes / (1024 ** 3) logger.info(f"当前总互联网流量: {total_gb:.2f} GB") return total_gb except Exception as e: logger.error(f"获取CDT流量失败: {e}") sys.exit(1) # ================== 5. 查询ECS实例状态 ================== def get_ecs_status(client, instance_id): try: request = DescribeInstancesRequest.DescribeInstancesRequest() request.set_InstanceIds([instance_id]) response = client.do_action_with_exception(request) response_json = json.loads(response.decode('utf-8')) instances = response_json.get("Instances", {}).get("Instance", []) if not instances: logger.error("未找到该ECS实例信息。") return None status = instances[0].get("Status") logger.info(f"ECS实例 {instance_id} 当前状态: {status}") return status except Exception as e: logger.error(f"获取ECS实例状态失败: {e}") return None # ================== 6. 启动ECS实例 ================== def ecs_start(client, instance_id): status = get_ecs_status(client, instance_id) if status == "Running": logger.info(f"ECS实例 {instance_id} 已经是运行状态,无需启动。") return try: request = StartInstancesRequest.StartInstancesRequest() request.set_InstanceIds([instance_id]) request.set_accept_format('json') response = client.do_action_with_exception(request) logger.info(f"ECS启动响应: {response.decode('utf-8')}") except Exception as e: logger.error(f"启动ECS实例失败: {e}") # ================== 7. 停止ECS实例 ================== def ecs_stop(client, instance_id): status = get_ecs_status(client, instance_id) if status == "Stopped": logger.info(f"ECS实例 {instance_id} 已经是停止状态,无需再次停止。") return try: request = StopInstancesRequest.StopInstancesRequest() request.set_InstanceIds([instance_id]) request.set_ForceStop(False) request.set_accept_format('json') response = client.do_action_with_exception(request) logger.info(f"ECS停止响应: {response.decode('utf-8')}") except Exception as e: logger.error(f"停止ECS实例失败: {e}") # ================== 8. 主流程 ================== def main(): total_gb = get_total_traffic_gb(client) if total_gb < TRAFFIC_THRESHOLD_GB: logger.info(f"流量 {total_gb:.2f} GB < 阈值 {TRAFFIC_THRESHOLD_GB} GB,尝试启动 ECS") ecs_start(client, ECS_INSTANCE_ID) else: logger.info(f"流量 {total_gb:.2f} GB ≥ 阈值 {TRAFFIC_THRESHOLD_GB} GB,尝试停止 ECS") ecs_stop(client, ECS_INSTANCE_ID) logger.info("脚本执行完毕。") if __name__ == "__main__": main()

