AI辅助开发实战:用Claude构建多云VPN部署工具
项目背景
人工智能(AI)即大型语言模型(LLM)和生成式AI开发(也称为vibecoding)是当前的热门话题,每个人都希望在工具和用例中集成一定程度的AI。LLM本质上存在缺陷,其质量完全取决于训练数据,因此容易出现幻觉。这个项目充分凸显了这一点——当Claude决定发明一个不存在的Python库和函数调用时,带来的麻烦远超过其价值!
TL;DR:我让Claude Code编写了一个VPN/端点部署和生成工具,通过最少的提示来测试其能力以及它会建议哪些选项。
GitHub - ZephrFish/ProxyGen: 使用TF和Python将Wireguard部署到多个云提供商 - 100%由Claude编写
我已经使用AI辅助开发工作多年,但这是第一个仅通过架构设计提示构建的工具,其余部分都由Claude完成,这也被称为VibeCoding。最初的动机是因为英国对访问各种内容实施了限制(具体来说,我在阅读Reddit时被阻止,没有VPN或年龄验证无法访问),我想要一个简单的单点击部署解决方案来绕过限制,使用黑客思维来规避控制。虽然我日常使用Mullvad VPN,但构建副项目很有趣。
初始设计/概念
我从一个想法开始:创建一个通用的WireGuard VPN配置工具,类似于VPN Road Warrior创建脚本(我十多年前发现并多年来一直使用),但要跨多个云提供商提供选项,并观察Claude如何应对在Python中构建具有各种功能的此类工具。
项目需求
创建一个名为"vpngen"的综合命令行工具,自动化跨多个云提供商(AWS、Azure、GCP)部署和管理WireGuard VPN服务器。
核心功能
-
多云部署
- 将WireGuard VPN服务器部署到AWS、Azure和GCP
- 支持每个提供商的多个区域
- 通过Terraform处理所有基础设施配置
- 使用Ansible自动配置VPN服务器
-
自动化配置
- 自动生成具有适当命名的SSH密钥(vpngen-region-key.pem)
- 使用安全默认值配置WireGuard
- 设置适当的NAT规则和IP转发
- 配置DNS-over-HTTPS以保护隐私
- 处理cloud-init时序和SSH连接问题
-
客户端管理
- 动态添加/删除VPN客户端
- 自动生成客户端配置文件
- 从子网池分配唯一IP地址
- 跟踪每个部署的客户端连接
-
部署跟踪
- 每个区域多个实例的唯一部署ID(UID)
- 综合库存管理系统
- 跟踪每个部署的资源、成本和状态
- 支持按部署ID选择性销毁
- 带有元数据的AWS资源标记
-
成本管理
- 基于实例类型和区域估算成本
- 显示每日、每月和年度成本预测
- 支持不同的实例大小(AWS的t3.nano到t3.large等)
- 在列表命令中显示公共IP和实例类型的成本
技术要求
- 语言:Python
- 基础设施:Terraform进行配置
- 配置:Ansible进行服务器设置
- VPN:WireGuard用于安全隧道
- 状态管理:基于JSON的库存跟踪
- 跨平台:支持Linux和macOS(带有Homebrew说明)
要实现的命令
|
|
要包含的关键功能
-
可靠性
- SSH连接的重试逻辑
- 适当的错误处理和数据记录
- 修改前的备份库存
- 状态文件管理
-
安全性
- 使用强SSH密钥
- WireGuard必须使用加密
- 无硬编码凭据
- 所有配置的安全默认值
-
用户体验
- 干净、专业的输出(无表情符号)
- 清晰的进度指示器
- 有用的错误消息
- 综合示例命令
-
企业功能(模块化设计)
- 高可用性支持
- 监控集成
- 备份管理
- 证书管理
- 访问控制
- 审计日志
问题解决需求
该工具必须解决这些常见的VPN部署问题:
- 初始设置期间的SSH连接超时
- WireGuard服务配置失败
- NAT和IP转发设置
- DNS解析问题
- 云提供商身份验证
- 同一区域中多个部署的冲突
- 成本跟踪和优化
- 跨平台兼容性
交付物
-
主Python脚本(vpngen)包含所有命令
-
AWS、Azure、GCP的Terraform配置
-
服务器配置的Ansible playbook
-
专业功能库模块
-
测试脚本和验证工具
最终工具应提供跨多个云提供商部署和管理WireGuard VPN服务器的解决方案,需要最少的 manual干预。
开发过程
有人可能会争辩说,我列出的规范足够长,我自己编写脚本也一样,但我想看看Claude如何应对如此健壮的需求。结果相当不错,结合了SuperClaude——这是Claude Code的一个插件,允许更广泛的要求和代理为你构建东西并在代理之间切换。
Claude开始工作,构建文件夹结构,请求我许可使用某些命令并继续执行。经过一些进一步的提示后,它构建了一个概念验证,我需要手动调整,但它确实输出了一个相当不错的PoC。我最初想要的选项包括GCP,但后来发现Google Cloud不像AWS/Azure/DigitalOcean/其他VPS提供商那样容易使用,因此要求claude重写代码,考虑后两个并从中删除GCP,经过几次迭代后,ProxyGen诞生了。
功能特性
该工具的核心功能是在不同的云提供商中构建盒子,并能够部署多跳以增加隐私和乐趣:
- 多云部署:AWS、Azure、DigitalOcean(Alpha)、Hetzner(Alpha)
- 客户端管理:添加、删除和配置WireGuard客户端,当您有多个或单个云提供商时,能够轻松注册客户端是一个选项
- 多跳代理链:创建注重隐私的代理链,将多个盒子部署到不同的提供商
- 成本跟踪:监控跨提供商的部署成本,因为没有人想在云成本上花费过多
- 资源发现:自动云资源检测,我编写了一个小扩展,允许脚本在插入不同凭据时进行发现,它将找到已部署的实例,并允许将它们同步到部署机器以进行库存管理
测试和实验
现在工具已完全构建,下一个逻辑步骤是压力测试并实际使用它,这遇到了一些奇怪的伦理边界,因为Claude忘记它构建了它,并声称运行测试以规避控制是不道德的。提醒模型它最初编写了代码很快就解决了这个问题,回到了实验和测试。我发现一个有趣的现象是,如果你说服Claude它编写了代码,它会很快忽略其规定的伦理边界,重新开始编写黑客工具。
结果和体会
最终产品,它某种程度上有效,但并不出色,作为一个在周末构建的有趣项目,测试Claude的能力是很好的。除了ProxyGen,我还让Claude帮助我编写另外两个工具,但使用基线代码作为种子,而不是从头开始构建。
第一个工具类似于fireprox,但用于浏览器,ProxyForge与在笔记本电脑上运行的服务器组件配合使用,旨在为每个浏览器请求轮换IP,但我仍在作为一个概念验证进行实验:
GitHub - ZephrFish/ProxyForge: 尝试使用AWS API网关进行IP轮换的Chrome插件
第二个是我已经开始编写的一个脚本,形式是Visual Studio Code扩展,用于实时进行VBE解码。存在用于插入文件并解码的工具,但我想要一个简单的扩展,在应用程序中打开文件时解码它们,以便更容易浏览潜在文件以获取凭据和其他有趣数据。
GitHub - ZephrFish/VSCVBED: 实时解码VBE文件的Visual Studio Code插件
以上所有都是某种急性场景,用例有限,但我能说什么,我喜欢编写随机副项目,并努力让事情帮助我更好地完成工作和各种研究。