在自己家里搭 homelab 跑服务的人一定会接触到内网穿透,毕竟老钟的运营商一个都没有给你 80/443 的公网端口的。但是这一点也好解决,因为你买一台香港的 VPS 不管是用 frp 还是我现在这种 tailscale + caddy reverse proxy 的架构也好,请求也是能很好的路由回来的。
但是这也带来几个问题,首先不管你怎么优化,多加一层的代理和中转总是要多加一点延迟。其次你的 VPS 大多可能是小水管,速度不快,这不完全浪费了家里辛辛苦苦搭建的 1Gbps 内网吗?如果你要用内网地址的话又是个麻烦事情,很多软件/客户端不支持这么玩,还要反复登出登入,缓存什么的也会消失。
所以让我介绍一下我的解决方案 —— DNS 污染。前提是你用了一台具有可自定义功能的路由器,或者 OpenWRT 之类的旁路由。
示儿
因为《示儿》是陆游写的,然后路由器,对。
我不喜欢用 Argon 主题,觉得 Bootstrap 的主题很经典而且看起来更快。
我的代理用的是 OpenClash + MosDNS 的 DNS 解析。其实 OpenClash 的配置没什么需要注意的,就是要把部分域名和内网的 IP 绕过内核会更快,然后你就可以利用 nslookup 验证一下,正常的话绕过成功的会返回内网的 Real IP 而不是 Fake-IP。
MosDNS 功能比 SmartDNS 多,比 AdGuard Home 轻量。配置起来也简单,所以如果你用别的 DNS 套件的话找找类似的配置,应该也是类似的。
4
你知道最近的 php2shell 就是因为这个 4 的私钥,所以这个章节是讲证书的
为了安全,到公网的服务一般会用 HTTPS 套个证书。所以你的流量是安全加密的,但是内网的服务一般就没有这么好的待遇了,不过你用了域名污染重定向你的请求直接访问你的服务器的话这就会遇到问题了。客户端还会尝试用 HTTPS 访问,而且如果你用了 HSTS 的话不用也没办法,要内网专门用 HTTP 的话这套 setup 就没意义了。
所以我们要给内网的 HTTP server 也套一层 HTTPS,如果你是大款直接买的证书的话不用担心,直接把证书复制一份部署就好了。但是如果你想我用的是 Let’s Encrypt 的话就得花点功夫了。
内网固然是没有办法用文件验证自动过的,所以我们要配置一下 DNS Challenge。方法也很简单,每个运营商的都不一样,自行搜索就好了。
这样你就得到了一个内外网一致的服务了,非常简单。
拓展阅读
我们这次是做了个内外网一致的只为了加速,当然你也能通过相同的方法做内外网不一致的服务。你还可以用相同的方法做一个只存在内网的网站。
或者如果你内网设备有 CA 或者可以在路由器中做中间人攻击的话可以解码 HTTPS 的请求然后做网站劫持的跳转,早期 ISP 喜欢干的事情,不过那时候是因为 HTTPS 还不流行,明文不是想篡改就改的吗(
写本文的主要目的还是告诉你 “为什么你需要一个 OpenWRT”。
其次这是另一篇博客的先导片,先把网络搭好,后来的东西才做的不烧心。
