Yukicat
Yukicat 是一个多功能转发工具,它能够实现以下功能
- Socket 转发:
- 实现基础的 TCP/UDP 转发功能。
- TCP/UDP 的加密转发,转发协议为
chacha20-poly1305
。UDP 的加密模式可以选择性配置 FEC 编码来降低丢包率。
- Proxy
- 对于 TCP 协议,可以实现代理的服务/客户端功能。
- Mesh VPN:
- 在设置了 Discovery Service 后,能够基于此服务实现 Mesh VPN 功能。
项目说明
本仓库包含以下程序:
- ./cmd/cat: 本工具。
- ./android: Mesh VPN 的 Andorid Apk.
- ./cmd/server: 可选的中继及发现服务器。
使用说明
yukicat 将用户的行为简单归纳为将某类数据匹配到某类数据上, 如将一个TCP端口的数据匹配到一个远程的代理服务上。作为一个命令行工具, yukicat 需要用户提供两个 URL 地址来表达他们的意图。
基础用法
以下命令将会将本地的 8080/tcp 端口转发至远程的 example.com 的端口 123/tcp (XTCP本程序提供的TCP加密隧道)。
yukicat tcp://127.0.0.1:8080 xtcp://example.com:123
类似地,以下是一个 UDP 转发的用法:
yukicat -udp-timeout 30s udp://0.0.0.0:53 udp://127.0.0.53:53
-udp-timeout
为 UDP 转发指定了终止条件:当 UDP 在 30s 内无任何网络活动时,该连接将会被关闭。
中继
通过在公网上使用中继/发现服务器,可以将本工具用于内网穿透,该穿透支持 TCP/UDP。
设置中继/发现服务器
yukiserver --relay-background-interval 10s --pub AAA,BBB,CCC --host A.B.C.D
--relay-background-interval
指定了对于 UDP 类的中继连接,中继服务器进行连接检查的周期时间。
--pub
为 ed25519 公钥的名单, 在这个例子中,只有拥有 AAA, BBB, CCC 公钥的 yukicat 客户端才能够使用该服务器, 当此选项未指定时, 该服务器将允许所有客户端连接。
--host
为当 yukicat 使用该服务器时,它向其他客户端广播的它所使用的中继地址。
以下是一个内网穿透的例子:
yukicat disc://A.B.C.D/mychannel?relay=1&port=8081/tcp tcp://127.0.0.1:8080
这里 yukicat 将会注册 mychannel
为自己的地址,relay=1
代表开启中继(往往意味着它在 A.B.C.D 上使用了中继服务),而 port=8081/tcp
指定了它所使用的协议为 tcp, 且它会在本地的 8081 端口监听,其他 yukicat 在尝试中继之前将试图直接连接到该端口。port=-/tcp
表示协议为 tcp, 但该客户端不在任何端口监听。
这是访问 mychannel
的命令:
yukicat tcp://127.0.0.1:8081 disc://A.B.C.D/mychannel
这里该客户端将会通过运行第一个命令的机器连接到 127.0.0.1:8080
.
代理
代理服务在这里也被抽象成了资源映射的一种类型,以下命令将会启动一个代理服务器:
yukicat disc://A.B.C.D/myproxy?relay=1&port=8081/tcp proxy://
它的客户端将会运行一个本地代理,并将流量转发至代理服务器,如:
yukicat http-proxy://127.0.0.1:3128 disc://A.B.C.D/myproxy
将在本地启动一个 HTTP 服务器,并将其流量在 disc://A.B.C.D/myproxy
上代理。
Mesh VPN
Windows 前置条件
yukicat 依赖于 wintun, 请下载 wintun 并放在本程序所在目录。
使用
yukicat 基于以上发现服务和加密机制,在 wireguard-go
的基础上实现了 Mesh VPN。以下命令将会设置一个 VPN 服务:
yukicat tun://10.0.0.2?mtu=1320&dev=yuki0&mask=24&gateway=10.0.0.1 disc://A.B.C.D/mynetwork?relay=1&port=1000/xudp
该命令解释如下:
tun://10.0.0.2?mtu=1320&dev=yuki0&gateway=10.0.0.1
: 本 VPN IP 地址为 10.0.0.2(/24网段), 它的默认网关为 10.0.0.1, VPN 的适配器名称为 yuki0
, MTU 为 1320.disc://A.B.C.D/mynetwork?relay=1&port=1000/xudp
: VPN 的服务运行在发现网络 mynetwork
上,其他设备可通过 mynetwork/10.0.0.2
这一地址来找到本设备, 本设备同时也通过 mynetwork/IP
来找到其他设备。
支持的协议
- udp, tcp, xudp, xtcp, stdio
- disc(overy), proxy, http-proxy
- tun
License
MIT License