# 【一键脚本】DNS解锁：让你的小鸡解锁AI，解锁流媒体

**URL:** <https://idcflare.com/t/topic/39033>\
**Category:** 教程\
**Tags:** 原创, 服务器, 征文-202545\
**Created:** [2025 年11 月 9 日 04:22 UTC](https://idcflare.com/t/topic/39033 "2025-11-09T04:22:33Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![Bosa](https://idcflare.com/user_avatar/idcflare.com/bosa/32/1705_2.png) [@Bosa](https://idcflare.com/u/Bosa)\
**Post date:** [2025 年11 月 9 日 04:22 UTC](https://idcflare.com/t/topic/39033/1 "2025-11-09T04:22:33Z")

</div>

相信很多小伙伴买美国、日本、新加坡的机器用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](https://github.com/kilvil/oneclick_smartdns)）：

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

```

用 `smartdnsctl` 命令进行启动

1. 安装组件（按 z → Nginx/SmartDNS）

2. 配置默认上游DNS

3. 创建“解锁机分组”

4. 勾选要解锁的平台

5. 按 s 保存

6. 开放端口与服务状态（如果你有用云厂商的安全组）

7. 验证（在解锁机上）

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

- 方案 A（直接DNS，比较方便）：把系统 DNS 指向解锁机
  - Linux（systemd-resolved）：
    - sudo resolvectl dns eth0 \<解锁机IP\>。

  - 验证：
    - dig +short [www.netflix.com](http://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）。  
 ![image](https://idcflare.com/uploads/default/original/3X/9/2/926b2c3d7d5af0c9e05e32a8b3f35660e2696eb0.png)

## 究极白嫖怪

大家可以利用 强大的搜索引擎找到各个地区的 SNI Proxy 实例： [FOFA](https://fofa.info/result?qbase64=Ym9keT0iQmFja2VuZCBub3QgYXZhaWxhYmxlIg%3D%3D&page=2&page_size=10)。根据世界地图，选择自己喜欢的地区，找的一两个可以访问的IP。

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

> **实测可用的IP**
>
> JP: 140.238.50.134

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

## 在“单机”上配置

1. 打开工具，进入DNS 分组列表
  - 首次使用可通过 z 菜单安装 SmartDNS。无需安装本机 Nginx。

2. 为每个地区创建一个分组
  - 在分组页面按 n，输入分组名（建议用地区名，例如 US、JP、UK）。
  - 进入该分组后：
    - 按 m 将解析方式切换为 address。
    - 按 e 把 ident 设置为“该地区 sniproxy 的公网 IPv4”（例如 203.0.113.10）。

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

3. 勾选各分组要解锁的平台
  - 左侧选择 Region（区域分类），右侧勾选具体平台。

4. 按 s 保存
  - 如果 SmartDNS 正在运行，会提示是否重启以生效；建议立即重启。

5. 让客户端使用这台“单机”的 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`

2. 允许你自己未解锁机器的 IP 访问 80/443
  - `sudo ufw allow proto tcp from <IP，如203.0.113.10> to any port 80`
  - `sudo ufw allow proto tcp from <IP，如203.0.113.10> to any port 443`

3. 拒绝其他来源访问 80/443（若之前放开过，需要删除旧规则）
  - 查看编号：`sudo ufw status numbered`
  - 删除任何“80/tcp ALLOW Anywhere”“443/tcp ALLOW Anywhere”之类的规则：`sudo ufw delete <编号>`

4. 全局默认策略（推荐默认拒绝）
  - `sudo ufw default deny incoming`
  - `sudo ufw default allow outgoing`

5. 启用或重载 UFW
  - 首次启用：`sudo ufw enable`
  - 已启用则：`sudo ufw reload`

6. 验证
  - 本机查看：`sudo ufw status verbose`
  - 允许端测试（你的未解锁机器）：`openssl s_client -connect <SERVER_IP>: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 配置要点与示例

- 推荐基础选项（已经默认添加了的）:

```auto
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.1`、`8.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 /<domain or regex>/ -group <GroupName>`
    - 示例：`nameserver /.netflix.com/ -group US`

  - 指定固定地址解析（address）
    - 语法：`address /<domain or regex>/ <IPv4>`
    - 示例：`address /.netflix.com/ 203.0.113.10`

- “解锁机”用的分组（让所有选中域名直接解析到这台机器的公网 IPv4）

```auto
#> unlock special address 203.0.113.5
address /.netflix.com/ 203.0.113.5
address /.hulu.com/ 203.0.113.5
#< unlock

```

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

### Nginx 配置原理

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

- stream 模块

- 在主配置里 include stream 目录

- HTTPS SNI 直通

```auto
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` 示例：

```auto
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，也能用的顺畅。

---

<div class="post-metadata">

**Author:** ![luming](https://idcflare.com/user_avatar/idcflare.com/luming/32/2108_2.png) [@luming](https://idcflare.com/u/luming)\
**Post date:** [2025 年11 月 9 日 04:28 UTC](https://idcflare.com/t/topic/39033/2 "2025-11-09T04:28:17Z")

</div>

感谢佬友分享

---

<div class="post-metadata">

**Author:** ![xun](https://idcflare.com/user_avatar/idcflare.com/xun/32/1052_2.png) [@xun](https://idcflare.com/u/xun)\
**Post date:** [2025 年11 月 9 日 04:29 UTC](https://idcflare.com/t/topic/39033/3 "2025-11-09T04:29:25Z")

</div>

感谢佬友分享

---

<div class="post-metadata">

**Author:** ![DDoS](https://idcflare.com/user_avatar/idcflare.com/ddos/32/25826_2.png) [@DDoS](https://idcflare.com/u/DDoS)\
**Post date:** [2025 年11 月 9 日 04:58 UTC](https://idcflare.com/t/topic/39033/4 "2025-11-09T04:58:08Z")

</div>

收藏学习

---

<div class="post-metadata">

**Author:** ![listen11](https://idcflare.com/user_avatar/idcflare.com/listen11/32/9940_2.png) [@listen11](https://idcflare.com/u/listen11)\
**Post date:** [2025 年11 月 9 日 05:03 UTC](https://idcflare.com/t/topic/39033/5 "2025-11-09T05:03:39Z")

</div>

感谢佬友分享

---

<div class="post-metadata">

**Author:** ![leileio](https://idcflare.com/user_avatar/idcflare.com/leileio/32/1755_2.png) [@leileio](https://idcflare.com/u/leileio)\
**Post date:** [2025 年11 月 9 日 06:42 UTC](https://idcflare.com/t/topic/39033/6 "2025-11-09T06:42:53Z")

</div>

没有用nginx,caddy感觉应该也可以，不过估计caddy也要插件

---

<div class="post-metadata">

**Author:** ![lyo](https://idcflare.com/user_avatar/idcflare.com/lyo/32/376_2.png) [@lyo](https://idcflare.com/u/lyo)\
**Post date:** [2025 年11 月 9 日 06:47 UTC](https://idcflare.com/t/topic/39033/7 "2025-11-09T06:47:55Z")

</div>

感谢佬分享

---

<div class="post-metadata">

**Author:** ![qingtian](https://idcflare.com/user_avatar/idcflare.com/qingtian/32/16107_2.png) [@qingtian](https://idcflare.com/u/qingtian)\
**Post date:** [2025 年11 月 9 日 06:54 UTC](https://idcflare.com/t/topic/39033/8 "2025-11-09T06:54:57Z")

</div>

感谢分享！

---

<div class="post-metadata">

**Author:** ![9Rebels](https://idcflare.com/user_avatar/idcflare.com/9rebels/32/14326_2.png) [@9Rebels](https://idcflare.com/u/9Rebels)\
**Post date:** [2025 年11 月 9 日 06:57 UTC](https://idcflare.com/t/topic/39033/9 "2025-11-09T06:57:06Z")

</div>

感谢分享！！！

---

<div class="post-metadata">

**Author:** ![Bigbuoluo](https://idcflare.com/user_avatar/idcflare.com/bigbuoluo/32/2206_2.png) [@Bigbuoluo](https://idcflare.com/u/Bigbuoluo)\
**Post date:** [2025 年11 月 9 日 07:00 UTC](https://idcflare.com/t/topic/39033/10 "2025-11-09T07:00:02Z")

</div>

能用得上

---

<div class="post-metadata">

**Author:** ![Luis](https://idcflare.com/user_avatar/idcflare.com/luis/32/247_2.png) [@Luis](https://idcflare.com/u/Luis)\
**Post date:** [2025 年11 月 9 日 09:07 UTC](https://idcflare.com/t/topic/39033/11 "2025-11-09T09:07:22Z")

</div>

感谢分享！ 学习学习！ 🥰

---

<div class="post-metadata">

**Author:** ![Thanatosc](https://idcflare.com/user_avatar/idcflare.com/thanatosc/32/1249_2.png) [@Thanatosc](https://idcflare.com/u/Thanatosc)\
**Post date:** [2025 年11 月 9 日 09:17 UTC](https://idcflare.com/t/topic/39033/12 "2025-11-09T09:17:51Z")

</div>

感谢佬友分享

---

<div class="post-metadata">

**Author:** ![yqyan](https://idcflare.com/user_avatar/idcflare.com/yqyan/32/3375_2.png) [@yqyan](https://idcflare.com/u/yqyan)\
**Post date:** [2025 年11 月 9 日 10:16 UTC](https://idcflare.com/t/topic/39033/13 "2025-11-09T10:16:01Z")

</div>

感谢分享 🙏

---

<div class="post-metadata">

**Author:** ![tug](https://idcflare.com/letter_avatar/tug/32/6_22734026db12803ebb3e059622ac3534.png) [@tug](https://idcflare.com/u/tug)\
**Post date:** [2025 年11 月 9 日 14:47 UTC](https://idcflare.com/t/topic/39033/14 "2025-11-09T14:47:54Z")

</div>

感谢分享教程！

---

<div class="post-metadata">

**Author:** ![spiritlhl](https://idcflare.com/user_avatar/idcflare.com/spiritlhl/32/7328_2.png) [@spiritlhl](https://idcflare.com/u/spiritlhl)\
**Post date:** [2025 年11 月 9 日 14:55 UTC](https://idcflare.com/t/topic/39033/15 "2025-11-09T14:55:57Z")

</div>

有意思

```auto
curl https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/UnlockTests/main/ut_install.sh -sSf | bash

```

```auto
./ut

```

测测真dns解锁了么

---

<div class="post-metadata">

**Author:** ![handsome](https://idcflare.com/user_avatar/idcflare.com/handsome/32/349_2.png) [@handsome](https://idcflare.com/u/handsome)\
**Post date:** [2025 年11 月 9 日 15:10 UTC](https://idcflare.com/t/topic/39033/16 "2025-11-09T15:10:25Z")

</div>

感谢大佬！

---

<div class="post-metadata">

**Author:** ![bai](https://idcflare.com/user_avatar/idcflare.com/bai/32/605_2.png) [@bai](https://idcflare.com/u/bai)\
**Post date:** [2025 年11 月 9 日 15:11 UTC](https://idcflare.com/t/topic/39033/17 "2025-11-09T15:11:21Z")

</div>

感谢佬分享

---

<div class="post-metadata">

**Author:** ![TangFen](https://idcflare.com/user_avatar/idcflare.com/tangfen/32/9770_2.png) [@TangFen](https://idcflare.com/u/TangFen)\
**Post date:** [2025 年11 月 9 日 15:17 UTC](https://idcflare.com/t/topic/39033/18 "2025-11-09T15:17:42Z")

</div>

这个有用 感谢分享

---

<div class="post-metadata">

**Author:** ![Seai](https://idcflare.com/user_avatar/idcflare.com/seai/32/16493_2.png) [@Seai](https://idcflare.com/u/Seai)\
**Post date:** [2025 年11 月 9 日 15:40 UTC](https://idcflare.com/t/topic/39033/19 "2025-11-09T15:40:55Z")

</div>

支持！写的很详细啊，必须给个推荐

---

<div class="post-metadata">

**Author:** ![skyscraper](https://idcflare.com/user_avatar/idcflare.com/skyscraper/32/2595_2.png) [@skyscraper](https://idcflare.com/u/skyscraper)\
**Post date:** [2025 年11 月 9 日 15:52 UTC](https://idcflare.com/t/topic/39033/20 "2025-11-09T15:52:00Z")

</div>

感谢佬友分享

[下一页](https://idcflare.com/t/topic/39033.md?page=2)
