部署DNS服务解锁Netflix

部署DNS服务解锁Netflix

2024年9月1日 3682次阅读 0条评论
clawcloud
expressvpn best vpn
privado vpn
surfshark vpn
private vpn
pia vpn
nord vpn

有观看 Netflix 习惯的朋友应该都知道,VPN 或者梯子的 IP 很重要,IP 能够解锁 Netflix 是正常播放的必要条件之一。不过,因为诸多原因,我们可以不直接使用能够解锁奈飞的节点观影,而是将其架设为 DNS 服务,帮助其他原本无法解锁奈飞的客户端解锁、播放奈飞节目。这种方法不仅适用于奈飞,同样可以解锁 HBO、TVB、台湾bilibili等。原理很简单,就是通过将可解锁奈飞的 VPS A 部署为 DNS 服务,不可解锁奈飞的 B(客户端主机)的 DNS 服务器(nameserver)指向 A,A 劫持 B 对 Netflix 的解析请求, 自己扮演奈飞的角色并为 B 提供反向代理奈飞的服务。

这种方法广泛应用在奈飞等流媒体解锁领域,如 ExpressVPN 服务器网络就使用了这一方式保证了全网络节点的流媒体解锁,SNIProxy 等开源工具也一度非常流行。但是,这种方法需要付出双倍流量、不稳定、可能的滥用指控等代价。同时,最新的 nginx  1.24 中加入了对 IPv6 upstream 的支持,使得使用 nginx 部署这一服务相对更为灵活。本文分别就“老旧”的 SNIProxy 和较新的 nginx 1.24 搭建方案进行介绍,但同样会建议还没有 1 台 VPS 的小伙伴放弃折腾,直接 VPN 或代理机场走起。

适用对象

轻中度、普通用户

如果像作者一样没那么多精力死磕流媒体的轻中度用户,或者缺少专业知识、没有资源(VPS)储备的普通用户,还是花钱购买 VPN 或机场,省心省钱。这里做个小广告,推荐「」和「」。

ExpressVPN-国内唯一好用的VPN
$6.67/mo.

105国家/地区覆盖、3000+混淆服务器

无限流量,无限速度

We earn a commission if you make a purchase, at no additional cost to you.
双十一超级礼包与特惠
¥9/mo.+40%礼包

全高速专线、AI与流媒体解锁

多种套餐随意选择

We earn a commission if you make a purchase, at no additional cost to you.

重度用户、爱好者

如果是爱好者,可以在你的 VPS 上逐一尝试 SNIProxy 和 Nginx 方案,并做好自己动手解决一些问题的思想准备,包括稳定性问题、可能产生的运营商滥用(abuse)指控的应对。对于仅重度用户,依然推荐「」,合理花费最经济最简单,应该避免去做维护服务器这种既不简单也不擅长的事。

SNIProxy方案

SNI 代理方面的开源项目有很多,这里以 SNIProxy 以及 SNIProxy 衍生脚本为例。

SNIProxy-

SNIProxy一键安装脚本-

Netflix-proxy-

快速安装

在可以正常解锁 Netflix 的 VPS 上,执行以下命令一键快速安装 Dnsmasq SNIProxy。

wget --no-check-certificate -O dnsmasq_sniproxy.sh https://raw.githubusercontent.com/myxuchangbin/dnsmasq_sniproxy_install/master/dnsmasq_sniproxy.sh && bash dnsmasq_sniproxy.sh -f

安装之后,可以使用 systemctl 命令查看 sniproxy 运行状态。

systemctl status sniproxy

注意事项

dnsutils安装

Dnsutils 是劫持并响应 dns 请求的关键,如解锁失败,可使用以下命令安装。

apt install dnsutils -y

端口放行与冲突解决

请确认防火墙放行 53、80、443,且确保其他服务没有占用 80、443 端口,以防端口冲突。尤其是 dns 53 端口,可以使用如下命令检查占用情况。

netstat -tlunp | grep 53 #检查占用情况

如 53 端口被系统占用,则停止 systemd-resolved 的前提下,修改 /etc/systemd/resolved.conf 配置文件。

systemctl stop systemd-resolved  nano /etc/systemd/resolved.conf  #...  ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf  systemctl restart systemd-resolved.service

/etc/systemd/resolved.conf 配置文件内容如下:

DNS=8.8.8.8   DNSStubListener=no

防止滥用

所有的解锁流量都将通过 SNI 代理 VPS 转发,所以务必设置访问控制规则,避免被滥用。

#丢弃所有请求  iptables -I INPUT -p tcp --dport 53 -j DROP  iptables -I INPUT -p udp --dport 53 -j DROP  #仅接受特定IP地址(a.b.c.d)的请求  iptables -I INPUT -s a.b.c.d --dport 53 -j ACCEPT    #ufw allow from a.b.c.d port 53 proto tcp  #ufw allow from a.b.c.d port 53 proto udp

最后,将主机上的 nameserver 指向 sniproxy 地址即可。如果主机系统为 linux,应将 resolv.conf 锁定开关打开,避免被 networkmanager、netplan 等守护进程重置。

chattr +i /etc/resolv.conf

Nginx方案

Nginx 方案中,nginx 代替了 sniproxy 的角色,结合 1.24+ 版本的 upstream 对 IPv6 的支持,可以更为高效的代理包括 netflix、hbo 甚至 disney+ 等在内的多种流媒体平台服务,对于玩 bgp 的小伙伴更友好。同时,使用 nginx 可以有效缓解恶意的扫描与探测。

第一步 安装 nginx

首先,确保系统中已安装 nginx,如未安装,debian/ubuntu 可使用以下命令安装,其他系统参考「」。

sudo apt install curl gnupg2 ca-certificates lsb-release debian-archive-keyring  curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \      | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null  gpg --dry-run --quiet --no-keyring --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg  echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \  http://nginx.org/packages/debian `lsb_release -cs` nginx" \      | sudo tee /etc/apt/sources.list.d/nginx.list  echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" \      | sudo tee /etc/apt/preferences.d/99nginx  sudo apt update  sudo apt install nginx

第二步 配置 nginx

全新安装的 nginx,可直接拷贝以下配置文件内容。

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 [2608:nnnn:mmmm::1] ipv4=off; # 根据需求改DNS,IPv4 修改 off 为 on          #listen 127.0.0.1:443; # IPv4 使用此条,并将 127.0.0.1 替换为Private IPv4          listen [fe80::a]:443; # # IPv6 使用此条,并将 [fe80::a] 替换为Private IPv6          ssl_preread on;                    proxy_pass $filtered_sni_name:443;          proxy_bind IP4_IP6; # IP4_IP6 同上修改      }  }

第三步 安装、配置 dnsmasq

Debian 11+ 可以通过以下命令直接安装 dnsmasq。

apt install dnsmasq -y

接下来修改 dnsmasq 配置文件 /etc/dnsmasq.conf。使用 IPv4(1.2.3.4) 时删除所有 IPv6(fe80::1) 部分,使用 IPv6(fe80::1) 则删除所有 IPv4(1.2.3.4) 部分,并将对应的地址替换为解锁 VPS 实际的 Public IPv4 或IPv6。

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::1  address=/netflix.net/fe80::1  address=/nflxvideo.net/fe80::1  address=/nflxext.com/fe80::1  address=/nflximg.com/fe80::1  address=/nflximg.net/fe80::1  address=/nflxso.net/fe80::1  address=/fast.com/fe80::1

配置文件修改完成后,重启 nginx、dnsmasq。

systemctl restart nginx  systemctl restart dnsmasq

最后,为避免被滥用或盗用,还应配置防火墙对 443、53 端口的过滤规则,仅允许来自特定 IP 的请求并响应。

结语

无论使用 sniproxy 还是 nginx,都是私有化劫持(hijacking)服务,并且利用了 netflix 等流媒体平台的政策“漏洞”,肯定存在一定的风险。同时,由于涉及内容和版权,在无法保证私有化主动或被动公开化的情况下,各方面的打击会非常严厉。

从整体部署来看,关键在于 VPS 的 IP 地址是否原生,一般情况下,具有原生 IP 的 VPS 播放本区内容是没有问题的,但不少大厂的 IP CIDR 即使原生也可能被平台集体封禁,需要不断尝试。另外,在没有购买绑定住宅 IP 的前提下,不要尝试跨区观影,英文看美区、中文看新区足矣,数据中心 IP 长期跨区的结果就是封禁。

缺少动手能力或不想折腾的直接订阅「」或原生解锁的「」。有关终端的配置,尤其是结合 clash 或 xray、sing-box 的规则,后续再进行分享。更多精彩,敬请关注老E的博客!