AI辅助开发实战:用Claude构建跨云VPN工具

本文详细记录了使用Claude AI构建跨云WireGuard VPN部署工具ProxyGen的全过程,涵盖技术架构设计、多云部署实现、客户端管理功能开发,以及AI编程中的挑战与解决方案。

AI辅助开发-实践出真知

人工智能(AI),即大型语言模型(LLM)和生成式AI开发,也被称为氛围编程,是当前的热门话题。每个人都希望在工具和用例中融入一定程度的AI集成。LLM本质上存在缺陷,其好坏完全取决于训练数据,因此容易出现幻觉。这个项目确实凸显了这一点,当Claude决定发明一个不存在的Python库和函数调用时,它带来的痛苦远大于其价值!

TL;DR:我让Claude Code编写了一个VPN/端点部署和生成工具,只需最少的提示,以测试其能力以及它会建议哪些选项。

GitHub - ZephrFish/ProxyGen: 使用TF和Python将Wireguard部署到多个云提供商 - 100%由Claude编写

我已经使用AI辅助一些开发工作多年了,但这是我第一个仅通过架构设计提示构建的工具,并由Claude完成其余部分,也称为氛围编程。最初的动机是因为英国对访问各种内容实施了限制(具体来说,我当时在阅读Reddit,没有VPN或年龄验证就被屏蔽了:/),我想要一个简单的一键部署工具来绕过限制,利用黑客思维来规避控制。虽然我日常使用Mullvad VPN,但构建副项目很有趣。

所以我从一个想法开始,我想创建一个通用的WireGuard VPN配置工具,类似于VPN Road Warrior创建脚本的工作方式(这是我十多年前发现的,并且多年来一直是我的首选),但要跨多个云提供商提供选项,同时也想看看Claude在Python中构建具有各种功能的此类工具的表现如何。

初始设计/概念

许多AI工具如Claude和ChatGPT基于对话交互,但如果你给它们明确的提示并设计你想要的内容,它们处理得很好。所以我首先对Claude code做了 exactly that,我设置了以下提示,包含我想要实现的所有内容以及每个部分应该做什么:

项目需求

创建一个名为"vpngen"的综合命令行工具,自动化跨多个云提供商(AWS、Azure、GCP)部署和管理WireGuard VPN服务器。

核心功能

  1. 多云部署

    • 将WireGuard VPN服务器部署到AWS、Azure和GCP
    • 支持每个提供商的多个区域
    • 通过Terraform处理所有基础设施配置
    • 使用Ansible自动配置VPN服务器
  2. 自动化配置

    • 自动生成具有正确命名的SSH密钥(vpngen-region-key.pem)
    • 使用安全默认值配置WireGuard
    • 设置正确的NAT规则和IP转发
    • 配置DNS-over-HTTPS以保护隐私
    • 处理cloud-init时序和SSH连接问题
  3. 客户端管理

    • 动态添加/删除VPN客户端
    • 自动生成客户端配置文件
    • 从子网池分配唯一的IP地址
    • 跟踪每个部署的客户端连接
  4. 部署跟踪

    • 每个区域多个实例的唯一部署ID(UID)
    • 综合库存管理系统
    • 跟踪每个部署的资源、成本和状态
    • 支持按部署ID选择性销毁
    • 使用元数据进行AWS资源标记
  5. 成本管理

    • 基于实例类型和区域估算成本
    • 显示每日、每月和年度成本预测
    • 支持不同的实例大小(AWS的t3.nano到t3.large等)
    • 在列表命令中显示成本、公共IP和实例类型

技术要求

  • 语言:Python
  • 基础设施:Terraform用于配置
  • 配置:Ansible用于服务器设置
  • VPN:WireGuard用于安全隧道
  • 状态管理:基于JSON的库存跟踪
  • 跨平台:支持Linux和macOS(附带Homebrew说明)

要实现的命令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 初始化
./vpngen init                          # 设置环境和依赖
./vpngen configure                     # 配置云凭证

# 部署
./vpngen deploy --provider aws --regions us-east-1,eu-west-1
./vpngen deploy --provider azure --regions uksouth --dry-run
./vpngen deploy --provider gcp --regions europe-west2

# 客户端管理
./vpngen client add --name laptop --server us-east-1
./vpngen client list
./vpngen client remove --name laptop --server us-east-1

# 列表和监控
./vpngen list                          # 显示带有IP、类型、成本的部署
./vpngen list --detailed               # 综合报告
./vpngen inventory show                # 完整库存详情

# 销毁
./vpngen destroy --provider aws --regions us-east-1
./vpngen destroy --id aws-us-east-1-abc123 --force

# 帮助和示例
./vpngen examples                      # 显示使用示例
./vpngen --help                       # 命令帮助

要包含的关键特性

  1. 可靠性

    • SSH连接的重试逻辑
    • 适当的错误处理和数据记录
    • 修改前备份库存
    • 状态文件管理
  2. 安全性

    • 使用强SSH密钥
    • WireGuard必须使用加密
    • 无硬编码凭据
    • 所有配置的安全默认值
  3. 用户体验

    • 干净、专业的输出(无表情符号)
    • 清晰的进度指示器
    • 有用的错误消息
    • 综合示例命令
  4. 企业特性(模块化设计)

    • 高可用性支持
    • 监控集成
    • 备份管理
    • 证书管理
    • 访问控制
    • 审计日志

问题解决需求

该工具必须解决这些常见的VPN部署问题:

  • 初始设置期间的SSH连接超时
  • WireGuard服务配置失败
  • NAT和IP转发设置
  • DNS解析问题
  • 云提供商身份验证
  • 同一区域多个部署的冲突
  • 成本跟踪和优化
  • 跨平台兼容性

交付物

  1. 主Python脚本(vpngen)包含所有命令

  2. AWS、Azure、GCP的Terraform配置

  3. 服务器配置的Ansible剧本

  4. 专门功能的库模块

  5. 测试脚本和验证工具

最终工具应提供跨多个云提供商部署和管理WireGuard VPN服务器的解决方案,所需的手动干预最少。

现在有人可能会争辩说,我列出的规范足够长,以至于我自己用如此深入的提示编写脚本也一样,但我想看看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插件

以上所有都是某种急性场景,用例有限,但我能说什么呢,我喜欢编写随机副项目,并努力让事情帮助我更好地完成工作和各种研究。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计