PortRelay:把内网服务临时、可控地开放给同事

边缘网关 + Agent 的端口中继:Agent 主动连出到网关,把内网目标挂到网关端口上;
通过邀请链接按设备授权,可选审批,首次连接起计时,到期、闲置自动收回。

- portrelay-server:边缘网关(端口池、白名单与授权租约、邀请与授权网页)
- portrelay-agent:Agent(yamux 隧道、本地 API 与网页面板、流量统计)
- mac-native:SwiftUI 菜单栏 App
This commit is contained in:
DeepFal committed 2026-10-13 16:33:17 +08:00
commit 86e159b3f0
67 files changed
+13888

No files matched your search

+49
View File
@@ -0,0 +1,49 @@
#!/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(控制端口 + 通道端口池)"