【发布时间】:2011-09-11 09:14:23
【问题描述】:
我决定用 Java 编写自己的轻量级 VPN 服务器。从编程的角度来看,在我看来,VPN 服务器只是一个传递代理,它对来自客户端的流量进行加密,并在服务器上对其进行解密。有人可以指出我编写这种服务器的框架吗?
我知道有很多开箱即用的,甚至是开源的,但不幸的是,尽管我知道几种 Web 编程语言,但我看到的 C 代码示例并没有以我可以理解的方式记录/结构化。
我想我需要的部分是:
- 客户端对象的线程工厂
- 客户端的插座连接器
- 创建IPSec认证头(AH)的方法
- 创建 IPSec 封装安全负载 (ESP) 的方法
- 互联网安全协会和密钥管理协议 (ISAKMP)
- 互联网密钥交换 (IKE)
- PKI 证书身份验证模块
- 证书存储库 (SQLLite)
- Oakley 密钥生成(用于 IKE 和 ISAKMP)
- 数据包的一些反重放预防
我计划使用通用模块(并为其创建适配器)的部分是密码算法(最好是 AES,尽管看起来像 DES / 3DES 之类的窗口 -- 新手)
如果有人可以为 IPSec vpn 服务器所需的部分添加更多详细信息,请随时贡献。据我所知,由于有必要在较旧的 linux 硬件上运行它,因此服务器应该是 IPSec,而不是 SSLVPN 热点。目标平台是一个旧的 1.5 Ghz 英特尔机器,我用 2 GB DDR2 内存、镜像 100 GB 硬盘驱动器和 2 个千兆网卡进行了抽水。
从好的方面来说,由于客户端 VPN 的类型如此之多,我很确定不需要为我的需要制作一个。
【问题讨论】:
-
这是一项比您想象的要大得多的任务。为什么你不能使用 OpenVPN?
-
其实不是。实际上,我已经编写了几个企业应用程序(例如工作流模块、自制代理、SHA1 密码摘要认证模块等)。我编写的最后一个应用程序在测试版时大约有 28k 行代码。因此,与其攻击我,不如回答问题或将我指向有用的资源,而不是燃烧和关闭有效的帖子。
-
好问题,可惜关门了。我也需要答案。
-
也许是一种学习练习?这就是为什么我想这样做。加上它的乐趣。使用这种逻辑,为什么有人会构建任何东西?因为大多数原创应用创意已经被采纳
-
示例 vpn 服务器(300 行)和 android 客户端 android.googlesource.com/platform/development/+/master/samples/…