用 KCP 实现了个比较简易的 VPN,支持桥接、多客户端、分配 IP

2019-11-01 00:57:27 +08:00
 extreme

因为有内网穿透和异地组网的需求,经常需要 VPN 这种东西。

不过日常使用中,即使在国内同一个城市的两个地方,使用同一个 ISP,之间互联的网络也算不上稳定,例如 Windows RDP 启用 UDP 就经常遇到画面静止不动的情况,如果关闭 UDP,仅用 TCP 就有点卡……

kcptun 可以解决遇到的 TCP 不流畅问题,不过 kcptun 仅支持在服务端转发,而且在内网服务器是没有公网 IP 的,一个 kcptun 也只能转发一个固定 TCP 端口,而且最麻烦的是,也仅支持 TCP 转发。

之前 V2 有位高人写的 tinyFecVPN 效果也不错,VPN 可以转发 L3,但是不支持多客户端,每个点对点之间都要独立运行一个程序,独立指定一个 /24 (然而只用到其中两个 IP,汗),管理有点麻烦,另外其用的 tun 也不支持 L2 组网,也就是桥接。

在貌似找不到符合自己需求的现成方案的情况下,就参考了 kcptun 和 tinyFecVPN,用 kcp-go 造了一个:

一个服务端支持多个客户端;虚拟网卡也可以自行选择使用 tun 还是 tap ;支持为客户端分配 IP,当然如果用的是 tap,你还可以使用自己的 DHCP 服务器。

因为参考(其实是 copy )了 kcptun,所以 kcptun 可以通过命令行参数调整的 KCP 参数,在这个 VPN 程序上都可以用。

源码和使用教程都已经放在了 GITHUB 上,有需要或者有兴趣的可以了解一下:https://github.com/yzsme/kcpvpn

当然程序弄好不久,目前就我自己在使用,所以很大概率会有我没发现的 BUG

最后,提醒一下:本程序仅用于异地组网,不支持其它用途,使用时请严格遵守当地法律

5306 次点击
所在节点    宽带症候群
4 条回复
ganwen
2019-11-03 15:13:37 +08:00
东西是好东西,但没人回复。

国人对这种 vpn 的需求太少了,主要是拿来科学不方便,可惜咯。
whywhywhy
2019-11-04 08:27:33 +08:00
能不能从服务器下发路由表,如果没有的话希望有。
extreme
2019-11-04 13:13:14 +08:00
@whywhywhy 汗,这个大概可以通过 hook 实现,不过我觉得如果你想简单点,可以考虑 rip 或者 ospf。
extreme
2019-11-04 13:14:26 +08:00
@ganwen 用了几天,发现 kcp-go 带的 fec 好像效果不太好,不确定是我实现的问题还是 kcp-go 的问题,最近在纠结咋解决……

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/615065

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX