KCP 代理
EasyTier 一般使用 UDP 协议进行数据传输虚拟网的 IP 数据包。但是某些运营商会对 UDP 协议进行限制,导致 UDP 有较高的丢包率,影响虚拟网内 TCP 协议的传输速度。
为了解决此问题,EasyTier 提供 KCP 代理功能,可以代理虚拟网内的 TCP 链接,并转换为 KCP 协议进行传输。 由于 KCP 有更激进的重传机制,可以有效降低丢包率,提高虚拟网内的 TCP 传输速度。
使用 KCP 代理
KCP 代理功能需要虚拟网内 所有节点 的 EasyTier 版本在 v2.2.0 以上。
假设想将 A 节点上的 TCP 流量代理为 KCP 协议,只需要在 A 节点上启动 EasyTier 时指定 --enable-kcp-proxy
参数即可。
KCP 代理会保证版本兼容性,如果发现对端节点不支持 KCP 代理,会自动切换回 TCP 协议。
KCP 代理默认使用内核的网络栈,可能由于系统防火墙设置导致无法正常工作。可以尝试结合 --use-smoltcp
参数,切换到用户态网络栈。
禁用 KCP 入站
如果不希望发往某个节点的流量使用 KCP 协议,可以在对端节点上启动 EasyTier 时指定 --disable-kcp-input
参数。
以简介中的例子为例,如果不希望 B 节点接收 KCP 流量,可以在 B 节点上启动 EasyTier 时指定 --disable-kcp-input
参数。这样即使 A 节点启用了 KCP 代理,A 节点发往 B 节点的流量依然使用 TCP 协议。
网对网 KCP 支持
假设节点 A 是路由器,A 下的子网访问 EasyTier 其他节点本身或者其他代理子网时,也可以使用 KCP 代理,但是需要 A 节点使用用户态网络栈即 --use-smoltcp
参数。 否则仍会使用 TCP 协议。
查看 KCP 代理状态
可以通过 EasyTier Cli 工具查看 KCP 代理的链接的状态。
$ easytier-cli proxy
┌────────────────────┬───────────────────┬─────────────────────────┬───────────┬────────────────┐
│ src │ dst │ start_time │ state │ transport_type │
├────────────────────┼───────────────────┼─────────────────────────┼───────────┼────────────────┤
│ 10.126.126.7:51838 │ 10.147.223.128:22 │ 2025-02-07 10:39:08 UTC │ Connected │ Tcp │
├────────────────────┼───────────────────┼─────────────────────────┼───────────┼────────────────┤
│ 0.0.0.0:0 │ 10.147.223.1:80 │ 2025-02-07 10:41:28 UTC │ Connected │ Kcp │
├────────────────────┼───────────────────┼─────────────────────────┼───────────┼────────────────┤
│ 0.0.0.0:0 │ 10.147.223.1:80 │ 2025-02-07 10:41:18 UTC │ Connected │ Kcp │
└────────────────────┴───────────────────┴─────────────────────────┴───────────┴────────────────┘