简洁明快,异地皆然

本文最后更新于:2023年11月19日 下午

本文仅作为技术交流和讨论,尽管某些关键词可能涉及敏感,但不涉及任何违反公序良俗和道德法治的内容。

本篇文章不遵循任何共享协议,禁止自由分发。

起因

有自己的私有 DNS,也有个人媒体库和公网IP,所以就想着能不能在外面也像在家里一样,随意的访问局域网里的数据,这样不管是个人的网盘还是看视频,都会极其方便。虽然有些 NAS 自带了内网穿透或者是代理服务,但是这种服务一是很慢,而是会影响到 NAS 本身的网址,设置好之后,即使你在局域网环境,NAS 跳转的网页也全带着这个域名,有时候我是不希望这样的。

思考

DDNS 直接开页面吗?由于特殊的网络环境,80 和 443 端口自然是不能开放的,加上之前有过 DDNS 开放 NAS 登陆界面被封宽带的事情发生,那就更不敢直接开页面了。另外如果用各大 NAS 提供的内网穿透服务,网速堪忧,即使有公网IP可以直连,那还需要实名,而且我实在不放心公开自己的登陆页面,谁知道 NAS 的系统有没有漏洞,万一把登陆页面攻破了,我的数据甚至局域网的设备全都会沦陷。

所以我们很自然的想到代理,先 DDNS 一个域名,然后单独开一个端口号,通过这个端口号使用加密的代理来访问局域网。如果有条件,识别内网外网,自然地进行直连和代理的判断,做到内部直连,外部代理,无缝衔接。

选什么代理呢?VPN 肯定不行,因为这是全局代理且无法分流。那么,基于 Socks 技术的 SSR 方式就成了我们的选择,配置灵活,加密协议多变,最重要的是:可以分流。

先利用软路由等等设备开一个或多个 Openwrt,设置好 SSR 代理服务,再用 DDNS 做好映射,用诸如 CFW 这样的工具进行连接,这样就可以在外面访问家里的局域网了,吗?

连接上之后,如果真的尝试访问局域网 ip 会发现完全访问不了,因为这些 ip 都被代理软件给自动绕过了,也就是”Bypass”。所以我产生了一个很有趣的想法:

如果我把需要访问的设备加上域名呢?

上域名

局域网

在局域网上域名是一个相对来说比较简单的事,我本身就有私有 DNS,一开始还是为了玩“马里奥赛车”搭建的,因为这个游戏需要访问四个IP,但有两个国内连接不上,需要把所有相关域名的请求劫持到那两个能访问的上面去,一直以来用的都很顺,所以这次也就顺其自然的继续使用它。方法也很简单,直接在 DNS 重写里面添加规则即可。

互联网

这块有点点复杂,第一个,这个域名我们需要代理,这个要在代理的配置里面写;第二个,这个域名代理之后,如何能在进入局域网的环境下成功访问到这个设备,我的代理是用了几个 Openwrt,各种插件在一起让我搞不明白他这个 DNS 查询究竟是谁说了算,所以我干脆在 Dnsmasq 上绑定了 Hosts,这样一劳永逸。

Clash for Windows 的几个问题

来说一下图里 Clash for Windows 这三个选项:

Tun Mode 齿轮后面还有个“恢复设置”的图标,这个东西点开是这样的:

左边的红框简称为“CS”,右边的简称为“DS”。

他的作用是,恢复在开启 Tun Mode 时被替换掉的系统 DNS,也就是说,在打开 Tun 的时候,下图的 DNS 会被替换为 “8.8.8.8”,这个 DNS 是 Clash Tun 接管的 DNS,不是谷歌那个。

值得注意的是,如果你打开了 CS 上面的开关,那么在打开又关闭 Mixin 或 Tune Mode 后,系统 DNS 会被重置为 CS 的内容,前者不受 Tune Mode 本身是否开启的影响。DS 是在启动 Clash 时,它读取到的系统 DNS 设置,不会自动更新。

Clash 的 Tun Mode 会更改 Mac 系统设置中的 DNS,在关闭 Tun Mode 时自以为是地还原他所认为的设置,如果你在网络中设置了“位置”,同时启用了 Tun,毫无疑问会造成系统设置混乱。比如说“位置1”有个 A DNS,“位置2”没有,在“位置1”中打开 Tun Mode,后来又手动切换成了“位置2”,这时关闭 Tun Mode,你会诧异的发现,原本不包含在“位置2”中的 A DNS 出现在了这里。所以还是推荐在 CS 中设置好常用 DNS,不使用 MAC 系统给的“位置”功能,这样就不需要再担心系统 DNS 被软件乱改了。

如果还是有特定网络下特定 DNS 的需求,就只能用 Mixin 了,WIFI 还好,可以用 Strategy 自动切换,有线就只能手动了。

得出一个比较折中的设置:

  1. 不常态使用 Tun Mode,仅在有必要情况下打开,但要把 Tun Stack 设置为 System,性能更好。打开 CS,设置为常用 DNS,不包含局域网私有 DNS;

  2. 在家使用 Mixin 插入局域网私有 DNS,并使用 nameserver-policy 指定返回局域网使用的域名采用私有 DNS 应答(实测,仅靠 DNS 优先级机制并不能保证每次都是私有 DNS 应答);在外关闭 Mixin,并使用 CFW 的 Strategy 实现根据 SSID 自动切换,有线以太网的话手动切换;

  3. 常态使用 System Proxy;

  4. 在配置文件中写明基本的 fake-ip-filter 参数,但这个参数在 CFA 上不会起效(此举是为了方便其他 Clash Premium 内核的软件),所以需要把配置文件中整个 dns 条目粘贴到 Mixin 配置中(并加入私有 DNS),避免在某些必须使用 Tun Mode 的情况下导致其他链接不可用。

    关于上面的 2,有个很小的坑,如果是粘贴过来的话注意缩进:

FAQ

F:如果在 Mixin 或本身的配置文件中,写明:

1
2
tun:
enable: true

是否能实现直接通过配置文件来打开 Tun Mode?

Q:很可惜不可以,在我看来 CFW 已经有点魔改的意思了,他把很多功能单拿出来自己遵循一套内部的配置,除非你的配置需求非常简单,否则几乎不可能做到一份配置文件走天下,很多其他软件直接读取的内容在 CFW 里要手动设置。


F:Mixin 能否在 Tune Mode 打开的情况下插入配置?

Q:不可以,这样没有任何效果。


F:有没有其他的工具能够方便的实现上面折腾的功能?

Q:有,Clash meta 内核可以方便的实现这些功能,甚至包括原生 Clash Premium 提到“将不会支持”的通过代理更新 Rule-Provider,它也是支持的。可惜的是,围绕 Meta 内核开发的工具比较少,我也建议各位,有需求的话,尽量用原生内核吧。

本篇文章不遵循任何共享协议,禁止自由分发。


本博客所有文章除特别声明外,均采用 CC BY-NC-ND 4.0 协议 ,转载请注明出处,禁止商用。