SkillAgentSearch skills...

Landscape

The goal is to make it easier to configure your favorite Linux distribution as a router. Built with Rust and eBPF.

Install / Use

/learn @ThisSeanZhang/Landscape

README

Landscape - eBPF-based Linux Router Platform

License: GPL v3 DeepWiki

<!-- DeepWiki badge generated by https://deepwiki.ryoppippi.com/ -->

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.

简体中文 | English

Documentation: https://landscape.whileaway.dev/en/

Screenshot


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
  • 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

mkdir -p /root/.landscape-router

2. Download the release assets

  • From 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:

./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:

[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

If you have suggestions or run into a problem, please open an issue here: https://github.com/ThisSeanZhang/landscape/issues

Star History

<a href="https://www.star-history.com/#ThisSeanZhang/landscape&Date"> <picture> <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=ThisSeanZhang/landscape&type=Date&theme=dark" /> <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=ThisSeanZhang/landscape&type=Date" /> <img alt="Star History Chart" src="https://api.star-history.com/svg?repos=ThisSeanZhang/landscape&type=Date" /> </picture> </a>
View on GitHub
GitHub Stars1.2k
CategoryDevelopment
Updated2h ago
Forks78

Languages

Rust

Security Score

100/100

Audited on Mar 29, 2026

No findings