1
HawkinsSherpherd 2023-10-20 03:12:06 +08:00
你是这样吗?
客户端 Wireguard 配置文件: Endpoint = [gost 服务器 A 地址]:8443 |
2
louisxxx OP @HawkinsSherpherd yes
|
3
tavimori 2023-10-20 03:46:29 +08:00
由于常见的加密代理都会对 UDP 包二次封装,并且不会对超过可封装长度的 UDP 包进行分片,所以相关的 UDP 应用要预先对包大小进行限制。
由于不清楚 GOST 协议的头开销,作为保险的解决方法,建议在客户端和服务端的 wireguard 配置上都增加如下配置: ``` MTU=1280 ``` 如果上述做法有效,可以进一步通过 GOST 协议的头开销对 MTU 进行精确的设定。 |
5
tavimori 2023-10-20 03:57:12 +08:00
是不是客户端上的 Wireguard 在改路由表时只会自动排除 Wireguard 服务器 B ?
这个取决于你在客户端上对“Wireguard 服务器 B”这一 peer 的 AllowedIP 字段的设置和是否有其他路由规则。 如果是 IPv4 的话,一个简单的 debug 方式是将服务器这一 peer 的 AllowedIP 字段设置成只有他虚拟网的 IP 地址,并以/32 结尾,这样的话在一般的配置情况下,不会带起全局的路由(如果设置成 0.0.0.0/0 ,就会带起全局路由),只会带起到服务虚拟网单一 IP 地址的路由。 在这样建立连接后可以看下 ping 服务测的虚拟网 IP 通不通。 |
6
louisxxx OP @tavimori 这个刚刚调试过了。把 AllowedIP 改成了互联地址段。目前 tcpdump 抓包看:
客户端 >gost 服务器 A:8443 >Wireguard 服务器 B:443 有流量传送。 Wireguard 服务器 B:443 >gost 服务器 A:8443>客户端 也有回传流量。 比较奇怪的是 ping 测试 [客户端 >gost 服务器 A:8443 >Wireguard 服务器 B:443 ] 这个连发 5 个包然后才有 5 个连续回复。不是一发一回 |
7
tavimori 2023-10-20 04:13:26 +08:00
Wireguard 套传输层代理的确不是建议的做法。在这一问题上现在市面上没有广泛知晓的好的解决方案。
我不太了解 gost 对 UDP 转发的处理,但是任何在 UDP 转发层面做的数据缓冲、多个包合并、套到 TCP 上之类的做法,都会导致利用该 UDP 建立的 wireguard 虚拟网里的传输层协议速率控制算法无法正常工作,在很多情况下会大幅劣化网络质量。 总的来讲,个人理解上 Wireguard 下面不要套东西才能比较良好的工作,起码是不能套 TCP 的东西。 |
8
RobinHuuu 2023-10-20 05:04:30 +08:00 via Android
gost 可以转发 wg 流量,我经常这么干。你的 gost 是 v2 还是 v3 ?在 v2 的文档里有写转发 udp 时末端链必须为某几类,末端我用的是 relay 。细节我不太记得了,仔细看下文档。
|
10
louisxxx OP @RobinHuuu 感谢提醒🙏。我又查了一遍文档,我原来的转发命令没有加 keepAlive 参数,加上 keepAlive 参数后转发能连接上了。
原:docker run --rm --net=host -d gogost/gost -L=udp://:8443/15.33.253.65:443?ttl=60s 新:docker run --rm --net=host -d gogost/gost -L "udp://:8443/15.33.253.65:443?keepAlive=true&ttl=5s" |