V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
louisxxx
V2EX  ›  Linux

Wireguard 端口转发问题

  •  
  •   louisxxx · 190 天前 via iPhone · 1790 次点击
    这是一个创建于 190 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我的网络拓扑图如下:
    客户端 >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 的流量也倒到隧道上去了?
    13 条回复    2023-10-20 22:21:08 +08:00
    HawkinsSherpherd
        1
    HawkinsSherpherd  
       190 天前
    你是这样吗?
    客户端 Wireguard 配置文件:
    Endpoint = [gost 服务器 A 地址]:8443
    louisxxx
        2
    louisxxx  
    OP
       190 天前
    tavimori
        3
    tavimori  
       190 天前
    由于常见的加密代理都会对 UDP 包二次封装,并且不会对超过可封装长度的 UDP 包进行分片,所以相关的 UDP 应用要预先对包大小进行限制。

    由于不清楚 GOST 协议的头开销,作为保险的解决方法,建议在客户端和服务端的 wireguard 配置上都增加如下配置:
    ```
    MTU=1280
    ```
    如果上述做法有效,可以进一步通过 GOST 协议的头开销对 MTU 进行精确的设定。
    louisxxx
        4
    louisxxx  
    OP
       190 天前
    @tavimori 试过改 MTU 不起作用,MTU 目前都用的 1200
    tavimori
        5
    tavimori  
       190 天前
    是不是客户端上的 Wireguard 在改路由表时只会自动排除 Wireguard 服务器 B ?

    这个取决于你在客户端上对“Wireguard 服务器 B”这一 peer 的 AllowedIP 字段的设置和是否有其他路由规则。

    如果是 IPv4 的话,一个简单的 debug 方式是将服务器这一 peer 的 AllowedIP 字段设置成只有他虚拟网的 IP 地址,并以/32 结尾,这样的话在一般的配置情况下,不会带起全局的路由(如果设置成 0.0.0.0/0 ,就会带起全局路由),只会带起到服务虚拟网单一 IP 地址的路由。

    在这样建立连接后可以看下 ping 服务测的虚拟网 IP 通不通。
    louisxxx
        6
    louisxxx  
    OP
       190 天前
    @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
        7
    tavimori  
       190 天前
    Wireguard 套传输层代理的确不是建议的做法。在这一问题上现在市面上没有广泛知晓的好的解决方案。

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

    总的来讲,个人理解上 Wireguard 下面不要套东西才能比较良好的工作,起码是不能套 TCP 的东西。
    RobinHuuu
        8
    RobinHuuu  
       190 天前 via Android
    gost 可以转发 wg 流量,我经常这么干。你的 gost 是 v2 还是 v3 ?在 v2 的文档里有写转发 udp 时末端链必须为某几类,末端我用的是 relay 。细节我不太记得了,仔细看下文档。
    louisxxx
        9
    louisxxx  
    OP
       190 天前
    @RobinHuuu 版本是 gost 3.0.0-rc10
    louisxxx
        10
    louisxxx  
    OP
       190 天前   ❤️ 1
    @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
        11
    ixdeal  
       190 天前
    @louisxxx #10 我想冒昧地问下,你这个是用来做类似 IPLC 链接的 FQ 嘛?
    ixdeal
        12
    ixdeal  
       190 天前
    @RobinHuuu #8 请问 gost 转发 wg 的速度如何?打算用这个来解决家里 fq 速度慢的问题。之前用 wg ,fq 速度太快了,最垃圾的机器都可以上天。
    RobinHuuu
        13
    RobinHuuu  
       190 天前 via iPhone
    @ixdeal 只能解决连通性问题,协议层层嵌套,速度无法保证。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1613 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 16:44 · PVG 00:44 · LAX 09:44 · JFK 12:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.