Music

原理

其实DNS流媒体解锁的原理说白了就是DNS劫持+反向代理。假设你有2台VPS,一台VPS1能解锁Netflix(或其他流媒体),另一台VPS2不能解锁Netflix。

DNS流媒体的原理就是:

  1. 将VPS2的DNS指向到VPS1的DNS服务器上
  2. VPS1收到一般的域名请求会正常返回结果,但是收到Netflix、HBO、HULU等流媒体域名的请求时就会直接返回VPS1的IP,VPS2收到这个IP后便会误以为VPS1就是Netflix的服务器并与它建立连接,这时VPS1会将VPS2的流量代理到真正的Netflix的服务器,从而实现VPS2的Netflix解锁。

所以,如果你使用DNS解锁流媒体,那么观看Netflix时会同时消耗VPS1和VPS2的流量。

安装

安装注意事项:确认防火墙放行80,443,53

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

卸载

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

屏幕截图 2022-11-02 225540
安装完成后,将代理VPS(即不能观看流媒体的vps)的DNS地址修改为这个主机的IP就可以了,如果不能用,记得只保留一个DNS地址试一下。
屏幕截图 2022-11-02 225843
我这个美国vps不能解锁奈飞,那么这时候我将这台vps的dns设置为上面刚搭建好的dns解锁的IP,我们再试一下,我们使用以下命令修改(Debian/ubuntu)

echo -e "nameserver 4.4.4.4" > /etc/resolv.conf #将4.4.4.4修改为dns解锁IP
chattr +i /etc/resolv.conf

移除操作

chattr -i /etc/resolv.conf
echo -e "nameserver 8.8.8.8" > /etc/resolv.conf

更改完之后,我的美国vps成功解锁了奈飞。
屏幕截图 2022-11-02 230417

调试排错

确认sniproxy有效运行

systemctl status sniproxy #查看sni状态
service sniproxy stop #停止sni服务
service sniproxy start #启动sni服务

如果sni不在运行,检查一下是否有其他服务占用80,443端口,以防端口冲突,先将其他服务更改一下监听端口,查看端口监听:netstat -tlunp|grep 443

ip白名单

考虑到有小伙伴担心ip泄露导致dns解锁会被滥用,这边教大家用防火墙做一个限制

apt install -y ufw
ufw enable
ufw allow 22/tcp
ufw allow from 你VPS的IP to any port 53
ufw allow from 你VPS的IP to any port 80
ufw allow from 你VPS的IP to any port 443
ufw default deny  #此条命令一定要最后运行
  1. apt install -y ufw: 安装 ufw 工具。
  2. ufw enable: 启用防火墙。
  3. ufw allow 22/tcp: 允许来自任何地址的 TCP 流量访问本机的 22 端口,这通常是 SSH 服务的默认端口,用于远程登录。
  4. ufw allow from 你VPS的IP to any port 53: 允许来自指定 VPS IP 地址的流量访问本机的 53 端口,这通常是用于 DNS 服务的端口。
  5. ufw allow from 你VPS的IP to any port 80: 允许来自指定 VPS IP 地址的流量访问本机的 80 端口,这通常是用于 HTTP 服务的端口。
  6. ufw allow from 你VPS的IP to any port 443: 允许来自指定 VPS IP 地址的流量访问本机的 443 端口,这通常是用于 HTTPS 安全通信的端口。
  7. ufw default deny: 设置默认的入站和出站规则为拒绝。这意味着除了明确允许的规则外,所有的入站和出站连接都将被阻止。

如果你想允许某个端口接受来自所有地址、所有端口的流量,可以使用以下命令:

ufw allow <端口号>/tcp
ufw allow <端口号>/udp

这将允许来自所有地址的 TCP\UDP 流量访问指定的端口。请替换 <端口号> 为实际的端口号。
例如,如果你想允许所有地址访问端口 1234,可以运行以下命令:

ufw allow 1234/tcp
ufw allow 1234/udp

这将在防火墙规则中添加一条允许 TCP\UDP 流量访问端口 1234 的规则。

ufw reload

重载ufw配置

ufw status

查看所有规则

ufw status verbose

查看详细信息

ufw status numbered

按规则号查看详细信息

按规则的规范性删除规则:

ufw delete <规范性>

替换 <规范性> 为规则的规范性,这通常是规则的序号。例如:

ufw delete 3

这将删除规则编号为3的规则。