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

实验发现与 plex 的通信被 middlebox 干扰

  •  
  •   syswow64 · 12 天前 · 2068 次点击

    近日发现 plex 的服务不可用。排障过程中,发现了一些有意思的事。

    过程

    Plex 其中一个受影响域名是 clients.plex.tv

    首先,查询 DNS ,得知此域名解析结果没有被污染。

    $ nslookup clients.plex.tv
    Server:         192.168.1.1
    Address:        192.168.1.1#53
    
    Non-authoritative answer:
    Name:   clients.plex.tv
    Address: 172.64.151.205
    Name:   clients.plex.tv
    Address: 104.18.36.51
    Name:   clients.plex.tv
    Address: 2606:4700:4400::6812:2433
    Name:   clients.plex.tv
    Address: 2606:4700:4400::ac40:97cd
    

    其次,选取 2606:4700:4400::ac40:97cd 为目标 IP 地址,测试连通性。得知此 IP 地址没有被封锁。

    $ ncat -v 2606:4700:4400::ac40:97cd 443
    Ncat: Version 7.93 ( https://nmap.org/ncat )
    Ncat: Connected to 2606:4700:4400::ac40:97cd:443.
    

    接着,选择 visa.com 为 SNI ,使用 curl 测试服务可用性。重复两次,得到相同结果。

    $ curl --silent --output /dev/null \
      --write-out "%{http_code}" \
      --resolve visa.com:443:[2606:4700:4400::ac40:97cd] \
      https://visa.com
    301
    

    然后,选择 clients.plex.tv 为 SNI 再次测试服务可用性。观察到 curl 卡住,遂手工终止程序。

    $ curl --silent --output /dev/null \
      --write-out "%{http_code}" \
      --resolve clients.plex.tv:443:[2606:4700:4400::ac40:97cd] \
      https://clients.plex.tv
    ^C
    

    此时,再次使用 ncat 测试 IP 地址连通性。发现此 IP 地址已被封锁。

    $ nc -v 2606:4700:4400::ac40:97cd 443
    Ncat: Version 7.93 ( https://nmap.org/ncat )
    Ncat: Connection timed out.
    

    最后,使用 mtr 探测问题发生位置。命令:

    $ mtr --tcp --port 443 --interval 1 --timeout 3 --no-dns 2606:4700:4400::ac40:97cd
    

    发现最后一跳不在输出中显示。

    约 5 分钟后,第三次使用 ncat 测试 IP 地址连通性。发现恢复。

    $ ncat -v 2606:4700:4400::ac40:97cd 443
    Ncat: Version 7.93 ( https://nmap.org/ncat )
    Ncat: Connected to 2606:4700:4400::ac40:97cd:443.
    

    此时,第二次使用 mtr 追踪路由。发现最后一跳已能够在输出中显示。

    变换网络环境为蜂窝网,重复上述实验。结果相同。

    使用 wireshark 抓包,重复上述实验。发现若 clients.plex.tv 为 SNI ,客户端在服务器 ServerHelloDone 后的一段时间内,不再能收到服务器的任何报文。这一过程中,客户端没有收到过 TCP RST 。

    猜想

    Plex 的一些域名已被 middlebox 干扰。

    这一审查使用了非常聪明的机制,不同于以往封锁 IP 地址在骨干网丢弃出站报文,表现得更像是源自服务器的故障。

    根据已知事实,楼主的猜想如下:

    • 审查通过 SNI 触发
    • 触发后,middlebox 会添加二元组条件的临时过滤规则来丢弃报文
    • 规则在入站方向生效(依据 mtr 的输出结果猜测)
    • 临时规则有效时间约为 5 分钟

    此外,楼主猜测执行这套审查机制的是一套新颖的系统,与执行 SNI 阻断(如对 store.steampowered.com )的那套也不同。最明显的是,这套系统没有注入 TCP RST 报文。

    楼主尝试使用 TCP 或 TLS records 分片( fragmentation )保护客户端与 clients.plex.tv 的连接免受 middlebox 攻击,但失败了。而这一措施在应对 SNI 阻断时十分好用。这可能说明,这套系统拥有充沛的计算资源来执行流重组。

    20 条回复    2024-09-10 12:39:38 +08:00
    povsister
        1
    povsister  
       12 天前
    middlebox 常用于描述中间网络的 transparent proxy 、relay 等网络设备。一般来说对用户是不可见的。

    你这个就是 gfw (
    loukky
        2
    loukky  
       12 天前 via Android
    就是被防火墙阻断了
    JensenQian
        3
    JensenQian  
       12 天前   ❤️ 1
    这不就是 steam 和 github 的那种间歇性抽风吗
    sldaniel
        4
    sldaniel  
       12 天前 via iPhone
    Plex 好像得依赖官方的服务没法完全离线运行吧?

    EMBY 可以么?

    买了 plex 终身会员,难道得转战 Emby 了
    whjlinyi
        5
    whjlinyi  
       12 天前 via iPhone
    @sldaniel 可以离线运行的。设置-网络-无需身份验证即可获得允许的 IP 地址和网络列表
    allplay
        6
    allplay  
       12 天前 via Android
    聪明点还可以劣化,勉强可以访问,实际用起来极其恶心,给你丢包率极高。
    sldaniel
        7
    sldaniel  
       12 天前
    @whjlinyi
    试了下配置之后所有的权限都没有了
    像是个默认 guest 帐号,设置页面也和登录的不太一样,只能说能用.
    最好还是得套有本地帐户系统..
    zololiu
        8
    zololiu  
       12 天前
    最近登录 Plex 越来越费力了,一些页面都要等待加载才能看到图片。
    whjlinyi
        9
    whjlinyi  
       12 天前 via iPhone
    @sldaniel 那只能换别的了。
    kaedeair
        10
    kaedeair  
       12 天前
    我试了域名套到别的 ip 上并不会触发,只有 ip 和域名一致时才会触发
    Greatshu
        11
    Greatshu  
       12 天前
    之前有人测试过,GitHub 干扰时间是 180s
    Greatshu
        13
    Greatshu  
       12 天前
    注意到 clients.plex.tv 用了 cloudflare ,那就没啥说的了
    MIMIC
        14
    MIMIC  
       12 天前 via iPhone
    版本升级后确实需要下载依赖包和编解码包,现在只能把几个域名分流,不然连海报墙这类信息都匹配不到,好几个朋友裸连一直出错
    iamOldMaster
        15
    iamOldMaster  
       11 天前
    是的,我这里表现出几乎一致的情况。刮削功能时好时坏,上一分钟刮削成功的内容,再一次刮削就无结果
    obeykarma
        16
    obeykarma  
       11 天前
    plex 被屏蔽的理由是?真理解不了有什么敏感的
    sheayone
        17
    sheayone  
       11 天前
    用 jellyfin 做个备份好了
    outcastveron
        18
    outcastveron  
       11 天前
    @obeykarma 可能有敏感文件的刮削
    AlphaTauriHonda
        19
    AlphaTauriHonda  
       10 天前 via iPhone
    使用特定 SNI 后会让 IP 一段时间内被墙,一般是 TCP 严重丢包。
    这套审查系统确实是新的,之前没看到别人提到,我在大概半年前观察到类似现象。
    htfcuddles
        20
    htfcuddles  
       9 天前
    并不是新系统,之前就有了。分光监听 DPI 后,阻断执行有 2 种方式:1.源自旁路的 TCP RST 报文 2.骨干路由上添加临时路由条目
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1337 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 17:28 · PVG 01:28 · LAX 10:28 · JFK 13:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.