# landscape **Repository Path**: sean1179/landscape ## Basic Information - **Project Name**: landscape - **Description**: Landscape 是一个基于 Web UI 的工具,目标是轻松将您喜爱的 Linux 发行版配置为路由器。 - **Primary Language**: Rust - **License**: GPL-3.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 1 - **Created**: 2025-05-09 - **Last Updated**: 2026-01-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Landscape - Linux 路由器配置工具 [![License: GPL v3](https://img.shields.io/badge/License-GPLv3-green.svg)](https://www.gnu.org/licenses/gpl-3.0) [![DeepWiki](https://img.shields.io/badge/DeepWiki-ThisSeanZhang%2Flandscape-blue.svg?logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAyCAYAAAAnWDnqAAAAAXNSR0IArs4c6QAAA05JREFUaEPtmUtyEzEQhtWTQyQLHNak2AB7ZnyXZMEjXMGeK/AIi+QuHrMnbChYY7MIh8g01fJoopFb0uhhEqqcbWTp06/uv1saEDv4O3n3dV60RfP947Mm9/SQc0ICFQgzfc4CYZoTPAswgSJCCUJUnAAoRHOAUOcATwbmVLWdGoH//PB8mnKqScAhsD0kYP3j/Yt5LPQe2KvcXmGvRHcDnpxfL2zOYJ1mFwrryWTz0advv1Ut4CJgf5uhDuDj5eUcAUoahrdY/56ebRWeraTjMt/00Sh3UDtjgHtQNHwcRGOC98BJEAEymycmYcWwOprTgcB6VZ5JK5TAJ+fXGLBm3FDAmn6oPPjR4rKCAoJCal2eAiQp2x0vxTPB3ALO2CRkwmDy5WohzBDwSEFKRwPbknEggCPB/imwrycgxX2NzoMCHhPkDwqYMr9tRcP5qNrMZHkVnOjRMWwLCcr8ohBVb1OMjxLwGCvjTikrsBOiA6fNyCrm8V1rP93iVPpwaE+gO0SsWmPiXB+jikdf6SizrT5qKasx5j8ABbHpFTx+vFXp9EnYQmLx02h1QTTrl6eDqxLnGjporxl3NL3agEvXdT0WmEost648sQOYAeJS9Q7bfUVoMGnjo4AZdUMQku50McDcMWcBPvr0SzbTAFDfvJqwLzgxwATnCgnp4wDl6Aa+Ax283gghmj+vj7feE2KBBRMW3FzOpLOADl0Isb5587h/U4gGvkt5v60Z1VLG8BhYjbzRwyQZemwAd6cCR5/XFWLYZRIMpX39AR0tjaGGiGzLVyhse5C9RKC6ai42ppWPKiBagOvaYk8lO7DajerabOZP46Lby5wKjw1HCRx7p9sVMOWGzb/vA1hwiWc6jm3MvQDTogQkiqIhJV0nBQBTU+3okKCFDy9WwferkHjtxib7t3xIUQtHxnIwtx4mpg26/HfwVNVDb4oI9RHmx5WGelRVlrtiw43zboCLaxv46AZeB3IlTkwouebTr1y2NjSpHz68WNFjHvupy3q8TFn3Hos2IAk4Ju5dCo8B3wP7VPr/FGaKiG+T+v+TQqIrOqMTL1VdWV1DdmcbO8KXBz6esmYWYKPwDL5b5FA1a0hwapHiom0r/cKaoqr+27/XcrS5UwSMbQAAAABJRU5ErkJggg==)](https://deepwiki.com/ThisSeanZhang/landscape) Landscape 是一个基于 Web UI 的工具,可以轻松将您喜爱的 Linux 发行版配置为路由器。 > 基于 Rust / eBPF / AF_PACKET 开发。 [简体中文](./README.zh.md) | [English](./README.md) > 更多信息请阅读 [文档](https://landscape.whileaway.dev/introduction.html) ## 截图 ![](main.png) --- ## 核心特性 * 分流控制: 入口: (SIP-CIDR、MAC), 分流对象: (DIP、域名、Geo 匹配规则) * eBPF 路由 * 每个流 Flow 独立 dns 配置以及缓存(避免 dns 污染、泄露) * 流量导入 Docker 容器 * 地理关系库管理 --- ## 主要功能 > ✅ 已经实现并且已经测试 > ⚠ 可行但是未测试 > ❌ 未实现 - IP 配置 - *静态 IP 配置* - ✅ 指定 IP - ✅ 配置网关指定默认路由 - *DHCP Client* - ✅ 指定主机名称 - ❌ 自定义 Option - *PPPoE ( PPPD 版 )* - ✅ 默认路由指定 - ⚠ 多网卡拨号 - ✅ 网卡名称指定 - *PPPoE ( eBPF 版 )* - ✅ 协议主体实现 - ❌ 网卡 GRO/GSO 导致的数据包大小超 MTU (未解决) - *DHCP Server* - ✅ 提供简单 IP 地址分配和续期服务 - ✅ 自定义分配 IP 的 网关 网段 访问 配置 - ✅ MAC 地址与 IP 绑定 - ✅ IP 分配展示 - *IPv6支持* - ✅ 使用 DHCPv6-PD 向上级路由请求前缀 - ✅ 使用 RA 对下级设备通告多个前缀 - 分流模块 - ✅ 允许使用 IP / MAC 值进行区分流. - ✅ 每个流配置中含有自己独立的 DNS 配置, 以及 DNS 缓存. - ✅ 将被标记流量按照标记配置( 直连/丢弃/允许复用端口/重定向到 Docker 容器或者网卡 )进行转发 - ❌ 对指定数据设置跟踪标记 - ✅ 外网 IP 行为控制, 按照标记的规则控制外网 IP, 并支持使用 `geoip.dat` 协助配置 - ✅ IP 规则和 DNS 规则冲突时, 依据规则的优先级进行判定 (值越小越高) - 地理关系库管理 - ✅ 多 地理关系库 来源管理 - ✅ 关系库依据配置自动更新 - DNS - ✅ 支持使用 DNS over HTTPS、DNS over TLS 和 DNS over Quic 向上游请求 DNS - ✅ 支持指定网址使用特定上游 DNS - ✅ DNS 劫持 ( 返回 A / AAAA 解析 ) - ❌ DNS 劫持返回多条记录 ( 例如 TXT / CNAME 或者其他的) - ✅ 对指定 DNS 解析结果进行 IP 标记, 配置标记模块进行处理 - ✅ GeoSite 文件支持 - ❌ 支持将 Docker 容器设置的域名 label 加入 DNS 解析中 - ✅ 支持进行测试域名查询 - NAT (eBPF) 实现 - ✅ 基础 NAT - ✅ 静态映射 / 开放指定端口 - ✅ NAT 默认阻止端口复用, 依据标记模块配置可动态允许 IP 开启的端口能够复用 - 指标模块 - ✅ 每 5s 定时上报连接信息(字节数 / 数据包个数) - ✅ 展示当前连接 (还未结合 NAT 连接信息) - ❌ 开放指标导出 API - Docker - ✅ 支持简单运行和管理 Docker 容器 - ⚠ 镜像拉取 - ✅ 将流量导入运行 TProxy 的 Docker 容器 - WIFI - ✅ 使用 iw 命令切换无线网卡状态 - ✅ 使用 hostapd 配置创建 WIFI 热点 - ❌ 接入 WIFI 热点 - 存储 - ✅ 使用数据库替代当前配置存储 - ✅ 导出当前所有配置为 `landscape_init.toml` 文件 - ❌ UI 提供配置上传还原组件 - ❌ 增加 配置修改 组件 - ❌ 指标库单独指定数据库地址 - 杂项 - ✅ 登录界面 - ❌ 添加英文版前端页面 - ✅ 网卡 XPS/RSP 优化, 将网卡压力负载到不同的核心, 提升整体吞吐, 但是网卡中断绑定不是很熟悉, 如有建议欢迎 issue --- ## 启动方式和限制 ### 系统要求 - 支持的 Linux 内核版本:`6.9` 及以上。 - Linux 内核启用 BTF/BPF 功能. 详见 [文档](https://landscape.whileaway.dev/attention.html). - (可选) `docker` ### 手工部署步骤 1. 创建配置文件夹: ```shell mkdir -p /root/.landscape-router ``` 2. 从 [release](https://github.com/ThisSeanZhang/landscape/releases) 中复制静态页面文件 **static.zip** 并解压到 `/root/.landscape-router/static`. 3. 可以无需配置任何文件启动, 但如果想要通过配置文件自动初始化. 可创建初始文件 `landscape_init.toml` 参考 [配置文件介绍](https://landscape.whileaway.dev/config/) 4. 启动服务:从 [Release](https://github.com/ThisSeanZhang/landscape/releases) 中下载需要的版本. 运行以下命令启动服务 (需要使用 root 权限进行启动): ```shell ./landscape-webserver ``` 默认 HTTP 端口为 `6300`
默认 HTTPS 端口为 `6443`
默认用户名: `root`
密码: `root`.
其他参数可使用 `./landscape-webserver --help` 查看. 5. 确认无误之后可以设置为 systemd 服务 创建 `/etc/systemd/system/landscape-router.service` 文件内容: ```text [Unit] Description=Landscape Router [Service] ExecStart=/root/landscape-webserver <- 记得修改此处 Restart=always User=root LimitMEMLOCK=infinity [Install] WantedBy=multi-user.target ``` ### Armbian 集成 见文档 [Armbian 集成](https://landscape.whileaway.dev/compilation/armbian.html) --- ## 编译 见文档 [编译](https://landscape.whileaway.dev/compilation/), 或 [交叉编译](https://landscape.whileaway.dev/compilation/cross.html) ## LICENSE - `landscape-ebpf`: [GNU General Public License v2.0](https://www.gnu.org/licenses/old-licenses/gpl-2.0.html) - 其他部分: [GNU General Public License v3.0](https://www.gnu.org/licenses/gpl-3.0.html) --- 如果您有任何建议或问题,可以在 [issues](./issues/new) 页面提交您的反馈。 ## Star History Star History Chart