开始前全部确认
- 软路由是 Debian 13 amd64,并且有两个可用的有线网口。
- 已按前置视频允许 root 通过 SSH 登录,并记得 root 密码。
- 软路由旁边有显示器和键盘;第 3 步切换网络时必须在本机操作。
- Windows 电脑已安装 MobaXterm,并准备好网线。
- 已拿到 PRO 产品授权码,以及第 5 步列出的 7 个安装文件。
- 光猫或上级路由器可以通过 DHCP 自动给 Debian WAN 口分配 IPv4 地址。
任何一项不满足都先不要开始。本文会替换 Debian 现有的网络和防火墙配置,只适用于专用软路由。
1找到软路由 IP,再用 MobaXterm 连接
1.1 在软路由旁操作一次
- 给软路由接上显示器和键盘。
- 把光猫 LAN 口,或原路由器 LAN 口,接到软路由准备作为 WAN 口 的网口。
- 软路由另一个网口先不要接线。
- 开机,使用
root登录 Debian。 - 看到命令行开头为
root@后,执行下面的命令:
ip -4 -br address
命令会显示类似下面的内容:
lo UNKNOWN 127.0.0.1/8
enp1s0 UP 192.168.1.123/24
enp2s0 DOWN
- 本例软路由当前 IP 是
192.168.1.123。不要填写后面的/24。 - 本例 WAN 网口名称是
enp1s0。 - 本例没有接线的 LAN 网口名称是
enp2s0。
如果除了 127.0.0.1 以外没有其他 IP,先检查网线和光猫或上级路由器的 DHCP,出现 192.168.x.x 或 10.x.x.x 地址后再继续。
1.2 连接 Windows 电脑
如果 Debian WAN 口接在光猫上:
或 Wi-Fi
如果 Debian WAN 口接在原来的路由器上:
LAN 口接 Debian
或 Wi-Fi
不要把 Debian WAN 口接在光猫上,同时把 Windows 电脑接在路由器上。两边可能不是同一个网段,MobaXterm 将无法连接。
第一次连接时,Windows 电脑不要接 Debian 的 LAN 口。等第 3 步配置完成后,才使用 Debian LAN 口和固定地址 192.168.50.1。
1.3 在 Windows 电脑打开 MobaXterm
- 确认 Windows 电脑与 Debian WAN 口连接在同一台光猫或同一台路由器上。
- 打开 MobaXterm,点击左上角 Session。
- 点击 SSH。
- Remote host 填刚才看到的软路由 IP,例如
192.168.1.123。 - 勾选 Specify username,填写
root。 - Port 保持
22,点击 OK。 - 输入 Debian 安装时已经设置好的 root 密码。
看到命令行开头为 root@ 后,保持这个 MobaXterm 窗口打开,再继续下面的步骤。
enp1s0 当作 WAN 口,把 enp2s0 当作 LAN 口。你的名称不一样时,只修改第 3 步命令最上面的两行。2选择一种接线方式
接法 A:光猫直接接 Debian 软路由
LAN 口接下级路由器
接法 A 中,光猫必须已经负责拨号、路由和 DHCP。如果光猫是桥接模式,或宽带需要在路由器上填写 PPPoE 账号,请使用接法 B,不要把 Debian 直接到光猫。
接法 B:光猫和 Debian 之间保留原来的路由器
LAN 口开启 DHCP
LAN 口接下级路由器
使用接法 B 时,原来的上级路由器保持正常上网设置,并保持 DHCP 开启。它的 LAN 地址建议使用 192.168.1.1,Debian WAN 口会自动从它获取地址。
上级路由器的 LAN 网段不能是 192.168.50.x。下级路由器不要使用“路由模式”,不要开启自己的 DHCP。
3一次配置好 Debian 网络
先通过 MobaXterm 保存脚本,再到软路由显示器前执行。切换网络时 SSH 可能断开,本机执行不会因此中断。
- 在 MobaXterm 输入
nano /root/setup-network.sh,按回车。 - 把下面黑色框里的全部内容复制进去。
- 把
WAN_IF=enp1s0和LAN_IF=enp2s0改成自己的两个网口名称。 - 按
Ctrl+O、回车保存,再按Ctrl+X退出。此时不要在 MobaXterm 中运行脚本。 - 到软路由显示器前,以 root 登录,执行
bash /root/setup-network.sh。 - 等待完成。若出现报错,留在本机排查,不要直接进入下一步。
需要粘贴到 nano 中的完整脚本如下:
#!/bin/bash
set -euo pipefail
export LC_ALL=C
trap 'echo "配置未完成,请在本机查看上面的错误,不要继续下一步。"' ERR
WAN_IF=enp1s0
LAN_IF=enp2s0
if [[ $EUID -ne 0 || -n "${SSH_CONNECTION:-}" ]]; then
echo '请在软路由本机显示器前,以 root 登录后运行。'
exit 1
fi
[[ "$WAN_IF" != "$LAN_IF" ]]
ip link show dev "$WAN_IF"
ip link show dev "$LAN_IF"
# 检查可能优先匹配的旧配置;允许重新执行本脚本。
shopt -s nullglob
for config in /etc/systemd/network/*.network /run/systemd/network/*.network /usr/lib/systemd/network/*.network; do
name=${config##*/}
if [[ "$config" == /etc/systemd/network/10-wan.network || "$config" == /etc/systemd/network/20-lan.network ]]; then
if grep -Eq '^# Managed by (NICAER|PRO) soft-router guide$' "$config"; then
continue
fi
fi
if [[ "$name" < 20-lan.network || "$name" == 20-lan.network ]]; then
echo "请先核对可能抢先匹配网口的旧配置:$config"
exit 1
fi
done
BACKUP_DIR=$(mktemp -d /root/network-backup.XXXXXX)
for config in /etc/network /etc/systemd/network /etc/nftables.conf /etc/dnsmasq.conf /etc/dnsmasq.d /etc/resolv.conf /etc/sysctl.d/99-soft-router.conf; do
if [[ -e "$config" || -L "$config" ]]; then
cp -a --parents "$config" "$BACKUP_DIR/"
fi
done
nft list ruleset >"$BACKUP_DIR/ruleset.nft" 2>/dev/null || true
echo "原配置备份:$BACKUP_DIR"
apt-get update
apt-get install -y nftables dnsmasq systemd-resolved
mkdir -p /etc/systemd/network
cat >/etc/systemd/network/10-wan.network <<EOF
# Managed by PRO soft-router guide
[Match]
Name=$WAN_IF
[Network]
DHCP=ipv4
IPv6AcceptRA=no
LinkLocalAddressing=no
EOF
cat >/etc/systemd/network/20-lan.network <<EOF
# Managed by PRO soft-router guide
[Match]
Name=$LAN_IF
[Network]
Address=192.168.50.1/24
ConfigureWithoutCarrier=yes
IPv6AcceptRA=no
LinkLocalAddressing=no
EOF
cat >/etc/sysctl.d/99-soft-router.conf <<'EOF'
net.ipv4.ip_forward = 1
EOF
cat >/etc/nftables.conf <<EOF
#!/usr/sbin/nft -f
flush ruleset
table inet filter {
chain input {
type filter hook input priority filter; policy drop;
iifname "lo" accept
ct state established,related accept
iifname "$LAN_IF" accept
iifname "$WAN_IF" udp sport 67 udp dport 68 accept
ip protocol icmp accept
}
chain forward {
type filter hook forward priority filter; policy drop;
iifname "$LAN_IF" oifname "$WAN_IF" accept
iifname "$WAN_IF" oifname "$LAN_IF" ct state established,related accept
}
chain output {
type filter hook output priority filter; policy accept;
}
}
table ip nat {
chain postrouting {
type nat hook postrouting priority srcnat; policy accept;
oifname "$WAN_IF" ip saddr 192.168.50.0/24 masquerade
}
}
EOF
cat >/etc/dnsmasq.d/soft-router.conf <<EOF
interface=$LAN_IF
except-interface=lo
bind-dynamic
dhcp-range=192.168.50.150,192.168.50.240,255.255.255.0,12h
dhcp-option=3,192.168.50.1
dhcp-option=6,192.168.50.1
domain-needed
bogus-priv
no-resolv
server=223.5.5.5
EOF
nft -c -f /etc/nftables.conf
dnsmasq --test
systemctl disable --now NetworkManager.service 2>/dev/null || true
systemctl disable --now networking.service 2>/dev/null || true
systemctl disable --now dhcpcd.service 2>/dev/null || true
pkill dhcpcd 2>/dev/null || true
# 清除 LAN 口原有的 169.254.x.x、多余地址和错误默认路由
ip route del default dev "$LAN_IF" 2>/dev/null || true
ip -4 address flush dev "$LAN_IF"
systemctl enable systemd-networkd.service systemd-resolved.service
systemctl restart systemd-networkd.service systemd-resolved.service
ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
# 等待 LAN 地址生效;此时 LAN 网线可以尚未接入。
for attempt in {1..30}; do
if ip -4 address show dev "$LAN_IF" | grep -q 'inet 192.168.50.1/24'; then
break
fi
sleep 1
done
ip -4 address show dev "$LAN_IF" | grep -q 'inet 192.168.50.1/24'
sysctl --system
systemctl enable --now nftables.service
systemctl restart nftables.service
systemctl enable --now dnsmasq.service
systemctl restart dnsmasq.service
ip -br address
ip route
nft list ruleset
# WAN 获取地址可能需要一些时间。
for attempt in {1..30}; do
if ip -4 route show default dev "$WAN_IF" | grep -q '^default'; then
break
fi
sleep 1
done
ip -4 route show default dev "$WAN_IF" | grep -q '^default'
ping -c 4 223.5.5.5
getent ahostsv4 deb.debian.org
echo '网络配置完成;请把 Windows 电脑接到 LAN 口继续。'
最后应看到 WAN 口已经从光猫或上级路由器取得 IP,LAN 口为 192.168.50.1/24,并且 ping 有回复,然后继续下一步。
检查结果中,LAN 口只能有 192.168.50.1/24,不能再出现 169.254.x.x;ip route 中只能由 WAN 口提供 default via 默认路由。
ip -br link 重新确认网口,修改脚本最上面两行后,仍在本机重新执行 bash /root/setup-network.sh。其他错误不要自行删除配置,把错误照片和备份目录发给技术人员。本机脚本完成后,重新连接 MobaXterm
- 把 Windows 电脑的网线直接接到 Debian 的 LAN 口。
- 关闭电脑 Wi-Fi,把有线网卡 IPv4 和 DNS 都设为自动获取。
- 等待 20 秒。
- 在 MobaXterm 新建 SSH 连接。
- Remote host 固定填写
192.168.50.1,用户名填写root,端口填写22。 - 输入 root 密码登录。
本配置下,软路由的 LAN 管理 IP 固定为 192.168.50.1。WAN 地址仍然自动获取。
4设置下级路由器为桥接模式
4.1 先单独连接下级路由器
- 暂时拔掉下级路由器上的其他网线,只保留下级路由器的电源。
- 使用一根网线,把 Windows 电脑接到下级路由器任意一个 LAN 口。不要接 WAN 口。
- 如果使用笔记本电脑,先关闭笔记本 Wi-Fi,只保留这根网线。
- 把 Windows 网卡的 IPv4 设置为“自动获得 IP 地址”和“自动获得 DNS”。
- 等待 20 秒,然后按
Win+R,输入cmd,按回车。 - 在黑色命令窗口执行:
ipconfig
找到“以太网适配器”下面的“默认网关”,常见地址是 192.168.1.1、192.168.0.1 或 192.168.31.1。
- 打开浏览器,在地址栏输入默认网关,例如
http://192.168.1.1,按回车。 - 输入下级路由器的管理账号和密码。默认管理地址、账号和密码通常印在路由器底部标签上。
4.2 修改下级路由器设置
- 找到“工作模式”“上网模式”或“系统设置”。
- 如果有 AP 模式或有线中继模式,选择并保存;“桥接模式”只有明确支持网线上联时才选,不要选择无线桥接。若保存后重启或管理地址改变,按路由器提示重新进入管理页面,再继续。
- 找到“LAN 设置”“局域网设置”或“内网设置”。
- 按照下表填写:
| 设置项 | 填写内容 |
|---|---|
| 路由器 LAN IP/管理 IP | 192.168.50.2 |
| 子网掩码 | 255.255.255.0 |
| 默认网关 | 192.168.50.1 |
| DNS | 192.168.50.1 |
- 找到“DHCP 服务器”“地址自动分配”或“局域网 DHCP”,选择 关闭。
- 设置好需要使用的 Wi-Fi 名称和 Wi-Fi 密码。
- 点击“保存”“应用”或“重启”。管理页面断开属于正常情况。
4.3 按最终方式接线
- 关闭下级路由器电源。
- 从 Debian 的 LAN 口 接一根网线到下级路由器的 LAN 口。
- 下级路由器的普通 WAN 口保持空着。如果 AP 模式页面明确要求使用 WAN 口作为上联口,才按页面要求接 WAN 口。
- 打开下级路由器电源,等待 1 分钟。
- Windows 电脑连接下级路由器的 LAN 口或 Wi-Fi,并保持 IPv4 为自动获取。
- 在 Windows 命令提示符执行:
ipconfig
ping 192.168.50.1
ping 192.168.50.2
ping 223.5.5.5
Windows 的 IPv4 地址应为 192.168.50.150 到 192.168.50.240 之间的一个地址,默认网关应为 192.168.50.1,三个 ping 都应收到回复。
下级路由器的 WAN 路由、NAT、DHCP 都不要使用。所有电脑和软路由必须处于同一个 192.168.50.x 网段。
给三台需要抓包的电脑固定 IP
- 在 Windows 按
Win+R,输入ncpa.cpl,按回车。 - 右键当前正在使用的“以太网”,点击“属性”。如果电脑通过 Wi-Fi 玩游,则右键当前使用的 Wi-Fi 网卡。
- 双击“Internet 协议版本 4 (TCP/IPv4)”,选择“使用下面的 IP 地址”和“使用下面的 DNS 服务器地址”。
- 按下表填写,点击“确定”,再点击“关闭”。
| 设备 | IP 地址 | 子网掩码 | 网关 | DNS |
|---|---|---|---|---|
| 一号机 | 192.168.50.101 | 255.255.255.0 | 192.168.50.1 | 192.168.50.1 |
| 二号机 | 192.168.50.102 | 255.255.255.0 | 192.168.50.1 | 192.168.50.1 |
| 三号机 | 192.168.50.103 | 255.255.255.0 | 192.168.50.1 | 192.168.50.1 |
每台电脑设置后,都打开命令提示符执行:
ping 192.168.50.1
ping 223.5.5.5
nslookup deb.debian.org 192.168.50.1
两个地址都有回复、域名能解析出地址,再用浏览器打开网页确认上网正常。
5上传 7 个文件并安装
先在 MobaXterm 的 SSH 窗口执行:
mkdir -p /root/PRO
- 在 MobaXterm 左侧的 SFTP 文件面板中,打开
/root/PRO。 - 点击左侧工具栏的上传按钮,或把文件直接拖入该面板。
- 等待所有进度完成,不要在上传中途执行安装命令。
必须把下面 7 个文件全部上传到这个目录:
setup.sh
PRO-Web-linux-amd64.tar.zst
PRO-Web-linux-amd64.tar.zst.sha256
PRO-Models.tar.zst
PRO-Models.tar.zst.sha256
PRO-Sender-linux-amd64.tar.zst
PRO-Sender-linux-amd64.tar.zst.sha256
上传后执行:
cd /root/PRO
ls -lh
对照上面的列表,确认 7 个文件名完全相同,并且没有文件大小为 0。缺少文件时不要继续,请重新获取完整安装包。
上传完成后,使用 root 执行:
cd /root/PRO
bash setup.sh install
安装完成时,屏幕会显示 Web 管理后台密码。立即把这个密码保存下来。
systemctl status relink-radar.service --no-pager
看到 active (running) 后,在同一局域网电脑的浏览器打开:
http://192.168.50.1:9876/admin
- 使用刚才保存的管理后台密码登录。
- 点击“添加授权码”,为一号机、二号机、三号机各创建一个授权码。
- 需要使用 3D 地图时,把三个授权码的 3D 权限全部打开。
- 复制并保存这三个授权码,下一步要填写。
6填写三个抓包房间
执行下面命令打开 Sender 配置:
nano /opt/radar/.env
删除原内容,按下面格式填写。把三个 RELINK-授权码 换成管理后台创建的三个授权码,把 PRO-授权码 换成提供给当前客户的产品授权码:
RADAR_INTERFACE=enp2s0
RADAR_ROOM_1=一号机|192.168.50.101|ws://192.168.50.1:9876/ws/provider|一号机的RELINK-授权码|
RADAR_ROOM_2=二号机|192.168.50.102|ws://192.168.50.1:9876/ws/provider|二号机的RELINK-授权码|
RADAR_ROOM_3=三号机|192.168.50.103|ws://192.168.50.1:9876/ws/provider|三号机的RELINK-授权码|
PRO_LICENSE_KEY=PRO-授权码
RELINK_POSITION_TTL=0
RADAR_INTERFACE必须填写 Debian 的 LAN 网口名称,与第 3 步的LAN_IF完全相同。- 每个
RADAR_ROOM最后的竖线|必须保留。 - 只使用一台或两台电脑时,删除不用的
RADAR_ROOM_2或RADAR_ROOM_3行。 - 不需要安装 sing-box 或其他透明代理软件。新版 systemd 服务在 Sender 鉴权、监听就绪后才添加 Lobby 重定向,停止或异常退出后自动撤销。规则位于独立的
ip pro_lobby表,不写入永久防火墙配置。
从旧版升级时,先从 /etc/nftables.conf 移除手动添加的 65010/TCP REDIRECT 行,再用 nft -a list chain ip nat prerouting 找到该规则,通过 nft delete rule ip nat prerouting handle <handle> 删除运行中的旧规则。不要清空整个防火墙。如果运行期间重载防火墙清空了动态表,需要重启 Sender 恢复托管规则。已有代理 TCP 连接需要重连。
在 nano 中按 Ctrl+O,按回车保存,再按 Ctrl+X 退出。然后执行:
chmod 600 /opt/radar/.env
systemctl enable --now pro-3d-sender.service
systemctl restart pro-3d-sender.service
7最后检查
先执行 reboot 重启软路由。等待启动完成,再通过 LAN 地址 192.168.50.1 重新连接 MobaXterm,执行:
ip -4 -br address
ip route
systemctl is-active systemd-networkd systemd-resolved nftables dnsmasq relink-radar.service pro-3d-sender.service
systemctl is-enabled NetworkManager networking dhcpcd
getent ahostsv4 deb.debian.org
nft list table ip pro_lobby
journalctl -u pro-3d-sender.service -n 100 --no-pager
LAN 地址应仍为 192.168.50.1/24,默认路由走 WAN;六个服务均应为 active。三个旧网络服务应为 disabled、masked 或不存在,不能为 enabled。域名应能解析出 IPv4 地址。nftables 输出中应能看到 tcp dport 65010 redirect to :16510。Sender 日志中应能看到一号机、二号机、三号机对应的房间信息。
- 在三台电脑上确认都能上网。
- 在浏览器打开
http://192.168.50.1:9876/。 - 使用日志中显示的房间码进入对应房间。
- 让对应电脑启动游戏,确认各房间分别收到自己的数据并正常绘制。
以上四项全部正常,部署完成。
检查不通过时
任何一项不正常都不要反复重装。执行下面命令,把完整输出和报错截图发给技术人员:
systemctl --failed --no-pager
systemctl status relink-radar.service pro-3d-sender.service --no-pager -l
journalctl -u relink-radar.service -u pro-3d-sender.service -b -n 200 --no-pager
ss -lntp | grep -E ':(9876|16510)\b' || true
nft list ruleset
ip -4 -br address
ip route
9876没有监听:优先查看relink-radar.service日志。16510没有监听:优先查看pro-3d-sender.service日志和/opt/radar/.env。- 没有房间码:检查 Web 是否能打开、授权码是否填对,以及三行
RADAR_ROOM是否保留了最后的|。