Photo by Thibault Penin / Unsplash

通过 Nginx 代替 SNIProxy 并配合 Dndmasq 来部署流媒体解锁DNS

科技 Jan 23, 2024

折腾前言

之前大家都在用的几个方案中的 SNIProxy 已经在23年年底处于不维护状态,再加上 Nginx 在1.24版中加入了对 IPv6 的支持,这使得拥有 ASN 的我在部署流媒体 DNS 解锁服务器上的方案变得更加灵活。

曾经的方案A,支持网页管理指定 IP 入站:
https://github.com/ab77/netflix-proxy

曾经的方案B,使用简单没用那么多要求限制:
https://github.com/myxuchangbin/dnsmasq_sniproxy_install

虽然说 SNIProxy 配置起来十分方便,但是使用 systemctl 重启的时候却是十分麻烦,于是有了本文的代替方案。

部署前言

流媒体 DNS 解锁服务需要一台解锁机,所以:
先测试一下所需的流媒体是否解锁:bash <(curl -L -s check.unlock.media)
测试无误后就可以开始部署环境了

安装与配置 Nginx

根据自己的系统这里选择安装:https://nginx.org/en/linux_packages.html

在安装之后,配置 Nginx:nano /etc/nginx/nginx.conf

user www-data;
worker_processes auto;
pid /run/nginx.pid;
error_log /var/log/nginx/error.log info;
events {
    worker_connections 1024;
}

stream {
    log_format main '[$time_local] remoteAddr: $remote_addr '
    'serverAddr: $server_addr '
    '$protocol status: $status sent: $bytes_sent recv: $bytes_received '
    'session_time: $session_time '
    'upstream_addr: $upstream_addr';
    
    access_log /var/log/nginx/nginx-stream-access.log main;
    
    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 [2606:4700:4700::1111] ipv4=off; # 根据需求改DNS,如果需要IPv4 那么把 off 改为 on
        listen 127.0.0.1:443; # 如果使用 IPv4 用这条,并把 127.0.0.1 替换为你的IP
        listen [fe80::a]:443; # 如果使用 IPv6 用这条,并把 fe80::a 替换为你的IP
        ssl_preread on;
        
        proxy_pass $filtered_sni_name:443;
        proxy_bind 你的IP; # 根据上方所使用的来修改 你的IP 为对应 IPv4 或 IPv6
    }
}

接下来保存、退出,重载 systemctl restart nginx 即可

安装与配置 Dnsmasq

Debian 12 直接:apt install dnsmasq
在安装之后,配置 Dnsmasq:nano /etc/dnsmasq.conf

domain-needed
bogus-priv
no-resolv
no-poll
all-servers
server=8.8.8.8
server=8.8.4.4
cache-size=2048
local-ttl=60
interface=*
address=/netflix.com/1.2.3.4
address=/netflix.net/1.2.3.4
address=/nflxvideo.net/1.2.3.4
address=/nflxext.com/1.2.3.4
address=/nflximg.com/1.2.3.4
address=/nflximg.net/1.2.3.4
address=/nflxso.net/1.2.3.4
address=/fast.com/1.2.3.4
address=/netflix.com/fe80::a
address=/netflix.net/fe80::a
address=/nflxvideo.net/fe80::a
address=/nflxext.com/fe80::a
address=/nflximg.com/fe80::a
address=/nflximg.net/fe80::a
address=/nflxso.net/fe80::a
address=/fast.com/fe80::a

替换上方 1.2.3.4 为你的 IPv4,当使用IPv6请替换 fe80::a 为你的 IPv6,否则删掉这几行即可。
接下来保存、退出,重载 systemctl restart dnsmasq 即可

最后

当你需要看流媒体的话,只需要将 DNS 修改为上面解锁机的 IPv4 即可,如果使用IPv6也是可以使用 IPv4 的地址的(观看 netflix 节目时会自动走IPv6这样)。
当然,这样并不能防止被人白嫖,你可能还需要配置防火墙让443、53端口的流量指定为允许的IP通过。

Tags