Wireguard 端口转发问题

2023-10-20 02:27:12 +08:00
 louisxxx
我的网络拓扑图如下:
客户端 >gost 服务器 A:8443 >Wireguard 服务器 B:443

客户端 直连 Wireguard 服务器 B 没问题的。
客户端 连 gost 服务器 A:8443 就不行。

以为是 gost 转发的问题,测试了 gost 转发 ssh 到 Wireguard 服务器 B:22 正常。

以为 gost 转发 UDP 不行,测试了 gost 转发 dns 到 Wireguard 服务器 B:53 也正常。

说明问题不在 gost 转发上。是不是 Wireguard 不兼容这种端口转发场景?是不是客户端上的 Wireguard 在改路由表时只会自动排除 Wireguard 服务器 B ?这样导致把去往 gost 服务器 A:8443 的流量也倒到隧道上去了?
2515 次点击
所在节点    Linux
13 条回复
HawkinsSherpherd
2023-10-20 03:12:06 +08:00
你是这样吗?
客户端 Wireguard 配置文件:
Endpoint = [gost 服务器 A 地址]:8443
louisxxx
2023-10-20 03:19:24 +08:00
tavimori
2023-10-20 03:46:29 +08:00
由于常见的加密代理都会对 UDP 包二次封装,并且不会对超过可封装长度的 UDP 包进行分片,所以相关的 UDP 应用要预先对包大小进行限制。

由于不清楚 GOST 协议的头开销,作为保险的解决方法,建议在客户端和服务端的 wireguard 配置上都增加如下配置:
```
MTU=1280
```
如果上述做法有效,可以进一步通过 GOST 协议的头开销对 MTU 进行精确的设定。
louisxxx
2023-10-20 03:49:04 +08:00
@tavimori 试过改 MTU 不起作用,MTU 目前都用的 1200
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 通不通。
louisxxx
2023-10-20 04:00:45 +08:00
@tavimori 这个刚刚调试过了。把 AllowedIP 改成了互联地址段。目前 tcpdump 抓包看:
客户端 >gost 服务器 A:8443 >Wireguard 服务器 B:443 有流量传送。
Wireguard 服务器 B:443 >gost 服务器 A:8443>客户端 也有回传流量。
比较奇怪的是 ping 测试 [客户端 >gost 服务器 A:8443 >Wireguard 服务器 B:443 ] 这个连发 5 个包然后才有 5 个连续回复。不是一发一回
tavimori
2023-10-20 04:13:26 +08:00
Wireguard 套传输层代理的确不是建议的做法。在这一问题上现在市面上没有广泛知晓的好的解决方案。

我不太了解 gost 对 UDP 转发的处理,但是任何在 UDP 转发层面做的数据缓冲、多个包合并、套到 TCP 上之类的做法,都会导致利用该 UDP 建立的 wireguard 虚拟网里的传输层协议速率控制算法无法正常工作,在很多情况下会大幅劣化网络质量。

总的来讲,个人理解上 Wireguard 下面不要套东西才能比较良好的工作,起码是不能套 TCP 的东西。
RobinHuuu
2023-10-20 05:04:30 +08:00
gost 可以转发 wg 流量,我经常这么干。你的 gost 是 v2 还是 v3 ?在 v2 的文档里有写转发 udp 时末端链必须为某几类,末端我用的是 relay 。细节我不太记得了,仔细看下文档。
louisxxx
2023-10-20 05:37:00 +08:00
@RobinHuuu 版本是 gost 3.0.0-rc10
louisxxx
2023-10-20 05:47:59 +08:00
@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"
ixdeal
2023-10-20 19:06:37 +08:00
@louisxxx #10 我想冒昧地问下,你这个是用来做类似 IPLC 链接的 FQ 嘛?
ixdeal
2023-10-20 19:28:21 +08:00
@RobinHuuu #8 请问 gost 转发 wg 的速度如何?打算用这个来解决家里 fq 速度慢的问题。之前用 wg ,fq 速度太快了,最垃圾的机器都可以上天。
RobinHuuu
2023-10-20 22:21:08 +08:00
@ixdeal 只能解决连通性问题,协议层层嵌套,速度无法保证。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/983638

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX