跳到主要内容

快速脚本安装与 fwknopd 管理

安装 PortGuard Server 最快的方式是使用官方安装脚本。脚本安装的包由 GitHub Actions 从公开源码仓库自动构建,所以源码和构建流程都可以公开审计。

1. 安装​

curl -fsSL https://portguard.net/install.sh | sudo bash

生成的 SPA_SERVER 会优先使用服务器的公网 IPv4;如果无法探测公网地址, 则回退到服务器的内网 IPv4。hostname 只用于客户端配置的 section name。 仅当需要指定域名或其他 IP 时才使用 --server 覆盖自动探测结果。

安装时自定义客户端配置:

curl -fsSL https://portguard.net/install.sh | sudo bash -s -- \
--server vpn.example.com \
--access tcp/22,tcp/80 \
--knock-port 62201 \
--user portguard \
--timeout 60

安装脚本会生成:

  • /etc/fwknop/fwknopd.conf
  • /etc/fwknop/access.conf

2. 升级​

升级或重新安装最新匹配的 release 包,同时保留已有密钥:

curl -fsSL https://portguard.net/install.sh | sudo bash -s -- --upgrade

3. 验证服务​

sudo fwknopd --exit-parse-config \
-c /etc/fwknop/fwknopd.conf \
-a /etc/fwknop/access.conf

sudo systemctl status fwknopd

如果当前环境没有启用 systemd,可以手动启动:

sudo fwknopd -c /etc/fwknop/fwknopd.conf -a /etc/fwknop/access.conf

4. 导入到 PortGuard Client​

查看客户端导入 payload 和二维码:

sudo portguard-fwknopd -Q

在 PortGuard Client 中导入配置,或者扫描二维码文本即可。生成的配置包含 SPA_SERVER、SPA_SERVER_PORT、ACCESS、KEY_BASE64、HMAC_KEY_BASE64、SPOOF_USER 和超时时间。

5. 修改开放端口、用户名或密钥​

修改受保护端口:

sudo vim /etc/fwknop/access.conf

示例:

SOURCE                      ANY
OPEN_PORTS tcp/22,tcp/443
KEY_BASE64 <your-key>
HMAC_KEY_BASE64 <your-hmac-key>
REQUIRE_SOURCE_ADDRESS Y
REQUIRE_USERNAME portguard
FW_ACCESS_TIMEOUT 60
MAX_FW_TIMEOUT 60

生成新密钥:

sudo fwknopd --key-gen

修改后验证并重启:

sudo fwknopd --exit-parse-config \
-c /etc/fwknop/fwknopd.conf \
-a /etc/fwknop/access.conf

sudo systemctl restart fwknopd

如果修改了密钥,可以重新运行安装脚本生成新的 PortGuard Client 配置:

curl -fsSL https://portguard.net/install.sh | sudo bash -s -- \
--server vpn.example.com \
--access tcp/22,tcp/443 \
--user portguard

6. Telegram 访问通知​

可以配置 Telegram Bot,在 SPA 敲门成功后接收来源 IP、申请开放的端口、 开放时间和过期时间:

sudo portguard-fwknopd --fw-console

选择选项 5,或者查看完整的 Telegram 通知配置文档。

7. 防火墙提醒​

调整防火墙前请保留一个备用 SSH 会话。安装脚本会生成 fwknopd 配置和客户端导入数据,但默认不会强制重置防火墙。确认 UDP 62201 可以访问后,fwknopd 会在收到有效 SPA 包时为受保护的 TCP 端口添加临时规则。