# 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 路由器配置工具
[](https://www.gnu.org/licenses/gpl-3.0)
[](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)
## 截图

---
## 核心特性
* 分流控制: 入口: (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