Landscape is a web-based tool that helps you easily configure your favorite Linux distribution as a router.
Built with Rust / eBPF / AF_PACKET.
✅ Implemented and tested ⚠ Functional but untested ❌ Not implemented
-
IP Configuration
-
Static IP
- ✅ Set IP address
- ✅ Configure default route via gateway
-
DHCP Client
- ✅ Specify hostname
- ❌ Custom DHCP options
-
PPPoE (PPPD version)
- ✅ Set as default route
- ⚠ Multi-interface dialing
- ✅ Specify interface name
-
PPPoE (eBPF version)
- ✅ Protocol core implemented
- ❌ GRO/GSO causing oversized packets (unsolved)
-
DHCP Server
- ✅ Provide basic IP assignment and renewal
- ✅ Custom gateway/subnet/access rules
- ✅ IP-MAC binding
- ✅ IP lease display
-
IPv6 Support
- ✅ Use DHCPv6-PD to request prefix from upstream
- ✅ Use RA to advertise prefix to downstream
-
-
Traffic Control Module
- ✅ Tag flows using IP + QoS
- ✅ Each flow can have its own DNS settings and cache
- ✅ Route marked traffic based on rules (direct/drop/reuse port/redirect to Docker or NIC)
- ❌ Assign tracking marks to specified packets
- ✅ External IP behavior control via tagging and
geoip.datsupport - ✅ Optionally override DNS for external IP rules
-
Geo Management
- ✅ Manage multiple Geo sources
- ✅ Auto-update Geo IP/Site data
-
DNS
- ✅ Support DNS over HTTPS and DNS over TLS for upstream
- ✅ Assign specific upstream DNS by domain
- ✅ DNS Hijacking (return A records)
- ❌ Hijack to return multiple records (other than A)
- ✅ Tag resolved IPs and handle with traffic control
- ✅ Support GeoSite files
- ❌ Parse Docker container domain labels into DNS records
- ✅ Test domain resolution
-
NAT (eBPF)
- ✅ Basic NAT support
- ⚠ Static mapping / Port forwarding (UI incomplete)
- ✅ NAT disables port reuse by default; reuse allowed via tagging rules
-
Metrics
- ✅ Report connection stats (bytes/packets) every 5 seconds
- ✅ Display active connections (not yet combined with NAT)
- ❌ Open export API for metrics
-
Docker
- ✅ Basic Docker container management and runtime
- ⚠ Pull images
- ✅ Route traffic into TProxy-enabled containers
-
Wi-Fi
- ✅ Enable/disable Wi-Fi using
iw - ✅ Create AP with
hostapd - ❌ Connect to existing Wi-Fi hotspot
- ✅ Enable/disable Wi-Fi using
-
Storage
- ✅ Use database instead of file-based config
- ✅ Export all current configs as
landscape_init.toml - ❌ UI component to upload/restore config
- ❌ Config editor via UI
- ❌ Separate DB path for metrics
-
Miscellaneous
- ✅ Login screen
- ❌ English UI frontend
- ❌ NIC XPS/RPS optimization to distribute load across CPU cores
- Supported Linux Kernel:
6.1or later - (Optional)
docker
-
Create config directory:
mkdir -p ~/.landscape-router -
Download static.zip from release and extract to
~/.landscape-router/static -
If you have a desktop environment and browser, you can skip this step. Otherwise, refer to Quick Start Guide to create
landscape_init.toml -
Start the service by downloading a release binary from Releases Then run (as root):
./landscape-webserver
Default port: 6300 Default username: root Default password: root Use
./landscape-webserver --helpfor other options.
See Build Documentation or Cross-compilation Guide
landscape-ebpf: GNU GPL v2.0- Other parts: GNU GPL v3.0
If you have any suggestions or issues, feel free to submit them via issues.