[Linux] DNS解锁Netflix的技术与实现原理

April 18, 2019 奇怪的代码

ab77的netflix-proxy是一个非常棒的项目,但是依赖他去做解锁过于复杂了。
本文将大概讲述Netflix-proxy的运行原理,然后讲一下大概的实现方式。

技术原理

本质上是 DNS劫持SNI代理
将Netflix的查询请求 劫持 到落地节点或者中转节点的IP上,这样你访问Netflix就会被强制引导到落地节点或者中转节点。
之后通过落地节点监听443端口的 SNI代理 ,将你的观看请求通过落地节点处理后发送给Netflix服务器。
这样操作之后,Netflix就会从判断观看方IP转成判断落地机IP是否可用。
落地机是单纯的 SNI代理 ,因此也不会被判断成是在 使用解锁器

什么是SNI代理

SNI代理(sniproxy)类似于一个反向代理软件。
可根据域名转发,并且https使用的原始证书。
因为使用https的原始证书,因此不需要进行第三方证书信任也可以正常走https。

技术上如何实现

  • 第一步,搭建DNS服务器,配置规则。
  • 第二步,搭建SNI代理服务器,配置规则。
  • 第三步,修改DNS,清理DNS缓存。

第一步,搭建DNS服务器,配置规则
很简单,如果是正常的修改resolv.conf,那么你就需要监听53端口的UDP。
你可以使用类似dnsmasq的软件来实现,也可以直接自建一个。

第二步,搭建SNI代理服务器,配置规则
代理的话,一般就需要监听443端口。
规则可以利用上一步DNS的规则来判断。
你用正则也可以,用是否包含来判断也可以。
总之需要将所有特定的流量都代理才可以。

第三步,修改DNS,清理DNS缓存
这步很简单,修改本机DNS,然后清理缓存,避免无法使用的情况。
一般这样操作之后就可以直接串流Netflix的流量了。

如何控制可连接的IP

从DNS服务器角度来说,不可行。
但是从SNI代理服务器角度来说,可行。
通过对数据包对分析,得到来源的包头的IP。
拿到IP后鉴权判断,如果不在规则内,直接关闭连接即可。
如果你想的话其实你也可以返回些别的信息。

总结

原理不算复杂,项目也基本都有现成的。
使用Golang写的解锁大概花了一天就搞定了。
主要的难点是对库的熟练使用。
尤其是miekg的dns库,都没什么文档,麻烦的很。

添加新评论