杏泉网络

『这座咖啡馆里,有些东西被允许存在。』—— 乌林杏泉,咖啡馆的店长


1. 简介

杏泉网络是一个运行在公共互联网上的,类似于DN42那样的VPN/Overlay网络,采用私有IP地址,内部各节点间三层互通,且公共互联网没有直接通往杏泉网络的路由。设计目标与DN42较为类似,即用作网络技术实验,以及小流量通信。

关于后一点,主要是一些笔者自用(不对外公开)的服务,部署之后相当于是添加了统一的安全层,从外部不可见,也就避免了外部攻击扫描的风险(比如,可以放心地在杏泉网络里面跑Telnet,GRE,甚至是远古的QoTD,Daytime等协议)。有点像现在云厂商卖的那种『云内网』,在比实体内网(要自己拉网线那种)灵活的同时,也保留了像公网那样的接入灵活度。

关于这个网络是怎么组建起来的,博客内有系列文章:

如何搭建自己的『暗网』
杏泉网络:DNS篇
杏泉网络:OSPF篇
杏泉网络:PKI篇
杏泉网络:应用篇(Vaultwarden)
杏泉网络:新节点,以及SmartDNS
杏泉网络:借助TProxy实现的『单向』接入

2. 名称来源

如引言所示,杏泉网络的『杏泉』二字,其实取自于乌林杏泉。

乌林杏泉是笔者目前正在写的小说《如果瓷杯从未冷透》(曾用名《一个衡令使的自我修养》)的男主之一。设定之一就是双重身份,明面上是木风小镇的咖啡馆的少年店长,实际上(至少小镇非核心人员不知道的)却是松格协会下属的衡令使之一,被协会从其他世界派遣而来。原本的任务是调查小镇上的另一位少年『北沐宁雨』。然而在此之中,他逐渐发现,自己似乎与这个世界,当然还有宁雨,产生了一些不是那么容易脱身的关系。

关于这本小说的类型,其实我自己也很难说,因为一开始并没有怎么刻意地去规定。但如果光靠目前已经写成的文字来界定的话,首先应该可以和异世界类的轻小说有关系,其次还可以归类为双男主,但至于能不能进一步归类为狭义上的BL(耽美)类,其实我自己也说不准。因为这本小说更多的还是边想边写的情况,甚至刚开始写的时候,连标题都不存在,所以上面还存在一个曾用标题,便是如此。另外,一个男性作者写此类小说似乎有些奇怪(而且根据笔者的观察来看,似乎对此有些说法),因此并不好在这里直接把定义下准确了,只能说走一步看一步。

这本小说目前的状态是『正在写,还没有公开发布』,甚至用来写他的编辑器,也运行在杏泉网络内。然而实际上,我并没有分配太多精力上去,大部分时间都花在干别的事情,水群,看视频,以及写博客上来了,所以目前小说接近停笔状态。第一章是2022年写的,平均每章两千字,到现在2026年,才写到第28章。为了改善这个问题,目前正在开的一个项目是给Typecho写个插件,配合系统本身的独立页面功能,把小说搬到博客上,同时实现与主要内容互不干扰。不过这个插件目前也有搁置的迹象,打算先把目前手头的活忙完再说。

3. 网络结构

3.1 节点

各节点为运行在公网上运行Linux的VPS。目前网内只有三个节点,一个是博客主站,另外两个是两台香港的便宜VPS。理想情况下最好加一台日本或者新加坡的机器,可惜受限于钱包,也只能望洋兴叹。

目前暂时没有接入『正经的』网络硬件,比如硬路由什么的,主要是因为没有方便接入的方法,也没有本地入网的需求。当然真要接入也不是不行,找个离得近的节点当PoP,开个IPSec就好。

3.2 互联

节点间采用WireGuard互联。

建网初期比对过各VPN方案,包括OpenVPN,IPSec(包括IKEv1,IKEv2)等,最后综合考虑之下,选择了WireGuard。因为他内置在Linux内核中,配置也简单,完全满足作为节点间互联的『大号网线』需求。

网内目前使用FRRouting,配置OSPF以及OSPFv3,来动态控制路由。

3.3 编址

网内采用私有地址空间:

  • IPv4:198.18.0.0/15
  • IPv6:fd04:17::/32

与其他VPN网络不同,IPv4用的不是RFC1918,而是RFC5735,更具体地说,使用的是里面的『网络基准测试地址』,也就是198.18.0.0/15。虽然此地址空间有时候会被认为是不适合用于『私有网络通信』,部分路由器也会把他丢弃,不过目前并未发现太大缺点,Linux内核对此也没有什么特殊说法,因此继续沿用着。

预期中的杏泉网络有海外段与境内段,其中海外段使用整个地址空间的前半部分,境内段使用后半部分,但目前由于各种原因(主要是缺机器),只实现了海外段,因此目前的细分规划如下:

  • IPv4互联:198.18.0.0 - 198.18.2.255
  • IPv4业务:198.18.3.0 - 198.18.255.255
  • IPv6互联:fd04:17:0000:0000:: - fd04:17:0000:7fff:ffff:ffff:ffff:ffff
  • IPv6业务:fd04:17:0001:0000:: - fd04:17:7fff:ffff:ffff:ffff:ffff:ffff
  • IPv6链路:fe80::0000:0000:0000:0000 - fe80::7fff:ffff:ffff:ffff

各节点之间的互联接口使用互联网段,掩码为/31与/127,配置为点对点模式;各节点的环回口,以及该节点之下的网段,就从业务段里面分。举例来说,目前的博客服务器,IPv4就分配了198.18.0.0/31198.18.3.1/24,用来接入的香港机就分配了198.18.0.1/31198.18.4.1/24,因此只要在香港机接入,然后访问198.18.3.1,就能接到博客主站上了。

3.4 域名

网内采用.xq域名后缀。

各节点的FQDN结构为业务.节点编号.地域.xq,例如运行在美国VPS上,简称为jw的在线笔记本,就是jw.1.us.xq,运行在同一个服务器上的密码管理器,就是vw.1.us.xq

这是一个非标域名后缀,虽然DNS能识别,但键入浏览器中,大概率会直接触发地址栏的搜索功能。一个比较方便的解决方案是在末尾加一个斜杠,例如jw.1.us.xq/,浏览器就能正确识别这种非标后缀,能直接打开网页。

如图所示如图所示

3.5 CA

有自己的PKI体系,各终端安装了CA证书之后,一般情况下就能正确访问TLS服务了,所以你会看到上面图里面,Chrome正确识别到了HTTPS,而非『不安全』或红标。

不过,安卓手机有个问题:非ROOT情况下,用户安装的CA证书只能被装入到用户证书,而非真正的系统证书。软件可以配置为不信任用户证书,仅系统证书,这就导致此类软件无法建立TLS连接。目前已知有这个情况的是低版本的Tailscale客户端,使用用户CA的时候,无法正常连接到控制平面。新版本据说已解决这个问题,不过笔者并未测试。

4. 网内服务

其实不是很多,只有笔者的密码管理器(Vaultwarden),以及笔者用来写东西的在线笔记本罢了,顶多再加一个博客到本地机器的备份链路,也是走的杏泉网络。目前暂时没有发现有什么好东西可以往里面放的。

5. 与其他网络的互联

杏泉网络暂未实现,也暂无计划与其他网络(如DN42等)实现互联。

公网侧接入杏泉网络只有两种方式:

  • 端口接入:通过WireGuard与任一节点互联(可选:与多个节点互联,分配自己的IP段并建立OSPF路由)。此时新加入的节点与网内是真正意义上的三层互通
  • 代理接入:在某一节点上启动代理服务器,让客户端通过这个代理服务器访问。此时只有客户端单向发起访问的能力,只能访问TCP/UDP资源,且网络内部无法主动连接到客户端。

可能以后会考虑安装双向NAT,或应用层网关(例如Nginx反向代理)。

6. 写在最后

基本上就是用来折腾罢了,也许以后还可以往里面安点别的?

(完)

木头箱子脆脆,但是这样正好

如无特殊声明,本站内容均遵循 CC BY-NC-SA 4.0 协议

转载请注明出处并保留作者信息,谢谢!

添加新评论

提醒:『评论回复邮件提醒』功能正在测试中
评论后,如果站长有回复,会有邮件通知