边缘网关 + Agent 的端口中继:Agent 主动连出到网关,把内网目标挂到网关端口上; 通过邀请链接按设备授权,可选审批,首次连接起计时,到期、闲置自动收回。 - portrelay-server:边缘网关(端口池、白名单与授权租约、邀请与授权网页) - portrelay-agent:Agent(yamux 隧道、本地 API 与网页面板、流量统计) - mac-native:SwiftUI 菜单栏 App
50 lines
1.5 KiB
Bash
Executable File
50 lines
1.5 KiB
Bash
Executable File
#!/bin/sh
|
||
# 在 Linux 网关上安装 / 升级 PortRelay 服务端(systemd)。
|
||
#
|
||
# sudo ./install-server.sh ./portrelay-server
|
||
#
|
||
# 首次安装会生成随机 token 写入 /etc/portrelay-server.env;升级时保留已有配置。
|
||
set -eu
|
||
|
||
BIN="${1:-./portrelay-server}"
|
||
HERE="$(cd "$(dirname "$0")" && pwd)"
|
||
ENV_FILE=/etc/portrelay-server.env
|
||
UNIT=/etc/systemd/system/portrelay-server.service
|
||
|
||
if [ "$(id -u)" -ne 0 ]; then
|
||
echo "请用 root 运行:sudo $0 $*" >&2
|
||
exit 1
|
||
fi
|
||
if [ ! -x "$BIN" ]; then
|
||
echo "找不到可执行文件 $BIN" >&2
|
||
exit 1
|
||
fi
|
||
|
||
if [ -f /usr/local/bin/portrelay-server ]; then
|
||
cp /usr/local/bin/portrelay-server "/usr/local/bin/portrelay-server.bak-$(date +%Y%m%d-%H%M%S)"
|
||
fi
|
||
install -m 755 "$BIN" /usr/local/bin/portrelay-server
|
||
|
||
if [ ! -f "$ENV_FILE" ]; then
|
||
if command -v openssl >/dev/null 2>&1; then
|
||
TOKEN="$(openssl rand -hex 24)"
|
||
else
|
||
TOKEN="$(head -c 24 /dev/urandom | od -An -tx1 | tr -d ' \n')"
|
||
fi
|
||
umask 077
|
||
sed "s/^PORTRELAY_TOKEN=.*/PORTRELAY_TOKEN=$TOKEN/" "$HERE/portrelay-server.env.example" > "$ENV_FILE"
|
||
chmod 600 "$ENV_FILE"
|
||
echo "已生成 token 并写入 $ENV_FILE"
|
||
fi
|
||
|
||
install -m 644 "$HERE/portrelay-server.service" "$UNIT"
|
||
systemctl daemon-reload
|
||
systemctl enable portrelay-server >/dev/null
|
||
systemctl restart portrelay-server
|
||
sleep 1
|
||
systemctl --no-pager --lines=5 status portrelay-server || true
|
||
|
||
echo
|
||
echo "完成。查看 token:sudo grep PORTRELAY_TOKEN $ENV_FILE"
|
||
echo "防火墙需放通 TCP 33000-34000(控制端口 + 通道端口池)"
|