V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
extreme
V2EX  ›  宽带症候群

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

  •  1
     
  •   extreme · 2019-11-01 00:57:27 +08:00 · 5293 次点击
    这是一个创建于 1630 天前的主题,其中的信息可能已经有所发展或是发生改变。

    因为有内网穿透和异地组网的需求,经常需要 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

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

    4 条回复    2019-11-04 13:14:26 +08:00
    ganwen
        1
    ganwen  
       2019-11-03 15:13:37 +08:00
    东西是好东西,但没人回复。

    国人对这种 vpn 的需求太少了,主要是拿来科学不方便,可惜咯。
    whywhywhy
        2
    whywhywhy  
       2019-11-04 08:27:33 +08:00
    能不能从服务器下发路由表,如果没有的话希望有。
    extreme
        3
    extreme  
    OP
       2019-11-04 13:13:14 +08:00
    @whywhywhy 汗,这个大概可以通过 hook 实现,不过我觉得如果你想简单点,可以考虑 rip 或者 ospf。
    extreme
        4
    extreme  
    OP
       2019-11-04 13:14:26 +08:00
    @ganwen 用了几天,发现 kcp-go 带的 fec 好像效果不太好,不确定是我实现的问题还是 kcp-go 的问题,最近在纠结咋解决……
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3519 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 10:49 · PVG 18:49 · LAX 03:49 · JFK 06:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.