# 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**: 4 - **Forks**: 1 - **Created**: 2025-05-09 - **Last Updated**: 2026-05-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Landscape - eBPF-based Linux Router Platform [![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 makes it easier to turn your preferred Linux distribution into a router. Landscape is an eBPF-based Linux router platform that provides network service management, policy control, and APIs. > Built with Rust / eBPF / AF_PACKET. [简体中文](./README.zh.md) | [English](./README.md) > Documentation: ## Screenshot ![](main.png) --- ## Core Features * eBPF-based traffic steering with no impact on direct-path performance, using source matches `(SIP-CIDR, MAC)` and destination matches `(DIP, domain, Geo rules)` * Per-flow DNS configuration and caching to avoid DNS pollution and leakage * Traffic can be redirected into Docker containers, where TProxy-capable programs can be used to extend functionality * Geo database management with support for DAT and TXT formats * Stricter NAT4 by default, while allowing specific IPs or domains to use NAT1 for scenarios such as overlay networking, more: [NAT4? No, stricter than NAT4](https://landscape.whileaway.dev/en/feature/nat/nat.html) * APIs for everything that can be managed from the UI --- ## Why Landscape The most direct reason is that I want to keep using the Linux distributions I already know well for routing, rather than being locked into a single system. In addition to Debian, Landscape has already seen real-world usage reports on Arch, openSUSE, and other distributions. Of course, you can build a stable routing solution by combining existing Linux tools. The problem is that those setups usually scatter configuration across multiple places, raise maintenance costs, and make storage and migration harder to manage. Landscape keeps everything in a single directory. You can drop in a new version and run it directly, existing configuration is migrated automatically on startup, and downgrades are supported when needed. There are also practical network requirements behind it. A LAN may have BT/PT workloads that need NAT1, but I do not want other applications sharing the same upstream bandwidth. Landscape therefore provides finer-grained NAT control, so you can decide NAT behavior for different traffic based on domain names or IPs. Different devices on the same LAN often need different traffic-steering policies. I also want direct traffic to keep working even if a container or proxy component fails, rather than having a failure take everything down with it. ## Quick Start ### Notes - Linux kernel `6.9` or later; this project depends heavily on Linux kernel capabilities, so systems with non-Linux kernels such as FreeBSD or macOS are not supported - BTF/BPF support must be enabled in the kernel - `root` privileges are required to start the service - Docker must be installed separately if you want container-based traffic redirection or container management features - The backend binary and frontend static assets are released separately - By default, if you do not configure additional static NAT or an exposure path, the management interface cannot be accessed directly from the WAN side ### 1. Create the config directory ```bash mkdir -p /root/.landscape-router ``` ### 2. Download the release assets - From [Releases](https://github.com/ThisSeanZhang/landscape/releases) - Download `static.zip` - Download the `landscape-webserver` binary for your architecture - Extract it to `/root/.landscape-router/static` (this is the default path, but it can be customized) ### 3. Start Landscape Run as `root`: ```bash ./landscape-webserver ``` Default runtime values: - Config directory: `/root/.landscape-router` - HTTP redirect port: `6300` - HTTPS port: `6443` - Default username: `root` - Default password: `root` Landscape can start directly without any pre-created configuration file. If you want to initialize it through `landscape_init.toml`, see the configuration guide on the documentation site. You can check more options with `./landscape-webserver --help`. ### 4. Open the management interface - `http://landscape.local:6300` automatically redirects to HTTPS - `https://landscape.local:6443` opens the Web UI - `https://landscape.local:6443/api/docs` opens the REST API docs ## Start at Boot After confirming that the service is running correctly, you can configure it as a `systemd` service: ```ini [Unit] Description=Landscape Router [Service] ExecStart=/root/landscape-webserver Restart=always User=root LimitMEMLOCK=infinity [Install] WantedBy=multi-user.target ``` Replace `ExecStart` with the actual path to your binary. ## License - `landscape-ebpf`: [GNU General Public License v2.0](https://www.gnu.org/licenses/old-licenses/gpl-2.0.html) - Other parts: [GNU General Public License v3.0](https://www.gnu.org/licenses/gpl-3.0.html) If you have suggestions or run into a problem, please open an issue here: ## Star History Star History Chart