本方案所有人适用,但不一定适合所有人,也并不一定是最佳方案,主要针对无法获得 ipv4 公网或者有 ipv4 公网但介意带端口访问且 ipv6 公网未封端口的群体. 有一定的局限性,仅供参考.

ipv6 为主,ipv4 为辅(我用 ipv6 的主要原因是因为很不爽 ipv4 带端口访问)

先贴上我的网络拓补图

由上而下

第一层 光猫桥接

无论是用 ipv6 公网 还是 ipv4 公网,都有必要做好光猫桥接,最主要的目的是简化网络管理,桥接之后,路由器可以直接获得公网 IP,我们可以更方便地进行网络设置和管理

第二层 路由器

路由器这里,ipv4 单独设置转发,内网地址为 nginx 容器地址 443 端口,ipv6 分配协议我们要选择 slaac,并且关掉路由防火墙.在 slaac 分配协议下,我们每一台主机都是 ipv6 公网.这样就导致我们访问内网服务的时候,每一台部署服务的虚拟机或者容器都需要部署一个 ddns,所以要通过跳板机反向代理实现统一跳板的目的.

第三层 交换机

傻瓜式

第四层 主机

指的是 pve 系统本身,需要开启防火墙,但无需配置,只是为了虚拟机或者 lxc 容器的防火墙生效.

这里需要添加一个安全群组规则为仅允许内网访问,方便后续容器及虚拟机配置防火墙

第五层 容器和虚拟机

LXC-nginx 容器

既是跳板机也是隧道机,仅部署 nginx webui 和 ddnsgo 两个容器,并且没有配置持久化存储,原因是方便备份且恢复即用.作为隧道机,通过 ipv6 公网进入服务器后,反代指向内网 ipv4 服务地址.

跳板机 ip 配置

ipv4 我们照旧设置静态 ip,而 ipv6 我们需要改为 slaac

防火墙规则

这里贴一个 ipv6 反代示例

ipv4 配置示例

虽然我们可以完全通过 ipv6 访问,但考虑到 ipv6 依然尚未完全普及,即便开手机数据一定是有 ipv6 的,但比较吃流量的服务,还是建议 ipv4+端口访问

ipv4 需要单独添加防火墙规则

以 jellyfin 为例

ipv4 反代示例

ddnsgo 就不贴示例了,参照文档即可

通过跳板机反代还有一个好处就是证书配置方便,自行体会吧

各类服务容器及虚拟机

启用防火墙并插入仅允许内网访问的安全群组规则

至此,基本配置完成,或许有遗漏的地方,有时间再补

有问题请请评论区回复