branding: add dashboard docs and serve OpenLAN logo asset

This commit is contained in:
Daniel Ding
2026-04-13 19:36:06 +08:00
parent 138b2b03e3
commit eb617051a3
10 changed files with 185 additions and 3 deletions
+4
View File
@@ -1,5 +1,9 @@
简体中文 | [English](./README.en.md)
<p align="center">
<img src="./pkg/public/openlan.png" alt="OpenLAN Logo" width="180" />
</p>
[![Go Report Card](https://goreportcard.com/badge/github.com/luscis/openlan)](https://goreportcard.com/report/luscis/openlan)
[![Codecov](https://codecov.io/gh/luscis/openlan/branch/master/graph/badge.svg)](https://codecov.io/gh/luscis/openlan)
[![CodeQL](https://github.com/luscis/openlan/actions/workflows/codeql.yml/badge.svg)](https://github.com/luscis/openlan/actions/workflows/codeql.yml)
+4
View File
@@ -1,5 +1,9 @@
English | [简体中文](./README.cn.md)
<p align="center">
<img src="./pkg/public/openlan.png" alt="OpenLAN Logo" width="180" />
</p>
[![Go Report Card](https://goreportcard.com/badge/github.com/luscis/openlan)](https://goreportcard.com/report/luscis/openlan)
[![Codecov](https://codecov.io/gh/luscis/openlan/branch/master/graph/badge.svg)](https://codecov.io/gh/luscis/openlan)
[![CodeQL](https://github.com/luscis/openlan/actions/workflows/codeql.yml/badge.svg)](https://github.com/luscis/openlan/actions/workflows/codeql.yml)
+1
View File
@@ -2,6 +2,7 @@
- 📦 [软件安装](install.md)
- 🐳 [Docker 部署](docker.md)
- 🧭 [Dashboard 介绍](dashboard.md)
- 🌿 [分支接入](central.md)
- 🌐 [多区域互联](multiarea.md)
- ⚖️ [ECMP 多路径](ecmp.md)
Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

+17
View File
@@ -0,0 +1,17 @@
<svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="512" height="512" rx="96" fill="#081018"/>
<circle cx="256" cy="256" r="162" stroke="#233041" stroke-width="22"/>
<circle cx="256" cy="256" r="98" fill="#111C27" stroke="#314255" stroke-width="12"/>
<circle cx="256" cy="256" r="42" fill="#E6EDF3"/>
<circle cx="256" cy="256" r="15" fill="#081018"/>
<path d="M256 84V174" stroke="#58A6FF" stroke-width="12" stroke-linecap="round"/>
<path d="M398 171L320 216" stroke="#3FB950" stroke-width="12" stroke-linecap="round"/>
<path d="M398 341L320 296" stroke="#D29922" stroke-width="12" stroke-linecap="round"/>
<path d="M114 341L192 296" stroke="#F85149" stroke-width="12" stroke-linecap="round"/>
<path d="M114 171L192 216" stroke="#BC8CFF" stroke-width="12" stroke-linecap="round"/>
<circle cx="256" cy="68" r="25" fill="#58A6FF"/>
<circle cx="411" cy="162" r="25" fill="#3FB950"/>
<circle cx="411" cy="350" r="25" fill="#D29922"/>
<circle cx="101" cy="350" r="25" fill="#F85149"/>
<circle cx="101" cy="162" r="25" fill="#BC8CFF"/>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

+155
View File
@@ -0,0 +1,155 @@
# OpenLAN Dashboard 视角下的产品介绍
<div align="center">
<img src="./assets/openlan-logo-orbit.svg" alt="OpenLAN Logo" width="140" />
<p><strong>OpenLAN</strong></p>
<p>从 Dashboard 出发,理解一个面向企业网络互联与统一管理的开源平台。</p>
<p>
<img src="./assets/openlan-logo-orbit.svg" alt="OpenLAN Icon" width="44" />
</p>
</div>
## 引言
很多网络产品的介绍都会先从协议、拓扑或者安装步骤讲起,但 OpenLAN 更适合从它的 Dashboard 来理解。因为当你打开 Dashboard 时,看到的不只是一个管理页面,而是 OpenLAN 对企业网络互联这件事的整体抽象。
在 OpenLAN 里,网络不只是“把两台机器连起来”,而是围绕一个中心节点,把用户、虚拟网络、路由、VPN、策略和跨区域互联统一组织起来。Dashboard 正是这套能力最直观的入口。
## OpenLAN 是什么
OpenLAN 是一个面向企业场景的开源虚拟网络互联平台。它的核心目标,不是单纯提供一个点到点 VPN,而是把分支接入、远程办公、跨区域互联、代理转发和零信任访问控制,放进同一个可管理的网络平面里。
和传统“连通即可”的方案相比,OpenLAN 更强调三件事:
- 让远端节点像接入同一个局域网一样工作;
- 让多个网络空间可以在一个平台里统一管理;
- 让接入、转发、认证和策略具备持续运维能力。
这也是为什么 Dashboard 不是一个附属功能,而是 OpenLAN 的重要表达方式。
## 先从视觉入口理解 OpenLAN
在 Dashboard 中,OpenLAN 使用了非常克制的视觉语言:深色背景、清晰的导航分区、统一的卡片与表格结构,再配合简洁的 Logo,强调的是“控制面”而不是“营销页”。
这种风格其实和产品定位高度一致:
- Logo 简洁,表达的是稳定、边界和控制感;
- Dashboard 结构明确,强调网络对象的组织能力;
- 视觉不过度装饰,把重点留给状态、连接、用户和策略。
从这个角度看,OpenLAN 的品牌和界面设计在传递同一件事:它服务的是持续运维的企业网络场景,而不是一次性临时连接。
## 从 Dashboard 看 OpenLAN 的核心能力
### 1. Overview:把网络状态先看清楚
Dashboard 的第一页是 `Overview`。这一页承载的是“控制面视角”的能力:节点状态、网络数量、用户规模、连接情况、运行信息,都可以集中呈现。
对于运维人员来说,这意味着 OpenLAN 并不是部署完就只能回到命令行逐项检查。它提供了一个统一的观察窗口,让你快速回答几个关键问题:
- 当前节点是不是正常运行;
- 系统里有多少个虚拟网络;
- 有多少用户、多少接入连接;
- 整体资源和网络状态是否健康。
这一步很重要。因为企业网络的难点往往不是“能不能连上”,而是“出了问题时能不能快速定位”。Overview 页面体现的,就是 OpenLAN 在可观测性和日常运营上的价值。
### 2. Virtual Network:把复杂网络拆成可管理的逻辑空间
`Virtual Network` 页面是理解 OpenLAN 的关键。OpenLAN 支持在同一个平台中管理多个逻辑网络,每个网络都可以有独立的桥接地址、地址池、路由、转发和接入方式。
这种能力适合下面几类场景:
- 不同部门使用不同网络空间,互不干扰;
- 不同客户或环境共用一套基础设施,但需要逻辑隔离;
- 总部、分支、测试环境和生产环境在统一平台下独立运行。
从 Dashboard 的组织方式也能看出 OpenLAN 的设计取向。这里不是简单列出一个“隧道列表”,而是把网络作为核心对象来管理。管理员可以围绕网络本身配置地址、子网、SNAT、MSS、OpenVPN 接入等能力,这让 OpenLAN 更像一个企业网络控制台,而不是单一协议工具。
### 3. BGP、Router、IPSec、Ceci:不仅能接入,还能互联
如果说很多 VPN 产品解决的是“远程进来”,那 OpenLAN 想解决的是“整个网络怎么组织起来”。
Dashboard 中的 `BGP Network``Router Network``IPSec Network``Ceci Network`,展示的是 OpenLAN 在更大范围网络互联上的扩展能力:
- `BGP Network` 适合和已有路由体系做动态互通;
- `Router Network` 用于管理更明确的三层路由转发关系;
- `IPSec Network` 适合站点到站点的安全互联;
- `Ceci Network` 则为特定网络接入和互联方式预留了扩展空间。
这类设计说明 OpenLAN 并不把自己限制在“单一远程访问工具”的角色里。它更接近一个可生长的网络平台,可以随着企业网络规模扩大,逐步承载更多互联需求。
### 4. VPN Clients:降低终端接入门槛
企业网络最终还是要给人用。Dashboard 里的 VPN 客户端管理能力,让管理员可以按网络查看接入终端、地址、远端信息、在线状态和流量收发情况。
这带来两个直接收益:
- 用户接入路径更清晰,远程办公更容易落地;
- 管理侧能快速识别异常连接、离线终端和活跃状态。
这与 OpenLAN 的产品定位是一致的。它既支持中心节点和接入点之间的网络互联,也支持通过 OpenVPN 等方式为终端用户提供接入能力。也就是说,OpenLAN 既能连站点,也能连人。
### 5. Users:把认证和网络管理放在一起
很多时候,网络平台的复杂性不是来自链路,而是来自账号和权限。Dashboard 的 `Users` 页面把用户管理和网络对象放在一起,让管理员能更自然地理解“谁接入哪个网络、以什么身份接入、租期到什么时候”。
这背后体现的是 OpenLAN 的集中管理思路:
- 用户不是散落在各节点上的本地配置;
- 网络不是独立于身份体系之外的静态资源;
- 认证、租约和接入网络形成统一关系。
对企业来说,这种统一性非常重要。因为网络一旦进入多人、多部门、多地点协作阶段,账号生命周期管理就会和网络可控性直接绑定。
### 6. About OpenLAN:把节点本身纳入产品叙事
`About OpenLAN` 页面虽然看起来更像“说明信息”,但它传递了一个很重要的产品信号:OpenLAN 不是一个黑盒服务,而是一个开源、可审视、可追踪构建信息的系统。
在这里可以看到版本、节点身份以及项目来源信息。这对于开源产品尤其重要,因为用户不仅关心“能不能用”,也关心“是谁在维护、版本是什么、系统处于什么状态”。
## 为什么 Dashboard 视角很重要
从 Dashboard 来看 OpenLAN,会发现它解决的问题比传统 VPN 更完整。
传统 VPN 更关注“建立隧道”,而 OpenLAN 更关注:
- 网络对象如何被组织;
- 用户如何被接入;
- 多个区域如何互联;
- 路由和安全策略如何持续运维;
- 管理员如何在统一界面中观察和操作。
这正是 OpenLAN 对企业场景更有吸引力的原因。企业网络不是一次性配置,而是持续变化的系统。节点会增加,用户会变化,路由会调整,分支会扩展,安全边界也会不断重构。Dashboard 的价值,就是把这种持续演进的复杂度压缩到一个可理解、可操作的界面里。
## OpenLAN 适合什么场景
结合 Dashboard 的能力,可以更容易理解 OpenLAN 的典型使用场景:
### 分支机构互联
总部与多个分支之间需要稳定互联,同时希望各分支像在同一局域网里工作。OpenLAN 可以通过中心节点统一管理接入网络、地址空间和用户,减少每个站点单独维护的负担。
### 远程办公接入
远程员工需要访问企业内部系统,而管理员又希望清楚知道谁在接入、接入到哪个网络、当前连接是否健康。Dashboard 下的用户和 VPN 客户端视图能显著降低运维成本。
### 多区域网络扩展
当业务分布在多个城市、多个机房甚至多个云环境时,单纯依赖静态 VPN 配置会越来越难维护。OpenLAN 提供面向网络对象的集中管理方式,更适合规模扩展。
### 需要代理、路由与安全策略协同的环境
如果一个团队不仅要“连上”,还要同时处理代理转发、路由编排、IPSec、BGP 或零信任访问控制,那么 OpenLAN 会比单点 VPN 工具更接近真实需求。
## 结语
如果只用一句话介绍 OpenLAN,可以这样概括:
**OpenLAN 不是单纯的 VPN 工具,而是一个面向企业网络互联与统一管理的开源平台。**
而如果要用 Dashboard 的语言来理解它,那么答案会更具体一些:
它把网络、用户、接入、路由、VPN 和策略,收敛到同一个控制面中,让原本分散、依赖手工维护的网络工作,变得更可视、更可控,也更适合持续演进。
这也是 OpenLAN 最值得关注的地方。它不只是帮你把网络连起来,更是在帮你把网络管理起来。
Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

+2 -2
View File
@@ -787,7 +787,7 @@ select option {
<!-- Sidebar -->
<aside class="sidebar">
<div class="sidebar-header">
<img src="/favicon.ico" class="sidebar-logo" alt="" onerror="this.style.display='none'">
<img src="/openlan.png" class="sidebar-logo" alt="" onerror="this.style.display='none'">
<div>
<div class="sidebar-brand">OpenLAN</div>
<div class="sidebar-version" id="sw-version">Management Console</div>
@@ -1324,7 +1324,7 @@ select option {
<div class="section-body about-shell">
<div class="about-hero">
<div class="about-logo">
<img src="/favicon.ico" alt="OpenLAN" style="width:56px;height:56px;border-radius:14px;" onerror="this.style.display='none'">
<img src="/openlan.png" alt="OpenLAN" style="width:56px;height:56px;border-radius:14px;" onerror="this.style.display='none'">
</div>
<div>
<div class="about-kicker">Open Source Network Overlay Platform</div>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.9 KiB

After

Width:  |  Height:  |  Size: 146 KiB

+2 -1
View File
@@ -93,7 +93,7 @@ func (h *Http) Prome(r *mux.Router) {
func (h *Http) Middleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
libol.Info("Http.Middleware %s %s", r.Method, r.URL.Path)
if r.URL.Path == "/favicon.ico" {
if r.URL.Path == "/favicon.ico" || r.URL.Path == "/openlan.png" {
next.ServeHTTP(w, r)
return
}
@@ -141,6 +141,7 @@ func (h *Http) LoadRouter() {
router.HandleFunc("/", h.IndexHtml)
router.HandleFunc("/index.html", h.IndexHtml)
router.HandleFunc("/favicon.ico", h.PubFile)
router.HandleFunc("/openlan.png", h.PubFile)
h.PProf(router)
h.Prome(router)