openlan

简体中文 English

OpenLAN Logo

Go Report Card Codecov CodeQL Build Docs Releases GPL 3.0 License

🌐 什么是 OpenLAN?

OpenLAN 是一套多租户网络解决方案,可在广域网链路上传输局域网报文,帮助您在跨地域、云环境与分支站点之间构建并运营多个相互隔离的虚拟以太网络。

🤔 为什么选择 OpenLAN?

如果您需要灵活的 VPN 方案来实现企业内网安全访问、流量代理转发或经公网云主机建立隧道,OpenLAN 可以显著简化部署并提升运维效率。

✨ 核心功能

🗺️ 典型应用场景

🏢 分支中心接入

        Central Switch(企业中心) - 10.16.1.10/24
                           ^
                           |
                        Wifi(DNAT)
                           |
                           |
      -----------------Internet-----------------
      ^                    ^                   ^
      |                    |                   |
    分支 1                分支 2               分支 3
      |                    |                   |
  OpenLAN              OpenLAN             OpenLAN
10.16.1.11/24        10.16.1.12/24       10.16.1.13/24

OpenLAN 可以将 Central Switch 作为企业统一接入中心。分支设备或边缘网关通过公网认证接入中心,并以分配的地址加入同一个虚拟局域网。分支到中心、分支到分支的流量都运行在可管理的 overlay 之上,同时中心节点可以统一承载用户认证、共享加密、ACL、SNAT、DNAT、DHCP 和限速等策略。

🌍 多区域互联

192.168.1.20/24                                    192.168.1.21/24
      |                                                  |
OpenLAN -- 酒店 Wifi --> Central Switch(南京) <--- 其他 Wifi --- OpenLAN
                            |
                            |
                          互联网
                            |
                            |
                 Central Switch(上海) - 192.168.1.10/24
                            |
                            |
      ------------------------------------------------------
      ^                     ^                              ^
      |                     |                              |
   办公 Wifi             家庭 Wifi                      酒店 Wifi
      |                     |                              |
   OpenLAN               OpenLAN                        OpenLAN
192.168.1.11/24       192.168.1.12/24                192.168.1.13/24

OpenLAN 可以连接不同城市、云环境以及酒店/家庭 Wi-Fi 等临时网络。每个区域保留本地 OpenLAN Switch,再通过 output 建立经过认证的 TCP/UDP 隧道。静态路由或 FindHop 路由可以让远端网段和 VIP 通过正确的 nexthop 可达,从而让应用跨站点迁移或访问时,不必把每个后端服务直接暴露到互联网。

🔐 零信任接入控制

      访客终端                  员工终端                   运维终端
         |                        |                         |
      OpenVPN                  OpenVPN                   OpenVPN
         \                        |                         /
          \                       |                        /
           ----------------------互联网----------------------
                                   |
                                   |
                         Central Switch(策略中心)
                     ZTrust + ACL + Knock + Auth
                     /                         \
                    /                           \
         Guest Network(仅受限访问)     Trusted Network(按策略访问业务)
             172.16.100.0/24               10.16.1.0/24

OpenLAN Zero Trust 可以将虚拟网络切换为对新建流量默认拒绝的访问平面,同时保持已建立连接不受影响。远程用户可以通过 OpenVPN 接入,但受保护服务在用户被注册为 ZTrust Guest,并为指定协议和 socket 创建临时 Knock 规则前不可访问,例如 tcp/192.59.0.1:8081。这适用于外包访问、应急运维,以及需要按服务审批并同时控制网络可达性、身份和时效的场景。

🔀 HTTP 路由转发

        Client request              Client request              Client request
        Host: group.test            Host: single.test           Host: unknown.test
              |                           |                           |
              +---------------------------+---------------------------+
                                          |
                                          v
                                  Ceci HTTP Service
                              listen: 192.168.1.10:13083
                                          |
                       +------------------+-----------------+
                       /                  |                  \
                      / group route       | single route      \ global backend
                     /                    |                    \
        sw2 group backends        sw2 single backend      sw3 fallback backend
         192.56.0.2:18084          192.56.0.2:18086         192.56.0.3:18088
         192.56.0.2:18085
         192.56.0.2:18087

OpenLAN 可以发布一个本地 HTTP Service 入口,并根据 HTTP Host 头将请求路由到不同后端。single.test 这样的主机名可以映射到单个后端,group.test 可以映射到多个后端并按 round-robin 方式负载均衡。没有匹配主机名的请求可以回落到全局后端。后端服务可以位于其他 OpenLAN Switch 后面,因此应用分布在多个站点时,也能保持稳定统一的服务入口。

📚 文档指南

🧪 场景测试

OpenLAN 提供了 42 个可直接执行的场景测试脚本,位于 tests/cases, 共组织为 75+ 个验证函数,累计包含 1000+ 条断言。 统一入口为 tests/start.sh

常用命令:

# 列出所有场景
bash tests/start.sh --list

# 运行全部场景
bash tests/start.sh

# 运行指定场景
bash tests/start.sh switch_tcp access_success

# 生成测试报告(md/html)
bash tests/start.sh --report

报告查看:run.md

功能覆盖(按测试场景分组):