Landscape Router: 基于openSUSE MicroOS 安装实践
1. First | 序
上半年B站看到过 Landscape Router 项目但只是一眼略过
这几天再次得到推送于是乎尝试部署一下
此篇记录实践过程
1.2. Preconditions | 前提条件
请仔细查看官网阐明的注意事项
1.2.1. 检查内核版本
使用 uname -a 命令检查内核版本
强制要求内核版本 > 6.9.x
Example | 示例
➜ ~ uname -a
Linux xzllll.com 6.17.3-1-default #1 SMP PREEMPT_DYNAMIC Thu Oct 16 04:49:08 UTC 2025 (5508f45) x86_64 x86_64 x86_64 GNU/Linux
➜ ~
1.2.2. 检查内核 BPF 功能
使用 grep BPF /boot/config-$(uname -r)命令检查 BPF 功能 是否开启
Example | 示例
➜ ~ grep BPF /boot/config-$(uname -r)
CONFIG_BPF=y
CONFIG_HAVE_EBPF_JIT=y
CONFIG_ARCH_WANT_DEFAULT_BPF_JIT=y
# BPF subsystem
CONFIG_BPF_SYSCALL=y
CONFIG_BPF_JIT=y
CONFIG_BPF_JIT_ALWAYS_ON=y
CONFIG_BPF_JIT_DEFAULT_ON=y
CONFIG_BPF_UNPRIV_DEFAULT_OFF=y
# CONFIG_BPF_PRELOAD is not set
CONFIG_BPF_LSM=y
# end of BPF subsystem
CONFIG_CGROUP_BPF=y
CONFIG_IPV6_SEG6_BPF=y
CONFIG_NETFILTER_BPF_LINK=y
CONFIG_NETFILTER_XT_MATCH_BPF=m
CONFIG_NET_SCH_BPF=y
CONFIG_NET_CLS_BPF=m
CONFIG_NET_ACT_BPF=m
CONFIG_BPF_STREAM_PARSER=y
CONFIG_LWTUNNEL_BPF=y
# HID-BPF support
CONFIG_HID_BPF=y
# end of HID-BPF support
CONFIG_BPF_EVENTS=y
# CONFIG_BPF_KPROBE_OVERRIDE is not set
# CONFIG_TEST_BPF is not set
➜ ~
1.2.3. 检查 BTF 相关功能
使用 grep CONFIG_DEBUG_INFO_BTF /boot/config-$(uname -r) 命令检查
Example | 示例
➜ ~ grep CONFIG_DEBUG_INFO_BTF /boot/config-$(uname -r)
CONFIG_DEBUG_INFO_BTF=y
CONFIG_DEBUG_INFO_BTF_MODULES=y
➜ ~
如果 /boot/config-$(uname -r) 路径无法找到
请检查 /proc/config.gz 或者 /lib/modules/$(uname -r)/config
例如
➜ ~ grep BPF /lib/modules/$(uname -r)/config
CONFIG_BPF=y
CONFIG_HAVE_EBPF_JIT=y
CONFIG_ARCH_WANT_DEFAULT_BPF_JIT=y
# BPF subsystem
CONFIG_BPF_SYSCALL=y
CONFIG_BPF_JIT=y
CONFIG_BPF_JIT_ALWAYS_ON=y
CONFIG_BPF_JIT_DEFAULT_ON=y
CONFIG_BPF_UNPRIV_DEFAULT_OFF=y
# CONFIG_BPF_PRELOAD is not set
CONFIG_BPF_LSM=y
# end of BPF subsystem
CONFIG_CGROUP_BPF=y
CONFIG_IPV6_SEG6_BPF=y
CONFIG_NETFILTER_BPF_LINK=y
CONFIG_NETFILTER_XT_MATCH_BPF=m
CONFIG_NET_SCH_BPF=y
CONFIG_NET_CLS_BPF=m
CONFIG_NET_ACT_BPF=m
CONFIG_BPF_STREAM_PARSER=y
CONFIG_LWTUNNEL_BPF=y
# HID-BPF support
CONFIG_HID_BPF=y
# end of HID-BPF support
CONFIG_BPF_EVENTS=y
# CONFIG_BPF_KPROBE_OVERRIDE is not set
# CONFIG_TEST_BPF is not set
➜ ~ grep CONFIG_DEBUG_INFO_BTF /lib/modules/$(uname -r)/config
CONFIG_DEBUG_INFO_BTF=y
CONFIG_DEBUG_INFO_BTF_MODULES=y
➜ ~ zgrep BPF /proc/config.gz
CONFIG_BPF=y
CONFIG_HAVE_EBPF_JIT=y
CONFIG_ARCH_WANT_DEFAULT_BPF_JIT=y
# BPF subsystem
CONFIG_BPF_SYSCALL=y
CONFIG_BPF_JIT=y
CONFIG_BPF_JIT_ALWAYS_ON=y
CONFIG_BPF_JIT_DEFAULT_ON=y
CONFIG_BPF_UNPRIV_DEFAULT_OFF=y
# CONFIG_BPF_PRELOAD is not set
CONFIG_BPF_LSM=y
# end of BPF subsystem
CONFIG_CGROUP_BPF=y
CONFIG_IPV6_SEG6_BPF=y
CONFIG_NETFILTER_BPF_LINK=y
CONFIG_NETFILTER_XT_MATCH_BPF=m
CONFIG_NET_SCH_BPF=y
CONFIG_NET_CLS_BPF=m
CONFIG_NET_ACT_BPF=m
CONFIG_BPF_STREAM_PARSER=y
CONFIG_LWTUNNEL_BPF=y
# HID-BPF support
CONFIG_HID_BPF=y
# end of HID-BPF support
CONFIG_BPF_EVENTS=y
# CONFIG_BPF_KPROBE_OVERRIDE is not set
# CONFIG_TEST_BPF is not set
➜ ~ zgrep CONFIG_DEBUG_INFO_BTF /proc/config.gz
CONFIG_DEBUG_INFO_BTF=y
CONFIG_DEBUG_INFO_BTF_MODULES=y
2. Deployment | 部署
2.1. 获取程序文件
Landscape Router 所需的文件很简单
分别为
- Landscape Router 二进制文件
- static 静态文件
Github链接如下所示
- 如果你需要pppoe功能则需要相应程序
- 如果你需要分流至Docker则需要安装相应程序
2.1.1. ppp
若需要添加 PPPD
则需安装对应软件包
Loading repository data...
Reading installed packages...
Information for package ppp:
----------------------------
Repository : openSUSE-Tumbleweed-Oss
Name : ppp
Version : 2.5.2-3.1
Arch : x86_64
Vendor : openSUSE
Installed Size : 963.2 KiB
Installed : Yes (automatically)
Status : up-to-date
Source package : ppp-2.5.2-3.1.src
Upstream URL : https://ppp.samba.org
Summary : The Point to Point Protocol for Linux
Description :
The ppp package contains the PPP (Point-to-Point Protocol) daemon,
pppd, additional PPP utilities, documentation, and sample files. PPP
provides a method for transmitting IP and IPX datagrams over serial
point-to-point links, for example over a modem. The PPP daemon handles
the details of setting up a PPP link including configuring the network
interface and performing the PPP negotiations.
同时 Landscape Router 会检测 /usr/lib64/pppd/2.5.2 目录下的 rp-pppoe.so 文件
若遇到了以下错误

可以使用ln -s命令创建软链接
修改后文件树如下所示
➜ pppd pwd
/usr/lib64/pppd
➜ pppd tree
.
└── 2.5.2
├── minconn.so
├── openl2tp.so
├── passwordfd.so
├── pppoatm.so
├── pppoe.so
├── pppol2tp.so
├── radattr.so
├── radius.so
├── radrealms.so
├── rp-pppoe.so -> pppoe.so
└── winbind.so
2 directories, 11 files
➜ pppd
2.1.2. Podman
若你使用的是 Podman 而不是 Docker
则需要做以下操作以便 Landscape Router 识别到 podman.socket
-
启用
podman.socketsystemctl enable --now podman.socket -
编辑
systemd单元文件开机自动完成创建podman.socket软链接步骤systemctl edit --force --full podman-docker-socket
写入以下内容:
[Unit] Description=Create Symlink from podman.sock to docker.sock After=podman.socket Requires=podman.socket [Service] Type=oneshot RemainAfterExit=yes ExecStartPre=-/bin/rm -f /var/run/docker.sock ExecStart=/bin/ln -s /run/podman/podman.sock /var/run/docker.sock [Install] WantedBy=multi-user.target
2.2. 本机网络管理器配置
后期 Landscape Router 接管并配置该网卡
本地的网络管理器会有干扰
所以需要修改本地网络管理器配置
ifupdown 官网已经写明
这里补充 NetworkManager & systemctl-networkd
若使用
systemctl-networkd不应同时启用systemd-resolved
2.2.1. NetworkManager
➜ ~ cat /etc/NetworkManager/system-connections/enp1s0f0.nmconnection
[connection]
id=enp1s0f0
permissions=
interface-name=enp1s0f0
type=ethernet
[ipv4]
method=manual
address1=0.0.0.0
2.2.2. systemctl-networkd
/etc/systemd/network/50-enp1s0f0.network
[Match]
Name=enp1s0f0
[Network]
DHCP=no
IPv6AcceptRA=no
LinkLocalAddressing=no
2.3. 编辑 landscape.toml 文件
详细规则请移步官网
2.4. 创建 systemd 服务单元文件
使用以下命令创建
systemctl edit --force --full landscape-router
写入如下文件
- 注意修改
ExecStart=放置程序本体和static.zip的路径
[Unit]
Description=Landscape Router
[Service]
ExecStart=/usr/local/bin/landscape-webserver -c /srv/landscape-router-static
Restart=always
User=root
LimitMEMLOCK=infinity
[Install]
WantedBy=multi-user.target
-
若你在
2.1.2.节中使用Podman,可以设置依赖podman-docker-socket服务# /etc/systemd/system/landscape-router.service.d/override.conf [Unit] After=podman-docker-socket.service Requires=podman-docker-socket.service
2.5. 启动 Landscape Router
-
启动 Landscape Router
systemctl start landscape-router -
开机自启
systemctl enable landscape-router -
停止
systemctl stop landscape-router
3. Usage | 使用
以下示例使用环境为
- WAN → pppoe
- LAN → dhcp server
3.1. 打开web界面
根据 landscape.toml 文件配置的地址打开浏览器访问web界面
输入设置好的账户&密码

3.2. 切换网卡区域
接下来需要点击页面显示中网卡按钮(四边形logo)切换网卡区域
- WAN
- LAN

3.3. 配置 WAN 接口
此时网卡分为WAN/LAN两部分
随后选择 WAN 口点击 🔗 图标配置 pppd 服务

如无特殊要求可按照默认配置直接启动以下服务
- TCP MSS 钳制
- 防火墙服务配置
- 网卡NAT配置
- IPV6-PD 客户端配置
- Wan 路由转发服务(做路由用途必须启用)
3.4. 配置 LAN 接口
LAN 端则需要配置 DHCP Server
目前 DHCP Server 仍然简陋
仅支持基本的 DHCP 服务和Mac IP 地址绑定

完成后按需配置如下选项:
- ICMPV6-RA 服务配置
- Lan 路由 转发 (做路由用途必须启用)
3.5. (可选) 修改 DNS 上游配置
默认情况下 Landscape Router 配置的上游DNS地址为 1.1.1.1
建议改为国内的DNS服务器地址比如
- 223.5.5.5
- 119.29.29.29
- ISP DNS
- ......
