Manual Deployment
Before You Begin
Deployment assumptions
- Confirm that the host meets the system requirements.
- Landscape can start without a configuration, but it still changes
/etc/resolv.confto use127.0.0.1. If name resolution stops working after Landscape is stopped, restore a working resolver in this file. - Items marked as optional can be skipped when the corresponding feature is not required.
WARNING
Run ss -lutp and check whether another DNS service is already listening on port 53. Landscape cannot start its DNS service while that port is in use.
Landscape expects exclusive control of the interfaces it manages. This guide assumes a dedicated router and removes NetworkManager with apt remove network-manager. Do not run that command on a host where NetworkManager still manages unrelated interfaces.
When SELinux is enabled, configure the required permissions before starting Landscape. SELinux policy configuration is outside the scope of this guide.
Prepare the Files
- Download the Landscape Router executable from the release page.
- Download the static web files from the same release and extract them to
/root/.landscape-router/static. - Optional: install PPP if the router will use PPPoE.
- Optional: install Docker if traffic will be routed through containers.
- Optional: download GeoSite and GeoIP files.
Disable Automatic IP Configuration on the Host
On Debian, edit /etc/network/interfaces. Set LAN interfaces to manual mode and assign a recovery address to one interface so the host remains reachable if Landscape is not running.
auto <first_network_card_name> <- For example, set as WAN
iface <first_network_card_name> inet static
address 192.168.22.1
netmask 255.255.255.0
auto <second_network_card_name> <- All others are LAN
iface <second_network_card_name> inet manual
auto <third_network_card_name>
iface <third_network_card_name> inet manualExample:
auto ens3
iface ens3 inet static
address 192.168.22.1
netmask 255.255.255.0
auto ens4
iface ens4 inet manual
auto ens5
iface ens5 inet manualWith this configuration, connect another machine directly to that interface and assign it an address in 192.168.22.0/24, such as 192.168.22.2/24, to reach the router at 192.168.22.1.
Deployment instructions for other distributions are welcome as pull requests.
Disable the Host DNS Service
Skip this section when systemd-resolved is not installed.
systemctl stop systemd-resolved
systemctl disable systemd-resolved
systemctl mask systemd-resolvedManual Start Verification
Before creating the systemd service, run /root/landscape-webserver manually. A successful startup prints the active authentication, logging, web, and storage configuration:
██╗ █████╗ ███╗ ██╗██████╗ ███████╗ ██████╗ █████╗ ██████╗ ███████╗
██║ ██╔══██╗████╗ ██║██╔══██╗██╔════╝██╔════╝██╔══██╗██╔══██╗██╔════╝
██║ ███████║██╔██╗ ██║██║ ██║███████╗██║ ███████║██████╔╝█████╗
██║ ██╔══██║██║╚██╗██║██║ ██║╚════██║██║ ██╔══██║██╔═══╝ ██╔══╝
███████╗██║ ██║██║ ╚████║██████╔╝███████║╚██████╗██║ ██║██║ ███████╗
╚══════╝╚═╝ ╚═╝╚═╝ ╚═══╝╚═════╝ ╚══════╝ ╚═════╝╚═╝ ╚═╝╚═╝ ╚══════╝
██████╗ ██████╗ ██╗ ██╗████████╗███████╗██████╗
██╔══██╗██╔═══██╗██║ ██║╚══██╔══╝██╔════╝██╔══██╗
██████╔╝██║ ██║██║ ██║ ██║ █████╗ ██████╔╝
██╔══██╗██║ ██║██║ ██║ ██║ ██╔══╝ ██╔══██╗
██║ ██║╚██████╔╝╚██████╔╝ ██║ ███████╗██║ ██║
╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═╝ ╚══════╝╚═╝ ╚═╝
Landscape Home Path: /root/.landscape-router
[Auth]
Admin User: admin
Admin Pass: root
[Log]
Log Path: /root/.landscape-router/logs
Debug: true
Log Output In Terminal: true
Max Log Files: 7
[Web]
Web Root Path: /root/.landscape-router/static
Listen HTTP on: http://[::]:6300
Listen HTTPS on: https://[::]:6443
[Store]
Database Connect: sqlite://./db.sqlite?mode=rwcChange the default credentials
The example output shows the default administrator credentials. Change them before exposing the web interface to an untrusted network.
Create a systemd Service
Create /etc/systemd/system/landscape-router.service with the following content:
[Unit]
Description=Landscape Router
[Service]
ExecStart=/root/landscape-webserver
Restart=always
User=root
LimitMEMLOCK=infinity
[Install]
WantedBy=multi-user.target# Start service
systemctl start landscape-router.service
# Enable service on boot (execute after confirming everything is working)
systemctl enable landscape-router.service
# Stop service
systemctl stop landscape-router.serviceUpgrade Landscape Router
- Download and extract the new
landscape-webserverexecutable and static web files. - Stop
landscape-router.service. - Replace the existing executable and static files.
- Restart the service. If startup fails, inspect the service logs before rebooting the host.