Skip to content

ThisSeanZhang/landscape

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Landscape - Linux Router Configuration Tool

License: GPL v3 DeepWiki

Landscape is a web-based tool that helps you easily configure your favorite Linux distribution as a router.

Built with Rust / eBPF / AF_PACKET.

简体中文 | English

Screenshot


Features

✅ Implemented and tested ⚠ Functional but untested ❌ Not implemented

  • IP Configuration

    • Static IP Configuration

      • ✅ Assign IP address
      • ✅ Set default gateway route
    • DHCP Client

      • ✅ Set hostname
      • ❌ Custom options
    • PPPoE (PPPD version)

      • ✅ Set as default route
      • ⚠ Multi-NIC dialing
      • ✅ Specify network interface
    • PPPoE (eBPF version)

      • ✅ Protocol core implemented
      • ❌ GRO/GSO causes packet size to exceed MTU (unsolved)
    • DHCP Server

      • ✅ Basic IP lease and renewal
      • ✅ Custom IP range/gateway/access configuration
      • ✅ MAC-to-IP binding
      • ✅ IP allocation display
    • IPv6 Support

      • ✅ Request prefix via DHCPv6-PD
      • ✅ Advertise prefix using RA to downstream devices
  • Traffic Control Module

    • ✅ Identify flows using IP + QoS
    • ✅ Each flow can have its own DNS and cache
    • ✅ Forward marked traffic by policy (direct/drop/reuse port/redirect to Docker or NIC)
    • ❌ Mark flows for tracking
    • ✅ Control external IP behavior with GeoIP-based rules
    • ✅ Choose whether to override DNS behavior for external IP rules
    • ❌ Auto-update GeoIP file
  • DNS

    • ✅ DNS over HTTPS and TLS to upstream
    • ✅ Custom upstream DNS per domain
    • ✅ DNS hijacking (A record response)
    • ❌ DNS hijack returns multiple records (non-A)
    • ✅ Mark IPs from specific DNS responses for further processing
    • ✅ GeoSite file support
    • ❌ Auto-update GeoSite file
    • ❌ Add Docker image names to DNS cache
  • NAT (eBPF-based)

    • ✅ Basic NAT
    • ⚠ Static mapping / open ports (UI not finished)
    • ✅ NAT disables port reuse by default, can be dynamically enabled via flow marking
  • Metrics Module

    • ✅ Report connection stats (bytes/packets) every 5 seconds
    • ✅ Display current connections (not yet integrated with NAT info)
    • ❌ Export metrics via API
  • Docker

    • ✅ Manage and run basic Docker containers
    • ⚠ Image pulling
    • ✅ Redirect traffic to TProxy-enabled Docker container
  • WiFi

    • ✅ Switch wireless interface state via iw
    • ✅ Create WiFi hotspot via hostapd
    • ❌ Connect to WiFi hotspot
  • Storage

    • ❌ Use database to replace current config storage
    • ❌ Specify separate database for metrics
  • Miscellaneous

    • ✅ Login page
    • ❌ English version of front-end
    • ❌ Optimize NIC XPS/RSP to distribute load across CPU cores

How to Start & Limitations

System Requirements

  • Supported Linux Kernel: 6.1 or later
  • Install iptables (for MSS clamping in PPPD version), docker

General Startup Steps

  1. Create config directory:

    mkdir -p ~/.landscape-router
  2. Download static.zip from Releases, and extract it to ~/.landscape-router/static.

  3. If you're using a desktop environment with a browser, you can skip this. Otherwise, create an initial config file landscape_init.toml based on Quick Start Guide.

  4. Download the appropriate binary from Releases, then run with root:

    ./landscape-webserver

    Default port: 6300, username: root, password: root. Use ./landscape-webserver --help for more options.

Docker Compose

Refer to Quick Start

Armbian Integration

See Armbian Guide


Building from Source

Refer to the Build Guide or Cross Compilation

License


If you have any suggestions or issues, feel free to submit them via issues.