通过解锁服务器自建DNS实现流媒体解锁

By | 2023-12-25

使用过Netflix、hulu等流媒体的朋友应该都知道要能正常播放这些流媒体的内容,都需要特定的IP,既要能够解锁这些流媒体的IP。但在实际情况中会存在一个矛盾,要不能解锁Netflix等流媒体的VPS流量很少,或者速度不理想;要不流量多的或者速度很好的VPS却不能解锁Netflix等流媒体。而使用DNS解锁流媒体成了最理想的方法;使用DNS解锁流媒体的方式也很多,但一些可能复杂或者需要另外付费。今天我们就来看看一种简单且免费的使用DNS解锁流媒体的方法——搭建DNS服务器,使用DNS服务器的IP作为其它机器的DNS来解锁流媒体。 该方法出自github,适用于CentOS6/7/8、Debian8/9/10、Ubuntu16/18。这个方法也是笔者本人最近两年一直在使用的方法,其原理就是使用Dnsmasq的DNS将网站解析劫持到SNI proxy反向代理的页面上,我们也可以简单理解为使用能解锁Netflix等流媒体的VPS的IP当作不能解锁Netflix等流媒体的VPS的DNS。下面我们来看看具体操作方法,如何让不能解锁Netflix等流媒体的VPS也能正常播放Netflix等流媒体内容。 首先我们需要有一台能正常解锁Netflix的VPS(笔者是开了一台GCP香港的实例来做解锁Netflix的DNS服务器),然后使用SSH登陆这台VPS,接着执行以下命令安装Dnsmasq SNIproxy。Dnsmasq SNIproxy需要用到53、80、443端口,所以需要放行53、80、443端口。 快速安装(推荐):

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 -i

卸载:

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 安装完成后,会出现以下内容,如果脚本最后显示的IP和实际公网IP不相符,请修改一下文件/etc/sniproxy.conf中的IP地址。

我们也可以使用命令来确认sniproxy是否有效运行,返还active(exited)即表示正在运行。查看sni状态命令:systemctl status sniproxy

如果未运行,请确认防火墙放行53、80、443,且确保其他服务没有占用80、443端口,以防端口冲突。查看端口监听命令:netstat -tlunp|grep 443

最后把不能解锁Netflix那台VPS的DNS修改为能解锁这台的IP即可。简单来说,比如我们这里把能解锁Netflix的VPS成为VPS A,不能解锁Netflix的称为VPS B,在使用上面命令在VPS A上安装好Dnsmasq SNIproxy后,把VPS B的DNS改为VPS A的IP地址即可。

完成以上操作后,我们还可以用nslook查看VPS B解析Netflix是否为VPS A的IP地址,检测命令:nslookup Netflix.com

如果命令不存在则安装:

  1. Debian:
  2. apt-get -y install dnsutils
    
  3. Centos:

  4. yum install -y bind-utils
    

最后,为了防止DNS被其他人滥用,我们需要使用iptables限制访问VPS A(能解锁Netflix的VPS)的53端口。

  1. 先限制所有IP访问53端口
  2. iptables -I INPUT -p tcp --dport 53 -j DROP
    
  1. 再允许VPS B(不能解锁Netflix的VPS)的IP访问
  2. iptables -I INPUT -s x.x.x.x -p tcp --dport 53 -j ACCEPT
    
  3. 要允许多个IP则添加多条即可

接下来就可以愉快的使用本来不能解锁Netflix的VPS观看Netflix影片了

我们购买VPS服务器后一般是不需要修改DNS的,但有时候又会觉得某些商家自带的DNS会很别扭或者不好用,比如在开通VPS之后,可能会需要安装一些环境运行库,但是可能因为我们需要wget下载的脚本数据源的地址问题,不能确保直接达到Linux VPS主机服务器的网络是畅通和稳定的,会导致我们在安装部署环境的时候出现安装不完整、有些文件无法完全下载。又或者我们自己为其它用途而需要修改DNS,比如当我们需要自建DNS服务器来解锁Netflix、Hulu、HBO、TVB等流媒体时,就需要修改原本的DNS。

修改VPS的DNS的方法有多种,一般在VPS厂商的网站后台我们就可以直接修改,比如Vultr、Linode、VmShell都是可以登陆官方网站后自行在后台修改,但当我们购买的其它某些厂商不支持在网站后台修改时,我们就只能通过SSH连接VPS后修改。那下面我们就来看看如何通过SSH界面来修改VPS的DNS。

首先使用SSH工具以root身份登陆需要修改的VPS,然后执行以下命令:vi /etc/resolv.conf,把nameserver项修改为我们需要的目标值,修改完毕之后,按键盘ESC键,输入:wq保存即可。

不过,通过上面的方法修改的DNS,在我们重启VPS后,又会还原到原本的默认值,为了让VPS重启后还是保持我们修改的DNS,我们需要永久修改DNS的方法。具体请看下面。

同样还是以root身份登陆后修改。CentOS系统下,输入以下命令:

vi /etc/sysconfig/network-scripts/ifcfg-eth0

然后把最后两行的nameserver或者DNS值修改为我们需要的值,如果有两个DNS,删除一个或者修改第一个。然后按键盘ESC键,输入:wq保存后输入reboot重启VPS即可。

Debian:输入以下命令:
vi /etc/dhcp/dhclient.conf然后在dhclient.conf最后一行添加以下字符:
prepend domain-name-servers 8.8.8.8, 8.8.4.4

同样,修改完后,还是保存并退出,重启VPS即可。

以上两个修改VPS的DNS的方法,需要的朋友可以根据自己的实际需求来选择临时或者永久修改DNS。

方法一(推荐)

生成钩子阻止 DHCP 修改 resolv.conf

1. 生成 nodnsupdate 文件并写入代码

cat <<EOF >/etc/dhcp/dhclient-enter-hooks.d/nodnsupdate
#!/bin/sh
make_resolv_conf(){
    :
}
EOF

Shell

复制

2. 给文件 nodnsupdate 添加可执行权限

chmod +x /etc/dhcp/dhclient-enter-hooks.d/nodnsupdate

Shell

复制

3. 修改 DNS

cat <<EOF >/etc/resolv.conf
nameserver 1.1.1.1
nameserver 8.8.8.8
EOF

Shell

复制

Cloudflare 的 1.1.1.1 和谷歌的 8.8.8.8 是 国外的优质 DNS
如果是国内的服务器可以换成阿里的 223.5.5.5 和腾讯的 129.29.29.29

4. 重启系统

reboot

Shell

复制

5. 查看 DNS

cat /etc/resolv.conf

Shell

复制

方法二

编辑 /etc/network/interfaces 文件

追加一行, 如果有多个 DNS 用空格隔开

cat <<EOF >>/etc/network/interfaces
dns-nameservers 1.1.1.1 8.8.8.8
EOF

Shell

复制

方法三

1. 编辑 dhclient.conf 文件

vim /etc/dhcp/dhclient.conf

Shell

复制

2. 在最后一行添加下面的内容:

supersede domain-name-servers 1.1.1.1, 8.8.8.8;

Text

复制

3. 重启系统

reboot

Shell

复制

方法四

写保护锁定 resolv.conf 文件

1. 删除 resolv.conf 文件

rm -f /etc/resolv.conf

Shell

复制

2. 创建并编辑 resolv.conf 文件

editor /etc/resolv.conf

Shell

复制

3. 填写上指定的 DNS 服务器

nameserver 1.1.1.1
nameserver 1.0.0.1

Text

复制

4. 设置写保护锁定 resolv.conf 文件

chattr +i /etc/resolv.conf

Shell

复制

此时 resolv.conf 文件会被锁定, 重启系统后不会被覆盖。

如果想要解锁可以运行:

chattr -i /etc/resolv.conf

Shell

复制