PinkD / corplink-rs

使用 rust 实现的飞连客户端
GNU General Public License v2.0
194 stars 26 forks source link

[Windows] 请教 Windows 应该怎么 build 4.3? #34

Closed chenmin1992 closed 3 weeks ago

chenmin1992 commented 1 month ago

目前按 Makefile 里的内容,在 Windows powershell 执行相应的命令。

go build wireguard-go 之后,出现 libwg.a 和 libwg.h。 将 libwg.a 和 libwg.h 复制到上层目录,即 corplink-rs\libwg 下。

执行 cargo build --release 时,报找不到 wg.lib。 咨询一 contributor 后重命名 libwg.a 到 wg.lib,之后可以顺利 build 完成。

但是连接的时候卡在 image 是我哪里步骤不对么?

麻烦指教,多谢。

chenmin1992 commented 1 month ago

看代码,卡的位置好像是 corplink-rs 无法与 libwg 交互。 正常 mac 能起来是这样的: image

PinkD commented 1 month ago

windows 有安装虚拟网卡的驱动吗?可以参考官方 wireguard ,要先安装虚拟网卡,然后配置里指定虚拟网卡,才能正常连上的

chenmin1992 commented 1 month ago

@PinkD 是说 wintun.dll 吗?已经放在 corplink-rs.exe 同目录下了。如果有其他驱动需要安装,麻烦请指出。

刚才试了安装 wireguard windows 客户端后,仍然卡在那里。

PinkD commented 1 month ago

安装完 wireguard windows 客户端后,会多出来一个虚拟网卡,将这个虚拟网卡的名字填到配置文件里的 interface name 里应该就行了。在 linux 和 macos 上会自动创建 tun 设备,但是 win 上需要手动安装虚拟网卡来实现

gchen08 commented 4 weeks ago

安装完 wireguard windows 客户端后,会多出来一个虚拟网卡,将这个虚拟网卡的名字填到配置文件里的 interface name 里应该就行了。在 linux 和 macos 上会自动创建 tun 设备,但是 win 上需要手动安装虚拟网卡来实现

遇到同样的问题,卡在了start wg-corplink。 已经安装了wireguard windows客户端,但只有在建立隧道的时候,才会创建一个wireguard tunnel的interface,断开后也会自动卸载。尝试了通过wg客户端建立隧道后,将创建的interface名写到config.json的interface_name,但并没有效果。

chenmin1992 commented 4 weeks ago

安装完 wireguard windows 客户端后,会多出来一个虚拟网卡,将这个虚拟网卡的名字填到配置文件里的 interface name 里应该就行了。在 linux 和 macos 上会自动创建 tun 设备,但是 win 上需要手动安装虚拟网卡来实现

遇到同样的问题,卡在了start wg-corplink。 已经安装了wireguard windows客户端,但只有在建立隧道的时候,才会创建一个wireguard tunnel的interface,断开后也会自动卸载。尝试了通过wg客户端建立隧道后,将创建的interface名写到config.json的interface_name,但并没有效果。

+1 断开了 tun 设备就没了

PinkD commented 4 weeks ago

自测没问题,流程:

  1. clone 当前仓库
  2. 在 libwg 中 clone 魔改版的 wg-go ,然后进去 go build -trimpath -v -buildmode=c-archive ./libwg ,把输出的文件放到上层目录(项目根目录下的 libwg 目录)
  3. cargo build
  4. wintun.dll 放到与编译出来的可执行文件同目录
  5. 使用管理员命令执行,程序会自动创建一个 interface name 中定义名字的虚拟网卡
  6. 测试内网连通性通过

其中, 3 中用的 mingw64 的编译环境,5 之前应该需要装好 wireguard 的虚拟网卡驱动

一些截图: 连接成功。 ping 的图就不放了,里面有 ip 懒得打码 image go build 后的结果 image 输出的二进制的目录 image

如果上述流程没问题,网不通,有两个比较大的怀疑点。一个是 wireguard 的虚拟网卡驱动是否正常安装,另一个是是否获取并添加上了路由

gchen08 commented 3 weeks ago

自测没问题,流程:

  1. clone 当前仓库
  2. 在 libwg 中 clone 魔改版的 wg-go ,然后进去 go build -trimpath -v -buildmode=c-archive ./libwg ,把输出的文件放到上层目录(项目根目录下的 libwg 目录)
  3. cargo build
  4. wintun.dll 放到与编译出来的可执行文件同目录
  5. 使用管理员命令执行,程序会自动创建一个 interface name 中定义名字的虚拟网卡
  6. 测试内网连通性通过

其中, 3 中用的 mingw64 的编译环境,5 之前应该需要装好 wireguard 的虚拟网卡驱动

如果上述流程没问题,网不通,有两个比较大的怀疑点。一个是 wireguard 的虚拟网卡驱动是否正常安装,另一个是是否获取并添加上了路由

感谢指导,已经连通。做了如下调整,@chenmin1992 可以参考试试。

启动后遇到一个问题是,从wg_conf里可以看到dns地址,但实际虚拟网卡的DNS没有配上,IP也不是自动获取,需要每次启动后再手动设置一次。

chenmin1992 commented 3 weeks ago

自测没问题,流程:

  1. clone 当前仓库
  2. 在 libwg 中 clone 魔改版的 wg-go ,然后进去 go build -trimpath -v -buildmode=c-archive ./libwg ,把输出的文件放到上层目录(项目根目录下的 libwg 目录)
  3. cargo build
  4. wintun.dll 放到与编译出来的可执行文件同目录
  5. 使用管理员命令执行,程序会自动创建一个 interface name 中定义名字的虚拟网卡
  6. 测试内网连通性通过

其中, 3 中用的 mingw64 的编译环境,5 之前应该需要装好 wireguard 的虚拟网卡驱动 如果上述流程没问题,网不通,有两个比较大的怀疑点。一个是 wireguard 的虚拟网卡驱动是否正常安装,另一个是是否获取并添加上了路由

感谢指导,已经连通。做了如下调整,@chenmin1992 可以参考试试。

  • 编译的时候增加跨平台设置,这样不必将libgw.a重命名为wg.lib
rustup target add x86_64-pc-windows-gnu
cargo build --target x86_64-pc-windows-gnu
  • 使用amd64的wintun.dll

启动后遇到一个问题是,从wg_conf里可以看到dns地址,但实际虚拟网卡的DNS没有配上,IP也不是自动获取,需要每次启动后再手动设置一次。

感谢大佬指导。通过 cargo build --target x86_64-pc-windows-gnu 确实可以 build 出可以连通的 binary。 同样获取不到 DNS,但是可以获取到 IP,内网的网站也可以打开。

但有个问题,可用的 binary 好大。mac build 出来的 9.69MB,cargo build --release 出来的 .exe 是 12.8MB,cargo build --target x86_64-pc-windows-gnu 的是 138MB。您也是这样的吗? image

PinkD commented 3 weeks ago

rust 里 debug 编译出来的很大是正常的, linux 里会带很多符号, windows 应该也是类似。用 release 编译会小很多

chenmin1992 commented 3 weeks ago

rust 里 debug 编译出来的很大是正常的, linux 里会带很多符号, windows 应该也是类似。用 release 编译会小很多

感谢。通过 cargo build --target x86_64-pc-windows-gnu --release build 出来 13MB。

感谢帮助 rust 新手的打扰。