🔥🔥🔥:稳定好用的机场/梯子 TAG 全球250+节点、99+流媒体解锁,更多参考机场推荐
👉 首先推广下自己编译的 OpenWrt 旁路由极简版,专为旁路由而制作。 👍👍👍
- 编译脚本以及个人修改的组件依赖全开源,Github Actions 在线编译,安全可靠无后门。
- 基于 lede 源码
- 默认配置 DHCPv6 Client 接口 lan6。
- 默认配置好了 AdGuardHome 、 mosdns 和 openclash (或 ssrp )的搭配运行配置。
- openclash 预置 clash_meta 内核。
- mosdns 使用了 自己的修改版,支持 MMDB GeoIP 匹配。
版本 | 说明 | 下载地址 |
---|---|---|
x86 | 包含 ssrp 和 openclash,详细说明 | 下载 |
x86 openclash 专版 | 仅包含 openclash,注意此固件默认不劫持 53 端口,详细说明 | 下载 |
r2s | 包含 ssrp 和 openclash,详细说明 | 下载 |
n1 | 包含 ssrp 和 openclash,详细说明 | 下载 |
注意,旁路由固件默认未开启DHCP,旁路由固件默认未开启DHCP,旁路由固件默认未开启DHCP!
所以,如果不在控制台修改IP,请修改电脑的IP访问,然后可以在网页修改。
前言
CN网络的阻断方式主要有两个部分:
- GFW 阻断
- DNS 污染
GFW 阻断就是我们常说的被墙了
,即使是DNS没有被污染,也无法访问到。
DNS 污染即让你访问网站时,无法获得域名对应的IP地址,从而导致无法访问到网站。DNS 污染在移动宽带中尤为典型,即使自定义了DNS 服务器,也会被拦截污染。
要实现科学上网,必须同时解决GFW 阻断
和DNS 污染
,并且两者配合以提高网络访问体验。
代理中的DNS知识,可以参考 Sukka 的这篇文章《浅谈在代理环境中的 DNS 解析行为》
路由器科学上网和终端科学上网的区别
路由器上配置透明代理,和在终端PC上直接通过客户端,最主要的区别是 DNS 解析。
PC终端上
通常有以下几个步骤
- 启动客户端
- 选择全局/规则模式
- 配置系统代理(一般客户端自动配置),把科学上网客户端作为系统代理的上游代理服务器
第3步里的配置系统代理,通常有http
和sock5
两种。
此时,打开浏览器访问一个网站:
当使用http
代理时,浏览器不会在本地进行 DNS 解析,请求的域名会作为 http 报文的一部分直接发给代理服务器(科学上网客户端),DNS 完全在代理服务器(科学上网客户端)上处理。
当使用sock5
代理时,sock5
支持UDP,DNS 解析会封装在sock5
之中,发给代理服务器(科学上网客户端)处理,浏览器拿到 IP 地址后,在发起连接。
路由器上配置透明代理
此时,科学上网客户端运行在路由器上,PC 终端是看不见代理的,所以叫透明代理。PC 终端上,请求的发起的流程照旧,先进行 DNS 解析,拿到 IP 后再发起请求。
在这种情况下,对于路由器上运行的科学上网客户端来说,域名和 IP 是两个请求,有的会内置 Mapping 机制(例如 Clash),用来还原 IP 到域名。
这种情况下,优惠DNS配置就相对比较重要了,否则针对部署的CDN的网站不能做到最优访问。
正文开始:配置 & DNS 优化
本文主要考虑的是自由的局域网环境,所以只介绍路由器上科学上网配置。
首先分析下要实现的目标:
- 双栈网络
- 国内网络使用 IPV4 & IPV6 双栈
- 科学上网仅使用 IPV4
- 国内外分流
- DNS分流
- 国内域名由国内 DNS 服务器解析
- 国外域名经过代理由国外 DNS 服务器
国内外和应用分流
这个没啥好多说的,按文档配置规则就行。也可参考文末给出的示例配置。
DNS 优化目标
- 广告过滤:使用 AdGuardHome
- DNS分流:使用 mosdns
- 其中,境外网站屏蔽 IPV6 应答
- 如果使用 openclash,DNS 必须经过 clash 内核,以使 DNS 完成 IP <–> Domain 的 mapping
PS: mosdns 使用 alecthw 修改版,支持 MMDB GeoIP 匹配
多级 DNS 级联
flowchart LR A[AdGuardHome, Port 53, no cache] -- 主要 --> B[openclash, Port 7874] B --> C[mosdns, Port 5335] A -- 备用\n防止 openclash 为运行时网络无法访问 --> C
配置过程如下:
- 修改了 dnsmasq 的默认端口号,用 AdGuardHome 监听53端口作为默认的DNS解析。
- AdGuardHome 可以监控的各个终端的 DNS 请求,并使用广告过滤和管控功能。
- openclash 作为 AdGuardHome 的上游。
- mosdns 作为 AdGuardHome 的上游备用服务器。
- openclash 中
本地 DNS 劫持
设置为停用
,当 openclash 运行时,openclash 作为 AdGuardHome 的上游主要服务器生效
。 - openclash 复写设置中,启用自定义上游 DNS 服务器,并指定 mosdns 为唯一上游。
如此一来,最终的 DNS 请求由 mosdns 发出,请求会经过 openclash 分流,按请求的 DNS 服务器直连或走代理。DNS 请求整个流程如下:
flowchart TB A((电脑/手机\n浏览器)) -- DNS 请求 --> B[路由器\nAdGuardHome] B --> C[路由器\nopenclash DNS] C --> D[路由器\nmosdns] D --> E[路由器\nopenclash Proxy Client] E -- 国外 DNS 服务器\n屏蔽ipv6应答 --> F[服务器\nProxy Server] E -- 国内 DNS 服务器 --> N(Internet) F --> N
如此,便实现了
- AdGuardHome 的管控和广告过滤
- mosdns 分流 DNS,并屏蔽非中国大陆 IP 的 IPV6 应答
- DNS 经过 clash 内核,迎合其 mapping 机制
配置示例
👍 再次提醒,文章开始处的固件,所有配置已内置哦!
dnsmasq
AdGuardHome
openclash
注意删除默认的DNS配置,仅保留这一个即可。
mosdns
使用自定义配置,由于使用了 mmdb geoip 匹配,mosdns 必须使用 alecthw 修改版。
PS: 以下配置中的 cn-white.txt,来自项目 chnlist,我编译的固件已内置并设置自动更新,其他固件需要手动下载。
|
|
防火墙,劫持 53 端口(可选)
防止客户端自定义 DNS 服务器,从而绕过管控,可以在防火墙自定义规则配置劫持 53 端口 UDP 和 UDP。
但是,如果客户端配置加密 DNS 就没法劫持。如果要限制,对于 DoT 和 DoQ 可以屏蔽 853 端口禁用,但是 DoH 就完全没办法。
|
|
作为主路由时使用的特别说明
主路由 DHCP 服务器
DHCP 服务器设置中的 DNS 服务器,务必设置成旁路由,不要设置公共 DNS。
主路由 IPv6
- 不通告 IPv6 DNS 服务器,DNS 解析全部走 IPv4。
- 通告 DNS 服务器为路由器自己,即路由器的链路本地地址。
作为旁路由时使用的特别说明
旁路由 DHCP 服务器
一般情况下建议禁用旁路由 DHCP 服务器,在主路由配置 DHCP 服务器,把网关设置成旁路由,或者通过静态分配指定不同客户端指向不同网关。
DHCP 服务器设置中的 DNS 服务器,务必设置成旁路由,不要设置公共 DNS。
旁路由 IPv6
主路由上请勿通告 IPv6 DNS 服务器(这里指 IPv6 地址的 DNS 服务器,如 2400:3200::1)。通过 IPv4 地址的 DNS 服务器解析域名,一样可以拿到 AAAA 记录,所以没必要开启 IPv6 地址的 DNS 服务器,开启反而会增加配置难度,影响 DNS 分流,并可能造成 DNS 泄露。
如下查询示例,可以看到,通过 IPv4 DNS 服务器可以获得 IPv6 地址。
|
|
Openwrt、iKuai、RouterOS 都是支持不通告 IPv6 DNS 的。如果你的主路由不支持,IPv6 DNS 可以填个无效地址,如 ::1
。