为什么需要
在上一篇文章 搭建家庭工作站 提到放弃 IPv6 方案后,使用云服务器作为内网服务器的访问代理,如何进行代理,如何确保安全等都需要进行考虑。
从功能上需要满足以下要求:
- 内网 windows 远程 mstsc(RDP 协议)访问
- 内网 linux 系统 ssh 访问
- 博客 http 访问代理
这里有两个技术点,分别是网络互联以及代理网关。
组网
虽然有了公网服务器,但是公网服务器并不能直接访问内网 IP 地址,只能由内网主动向公网发起请求。
从朴素的原理来说,如果先由内网向公网服务器发起 TCP 请求,并一直保持这条 TCP 连接,那么后续公网服务器便能够主动发起对内网的请求,示意图如下:

工程化的方案则可以选择 VPN 组网,将内网服务器与外网服务器组成 VPN 网络,VPN 中的服务器以虚拟 IP 进行路由通信,屏蔽底层网络细节。
VPN 组网方案也非常多,考虑到简单实用,选择 WireGuard 开源项目进行组网,其基于 UDP 协议,使用也非常简单,只需申请公私钥对,相互进行配置即可。下图分别是 WireGaus 原理以及是云主机的配置,可以看到我将众多的内网虚拟机均加入到了 VPN 网络。
下图中的 IP 等信息仅供参考,原理上与当前的配置是一致的。

以下为云服务器真实配置截图。

网关选择
RDP、SSH 协议是加密的,HTTP 协议不加密,此时有两种选择,要么选择直接配置博客服务器支持 HTTPS 协议,要么引入网关,并在网关上进行设置。
虽然之前没怎么系统的学习过网关,但对于 openresty、apisix 也有一些浅显的了解,这次既然有这个潜在需求那么便引入进来学习一番。
网关类型 | 支持控制台配置 | 功能复杂度 | 部署复杂度 |
---|---|---|---|
openresty | 否 | 复杂 | 支持容器 |
apisix | 是 | 复杂 | 支持容器 |
nginx proxy manager | 是 | 简易 | 支持容器 |
考虑到目前对网关的需求比较简单,选择 nginx proxy manager 即可,详细的配置如下所述:
主机代理设置了 443 以及 8443 两个端口,其中 443 代理到了内网服务器(IP 为 10.0.0.6 便是因为使用了 WireGuard 搭建了 VPN 网络),8443 重定向到 localhost 的 nginx proxy manager 服务。 两个代理均使用 https 协议,证书使用的是 Let’s Encrypt 提供的免费证书(nginx proxy manager 在域名配置解析合理的情况下能够自动申请,非常方便,有机会后面再讲一讲该证书)。

流式代理设置了 3389(RDP 协议)、22345(SSH 协议)、22346(SSH 协议)。考虑到安全问题,将 SSH 协议端口代理转发暂时禁用了。

效果
博客访问:

RDP 远程访问:

注意:云服务器要开启防火墙对应端口,否则各端口代理服务将无法正常工作。