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 · 9427 次点击
    这是一个创建于 1065 天前的主题,其中的信息可能已经有所发展或是发生改变。

    部署旁路由 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  
       276 天前   ❤️ 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
       276 天前
    @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  
       269 天前
    @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  
       229 天前 via Android
    @Reficul 太专业了看不懂
    AnotherWorld
        36
    AnotherWorld  
       130 天前
    @Reficul 大佬能简单通俗的讲讲 openwrt 或 openclash 该怎么配置吗
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3043 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 14:17 · PVG 22:17 · LAX 06:17 · JFK 09:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.