老E的博客

  • 首页
  • 关于
  • 技术应用
    • VPS相关
    • AI相关
    • 盒子相关
    • 其他
  • 订阅Youtube频道
  • 网络加速
    • expressvpnNo.1 ExpressVPN
    • 最佳免费VPN-PrivadoVPN
    • NordVPN
    • 廉价王者-Surfshark
    • PrivateInternetAccess
    • 解锁一切-PrivateVPN
  • 公益资源
    • AI导航
    • 工具下载
    • Docker镜像加速
  • 友情链接
    • tickcloudTickcloud
老E的博客
专注记录并分享跨境技术应用及随想
  1. 首页
  2. 技术应用
  3. VPS相关
  4. 正文

部署DNS服务解锁Netflix

2024年9月1日 5849次阅读 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」和「DD 机场」。

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

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

✔ 无限流量,无限速度

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

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

✔ 多种套餐随意选择

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

重度用户、爱好者

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

SNIProxy方案

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

SNIProxy-dlundquist/sniproxy: Proxies incoming HTTP and TLS connections

SNIProxy一键安装脚本-myxuchangbin/dnsmasq_sniproxy_install

Netflix-proxy-ab77/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 长期跨区的结果就是封禁。

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

本作品采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 进行许可
标签: DNS Linux系统运维 netflix nginx vps 开源应用
最后更新:2024年10月31日

老E

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

站内搜索
归档
  • 2025 年 5 月
  • 2025 年 4 月
  • 2025 年 3 月
  • 2025 年 2 月
  • 2025 年 1 月
  • 2024 年 12 月
  • 2024 年 11 月
  • 2024 年 10 月
  • 2024 年 9 月
  • 2024 年 8 月
  • 2024 年 7 月
  • 2024 年 6 月
  • 2024 年 5 月
  • 2024 年 4 月
  • 2024 年 3 月
  • 2024 年 2 月
  • 2024 年 1 月
  • 2023 年 12 月
  • 2023 年 11 月
  • 2023 年 10 月
  • 2023 年 9 月
  • 2023 年 8 月
  • 2023 年 7 月
  • 2023 年 6 月

Copyright ©2023-2025 Appscross. All Rights Reserved.