PinkD / corplink-rs

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

配置正常,启动正常,无法连接到内网 #1

Closed morn-0 closed 1 year ago

morn-0 commented 2 years ago

你好,我目前配置正常,启动也正常但是浏览器中似乎还是无法访问内网 image

morn-0 commented 2 years ago

似乎是没走 corplink 网口

morn-0 commented 2 years ago

配置走corplink了好像也不通

PinkD commented 2 years ago
  1. wg-quick@corplink.service 的状态正常吗?
  2. 生成的 wireguard 配置文件中有指定路由吗?也就是 AllowedIPs 是否有值?这个字段是根据服务端返回的路由网段生成的,如果这个字段中不包含你要访问的网段,那就是服务端没有提供该网段的访问权限
  3. MTU 字段有配置吗?浏览器发送的数据包可能会比较大,在 MTU 较小的情况下可能会出问题,可以先用 nc -v ip port 尝试是否能连上对应的机器或者直接 ping
  4. 其它问题

1 和 3 的可能性比较小,有可能是 2 或者 4 ,如果是 4 ,那就可能需要对正常的客户端抓包来对比看有没有什么异常的地方了

morn-0 commented 2 years ago

确实是2返回的访问网段里没有我要访问的地址,但是手机上的vpn打开似乎都是能直接访问到的。

PinkD commented 2 years ago

确实是2返回的访问网段里没有我要访问的地址,但是手机上的vpn打开似乎都是能直接访问到的。

ip rule | grep range 看一眼有哪些规则,然后启动飞连,然后再执行该命令,查看多出来的路由规则是走的哪个路由表,然后 ip route show table xxx ,我这边是 1040 ,也就是 ip r s t 1040 ,就能看到飞连添加了哪些路由表。确认一下里面的和 wg 配置里的是否一致?

morn-0 commented 2 years ago

似乎没有新增规则

PinkD commented 2 years ago

似乎没有新增规则

那我就没什么思路了 🤣

morn-0 commented 2 years ago

似乎没有新增规则

那我就没什么思路了 🤣

我按照公司的帮助说明测试了一下,ping公司指定的某个ip是通的,但是没网,帮助说明说是需要通过啥网络认证

PinkD commented 2 years ago

我按照公司的帮助说明测试了一下,ping公司指定的某个ip是通的,但是没网,帮助说明说是需要通过啥网络认证

那。。。只能你自己研究一下了,我司没有开这个认证

ttys3 commented 2 years ago

@cc-morning 从图片看只是 api 层面通了. tun 层面可能连握手都没完成.

以 root 身份执行: echo module wireguard +p > /sys/kernel/debug/dynamic_debug/control , 然后 sudo journalctl -f 看下wireguard 连接是否成功.

ttys3 commented 2 years ago

新版本的 corplink 魔改力度加大了. 不能再使用 wireguard 直接连接了.

wg 是走 UDP 的, 而新版本的 corplink 是走 tcp 协议.

另一个现象可以证明: 原版本的 wireguard-go 是 tun_linux.go , 而新版本corplink的是 tunc_linux.go

web api 协议基本上保持了没变.

PinkD commented 2 years ago

新版本的 corplink 魔改力度加大了. 不能再使用 wireguard 直接连接了

具体是哪个版本呢?我看了下我的还连着,也能正常使用,不确定是不是因为公司没有更新到最新版本

ttys3 commented 2 years ago

Linux 客户端版本: v2.0.10_r752_3f0e79

portal web 界面: portal-fe-1.0.0.441

PinkD commented 2 years ago

下载了最新版抓包验证了一下,确实只有 tcp 了。我开个新 issue 跟踪吧

PinkD commented 1 year ago

image

https://github.com/WireGuard/wireguard-go/blob/c31a7b1ab47807f01613a571cc480f79d5fb4181/device/noise-protocol.go#L48-L52

飞连 v2 版本的协议,看起来就只是魔改了一个常量

PinkD commented 1 year ago

计划适配方案:内置一个魔改过的 wg-go ,然后检测到 v2 直接使用该定制版本启动,然后通过 uapi 进行配置

PinkD commented 1 year ago

@morn-0 请使用 2.1 版本,看问题是否解决。注意 2.1 版本配置文件内容有变动,建议重新创建一个

morn-0 commented 1 year ago

@morn-0 请使用 2.1 版本,看问题是否解决。注意 2.1 版本配置文件内容有变动,建议重新创建一个

好的,我试一下。非常感谢🫡

morn-0 commented 1 year ago

image 似乎uapi有点问题

PinkD commented 1 year ago

55 是 ENOANO ,我遇到过一次,应该是 wg-corplink 没有正常退出,手动 kill 一下再试试

PinkD commented 1 year ago

https://github.com/PinkD/wireguard-go/commit/496a0fec6756e8ae4adc42c1e32322819032b7f8

参考 https://stackoverflow.com/questions/284325/how-to-make-child-process-die-after-parent-exits 新增了 wg-corplink 在父进程退出后自动退出的功能

morn-0 commented 1 year ago

55 是 ENOANO ,我遇到过一次,应该是 wg-corplink 没有正常退出,手动 kill 一下再试试

好像没有wg-corplink的进程。 image

PinkD commented 1 year ago

好像没有wg-corplink的进程。

是 root 权限运行的吗?起 tun 接口需要 root 权限

morn-0 commented 1 year ago

好像没有wg-corplink的进程。

是 root 权限运行的吗?起 tun 接口需要 root 权限

是root

PinkD commented 1 year ago

是root

那可以检查下 /var/run/wireguard 下有没有对应的 socket 文件, wg-go 里这个文件和进程是绑定的,移除这个文件会触发 wg-go 退出。如果没有这个文件,就是大概率确实没有进程,可能是其他原因

btw 从 log 来看, wg-go 启动的时候没有附带环境变量,说明使用的协议应该就是标准的 wg 协议,旧的版本按理说也能连上,这一点确实有点奇怪。除非是服务是 tcp 的

morn-0 commented 1 year ago

是root

那可以检查下 /var/run/wireguard 下有没有对应的 socket 文件, wg-go 里这个文件和进程是绑定的,移除这个文件会触发 wg-go 退出。如果没有这个文件,就是大概率确实没有进程,可能是其他原因

btw 从 log 来看, wg-go 启动的时候没有附带环境变量,说明使用的协议应该就是标准的 wg 协议,旧的版本按理说也能连上,这一点确实有点奇怪。除非是服务是 tcp 的

清理了下环境,似乎时ok了。就是有些可以访问有些不可以,我在客户端上看所有都是ok的。这个我自己找时间调试一下看看,先关了。非常感谢