本项目提供了一个简单高效的解决方案,让您能够在阿里云上一键部署HTTP/HTTPS/SOCKS代理和多种VPN服务。使用按量付费模式,按分钟计费,随用随起,用完即销毁,极大地降低了使用成本。
无论您是需要安全的网络访问、绕过地域限制,还是构建临时的安全通道,本工具都能满足您的需求,同时保持使用简便和成本可控。
| 特性 | 描述 |
|---|---|
| 🚀 一键部署 | 只需一条命令,快速创建和销毁完整的代理和VPN服务 |
| 💰 按需付费 | 基于阿里云按量付费ECS实例,仅在使用时计费,成本可控 |
| 🔒 多协议支持 | 同时支持SOCKS5、HTTP、HTTPS代理和IPsec/L2TP、Cisco IPsec、IKEv2 VPN |
| 🌍 全球部署 | 支持在多个阿里云全球区域部署,满足不同网络需求 |
| 🖥️ 多平台兼容 | 支持macOS和主流Linux发行版(Ubuntu、Debian、Fedora等) |
| 📦 灵活配置 | 支持仅部署代理服务或同时部署VPN服务,按需选择 |
| 💡 成本优化 | 自动选择最经济的实例类型,使用Spot实例策略进一步降低成本 |
| ⚙️ 自动配置 | 自动设置系统代理,无需手动配置应用程序 |
| 🔄 协议转换 | 内置SOCKS到HTTP代理转换工具,兼容各种应用程序 |
本工具采用基础设施即代码(IaC)和自动化部署的方式,实现代理和VPN服务的快速搭建:
- 使用Terraform在阿里云上自动创建一台按量付费的ECS实例
- 配置安全组规则,开放必要的端口
- 通过SSH隧道将远程服务器的SOCKS代理转发到本地端口
- 在远程服务器上按需自动部署VPN服务(如果启用)
- 在本地启动SOCKS到HTTP的代理转换服务,支持更多应用程序
- 自动配置系统代理设置,应用程序无需额外配置
- 操作系统: macOS 或 Linux 发行版 (Ubuntu、Debian、Fedora等)
- 软件依赖: 将通过安装脚本自动安装
- 账户要求: 阿里云账号及有效的Access Key凭证
- 账号余额充足,能够创建按量付费的ECS实例
- 具备创建ECS、VPC、安全组等资源的权限
首先,需要设置阿里云的访问凭证作为环境变量:
export ALICLOUD_ACCESS_KEY="your-access-key-id"
export ALICLOUD_SECRET_KEY="your-secret-access-key"💡 提示:您可以将这些环境变量添加到
.bashrc或.zshrc文件中,以便永久保存。
运行安装脚本来自动配置所需的依赖:
./install.sh该脚本会根据您的操作系统自动安装:
- Terraform (基础设施即代码工具)
- sshpass (SSH自动密码登录工具)
- 必要的系统工具
- Homebrew (仅macOS,如果未安装)
支持多种Linux发行版,包括Ubuntu/Debian和Fedora。
./start_proxy.sh./start_proxy.sh --no-vpn # 或使用简写 -n./start_proxy.sh --timeout 1800 # 或使用简写 -t 1800启动成功后,您将看到详细的代理和VPN配置信息:
✅ 代理服务已启动
Public IP: x.x.x.x
🔌 代理配置:
- SOCKS5代理: socks5h://127.0.0.1:9002
- HTTP/HTTPS代理: http://127.0.0.1:8080
🔒 VPN配置 (如果启用):
- 服务器地址: x.x.x.x
- 用户名: vpn
- 密码: Admin123
- IPsec PSK: Admin123
服务启动后,系统会自动配置代理设置。以下是详细的使用方法:
脚本会自动配置系统代理设置,大多数应用程序会自动使用这些设置。
如果需要为特定应用程序手动设置代理,可以使用以下环境变量:
# SOCKS5代理
export HTTP_PROXY=socks5h://127.0.0.1:9002
export HTTPS_PROXY=socks5h://127.0.0.1:9002
# HTTP代理 (通过转换工具)
export HTTP_PROXY=http://127.0.0.1:8080
export HTTPS_PROXY=http://127.0.0.1:8080- SOCKS5代理:
127.0.0.1:9002 - HTTP/HTTPS代理:
127.0.0.1:8080
项目包含了内置的SOCKS到HTTP转换工具:
- 位于:
socket_to_http/socks2http - 功能:将SOCKS5流量转换为HTTP/HTTPS流量
- 优势:使不直接支持SOCKS代理的应用程序也能使用代理服务
- 自动启动:由
start_proxy.sh脚本自动启动和管理
# curl 使用代理
curl -x socks5h://127.0.0.1:9002 https://example.com
# wget 使用代理
wget -e use_proxy=yes -e http_proxy=127.0.0.1:8080 https://example.com# 设置Git使用代理
git config --global http.proxy http://127.0.0.1:8080
git config --global https.proxy https://127.0.0.1:8080
# 取消Git代理设置
git config --global --unset http.proxy
git config --global --unset https.proxy部署的VPN服务器支持三种主流协议,所有协议使用相同的认证信息:
| 配置项 | 值 |
|---|---|
| 服务器地址 | 启动后显示的公网IP |
| 用户名 | vpn |
| 密码 | Admin123 |
| 预共享密钥(PSK) | Admin123 |
适用于大多数设备的兼容性方案。
iOS/macOS配置:
- 设置 > 通用 > VPN与设备管理 > VPN
- 添加VPN配置
- 类型选择 "L2TP over IPSec"
- 描述:输入自定义名称(如"阿里云VPN")
- 服务器:输入启动脚本显示的公网IP地址
- 账户:
vpn - 密码:
Admin123 - 密钥:
Admin123 - 点击"完成"并连接
Android配置:
- 设置 > 网络和互联网 > VPN
- 添加VPN配置
- 类型选择 "L2TP/IPSec PSK"
- 名称:输入自定义名称
- 服务器地址:输入公网IP地址
- IPSec预共享密钥:
Admin123 - 输入用户名和密码
- 保存并连接
提供更好的性能、安全性和连接稳定性。
iOS/macOS配置:
- 设置 > 通用 > VPN与设备管理 > VPN
- 添加VPN配置
- 类型选择 "IKEv2"
- 描述:输入自定义名称
- 服务器:输入公网IP地址
- 远程ID:输入公网IP地址
- 本地ID:留空
- 用户鉴定:选择"用户名"
- 用户名:
vpn - 密码:
Admin123 - 点击"完成"并连接
Windows配置:
- 设置 > 网络和Internet > VPN > 添加VPN连接
- 提供商:Windows内置
- 连接名称:输入自定义名称
- 服务器名称或地址:输入公网IP地址
- VPN类型:IKEv2
- 登录信息的类型:用户名和密码
- 用户名:
vpn - 密码:
Admin123 - 保存并连接
适用于需要Cisco兼容性的企业网络环境。
- 使用支持Cisco IPsec的VPN客户端
- 服务器地址:输入公网IP地址
- 预共享密钥:
Admin123 - 用户名:
vpn - 密码:
Admin123 - 保存并连接
🔒 安全提示:默认VPN凭证仅供测试使用,生产环境请务必修改密码!
默认配置在 providers.tf 文件中定义,主要参数包括:
| 配置项 | 默认值 | 说明 |
|---|---|---|
| 区域 | eu-central-1 |
阿里云区域,德国法兰克福 |
| 实例类型 | 自动选择 | 选择最经济的1核实例 |
| 实例策略 | Spot实例 | 降低成本,可能会被回收 |
| 系统镜像 | Ubuntu 18.04 | 稳定可靠的Linux发行版 |
| 网络配置 | 自动创建 | 自动创建VPC和VSwitch |
| 安全组规则 | 全端口开放 | 开放所有TCP/UDP端口(1-65535) |
| 计费模式 | 按量付费 | 按实际使用时长收费 |
| VPN服务 | hwdsl2/ipsec-vpn-server | 基于Docker的VPN服务 |
start_proxy.sh 支持以下命令行参数:
| 参数 | 简写 | 说明 | 默认值 |
|---|---|---|---|
--vpn |
-v |
部署VPN服务 | 启用 |
--no-vpn |
-n |
不部署VPN服务 | 禁用 |
--timeout |
-t |
代理运行时间(秒) | 3600秒 |
--help |
-h |
显示帮助信息 | - |
可在 providers.tf 中修改以下参数:
| 参数 | 说明 | 推荐值 |
|---|---|---|
region |
阿里云区域 | cn-hongkong, us-east-1, eu-central-1等 |
instance_type |
ECS实例类型 | 可根据需要调整配置 |
image_id |
系统镜像ID | Ubuntu 18.04或更新版本 |
internet_max_bandwidth_out |
公网带宽 | 根据需要设置,默认为5Mbps |
以下是部分支持的阿里云区域列表:
cn-hongkong- 中国香港eu-central-1- 德国(法兰克福)- 默认ap-northeast-1- 日本(东京)ap-southeast-1- 新加坡us-east-1- 美国(弗吉尼亚)us-west-1- 美国(硅谷)ap-southeast-2- 澳大利亚(悉尼)eu-west-1- 英国(伦敦)
💡 提示:不同区域的价格和网络延迟可能有所不同,请根据实际需求选择合适的区域。
启动脚本运行过程中执行以下操作:
- 使用Terraform创建阿里云ECS实例
- 配置安全组规则,开放必要端口
- 通过SSH隧道将远程服务器的SOCKS代理转发到本地端口9002
- (可选)在远程服务器上部署VPN服务
- 启动本地SOCKS到HTTP转换工具(端口8080)
- 自动配置系统代理设置:
- macOS使用
networksetup命令 - Linux使用
gsettings命令
- macOS使用
- 显示详细的代理和VPN配置信息
- 持续监控远程服务器连接状态
- 到达指定超时时间后自动清理资源
ℹ️ 注意:脚本运行期间会持续占用终端,按Ctrl+C可提前终止服务。
在使用本工具时,请务必注意以下几点:
- 账户余额:确保阿里云账号有足够的余额和权限创建资源
- 资源清理:使用完毕后务必运行
./destroy_proxy.sh销毁资源,避免产生不必要费用 - 区域选择:默认区域为
eu-central-1,可根据网络需求修改providers.tf文件 - 进程管理:本地代理转换工具会在后台运行,可在系统活动监视器中查看
- 安全风险:默认VPN凭证较为简单(
Admin123),生产环境必须修改 - 端口开放:当前配置开放所有TCP/UDP端口,生产环境请调整安全组设置
- 实例回收:使用Spot实例策略可显著降低成本,但在资源紧张时可能被回收
- 网络费用:请注意阿里云的流量费用,大量数据传输可能产生额外费用
- 合规使用:请遵守相关法律法规和阿里云服务条款
遇到问题时,请参考以下解决方案:
# 确保所有脚本具有执行权限
chmod +x *.sh
chmod +x socket_to_http/*- 检查安全组规则:确保阿里云安全组正确配置并开放必要端口
- 检查本地防火墙:确认本地防火墙没有阻止端口访问
- 验证实例状态:检查ECS实例是否成功创建并正常运行
- 测试基本连接:尝试使用SSH直接连接到实例
- 验证凭证:确认用户名、密码和PSK是否正确输入
- 检查端口开放:确保UDP端口500、4500和1701已开放
- 检查VPN服务:使用SSH连接到服务器,确认VPN服务正在运行
- 查看日志:连接到服务器查看VPN服务日志获取详细错误信息
macOS手动重置代理设置:
networksetup -setsocksfirewallproxystate "Wi-Fi" off
networksetup -setwebproxystate "Wi-Fi" off
networksetup -setsecurewebproxystate "Wi-Fi" off
networksetup -setdnsservers "Wi-Fi" emptyLinux手动重置代理设置:
# 对于GNOME桌面
gsettings set org.gnome.system.proxy mode 'none'
# 清除环境变量
unset HTTP_PROXY HTTPS_PROXY http_proxy https_proxy- 检查账户权限:确认阿里云账号有创建ECS、VPC等资源的权限
- 检查账户余额:确保阿里云账号余额充足
- 查看Terraform日志:检查错误输出,获取详细的失败原因
| 错误代码 | 可能原因 | 解决方案 |
|---|---|---|
| InvalidAccessKeyId.NotFound | Access Key ID不存在或格式错误 | 检查并重新设置ALICLOUD_ACCESS_KEY环境变量 |
| InvalidAccessKeySecret.NotFound | Access Key Secret不匹配 | 检查并重新设置ALICLOUD_SECRET_KEY环境变量 |
| Forbidden.NoStock | 所选区域资源不足 | 尝试选择其他区域或调整实例类型 |
| Forbidden | 权限不足 | 确认账号有足够权限创建相关资源 |
为增强安全性,建议修改默认的VPN凭证:
- 编辑
config_script/remote.sh文件 - 修改以下变量:
# VPN预共享密钥 VPN_IPSEC_PSK="your-secure-psk" # VPN用户名 VPN_USER="your-vpn-username" # VPN密码 VPN_PASSWORD="your-secure-password"
- 保存文件并重新启动服务
在 providers.tf 中,可以调整实例配置以满足不同需求:
# 调整实例类型过滤条件
data "alicloud_instance_types" "default" {
# 调整CPU核心数
cpu_core_count = 2
# 调整内存大小(GB)
memory_size = 4
# 调整实例类型族
instance_type_family = "ecs.s6"
}如需限制端口开放范围,可修改 providers.tf 中的安全组规则:
# 自定义安全组规则
resource "alicloud_security_group_rule" "allow_common_ports" {
type = "ingress"
ip_protocol = "tcp"
nic_type = "intranet"
policy = "accept"
port_range = "22/22" # 仅开放SSH端口
priority = 1
security_group_id = alicloud_security_group.default.id
cidr_ip = "0.0.0.0/0"
}
# 为VPN添加必要端口
resource "alicloud_security_group_rule" "allow_vpn_ports" {
type = "ingress"
ip_protocol = "udp"
nic_type = "intranet"
policy = "accept"
port_range = "500/500,4500/4500,1701/1701" # VPN端口
priority = 1
security_group_id = alicloud_security_group.default.id
cidr_ip = "0.0.0.0/0"
}# 调整公网带宽
resource "alicloud_instance" "default" {
# ... 其他配置 ...
internet_max_bandwidth_out = 10 # 设置为10Mbps
# ... 其他配置 ...
}为确保您的代理和VPN服务安全可靠,请遵循以下安全建议:
- 环境变量: 始终使用环境变量存储阿里云凭证,避免硬编码
- 密钥轮换: 定期更换阿里云Access Key
- 最小权限: 为Access Key分配最小必要的权限范围
- 修改默认密码: 生产环境必须修改默认密码(
Admin123) - 复杂密码: 使用强密码,包含大小写字母、数字和特殊字符
- 定期更换: 定期更新VPN密码和预共享密钥
- 限制访问范围: 生产环境中限制安全组的访问来源IP
- 端口最小化: 只开放必要的端口,避免开放全部端口(1-65535)
- 加密通信: 确保所有代理连接使用加密协议
- 及时销毁: 使用完毕后立即销毁资源,避免闲置资源被利用
- 定期审计: 检查账号活动和资源使用情况
- 监控异常: 注意监控异常的网络流量和连接尝试
- 遵守法规: 确保使用符合当地法律法规
- 服务条款: 遵守阿里云服务条款和可接受使用政策
- 隐私保护: 不要传输敏感或个人隐私数据,除非进行了适当加密
使用完毕后,请务必运行以下命令销毁资源,避免产生不必要的费用:
./destroy_proxy.sh销毁脚本将执行以下操作:
- 重置系统代理设置(macOS和Linux)
- 终止本地SOCKS到HTTP转换进程
- 断开与远程服务器的SSH连接
- 使用Terraform销毁阿里云上的所有资源,包括:
- ECS实例
- VPC和网络配置
- 安全组
- 其他相关资源
⚠️ 重要提示:如果启动脚本异常终止,也请手动运行销毁脚本清理资源。
本项目采用MIT许可证 - 详见 LICENSE 文件。
A: 是的,Spot实例可能在资源紧张时被阿里云回收。如果您需要稳定的服务,建议修改配置使用按量付费的常规实例。
A: 启动脚本运行时会显示实时状态。您也可以通过阿里云控制台查看ECS实例状态。
A: 目前脚本设计为单区域部署,但您可以复制项目目录并修改配置在不同区域分别部署。
A: 使用 --timeout 参数,例如 ./start_proxy.sh --timeout 7200 将超时设置为2小时。
A: 当前版本主要针对IPv4网络进行了优化,暂不支持完整的IPv6功能。
欢迎提交Issue和Pull Request!如果您有任何改进建议或发现了问题,请随时提出。
如有问题或建议,请通过项目的Issue页面联系我们。
⭐ 如果你觉得这个项目对你有帮助,请给我们一个Star!
本工具仅用于合法目的,请遵守相关法律法规和服务条款。