Nginx + Dnsmasq 解锁 Netflix

Nginx + Dnsmasq 解锁 Netflix

之前 GitHub 上很多人用的 Netflix 解锁 Docker 容器,是用一个专门的 sniproxy 程序“反代” HTTPS 流量。sniproxy 的好处是配置够简单灵活,坏处是如果已经有 HTTPS 服务在运行,那 443 端口被占了是没法用 sniproxy 的。本站用 Nginx 反代后端,而 Nginx 早已经可以通过 stream 变相实现 sniproxy 的功能,于是就有了本文的做法,可以让解锁服务和普通 HTTPS 网站同时运行。

先说一下,Netflix 目前已经逐步放松 IP 地理位置限制了,原来完全不能用的地址现在至少可以看自制剧,也有很多很棒的剧集哟!第三方内容里大部分还是需要代理解锁,比如 AMC 的 The Walking Dead,Better Call Saul 等等。下面就讲讲 DNS 解锁 Netflix 是怎么一回事。

0. 准备

首先,我们需要一个能看 Netflix 完整内容的 IP,就是没有被它标记限制的那种… 嗯,既然我已经有可以看的 IP 了还要解锁干啥呀?别急,配好这个解锁可以给电视电话电冰箱电磁炉用或者给分享朋友等等用,而不需要安装额外的软件配置额外的代理,跟普通的翻墙代理不一样,这里只设置一个 DNS 就可以。题外话,据说目前私有 IPv6 基本没有限制,有大佬自己注册了 ASN 买了段 v6 地址亲测可用,这个超纲了,不在本文讨论范围内😂。

1. Nginx

SSH 登上没有被 Netflix 屏蔽的服务器,设置一下 Nginx。参考 Nginx 有关文档。如果已经装有 Nginx 的话,nginx -V 执行看下可用的 flag 里有没有打开编译选项
--with-stream_ssl_preread_module,如果没有的话,ubuntu 可以 apt install 安装 nginx-extras 替换掉原来的版本,安装完全体 Nginx,其他发行版应该也有类似包,实在不行再自行配置选项重编译吧。

Nginx 修改配置,nginx.conf 中找到 stream {} 区域,如果没有的话可以自己手动添加。里面加一个 server 用来“反代” HTTPS 数据流,再加一组正则映射规则通过 SNI 过滤域名,像这样,只允许 Netflix 域名的 SNI:

stream {
    # 加一组 map,根据规则过滤 $ssl_preread_server_name (也就是请求的 SNI)
    # 将过滤过的 SNI 存入自定义变量 $filtered_sni_name,
    # 如果没有匹配到任何规则,则默认为一个 443 端口没有服务的本地回环。
    map $ssl_preread_server_name $filtered_sni_name {
        ~^(.*|)netflix\.com$ $ssl_preread_server_name;
        ~^(.*|)netflix\.net$ $ssl_preread_server_name;
        ~^(.*|)nflximg\.com$ $ssl_preread_server_name;
        ~^(.*|)nflximg\.net$ $ssl_preread_server_name;
        ~^(.*|)nflxvideo\.net$ $ssl_preread_server_name;
        ~^(.*|)nflxext\.com$ $ssl_preread_server_name;
        ~^(.*|)nflxso\.net$ $ssl_preread_server_name;
        ~^(.*|)fast\.com$ $ssl_preread_server_name;
        default "127.255.255.255";
    }

    server {
        resolver 1.1.1.1;
        listen 443;
        ssl_preread on;
        # 只代理经过 SNI 过滤的流量,
        # 其他流量都被丢入不存在的地址
        proxy_pass $filtered_sni_name:443;
    }
}

保存完了重载 Nginx 即可。这里加 map 来过滤流量的意义在于防止服务器被滥用成任意网站的反代。

2. Dnsmasq

如果到这里你已经明白是怎么一回事的话,大概不需要 DNS 你也知道怎么弄了── hosts 文件写入上边这些域名,指向那个服务器的 IP 就行。当然为了方便使用我们继续,假定上边没被 Netflix 封锁的 IP 是 a.b.c.d,现在任意找一个延迟较低的公网服务器,或者继续用 a.b.c.d 也可以。假定这次的 IP 叫 1.2.3.4。在 1.2.3.4 上的 Dnsmasq 增加配置如下:

address=/netflix.com/a.b.c.d
address=/netflix.net/a.b.c.d
address=/nflxvideo.net/a.b.c.d
address=/nflxext.com/a.b.c.d
address=/nflximg.com/a.b.c.d
address=/nflximg.net/a.b.c.d
address=/nflxso.net/a.b.c.d
address=/fast.com/a.b.c.d

保存后重启 Dnsmasq 即可。

3. 使用

现在告诉你的朋友,让他把网络设置的 DNS 改成 1.2.3.4 就可以使用 Netflix 咯,电视机 PlayStation Xbox 啥的也是改个 DNS 就能用。只要使用者可以正常连接 a.b.c.d1.2.3.4 即可。如果使用者连接不到这俩地址的话🤔那得配合中转代理更复杂的玩法,留到以后再写吧。

Show Comments