如何截获 Netflix TV 的(疑似内置)DNS 请求? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
拼车信息请发到 /go/cosub 节点。

如果没有发送到 /go/cosub,那么会被移动到 /go/pointless 同时账号会被降权。如果持续触发这样的移动,会导致账号被禁用。
CrazyRundong
V2EX    Netflix

如何截获 Netflix TV 的(疑似内置)DNS 请求?

  •  
  • CrazyRundong 2021-12-26 14:30:16 +08:00 11379 次点击
  • 这是一个创建于 1463 天前的主题,其中的信息可能已经有所发展或是发生改变。

    部署旁路由 Clash 代理后,家里所有设备都能够通过浏览器或者 iOS/iPad OS app 访问 Netflix 非自制剧,唯独电视(包括 Android TV 和 Apple TV )会提示「检测到使用代理」而拒绝加载。

    看了下 Clash 日志,似乎电视上的 Netflix app 会直接通过 IP 加载内容:

    23.246.56.138:443 match IPCIDR(23.246.0.0/18) using Netflix[ IEPL-SS 新加坡 1] 

    而 23.246.56.138 的归属地为香港,可能由此触发了代理检测。怀疑是 Netflix app 使用某种内置的 DNS 服务,直接在国内解析域名到最近的香港节点了。现在的问题是如何截获这个 DNS 请求并把它转发到我的新加坡节点上?旁路由已经配置了 iptables 把所有 UDP 53 转发到 Clash ,但这似乎对 Netflix app 无效。

    (作为对照,网页版 Netflix 的所有请求均被截获转发,Clash 日志能直接看到内容域名:)

    ipv6-c014-hkg001-ix.1.oca.nflxvideo.net:443 match DomainSuffix(nflxvideo.net) using Netflix[ IEPL-SS 新加坡 1] 
    36 条回复    2024-07-18 21:22:35 +08:00
    Maskeney
        1
    Maskeney  
       2021-12-26 14:37:05 +08:00
    你规则不全
    knightdf
        2
    knightdf  
       2021-12-26 14:41:16 +08:00
    CrazyRundong
        3
    CrazyRundong  
    OP
       2021-12-26 14:42:24 +08:00
    @Maskeney #1 试过根据 src-ip 把来自电视的所有流量都转发到新加坡节点,还是有这个问题。所以怀疑是 DNS 相关的请求根本没被转发到 Clash 上。
    CrazyRundong
        4
    CrazyRundong  
    OP
       2021-12-26 15:34:55 +08:00
    @knightdf #2 把这些域名都加到了旁路由规则里,还是不行
    CrazyRundong
        5
    CrazyRundong  
    OP
       2021-12-26 15:35:49 +08:00
    临时解决方案:在电视上装了 Clash for Android 后开启全局模式,总算能正常访问了
    quzard
        6
    quzard  
       2021-12-26 16:14:10 +08:00 via Android   1
    openclash 可以预解析 Netflix 。可以试试
    Ives
        7
    Ives  
       2021-12-26 22:34:25 +08:00 via iPhone
    听到最多的 都是说软路由有问题
    TimothyT
        8
    TimothyT  
       2021-12-26 23:12:38 +08:00 via iPhone   1
    换节点 现在大多数解锁都是用 ipv6 解锁的,而 uwp 和 tv 端的 nf 是强行用 ipv4 ,看下机场是否支持 v4 解锁
    knightdf
        9
    knightdf  
       2021-12-27 09:18:55 +08:00
    @CrazyRundong 我就是用的这个规则,全屋设备包括 android tv 都可以正常看
    Kinnice
        10
    Kinnice  
       2021-12-27 17:44:10 +08:00
    需要劫持 8.8.8.8/8.8.4.4
    hikiss
        11
    hikiss  
       2021-12-29 11:30:39 +08:00
    翻了国外的,也是一样的问题,提供的方案就是劫持或者阻断 Netflix 的 hard coding 的 dns
    https://vpnreviewer.com/androidtv-streaming-unblocking
    RealKela
        12
    RealKela  
       2022-01-12 08:44:40 +08:00
    我最近 Apple TV 也遇到这个问题,服务器 IPv4 解锁的,web 也解锁就 TV app 没有解锁。有人知道怎么解决吗?
    mailshuxin
        13
    mailshuxin  
       2022-01-22 15:13:31 +08:00
    我在是路由器上面,添加了两个静态路由黑洞:8.8.8.8/32 ,和 8.8.4.4/32
    目前正在观察效果
    mailshuxin
        14
    mailshuxin  
       2022-01-23 02:56:36 +08:00
    路由黑洞也不行.能看,但是第二天 VPS 的 IP 就被封了
    vtoex0000000002
        15
    vtoex0000000002  
       2022-01-23 21:12:54 +08:00
    在路由器上做,

    # fix dns, redirect all other dns server to 192.168.1.1#53, such as 114.. or 8..
    iptables -t nat -N DNS
    iptables -t nat -A DNS -p udp -j REDIRECT --to-ports 53
    iptables -t nat -I PREROUTING -p udp --dport 53 -j DNS

    然后在电脑上用 nslookup 测试,server 2.2.2.2 ,都能正常返回 dns
    vtoex0000000002
        16
    vtoex0000000002  
       2022-01-23 21:14:35 +08:00
    vtoex0000000002
        17
    vtoex0000000002  
       2022-01-23 21:18:04 +08:00
    没看你的内容,这个就是 tv 版的限制,我之前也遇到了
    semglassiebaba
        18
    semglassiebaba  
       2022-01-26 15:51:32 +08:00
    TV 版貌似有远程获取 cdn ip 的机制,拦截 dns 不起作用的,只能加 ip 规则
    qinyq
        19
    qinyq  
       2022-02-09 18:16:49 +08:00
    @semglassiebaba iPhone 版也是,看一次封一次。。。难道也是因为获取 cdn ip 导致的?
    qjk201203ddd
        20
    qjk201203ddd  
       2022-03-19 20:00:08 +08:00 via iPhone
    我也是这个问题,新版本里面都是直接 ip ,但之前老机器上用的 shellclash 都能正常。奈飞能用,迪士尼倒是不能用了
    cloudsigma
        21
    cloudsigma  
       2022-05-02 11:12:40 +08:00
    在路由器里截取

    # fix dns, redirect all other dns server to 192.168.1.1#53, such as 114.. or 8..
    iptables -t nat -N DNS
    iptables -t nat -A DNS -p udp -j REDIRECT --to-ports 53
    iptables -t nat -I PREROUTING -p udp --dport 53 -j DNS
    CrazyRundong
        22
    CrazyRundong  
    OP
       2022-05-02 11:26:18 +08:00 via iPhone
    @cloudsigma #21 UDP 53 已经截取了的,连 TCP 53 都用 clash tun hijack 了。但现在除了直接在电视上开 clash for android 全局模式,其他方法都好像有概率触发代理检测或者限播非自制剧
    me221
        23
    me221  
       2022-05-03 23:48:17 +08:00
    @CrazyRundong 我发现在 IOS 的 APP 更容易封 IP... 在隔壁找到 https://host.loc.com/thread-973557-1-1.html 这个帖子
    keyfunc
        24
    keyfunc  
       2022-06-21 17:26:27 +08:00   3
    payload:
    - "23.246.0.0/18"
    - "37.77.184.0/21"
    - "45.57.0.0/17"
    - "64.120.128.0/17"
    - "66.197.128.0/17"
    - "108.175.32.0/20"
    - "192.173.64.0/18"
    - "198.38.96.0/19"
    - "198.45.48.0/20"
    Holmes96
        25
    Holmes96  
       2022-08-08 21:32:12 +08:00
    有大佬解决了么?
    Holmes96
        26
    Holmes96  
       2022-08-08 21:32:33 +08:00
    有大佬解决 Apple TV 上 DNS 解锁了么?
    ysn2233
        27
    ysn2233  
       2022-12-07 09:06:19 +08:00
    同样问题有解决的么?
    HuLaTown
        28
    HuLaTown  
       2023-01-18 17:44:04 +08:00
    同样的问题,在 openclash 的规则里添加了 @keyfunc 提供的 IP 列表解决了。感谢!
    caiyuyu
        29
    caiyuyu  
       2023-06-15 08:11:40 +08:00
    @HuLaTown 大佬,我也遇到这个问题了,可以问一下是咋加的吗?我加了好像也不行
    Eastlee
        30
    Eastlee  
       2023-08-16 14:49:56 +08:00
    我和楼主遇到一样的问题,我是梅林环境,tv 版应该有单独的检测机制,最后关闭了路由器的 ipv6 好了。
    HuLaTown
        31
    HuLaTown  
       2023-11-12 14:53:46 +08:00
    @caiyuyu 我是在 `rules` 部分加了以下这些:

    ```
    - IP-CIDR,23.246.0.0/18,netflix
    - IP-CIDR,37.77.184.0/21,netflix
    - IP-CIDR,45.57.0.0/17,netflix
    - IP-CIDR,64.120.128.0/17,netflix
    - IP-CIDR,66.197.128.0/17,netflix
    - IP-CIDR,108.175.32.0/20,netflix
    - IP-CIDR,192.173.64.0/18,netflix
    - IP-CIDR,198.38.96.0/19,netflix
    - IP-CIDR,198.45.48.0/20,netflix
    ```

    上面的 `netflix` 是我建的 proxy-group
    Reficul
        32
    Reficul  
       2024-02-22 23:59:32 +08:00   1
    折腾了半天,终于搞清楚了。

    TV App 存在 DNS pin ,回向写死的 DNS 服务器发起 DOH 和 DOT 查询,DNS 服务器我看到的就有
    8.8.8.8 / 8.8.4.4 / 1.1.1.1 / 1.0.0.1 ,不排除有别的,屏蔽不过来也没有前途。

    目前所谓的 DNS 解锁本质就是一个 SNI proxy ,DNS 返回的结果不是 SNI proxy 的地址的情况下,解锁就失效了。所以解决方案也很简单,用 iptables 把 Netflix 的网段都劫持到 SNI Proxy 的地址上就行了。

    脚本大致如下:
    https://gist.github.com/xuzhenglun/d35e6534e24291dec0009248924f9c85
    CrazyRundong
        33
    CrazyRundong  
    OP
       2024-02-23 11:25:22 +08:00
    @Reficul #32

    >TV App 存在 DNS pin ,回向写死的 DNS 服务器发起 DOH 和 DOT 查询

    多谢!这个信息太有用了!我目前在 sing-box 上通过阻断 853 、443/UDP 和 STUN 流量来防止 TV App 的 DNS pin 泄漏,然后把剩余的流量分流到解锁了 Netflix 的节点。这样也能 work ,就是每次加载时间会长一些: https://github.com/lirundong/homelab-infra/blob/93352db/conf-gen/source.yaml#L600-L607
    terrancesiu
        34
    terrancesiu  
      &bsp;2024-03-01 18:34:44 +08:00
    @Reficul 是的,就是你的搞法,我直接把目的地址为 NF 的所属的 cidr 且目的端口为 443 的请求,通过 dnat 到了 sniproxy 的服务器地址,然后一切 ok 。RouterOS 的做法,我贴出来。
    把 nf 的地址段都加入这个 list ,但是实际上亚洲解锁都是 23.246 段的,台湾比较特殊,本地 ISP 也有 CDN
    /ip firewall address-list
    add address=23.246.0.0/18 list=netflix
    add address=37.77.184.0/21 list=netflix
    add address=45.57.0.0/17 list=netflix
    add address=64.120.128.0/17 list=netflix
    add address=66.197.128.0/17 list=netflix
    add address=108.175.32.0/20 list=netflix
    add address=192.173.64.0/18 list=netflix
    add address=198.38.96.0/19 list=netflix
    add address=198.45.48.0/20 list=netflix
    add address=210.201.93.0/24 comment="Asia Pacific Telecom" list=netflix
    add address=203.75.0.0/16 comment="HiNet (Chunghwa Telecom)" list=netflix

    #创建一个 DNAT
    /ip/firewall/nat
    add action=dst-nat chain=dstnat comment=netflix dst-address-list=netflix dst-port=443 protocol=tcp to-addresses="你的 DNS 解锁解析出来的 SNI 代理服务器地址" to-ports=443

    最后做个定时任务,如果解析地址变化,自动更新
    /system/scheduler
    add comment=netflix interval=2m name=schedule99 on-event=":local NAME \"www.netflix.com\"\r\
    \n:local CURRENT [:resolve \$NAME]\r\
    \n:local CONTENT [/ip/firewall/nat/get value-name=to-addresses [find comment=\"netflix\"]]\r\
    \n:if (\$CURRENT != \$CONTENT) do={\r\
    \n/ip/firewall/nat/set to-addresses=\$CURRENT [find comment=\"netflix\"];\r\
    \n:log/info \"DOMAIN: \$NAME ,SNIPROXY: \$CURRENT updated\"\r\
    \n};" policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon start-date=2021-01-01 start-time=08:00:00
    meitao19950
        35
    meitao19950  
       2024-04-10 01:29:16 +08:00 via Android
    @Reficul 太专业了看不懂
    AnotherWorld
        36
    AnotherWorld  
       2024-07-18 21:22:35 +08:00
    @Reficul 大佬能简单通俗的讲讲 openwrt 或 openclash 该怎么配置吗
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4027 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 22ms UTC 05:30 PVG 13:30 LAX 21:30 JFK 00:30
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86