构建自己的云服务之SDLAN

​ 牛客网秋季活动第三天。

前言

最近随着上海疫情的逐渐转好,我也回到上海这边,之前南通那边为了给自己节省电费,和那边说了一下每个月电费多少之后,就重新部署了一个pve的服务器,x79的板子,配上64G的内存和一根nvme SSD,以及一个nvme+3THDD配上的bcache系统,做好相关特殊的配置和优化后,就可以存放qcow2文件了。测试window10下随机读写都是ssd速度,顺序读写直接写盘到HDD中。

到这里,我们就需要考虑网络的事情了,虽然公司的网络是有公网IP的,但是考虑到网络属于公司用的网络,自己是不敢开http和https服务的,而目前自己搭建的很多服务都是https的web方式的服务。为了保证服务不是属于公开网络,需要在访问端上添加一定的权限认证和客户端,这也匹配到了已经不新鲜的技术:零信任网络。此外,考虑到最好访问是能够跨网段互相访问的,常见的使用方式就不同的。

跨网段访问

目前我已经探究过的跨网段访问的方式有下面几种:

  • 传统VPN模式:PPTP,L2TP,SSTP,OpenVPN,L2TP over IPsec, Open Connect,MPLS。
  • P2P VPN模式: n2n,Nebula,Zerotier
  • Mesh 模式: Wireguard,Tailscale

传统VPN模式

传统的模式全部需要公网IP,然后PPTP在电信环境下使用是正常的,包括4G移动网络。但是中国移动包括移动网络默认是将PPTP和L2TP直接特征包过滤掉了,无法使用。L2TP over IPsec 要求固定端口,这个端口默认是被封杀的,所以也没有办法考虑。MPLS需要两边都有固定公网IP,无法考虑,不适用家庭和普通企业环境。

能够考虑的只有OpenVPN了,OpenVPN支持TCP也支持UDP,需要公网IP,IPv6的版本测试也是可以的,不过OpenVPN的效率比较低,好像是因为一直使用非对称加密了吧?而且从我13年使用OpenVPN的情况上看,时间稍微长些只要几个小时就会被阻断。

P2P 模式

n2n 的也是可以做的,双方都在HardNAT的情况下,比较难打通。Nebula 比较推荐,需要一个公网的lighthouse节点,双方都可以自己设定对应的路由表和联通网段。lighthouse好像可以用内网穿透的方式固定下来,在无法双方直连的情况下,lighthouse不会帮忙进行转发,双方直接是阻断的。Zerotier 目前在国内被严重阻断,包括Udp的Qos,也会国外的根节点进行阻断,客户端数量也从100降到了20。经过测试后只能说部分地区可以考虑使用,生态比较健全。

Mesh 模式

将每个节点的连接都默认是直接连接,通过一定的协议将每个节点相互连接,参见TailScale,Tailscale使用的就是wireguard协议,wireguard通过一定的插件方式能够构建mesh网络。Tailscale在wireguard的基础上添加了 权限控制,和简化了wireguard的部分操作,同时增加了Derp协议,在判断连接方式和连接IP和Port的时候,先用中继方式连接,成功后再尝试NAT打洞。

不过注意的是,Tailscale的客户端本身能够访问网段节点,但是不能作为路由的形式访问,所以在单点连接网段的时候,可以访问,没有安装tailscale的主机,无法访问tailscale内节点,这和zerotier不同,zerotier直接允许客户端作为bridge连接。

wireguard只要设置好配置文件的allowed ip 部分就可以访问,前提是指定网关,指定路由表。

今天时间不足,明天接着写具体的各个组件的情况,和搭建,调测稳定性,配置环境等等。