Open simplerick-simplefun opened 2 years ago
大概看了一下,应该是这里的问题: https://github.com/p4gefau1t/trojan-go/blob/7f8d638260b0666a288a34ec2112c6da314f8b57/tunnel/trojan/packet.go#L58 这一行就是读取目标地址的,但是forward转发没有地址 会跳到这里: https://github.com/p4gefau1t/trojan-go/blob/7f8d638260b0666a288a34ec2112c6da314f8b57/tunnel/metadata.go#L141 但是这个ReadWithMetadata(payload []byte)应该怎么改,加一个if forward的condition之后,length那里怎么处理,我就不知道了。 https://github.com/p4gefau1t/trojan-go/blob/7f8d638260b0666a288a34ec2112c6da314f8b57/tunnel/trojan/packet.go#L54
以前有相同问题,说是连接时长问题
以前有相同问题,说是连接时长问题
我这个根本无法连接成功。实际使用情况是: trojan-go使用forward模式监听127.0.0.1:12345 使用wireguard连接127.0.0.1:12345 "udp_timeout" 设置了 600 连接不成功,报错。 使用trojan原版则没有问题。
以前有相同问题,说是连接时长问题
我这个根本无法连接成功。实际使用情况是: trojan-go使用forward模式监听127.0.0.1:12345 使用wireguard连接127.0.0.1:12345 "udp_timeout" 设置了 600 连接不成功,报错。 使用trojan原版则没有问题。
服务端也有这个日记,也是这个问题 我没有用forward的,但是服务端也有
以前有相同问题,说是连接时长问题
我这个根本无法连接成功。实际使用情况是: trojan-go使用forward模式监听127.0.0.1:12345 使用wireguard连接127.0.0.1:12345 "udp_timeout" 设置了 600 连接不成功,报错。 使用trojan原版则没有问题。
服务端也有这个日记,也是这个问题 我没有用forward的,但是服务端也有
我的情况是从一开始客户端就报错,第一个数据包都不会发给服务端。所以服务端收不到数据也不会报错。 这个还是很容易复现的,你们试试就知道了。注意设置好route/iptable,把trojan的数据按照原来的链路发送,其余都走wireguard的tun
以前有相同问题,说是连接时长问题
我这个根本无法连接成功。实际使用情况是: trojan-go使用forward模式监听127.0.0.1:12345 使用wireguard连接127.0.0.1:12345 "udp_timeout" 设置了 600 连接不成功,报错。 使用trojan原版则没有问题。
服务端也有这个日记,也是这个问题 我没有用forward的,但是服务端也有
我的情况是从一开始客户端就报错,第一个数据包都不会发给服务端。所以服务端收不到数据也不会报错。 这个还是很容易复现的,你们试试就知道了。注意设置好route/iptable,把trojan的数据按照原来的链路发送,其余都走wireguard的tun
啊啊有没有更新过go.mod?
❯ go mod tidy -go=1.17
github.com/p4gefau1t/trojan-go/config imports
gopkg.in/yaml.v3 tested by
gopkg.in/yaml.v3.test imports
gopkg.in/check.v1 loaded from gopkg.in/check.v1@v0.0.0-20161208181325-20d25e280405,
but go 1.16 would select v1.0.0-20180628173108-788fd7840127
github.com/p4gefau1t/trojan-go/log/golog/buffer tested by
github.com/p4gefau1t/trojan-go/log/golog/buffer.test imports
github.com/smartystreets/goconvey/convey imports
github.com/jtolds/gls imports
github.com/gopherjs/gopherjs/js loaded from github.com/gopherjs/gopherjs@v0.0.0-20181017120253-0766667cb4d1,
but go 1.16 would select v0.0.0-20210420193930-a4630ec28c79
To upgrade to the versions selected by go 1.16:
go mod tidy -go=1.16 && go mod tidy -go=1.17
If reproducibility with go 1.16 is not needed:
go mod tidy -compat=1.17
For other options, see:
https://golang.org/doc/modules/pruning
❯ go mod tidy -go=1.17 github.com/p4gefau1t/trojan-go/config imports gopkg.in/yaml.v3 tested by gopkg.in/yaml.v3.test imports gopkg.in/check.v1 loaded from gopkg.in/check.v1@v0.0.0-20161208181325-20d25e280405, but go 1.16 would select v1.0.0-20180628173108-788fd7840127 github.com/p4gefau1t/trojan-go/log/golog/buffer tested by github.com/p4gefau1t/trojan-go/log/golog/buffer.test imports github.com/smartystreets/goconvey/convey imports github.com/jtolds/gls imports github.com/gopherjs/gopherjs/js loaded from github.com/gopherjs/gopherjs@v0.0.0-20181017120253-0766667cb4d1, but go 1.16 would select v0.0.0-20210420193930-a4630ec28c79 To upgrade to the versions selected by go 1.16: go mod tidy -go=1.16 && go mod tidy -go=1.17 If reproducibility with go 1.16 is not needed: go mod tidy -compat=1.17 For other options, see: https://golang.org/doc/modules/pruning
我已经上1.18😂
以前有相同问题,说是连接时长问题
我这个根本无法连接成功。实际使用情况是: trojan-go使用forward模式监听127.0.0.1:12345 使用wireguard连接127.0.0.1:12345 "udp_timeout" 设置了 600 连接不成功,报错。 使用trojan原版则没有问题。
服务端也有这个日记,也是这个问题 我没有用forward的,但是服务端也有
我的情况是从一开始客户端就报错,第一个数据包都不会发给服务端。所以服务端收不到数据也不会报错。 这个还是很容易复现的,你们试试就知道了。注意设置好route/iptable,把trojan的数据按照原来的链路发送,其余都走wireguard的tun
啊啊有没有更新过go.mod?
release版本是1.17 我尝试了了1.18也一样不行
以前有相同问题,说是连接时长问题
我这个根本无法连接成功。实际使用情况是: trojan-go使用forward模式监听127.0.0.1:12345 使用wireguard连接127.0.0.1:12345 "udp_timeout" 设置了 600 连接不成功,报错。 使用trojan原版则没有问题。
服务端也有这个日记,也是这个问题 我没有用forward的,但是服务端也有
我的情况是从一开始客户端就报错,第一个数据包都不会发给服务端。所以服务端收不到数据也不会报错。 这个还是很容易复现的,你们试试就知道了。注意设置好route/iptable,把trojan的数据按照原来的链路发送,其余都走wireguard的tun
啊啊有没有更新过go.mod?
release版本是1.17 我尝试了了1.18也一样不行
我更新了trojan-go,可以试试看
以前有相同问题,说是连接时长问题
我这个根本无法连接成功。实际使用情况是: trojan-go使用forward模式监听127.0.0.1:12345 使用wireguard连接127.0.0.1:12345 "udp_timeout" 设置了 600 连接不成功,报错。 使用trojan原版则没有问题。
服务端也有这个日记,也是这个问题 我没有用forward的,但是服务端也有
我的情况是从一开始客户端就报错,第一个数据包都不会发给服务端。所以服务端收不到数据也不会报错。 这个还是很容易复现的,你们试试就知道了。注意设置好route/iptable,把trojan的数据按照原来的链路发送,其余都走wireguard的tun
啊啊有没有更新过go.mod?
release版本是1.17 我尝试了了1.18也一样不行
我更新了trojan-go,可以试试看
还是不行啊。看来有空得跟原版trojan对比一下代码,看看是哪里不一样。大致上还是处理udp和forward的部分,也许是conn的部分。
以前有相同问题,说是连接时长问题
我这个根本无法连接成功。实际使用情况是: trojan-go使用forward模式监听127.0.0.1:12345 使用wireguard连接127.0.0.1:12345 "udp_timeout" 设置了 600 连接不成功,报错。 使用trojan原版则没有问题。
服务端也有这个日记,也是这个问题 我没有用forward的,但是服务端也有
我的情况是从一开始客户端就报错,第一个数据包都不会发给服务端。所以服务端收不到数据也不会报错。 这个还是很容易复现的,你们试试就知道了。注意设置好route/iptable,把trojan的数据按照原来的链路发送,其余都走wireguard的tun
啊啊有没有更新过go.mod?
release版本是1.17 我尝试了了1.18也一样不行
我更新了trojan-go,可以试试看
还是不行啊。看来有空得跟原版trojan对比一下代码,看看是哪里不一样。大致上还是处理udp和forward的部分,也许是conn的部分。
找到了bug?😂
客户端用openwrt,passwall的trojan-go,服务端是容器p4gefau1t/trojan-go,配置除了添加ws和mux,其它都是默认的,在服务端日志也发现了这个问题[ERROR] 2022/05/26 01:46:38 github.com/p4gefau1t/trojan-go/tunnel/simplesocks.(*Server).acceptLoop:server.go:41 simplesocks server faield to read header | EOF
同样,无法转发 WireGuard 数据包。
2024 年了,这个 BUG 还没有修吗?/kel
简单描述这个 Bug
使用trojan-go客户端,设置forward模式,转发udp数据包,报错failed to parse udp packet addr | unable to read ATYP
如何复现这个 Bug
1.trojan-go客户端A,配置forward模式,监听本地127.0.0.1:Ax,连接服务端trojan-go地址B:By,转发到C:Cz 2.本地程序D发送udp数据包到127.0.0.1:Ax 3.预期结果:程序D正常C:Cz连接 4.实际结果:trojan-go客户端A报错:failed to parse udp packet addr | unable to read ATYP
注意:如果把客户端改成原版trojan,其他均不变,则一切正常。程序D能够正常与C:Cz连接。
服务器和客户端环境信息
客户端Windows 11
服务端和客户端日志
服务端和客户端配置文件
服务端和客户端版本信息
Trojan-Go v0.10.6 Go Version: go1.17.1 OS/Arch: windows/amd64 Git Commit: 2dc60f52e79ff8b910e78e444f1e80678e936450
Developed by PageFault (p4gefau1t) Licensed under GNU General Public License version 3 GitHub Repository: https://github.com/p4gefau1t/trojan-go Trojan-Go Documents: https://p4gefau1t.github.io/trojan-go/
其他信息
如果把客户端改成原版trojan,其他均不变,则一切正常。 forward模式下,客户端应该按照配置文件,把数据包转发到设置的目的地IP:port,而不应该去parse这个来源数据包是去哪里的。因为来源数据包本身的目的地是trojan监听的地址:端口,预期目的地是配置文件中设置要转发的地址:端口。数据包不是通过iptable/tproxy转发到trojan-go客户端的,所以不可能parse出来udp packet addr。 我没有测试forward模式下tcp数据包转发,但怀疑存在相同问题。