[Drcai's Noob Guide] 第一期-变废为宝篇 SNIPROXY做到单节点解锁NetFlix等一切OTT服务

drcaidrcai 话题数:40会员, 大佬
最后编辑于 March 2019 教程 #0

好久没有发骚操作指南了 - -!!
原因 : 太骚的操作自己也驾驭不了 , 比较骚的操作新手驾驭不了 ....
那么这次肯定是非常简单的操作咯 , 不要有压力 , 先来了解一下这个教程的目的 .

很多萌豚为了躺在沙发上看4K版 NETFLIX 选择了 小米盒子S国际版 ...FIRETV ...等一系列 认证盒子..
入坑仿佛开启了新的世界 , 发掘不仅有 Netflix 还要看 FOX ...HBO ...HULU...ABEMA ...BBC ..ITV ...SLINGTV ..DIRECTV....HAMI VIDEO ....LITV ....

这些OTT 服务平台来自不同的国家 , 只用单个服务器IP 似乎无法一次性全部解锁 .每次换应用的时候都得去切一下服务器节点...

能不能一次性看爆 ??? 方案有2个 :

[传统方案]
路由器上装DNSMASQ , 把不同平台的域名发配到不同的SNIPROXY 上 .
缺点:
1 HTTPS协议 443端口 容易被证书阻断 Connection Reset Happened - -!!!
2 每个OTT平台都需要配一条"优质高速"线路 Wallet Expooooosion Happened - -!!!
3 你要自定义非常多的DNSMASQ规则 , 大多数ATV认证盒子连激活和界面都得反代 .....
4 很快IP就会被墙的 - - 总觉得你的荷包又要爆炸一次 - -!!!

[改良方案]
Step1:用一台线路好的VPS做SS/SSR服务端 . 一台可以解锁 OTT平台的渣VPS 做SNIPROXY.
Step2:修改代码, 利用 SS/SSR服务端 读取SNIPROXY的数据.
Step3:直接在ATV盒子上安装SSR客户端安卓版/使用ss-redir脚本制作透明代理网关.

简单易懂的原理介绍 :
在第一步,我们安装了 SNIPROXY (反代) 和 DNSMASQ (相当于Windows的修改Host) 一体化环境 .
那么在SS/SSR服务端 我们利用这个分流脚本 ,把不同的域名 分配到 不同的自建DNSMASQ服务上 .
那台VPS的DNSMASQ会把OTT平台的域名使用本机的SNIPROXY进行反代......
最后,相当于你的 SS/SSR 服务端在把你的SNIPROXY当作一个网站在访问 - - 这样应该能理解 ??

缺点:
1 流量开支 x2 , 所以请发挥想象力合理分配你的VPS - -!

优点:
1 速度快不断流 , 所有的OTT流量转发都交给了你接入用的VPS...
2 OTT平台解锁可以用被墙 VPS ....到国内网络绕地球的超级廉价货 ...
3 IP 还是有机会被墙 , 但是每次只墙一个 - -! 这个真的算优点么 - -??

=================分割线====================

既然改良还是有那么多优点...那就果断进入实施阶段 :

1st - 你需要建一坨可以看OTT平台的 SNIPROXY.

渣渣新说到: 求推荐VPS !
本菜鸡的建议 : 垃圾ONEVPS , 垃圾AWS LIGHTSAIL 新加坡 , 这种IP秒墙线路又渣,流量便宜,但自身素质(国际线路速度 , 硬件稳定性)良好的KVM VPS即可...
准备好后看这里 : https://github.com/ab77/netflix-proxy
根据说明一键安装 . 这是一个 SNIPROXY + DNS 服务器一体的脚本

注意:
1 这个脚本会自动设置IPTABLES ,请保持 SSH 端口为 22 .完成后人工调整 ...
2 ~/netflix-proxy/auth 目录下运行 ./admin-reset.sh 重设WEB界面管理密码
3 访问 http://ip:8080 使用admin账号登陆 , 把SSR 服务端所在VPS 的 IP 加入白名单 !!

添加更加多的转发域名(已自带 netflix 和 bbc 等等 ):
来到 ~/netflix-proxy/ 目录 编辑dnsmasq.conf
以Sling TV的域名为例增加:

address=/sling.com/公网IP
address=/movetv.com/公网IP

记得不但要增加网站的根域名,CDN视频服务器的域名别忘记加进去, 大部分的CDN服务器都会封IP 不用侥幸..
修改完成后 docker restart dnsmasq 生效.

2nd - 在你的"优质"VPS上配好 SS/SSR服务端

(以下最简单易懂的 Pyhton 版服务端为例 , SS和SSR服务端在这一步操作上没有任何区别 .)
接下来我们要稍微修改一下代码, 利用SSR服务端自带的 DNS 分流功能 .
---- 不要害怕,我PYTHON ,PHP 都没学过..没有让你原创, 修改代码凭感觉来就可以了 !!
打开服务端根目录 , 编辑 /shadowsocks/asyncdns.py 440行左右的代码 ,
先找到 def _send_req(self, hostname, qtype): 接下来我示范修改一段代码供参考.

def _send_req(self, hostname, qtype):
        req = build_request(hostname, qtype)
        for server in self._servers:
            logging.debug('resolving %s with type %d using server %s',
                          hostname, qtype, server)
            if "netflix" in hostname or "nflx" in hostname:
                self._sock.sendto(req, ('解锁NF用的SNIPROXY IP', 53))
            elif "sling" in hostname or "movetv" in hostname:
                self._sock.sendto(req, ('解锁SLING用的SNIPROXY IP', 53))
            else :
                self._sock.sendto(req, server)

新手语法注意:
1 SS/SSR服务端的域名转发比DNSMASQ更简单 . 以netflix.com为例 - -你只用写 if "netflix" in hostname ,那么包含netflix 字符的域名都会适配这条规则 , 不用写成"netflix.com" .
2 同一条规则适配多个域名 当中用 or 来间隔 ...
3 适配另外一个网站比如示范中的sling tv , 另起一行用 elif 来表达 ...之后你比如想再来个bbc 继续是用 elif ... 千万别一路上全部是 if , 最后剩下来的规则 用 else - -!!

3rd - 利用一键脚本建立基于 SS/SSR的透明网关 或 直接运行安卓版SSR客户端

你需要一台X64 或者性能强劲ARM 实体机....当然开一台HYPER-V虚拟机之类的也没问题 ..

然后看这里 https://github.com/zfl9/ss-tproxy
新手指南在这里 https://www.zfl9.com/ss-redir.html
你所需要的模式为 : chnroute . 也就是一切海外流量走代理 .

最后把你的电视盒子设置为静态 IP , 网关 和 DNS 全部填写成那台透明网关的 ...

说到这里 有睿智的人要跳出来了 : 我直接在电视盒子上装一个 安卓版的 SSR客户端不就好了 ?
一般电视盒的CPU性能运行 SSR安卓版后 1080P 能流畅的看 , 4K 要流畅的看恐怕要加钱 ...
NVIDIA SHIELD TV 的性能可以做到 ...
有的人只追求1080P ... 所以, 这一步想偷懒的人请直接在盒子内安装SSR 安卓版即可 ...

完成 , 开始享受人生 ~

PS:

1 请发挥你的创造能力 , 此教程不光适用于TV盒子 , 可以套用在任何需要 单IP接入 自动分配到其它IP的应用环境上 , 比如各种手机应用 , 凡是不方便切换代理节点的都可以参考这套方案.

2 Netflix 认证电视盒子推荐: 入门级 - FireTV stick(1080p)/FireTV stick 4K , 中档 - 小米盒子 S 国际版 , 高级 - Nvidia Sheild TV .千万不要买 ROKU ,那是工业垃圾 !!!! 千万不要手贱去ROOT ,这样 google DRM L1认证就掉到 L3了 ..Netflix 盒子版无法运行 只能重新刷机拯救了 ...

3 以上教程中本人自己采用的三合一解锁方案 : 接入用VPS采用香港Softlayer (自带 HBO 和 FOX+ 解锁属性) , 新加坡 AWS Lightsail 作为 Sniproxy 解锁 Netflix , 美国旧金山 Digital Ocean 作为Sniproxy 解锁 Sling TV .

评论

  • drcaidrcai 话题数:40会员, 大佬
    最后编辑于 March 2019 #1

    教程中有点错误, 因为帖子无法更新 请看这里

    /shadowsocks/asyncdns.py 除了要编辑上面那一段 ...

    还要找到 def handle_event(self, sock, fd, event): 整段修改:

    def handle_event(self, sock, fd, event):
            if sock != self._sock:
                return
            if event & eventloop.POLL_ERR:
                logging.error('dns socket err')
                self._loop.remove(self._sock)
                self._sock.close()
                # TODO when dns server is IPv6
                self._sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM,
                                           socket.SOL_UDP)
                self._sock.setblocking(False)
                self._loop.add(self._sock, eventloop.POLL_IN, self)
            else:
                data, addr = sock.recvfrom(1024)
                self._handle_data(data)
    

    以上代码来自 : https://github.com/iv8/ssr-mu/blob/master/shadowsocks/asyncdns.py
    怕这位大佬的业务会得到一大波 DDOS 所以....就放在回复里吧..

  • helansnowhelansnow 话题数:11会员

    不错,提两个问题:
    1、如果第二步搭建的是shadowsocks-libev怎么修改代码?
    2、如果第三步网关是openwrt路由器,如何设置?
    谢谢!

  • drcaidrcai 话题数:40会员, 大佬

    @helansnow 说道:
    不错,提两个问题:
    1、如果第二步搭建的是shadowsocks-libev怎么修改代码?
    2、如果第三步网关是openwrt路由器,如何设置?
    谢谢!

    服务端果断换python版 ...没有去研究的必要 ...

    路由器直接做透明网关 自己装 SSR的插件 ...
    OPENWRT https://ssr.tools/136 比如这个教程就可以了 ....
    但是一般路由器性能太差了 ,还没你的电视盒子好 ....

登录注册后才能评论。