一键脚本DNS 解锁让你的小鸡解锁 AI解锁流媒体

admin 發布於 11 天前 8 次瀏覽


相信很多小伙伴买美国、日本、新加坡的机器用 AI,买香港的机器刷帖子,看网页。还见过很多商家提供一些 DNS 解锁的服务。

我们的痛点是,因为某些地区原因或 IP 质量的原因,无法访问一些流媒体网站或 AI 网站,但是解锁地区的机器买不起或者延迟较高。

常见的解决方案有:

  1. 客户端分流:Clash 或 V2rayN 等客户端支持用域名或 IP 进行分流的操作,用不同节点访问不同的站点,实现解锁的需求。
  2. 服务端分流:Xray, singbox 等主流节点搭建工具支持在服务端进行分流,基于域名或 IP 进行 "链式代理"(使用 ss 等代理再转发一遍流量到落地节点)
  3. DNS 解锁:基于 DNS 去进行流量分发。用 SmartDNS 工具制定分流规则,指定的流量转发到解锁机器,解锁机器转发到真正的网站。

让客户端对流媒体平台的实际 TCP/HTTP 流量绕道你的 “解锁机”,由解锁机再转发到真正的流媒体服务器,让对端看到的是 “解锁机” 的出口 IP。

当然,DNS 解锁和服务端解锁其实也没有完全的区分,节点搭建工具也支持在配置文件中指定 > 域名对应的 DNS 服务器,你可以同时使用服务端分流和 DNS 解锁。

DNS 解锁

本质上就是用 SmartDNS 等 DNS 分流工具,对 “特定域名集合(流媒体平台域名)” 给出 “特定答案”,从而把客户端的连接引导到你希望的目标。
在我们搭建的过程中,会直接把这些域名解析为解锁机的 IP ,让所有连接先打到解锁机。

实现方式:
Nginx

  • HTTPS:stream + ssl_preread 直通(基于 SNI 的四层代理),保持原始 SNI,不解密。
  • HTTP:80 端口反向代理,Host 头透传。

DNS 解锁负责 “把流量绕过来”,Nginx 负责 “把流量转出去”。两者缺一不可。

推荐安装方法:

  • 直接 DNS 修改:让 “未解锁机器” 的系统 DNS 直指 “解锁机” 的 SmartDNS

解锁机:SmartDNS + Nginx,配置流媒体域名 → 自身公网 IPv4,其他域名回落到 1.1.1.1 等公共 DNS。
未解锁机:把系统 DNS 指向解锁机 IP。这样流媒体域名解析结果就是 “解锁机的 IPv4”,实际 TCP/HTTPS 也会打到解锁机,由 Nginx 转发。

  • 更复杂但是解析效果最好:未解锁机本地也装 SmartDNS,分流流媒体域名解析为 “解锁机 IP” 其他正常域名走 1.1.1.1 等公共 DNS。

为什么说第二种更好?
因为某些 Geo-DNS 会根据 DNS 查询源 IP 返回更优结果。如果全部查询使用 DNS 解锁机器的 IP 进行 DNS 查询,最坏情况是:
香港的机器查询 google.com 的 IP,解锁机在美国返回美国的谷歌 IP。原本香港接入谷歌的 2ms 延迟飙升到 200ms。

从零开始:配置解锁机(在目标地区的 VPS)

我这里使用两台机器做演示:

  • 解锁机 SG 159.223.86.13
  • 未解锁机 AU 170.64.197.111

一键脚本下载命令(开源地址:oneclick_smartdns):

curl -fsSL https://raw.githubusercontent.com/kilvil/oneclick_smartdns/main/oneclick.sh | bash

smartdnsctl 命令进行启动

  1. 安装组件(按 z → Nginx/SmartDNS)

安装 SmartDNS;安装 Nginx(nginx-extras),确保加载 stream 模块。
image2561×1630 144 KB

  1. 配置默认上游 DNS

在 DNS 列表里按 U,可以按 A 添加推荐的 1.1.1.1/8.8.8.8
image2561×1609 152 KB

  1. 创建 “解锁机分组”

分组页按 n:组名如 UnlockHost,DNS 地址可留空(本分组不走上游)。
进入该分组,按 m 切换为 address,按 e 填 ident = 本机公网 IPv4(若未自动填充)。
image2561×1627 158 KB

  1. 勾选要解锁的平台

左侧切 Region,右侧选平台。被其他分组占用会显示 “! 分组名”,不可选。
空格选中,再按一次取消选中。

  1. 按 s 保存
  2. 开放端口与服务状态(如果你有用云厂商的安全组)

开放入站 53/UDP、80/TCP、443/TCP;确认 SmartDNS/Nginx 处于 active(UI 顶部有状态)。
SmartDNS “启动” 不会覆盖系统 DNS;解锁机不要使用 覆盖系统 DNS(会导致流量一直转发在自己身上出不去)

  1. 验证(在解锁机上)

按 q 退出 UI 后 nginx -t 检查 nginx 配置文件是否正常
systemctl status smartdns nginx 两个服务都是 active。

未解锁机器接入,两个方案二选一

  • 方案 A(直接 DNS,比较方便):把系统 DNS 指向解锁机

Linux(systemd-resolved):

sudo resolvectl dns eth0 <解锁机 IP>。

验证:

dig +short www.netflix.com @<解锁机 IP> 返回应为 “解锁机公网 IPv4”(或具体平台域名亦然,根据你勾选的解锁服务)。
未解锁机的节点连接后,访问对应平台应显示为目标区。

  • 方案 B:本地 SmartDNS nameserver 到解锁机

本机也装本工具;配置默认上游 DNS。1.1.1.1/8.8.8.8
新建分组 SG,选跟之前解锁机勾选的一样的平台并保存。
本机系统 DNS 指向本机 127.0.0.1(按 z 进入服务管理,选覆盖系统 DNS → 127.0.0.1)。
image2561×1632 147 KB

究极白嫖怪

大家可以利用 强大的搜索引擎找到各个地区的 SNI Proxy 实例: FOFA。根据世界地图,选择自己喜欢的地区,找的一两个可以访问的 IP。

这个原理是,有一些人搭建了 SNI Proxy,但是没有使用防火墙仅允许自己的机器使用这些 SNI Proxy 服务。也就是搭建了解锁服务,但是暴露给所有人,这会引来其他人的白嫖,建议使用 ufw 对非自己的 IP 屏蔽。

实测可用的 IP

JP: 140.238.50.134

有了这些 IP,你可以在单机上直接实现解锁!

在 “单机” 上配置

  1. 打开工具,进入 DNS 分组列表

首次使用可通过 z 菜单安装 SmartDNS。无需安装本机 Nginx。

  1. 为每个地区创建一个分组

在分组页面按 n,输入分组名(建议用地区名,例如 US、JP、UK)。
进入该分组后:

按 m 将解析方式切换为 address。
按 e 把 ident 设置为 “该地区 sniproxy 的公网 IPv4”(例如 203.0.113.10)。

提示:这是 “按域名把流量直接解析到远端 sniproxy” 的意思,本机不做代理。

  1. 勾选各分组要解锁的平台

左侧选择 Region(区域分类),右侧勾选具体平台。

  1. 按 s 保存

如果 SmartDNS 正在运行,会提示是否重启以生效;建议立即重启。

  1. 让客户端使用这台 “单机” 的 DNS

本机自用:用工具的 “覆盖系统 DNS” 功能把系统 DNS 改成 127.0.0.1。
验证:

dig +short www.netflix.com @127.0.0.1 应返回某个地区 sniproxy 的公网 IPv4(你在 address 里填的 IP)。
访问对应平台,平台应按该地区出网判断。

防白嫖,防火墙

先用 apt install ufw 确保安装 ufw

  1. 先确保不会把自己锁在门外:开放 SSH

sudo ufw allow OpenSSH

  1. 允许你自己未解锁机器的 IP 访问 80/443

sudo ufw allow proto tcp from to any port 80
sudo ufw allow proto tcp from to any port 443

  1. 拒绝其他来源访问 80/443(若之前放开过,需要删除旧规则)

查看编号:sudo ufw status numbered
删除任何 “80/tcp ALLOW Anywhere”“443/tcp ALLOW Anywhere” 之类的规则:sudo ufw delete <编号>

  1. 全局默认策略(推荐默认拒绝)

sudo ufw default deny incoming
sudo ufw default allow outgoing

  1. 启用或重载 UFW

首次启用:sudo ufw enable
已启用则:sudo ufw reload

  1. 验证

本机查看:sudo ufw status verbose
允许端测试(你的未解锁机器):openssl s_client -connect :443 -servername www.example.com -brief

底层原理

这个小脚本本质上是用来方便大家操作配置 SmartDNS 的分流规则,让大家能够不需要考虑到底这个流媒体用的是什么域名,只需要按照平台去选择配置即可。大家也可以通过简单的命令去验证整个过程,在配置完后,看看配置文件长什么样子。

配置文件:

  • SmartDNS

主配置: /etc/smartdns/smartdns.conf
DNS 缓存: /etc/smartdns/cache
进程与服务: systemctl status smartdns

  • Nginx

主配置: /etc/nginx/nginx.conf
HTTP 站点: /etc/nginx/conf.d/*.conf
Stream (四层) 站点: /etc/nginx/stream.d/*.conf(在主配置里 include 引用)
动态模块目录: /usr/lib/nginx/modules
模块加载 include: /etc/nginx/modules-enabled/*.conf
日志: /var/log/nginx/access.log, /var/log/nginx/error.log

SmartDNS 配置要点与示例

  • 推荐基础选项(已经默认添加了的):
dualstack-ip-selection no
speed-check-mode none
serve-expired yes
serve-expired-reply-ttl 3
serve-expired-prefetch-time 21600
prefetch-domain yes
cache-size 32768
cache-persist yes
cache-file /etc/smartdns/cache
cache-checkpoint-time 86400
  • 定义上游 DNS 组

示例:把 1.1.1.18.8.8.8 放进名为 US 的独立分组

server 1.1.1.1 -group US -exclude-default-group
server 8.8.8.8 -group US -exclude-default-group

默认(非分组)回退 DNS(按照从上到下的顺序生效):

server 9.9.9.9
server 114.114.114.114

  • 域名规则(两种方式,二选一)

指定上游分组解析(nameserver)

语法:nameserver // -group
示例:nameserver /.netflix.com/ -group US

指定固定地址解析(address)

语法:address //
示例:address /.netflix.com/ 203.0.113.10

  • “解锁机” 用的分组(让所有选中域名直接解析到这台机器的公网 IPv4)
#> unlock special address 203.0.113.5
address /.netflix.com/ 203.0.113.5
address /.hulu.com/ 203.0.113.5
#< unlock

这个脚本工具使用形如 #>#< 之间的内容为本工具管理(删除 / 重写时靠这对注释识别)。

Nginx 配置原理

由于 Nginx 默认安装后不带 stream 模块,我们使用了动态模块加载的形式去使用这个功能。

  • stream 模块

模块的文件位置:/usr/lib/nginx/modules/ngx_stream_module.so
主配置里面使用 include /etc/nginx/modules-enabled/*.conf 动态导入模块;
/etc/nginx/modules-enabled/50-mod-stream.conf 添加:

load_module /usr/lib/nginx/modules/ngx_stream_module.so;

  • 在主配置里 include stream 目录

/etc/nginx/nginx.conf 末尾添加:

stream { include /etc/nginx/stream.d/*.conf; }

  • HTTPS SNI 直通

/etc/nginx/stream.d/smartdns_stream.conf 示例:

map $ssl_preread_server_name $proxy_host {
    default $ssl_preread_server_name;
}
server {
    listen 443 reuseport;
    proxy_pass $proxy_host:443;
    resolver 1.1.1.1 8.8.8.8 valid=10s;
    resolver_timeout 5s;
    ssl_preread on;
    proxy_ssl_server_name on;
}

这里使用 1.1.1.1, 8.8.8.8 意味着解锁机用这个 DNS 去连接最终的目标站点,如果你有一台商家提供 DNS 解锁的机器,可以嵌套 DNS 解锁!也就是在这里加上商家的 DNS 解锁服务地址!(其他的未解锁机器也可以用上这个 DNS 解锁)

  • HTTP 80 反向代理更为简单一些,属于 Nginx 基本功能(Host 透传)

/etc/nginx/conf.d/smartdns_http.conf 示例:

map $host $http_upstream {
    default $host;
}
server {
    listen 80;
    resolver 1.1.1.1 8.8.8.8 valid=10s;
    resolver_timeout 5s;
    location / {
        proxy_set_header Host $host;
        proxy_pass http://$http_upstream:80;
    }
}

有没有必要上 DNS 解锁呢?

我个人觉得,在商家提供了 DNS 解锁的前提下,你用来给其他机器嵌套解锁或者简单的 DNS 分流,搞 DNS 解锁还是非常不错的。

个别流媒体不仅对地区有限制,还对 IP 质量有限制,在你机器不多的情况下,嵌套解锁最大化利用了商家提供的 DNS 解锁!

其他时候如果你去自建 DNS 解锁意义其实没有很大,地区不多,还要担心因为 IP 质量的下降,原本解锁机的解锁也掉了~

相信大家肯定也有过学习客户端分流规则的经历:

  • 原本只会手动开关代理,在局域网和外网之间繁琐切换 → 学会直连 / 代理的规则配置,省去手动开关
  • 原本只会手动切节点,在延迟和解锁之间得不到满足 → 学会按照站点分流,不同站点用不同节点连接

相信你在完成自己的 DNS 解锁后,也能够像第一次学会分流规则那样,醍醐灌顶,爱不释手。

原本需要给手机,电脑,软路由配置节点分流 → 现在服务端一次配置,全部生效(当然,Clash 订阅也能实现)
原本嫌弃香港小鸡用不了 AI → 现在离不开香港的低延迟,DNS 解锁各个 AI,也能用的顺畅。