V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
vfx666
V2EX  ›  宽带症候群

一个头疼的问题,路由器端口转发,挂了 singbox 透明代理无法连接

  •  
  •   vfx666 · 2 天前 · 795 次点击
    内网一台软路由( 192.168.1.222 )开启了 singbox 的 tun 模式做旁路由。内网 ps5 将网关手动设为了 singbox ,主路由( 192.168.1.1 )将端口转发设置到 ps5 的 ip ,在公网尝试连接 ps5 不成功。singbox 关闭后可以正常连通,问题可能出在 ps5 在返回流量时经过了旁路由的虚拟网卡出现问题。
    但 singbox 即使开启了最详细级别的日志,也看不到来自 ps5 的流量记录。用 tcpdump 能看到流量确实经过了 tun 网卡。
    请教大神,这种情况应该如何设置呢
    22 条回复    2024-09-19 12:03:11 +08:00
    povsister
        1
    povsister  
       2 天前
    因为路由不对称,普通家用路由器的 tcp 是需要看到双向的数据报文才会被 conn-track 到。
    在你的配置下

    TCP inbound (发送 SYN ):WAN 访问 - 主路由(Port forwarding ,可以认为是 DNAT+SNAT)- PS5
    TCP outbound (回复 SYN ACK ):PS5 -(这里就直接当 invalid 丢了)- 旁路由( SNAT )- 主路由

    旁路由连 TCP SYN 都看不到,你回复一个 SYN ACK 被旁路由的 SNAT netfilter 看到,只会当你设备抽风直接丢包。
    sb 看不到是因为报文在协议栈就直接丢了,压根没进入 sb 的处理。
    vfx666
        2
    vfx666  
    OP
       2 天前
    @povsister 专业啊大佬。所以这种情况下有什么解决方案吗,我主路由是 linksys ,没啥可改动的,能不能在旁路由上设置点啥
    whetherTsmile
        3
    whetherTsmile  
       2 天前
    @vfx666 #2 旁路由防火墙里有一个丢弃无效数据包给关了试试
    povsister
        4
    povsister  
       2 天前 via iPhone
    @vfx666
    我细想了想,port forwarding 应该是可以用的,不对称路由影响的应该是 DNAT ,你先试试用端口转发吧。
    另外建议别折腾一个子网里两个网关这种模式了,老老实实用单臂路由不好吗
    basncy
        5
    basncy  
       2 天前
    ingress 要看主路由, 少部分企业路由器会做 SNAT.
    whetherTsmile #3 可能是正解. sb 感觉它很强大, 但都集成了个半吊子.
    旁路由建议手搓 REDIRECT/TPROXY, 门槛可能高, 但灵活, 还能代理部分 BT 流量.
    vfx666
        6
    vfx666  
    OP
       2 天前 via iPhone
    @povsister 现在这样子,端口转发确实联不通啊
    搞旁路由就是为了给 ps5 做加速,不然的话怎么解决 ps5 爬墙问题
    vfx666
        7
    vfx666  
    OP
       2 天前 via iPhone
    是 iptable 里的吗
    vfx666
        8
    vfx666  
    OP
       2 天前 via iPhone
    @povsister 我这个路由器貌似没法配置单臂吧。。。
    povsister
        9
    povsister  
       2 天前   ❤️ 2
    @basncy
    我同意#5 的话,sb 看起来很强大但实际上体验上是个半吊子。真要考虑网关方案不如自己手搓 TPROXY+路由表转发。
    唉,但不懂点网络知识的根本不适合玩旁路由。而且,一堆乱七八糟的教程确实坑了不少人。

    @vfx666
    给你推荐下我自用的方案吧,网关 TPROXY 方案,纯粹单臂路由不侵入拓扑,全真 IP 。主路由分流,黑白名单随喜好配置,可以在主路由上一键排除/强制某个内网 IP 直连/代理。
    缺点就是,你的 linksys 可能只能当个 AP 用了,这个方案要的这些特性现阶段 linksys 应该无法满足。
    https://github.com/povsister/v2ray-core
    vfx666
        10
    vfx666  
    OP
       2 天前
    @povsister 我日……你这方案有点意思……想不到一个旁路由都能玩出花来
    morpheuszero2023
        11
    morpheuszero2023  
       1 天前
    有些问题解决的学习成本和时间消耗过高了。如果你只是想让 PS5 流畅的联机游戏,可以买内置 UU 加速器的路由器,例如华硕的一些型号。华硕和软路由( OP )也可以通过插件实现魔法冲浪。这些方案都是只有一个网关的,部署起来非常简单。
    life90
        12
    life90  
       1 天前
    @povsister 我看了你这个方案,我猜果然会有这个问题 ”体感首次访问某个被墙站点时,有 30-40%的概率会出现 ConnectionRST , 随后只需要刷新一下页面即可正常访问。“
    我觉得解决这个问题的方法可以试一试把 conn-track 规则时间延长一点(对个人来说影响不大)。然后你这个好像没有支持 ipv6 。
    你没有采用 mark-routing (标记路由) mark-connection/packet 等方式,真是明智。这个策略开起来多了,非常影响转发性能。路由器配置不高的话,一个迅雷开起来能把 cpu 干冒烟。
    povsister
        13
    povsister  
       1 天前
    @life90
    ipv6 短期内没有支持的打算。
    OSPFv2 和 v3 是需要独立运行两个实例的,而且属于不同的 RFC 。要支持的话得我再手写 v3 的库才可以,目前是手搓简单版本 v2 的,等有空开源成单独的 go-ospfd 再考虑 v3 支持。

    目前我自己已经把动态规则的时间延长到了 48h ,常态生效条目 1500 条左右。不过这个是可配置条目,你可以根据自己的旁路由配置和主路由配置自行调整。过多的代价基本就是内存占用会高,ros 本身路由查询开销基本可以忽略。

    ROS 官方硬件只有在开启 fasttrack 的情况下性能还算不错,但是 ft 和 mangle mark-routing/packet 是冲突的。
    家用环境 99.9%情况下不需要 mark-routing ,唯一有点价值的就是 QoS:标记 wan 流量走 QueueTree 。
    我玩了一阵子,家用旗舰 RB5009 ,千兆跑 mark packet ,经常 pt 下载时候干满 cpu 。后来索性开摆,下行不做 QoS ,上行只在 wan interface 上挂了个 CAKE 流控,然后一下就好起来了,打游戏满速下载也不跳 ping ,非常省事。
    life90
        14
    life90  
       1 天前
    @povsister 对,开启 fasttrack ,许多规则条目会失效,但是官方默认还是开启了。也不知为何?可能觉得家用不会搞这些。上行做流控,确实是最优解。但运营商的上行经常是变化的,起码要设置 20% 的余量。不然上行被拉满也是会卡的。你是 cake 配合 Queue Tree 做的流控,还是只做了 Simple Queue 。
    好像有点问多了,脱离主题了。不过能遇到你,也算是幸运。mikrotik ros 现在玩的少了。看起来可定制性强,但操作起来要了解很多知识。如果只知其一,很容易搞崩了。我就这么一路崩过来的。后来发现既然同是 Linux ,我为什么不直接玩 Linux 。而且我觉得维护起来比它方便,可能是 mikrotik 教会了很多我 Linux 下的 iptable 操作。
    povsister
        15
    povsister  
       1 天前
    @life90
    你需要了解 ft 的本质,它本质上是对已经进入 stateful tracking 的连接 bypass 一些处理流程,并不是“ft 开启后很多规则会失效”。实际上,只要你不过多依赖 mangle 表,ft 其实是非常优秀的 offload 手段。默认开启的话我觉得是没问题的。

    我这边电信上行给的很足,按实际签约的 120%容量做的上行流控,做法是使用 interface queueTree ,FT 开启的情况下会 bypass simple queue 和 global queue ,但不会和 interface queue 冲突,所以你只需要在 wan 口开启 interface queue ,类型选 queueTree ,算法 CAKE 然后配置一下 nat=on ,rtt 50ms ,diffsrev4 ,类型 dual srchost ,然后再开一下 ACK filter 就可以了,非常简单好用。
    yinmin
        16
    yinmin  
       1 天前
    解决方法很简单:192.168.1.1 将端口转发到 192.168.1.222 ,然后 192.168.1.222 转发到 ps5 。192.168.1.222 的 iptable 转发端口的写法可以问 gpt 。
    yyysuo
        17
    yyysuo  
       1 天前 via iPhone
    @life90 这种体验怎么忍受的…..
    yyysuo
        18
    yyysuo  
       1 天前 via iPhone
    @yinmin 他应该有现成的配合 tun 的 ipt 或者 nft 吧,也应该有现成的 bypass 内网段的规则,也应该开了 ipv4 转发,是不是直接改成转发到 sb 机就可以了
    yinmin
        19
    yinmin  
       23 小时 55 分钟前
    @vfx666 ,试试:

    假设 ps5 的 ip:192.168.1.230 ,要映射的 TCP 端口是 1000 。主路由先将 tcp 1000 端口转发到 192.168.1.222:1000 ,然后在 192.168.1.222 上配置以下 2 句 iptables ,将 tcp 1000 转发到 ps5 192.168.1.230:1000

    iptables -t nat -A PREROUTING -p tcp -d 192.168.1.222 --dport 1000 -j DNAT --to-destination 192.168.1.230:1000
    iptables -t nat -A POSTROUTING -p tcp --dport 1000 -d 192.168.1.230 -j MASQUERADE
    vfx666
        20
    vfx666  
    OP
       12 小时 26 分钟前 via iPhone
    @yinmin 这个方法确实可以走的通,不过我是用的 socat ,你这个我没试,而且 socat 在旁路由上不行,找了另一个内网设备才可以的。
    我最终的解决方案是用 homeproxy ,在代理端口中把 ps5 的排除掉就可以了。。。
    vfx666
        21
    vfx666  
    OP
       12 小时 23 分钟前 via iPhone
    @morpheuszero2023 uu 会员费太贵了,土豪可以忽略。我 ps5 直接用自己的小鸡,不用额外花费。而且 uu 只能加速一个游戏,也没法魔法上网,这种体验在 ps5 上太割裂了
    vfx666
        22
    vfx666  
    OP
       12 小时 21 分钟前 via iPhone
    @povsister 感谢大佬相助。说一下我最终解决方法:
    我装了个 openwrt ,homeproxy 里面有个代理端口的选项,把转发的端口排除掉就可以了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1902 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 16:24 · PVG 00:24 · LAX 09:24 · JFK 12:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.