Landscape - 以 eBPF 为基础的 Linux 路由平台
Landscape 的目标是让你更轻松的将自己喜欢的 Linux 发行版配置成路由器
Landscape 是一个以 eBPF 为基础的 Linux 路由平台,提供网络服务管理、策略控制 和 API
基于 Rust / eBPF / AF_PACKET 开发。
本地开发文档: BUILD.md | BUILD.zh.md
核心特性
eBPF 分流,直连流量性能不受影响,使用 (SIP-CIDR、MAC), 分流对象: (DIP、域名、Geo 匹配规则)
每个流 Flow 独立 DNS 配置以及缓存(避免 DNS 缓存冲突和数据泄露)
流量导入 Docker 容器,可在容器中运行支持 TProxy 的程序进行扩展
地理关系库管理, 支持 DAT/TXT 格式
默认 更严格的 NAT4, 但可让指定 IP/域名 使用 NAT1, 方便进行组网等操作, 详情见文档: NAT4? 不, 比 NAT4 更严格
提供 API, 可通过 API 操作所有在 UI 上可操作的内容
为什么编写 Landscape
最直接的原因,是希望继续使用自己熟悉的 Linux 发行版来做路由,而不是被限定在某一种系统上。除了 Debian 之外,Landscape 已经有 Arch、openSUSE 等发行版的实际使用反馈。
是可以通过组合 Linux 上现成的各种程序来搭建一套路由方案,而且确实能稳定运行;但这类方案通常配置分散、维护成本高,还要额外处理配置文件的存储与迁移。Landscape 将这些配置集中到一个目录中管理,新版本可直接替换运行,启动后会自动迁移配置;需要回退时,也支持降级。
此外,内网里常常会有 BT/PT 之类需要 NAT1 的程序,但并不希望其他 PCDN 程序偷跑流量。为此,Landscape 提供了更细粒度的 NAT 控制,可以按域名或 IP 决定不同流量采用怎样的 NAT 行为。
内网中的不同设备往往需要不同的分流策略,同时也希望在容器发生故障时,直连流量仍然能够继续工作,不会被一并拖垮。
注意事项
Linux 内核 6.9 或更高版本, 该项目高度依赖 Linux 内核提供的能力, 所以 FreeBSD / macOS 之类的类 Unix 内核无法使用
内核需启用 BTF/BPF 功能
需要 root 权限启动服务
如果要使用容器导流或容器管理能力,需要额外安装 Docker
发布包中的后端二进制和前端静态文件是分开提供的, 需要分别单独下载
默认情况下,如果没有额外配置静态 NAT 或暴露路径,管理界面无法从 WAN 侧直接访问
1. 创建配置目录
XML/HTML代码
- mkdir -p /root/.landscape-router
2. 下载发布资源
从 Releases 下载 static.zip ,下载对应架构的 landscape-webserver 二进制文件,解压到 /root/.landscape-router/static (可额外指定, 此为默认路径)
3. 启动 Landscape
使用 root 运行:
XML/HTML代码
- ./landscape-webserver
默认运行参数:
XML/HTML代码
- 配置目录:/root/.landscape-router
- HTTP 跳转端口:6300
- HTTPS 端口:6443
- 默认用户名:root
- 默认密码:root
Landscape 可以在没有预置配置文件的情况下直接启动。如果你想通过 landscape_init.toml 进行初始化,请查看文档站中的配置说明。
更多参数可通过 ./landscape-webserver --help 查看。
4. 打开管理界面
http://landscape.local:6300 会自动跳转到 HTTPS
https://landscape.local:6443 打开 Web UI
https://landscape.local:6443/api/docs 打开 REST API 文档
开机启动
确认服务运行正常后,可以把它配置成 systemd 服务:
XML/HTML代码
- [Unit]
- Description=Landscape Router
- [Service]
- ExecStart=/root/landscape-webserver
- Restart=always
- User=root
- LimitMEMLOCK=infinity
- [Install]
- WantedBy=multi-user.target
请把 ExecStart 改成你实际的二进制路径。
Minimal x86 image builder for Landscape Router with CI-validated artifacts. / 面向 Landscape Router 的最小化 x86 镜像构建器,提供 CI 验证产物。
Landscape Router 的最小化 x86 镜像构建器,支持 Debian Trixie / Alpine Linux,可生成 img / vmdk / ova,支持 BIOS + UEFI。
上游项目:Landscape Router
从这里开始
XML/HTML代码
- 你的目标 直接去
- 直接下载现成镜像 Release 页面
- 自定义网络 / 密码 / 版本 / 输出格式 Custom Build 使用说明
- 在 PVE 中导入 / 安装 PVE 安装引导
- 本地构建 / 测试 / 调试 中文主文档
- English docs docs/en/README.md
推荐路径
我只想装起来
下载 Release 镜像
如果在 PVE 中使用,继续看 PVE 安装引导
我想改网络、密码或版本
构建完成后,如果要在 PVE 中导入,继续看 PVE 安装引导
我想改这个仓库
先看 中文主文档
再看 贡献流程
项目概览
基础系统:debian / alpine
镜像身份:base_system + include_docker + output_formats
输出格式:img、vmdk、ova
默认上游版本:build.env 中的 LANDSCAPE_VERSION
默认登录
场景 用户 密码
SSH / 系统登录 root landscape
SSH / 系统登录 ld landscape
Web UI root root
通过 Custom Build 可以覆盖 Linux / Web 管理凭据。更多本地构建、测试、CI / Release、构建参数说明,见 docs/zh/README.md。
imgflash-将任意 .img 镜像打包为可引导 ISO,启动后一键写入磁盘
将任意 .img 镜像文件打包为支持 BIOS + UEFI混合启动的 ISO,使用 dd 写入目标磁盘。
架构
纯 initramfs-only,无 rootfs、无 overlayfs、无 init 切换:
amd64:UEFI + BIOS 双启动
UEFI 链(Secure Boot):shim(Microsoft 签名)→ GRUB(Debian 签名)→ vmlinuz(Debian 签名)
UEFI 链(非 Secure Boot):GRUB → vmlinuz
BIOS 链:syslinux → vmlinuz
arm64:UEFI 单启动
UEFI 链:同 amd64,按 Secure Boot 配置决定
运行时:
TUI 模式:disktui-lite(Rust)同时充当 init 和安装器
Shell 模式:init.sh → installer.sh(Bash)
安装器模式
XML/HTML代码
- TUI 模式(默认) Shell 模式
- 实现 disktui-lite(Rust + Ratatui) installer.sh(Bash)
- init 内建 init 逻辑(替代 init.sh) init.sh
- 界面 终端 TUI,键盘导航 纯文本菜单,数字选择
- 确认 方向键选择 Yes/No 输入大写 YES
- 进度条 实时进度条 + 速度 + ETA 文字进度 + 速度
- 配置 USE_TUI=1 USE_TUI=0
构建流程
XML/HTML代码
- 阶段 说明
- Phase 1 mmdebstrap 创建最小 Debian 环境(含引导组件)
- Phase 2 提取内核 / shim(可选) / GRUB / BusyBox
- Phase 3 组装 initramfs(安装器 + 内核模块 + BusyBox)
- Phase 4 将镜像打包为 squashfs 容器(zstd 压缩)
- Phase 5 组装 ISO 文件系统结构(UEFI 引导 + 可选 BIOS 引导)
- Phase 6 xorriso 生成最终 ISO
使用方式
Docker 构建(推荐)
XML/HTML代码
- docker build -t imgflash .
- # 从本地镜像构建
- docker run --rm --privileged \
- -v "$(pwd)/output:/build/output" \
- imgflash -i /path/to/image.img
- # 从 URL 下载镜像并构建
- docker run --rm --privileged \
- -v "$(pwd)/output:/build/output" \
- imgflash -u https://example.com/image.img.gz
- # 使用自定义配置构建
- docker run --rm --privileged \
- -v "$(pwd)/output:/build/output" \
- -v "$(pwd)/my.env:/build/build.env" \
- imgflash -i /path/to/image.img
命令行参数
XML/HTML代码
- 用法: build.sh [选项]
- 选项:
- -i, --image 指定本地 .img 文件路径
- -u, --url 从 URL 下载镜像文件(支持 raw / gz / xz / bz2 / zip / 7z)
- -n, --name 输出 ISO 名称(默认从镜像文件名推导)
- -h, --help 显示帮助
构建配置
所有构建参数通过 build.env 配置,修改后重新构建即可生效。
XML/HTML代码
- 变量 说明 默认值
- ARCH 目标架构(amd64 / arm64) amd64
- DEBIAN_MIRROR Debian 镜像源 https://ftp.debian.org/debian
- DEBIAN_SUITE Debian 套件版本 trixie
- VOLUME_LABEL ISO 卷标 IMGFLASH
- MOD_* 各组内核模块定义 见 build.env
- INCLUDE_NVME NVMe 模块开关 1
- INCLUDE_VIRT 虚拟化模块开关 1
- ENABLE_SECURE_BOOT Secure Boot 支持 0
- USE_TUI 安装器模式(1=TUI / 0=Shell) 1
- BOOT_TIMEOUT 启动菜单超时(秒) 0
- KERNEL_PARAMS 内核启动参数 quiet
- SCAN_TIMEOUT 启动时扫描介质的超时秒数 10
- ZSTD_LEVEL zstd 压缩级别 19
GitHub Actions CI
通过 workflow_dispatch 手动触发构建:
构建 ISO
进入仓库 Actions 页面
选择 "构建 ImgFlash 安装器 ISO" 工作流
填入参数:
下载地址:磁盘镜像 URL
目标架构:amd64 / arm64
ISO 名称:可选,默认从 URL 推导
Secure Boot:是否启用
TUI:是否使用 TUI 安装器
释放空间:CI 磁盘空间不足时启用
不使用缓存:强制重新构建
构建完成后从 Artifacts 下载 ISO
发布 ISO
"发布 ISO" 工作流额外支持:
自动压缩(gz / xz / bz2 / zip / 7z)
创建 GitHub Release 并上传
安装器运行时
TUI 模式
XML/HTML代码
- 按键 功能
- ↑ / k 上移
- ↓ / j 下移
- Enter 选择磁盘
- ← / → / Tab 切换确认按钮
- r 刷新磁盘列表
- s 进入 Shell
- ? 帮助
- q 退出
- Esc 中止写入
Shell 模式
自动枚举可写磁盘(显示大小和型号)
用户选择目标磁盘
二次确认(需输入大写 YES)
dd 写入并显示实时进度
写入完成后自动重启
选择 0 可进入 Shell 进行手动操作。
总结
Landscape可以让linux轻松变成Linux路由器,landscape-mini是定制的最小化的debian系统,支持各种平台的精简系统镜像,imgflash是将上面精简的系统做成一键写入硬盘的ISO镜像的程序。

