使用NSSM把 FRP 安装为系统服务


简介

frp 是一个可用于内网穿透的高性能的反向代理开源应用,支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力,且尝试性支持了点对点穿透。

frp 使用Go 语言开发,得益于此,我们使用非常简单,只需要添加执行权限就可以运行了。如果需要将它运行在后台,作为服务的运行的话,就需要我们对系统有一定的了解了,下面我简单介绍一下,如何将 frp安装为系统服务

注意:在安装服务之前,请确保你的 frp 已经参照官方文档进行了正确的配置。

windows

若要将 frp 安装为 windows 的服务,我们需要借助第三方的开源工具 nssm 来实现,以下是操作步骤:

  1. nssm 官网下载对应的工具,并解压到 D盘根目录
  2. 以管理员方式运行 cmd, 直接输入 d 按回车 切换到d盘
  3. 在cmd中运行 命令.\nssm install ,此时会弹出 Gui
  4. GUI 中选择你的frp路径,以及在 Arguments 中 正确的填入 -c 完整配置文件路径,如图:
  5. 点击 install service 后,cmd会提示:Service "frpc" installed successfully! 表示安装完成

以上就是将frpc 安装为windows服务的操作步骤了,如果是 frps 也是同样的操作,就不再赘述了。

Linux

相比 Windows,Linux 其实更简单,只需要将启动脚本放到相应的目录并加上执行权限就可以了

以下以 frpc 为例

init.d

建议使用 后面的 systemd 来管理

操作步骤:

  1. frpc 文件写入在到 /etc/init.d/frpc, 并添加执行权限: chmod +x /etc/init.d/frpc
  2. 添加开机启动:

    Centos: chkconfig frpc on
    Debian: update-rc.d frpc defaults

  3. 启动:service frpc start
  4. 停止:service frpc stop
  5. 重启:service frpc restart
  6. 查看状态:service frpc status
## File: /etc/init.d/frpc  
#!/bin/sh  
#  
# frps:    FRP-Client Daemon  
#  
# description:  FRP-Client Daemon  
# 请按实际情况修改  
PID_FILE=/run/frpc.pid  
CONFIG_FILE=/etc/frpc.ini  
FRPC_File=/usr/local/frp/frpc  
  
start()  
{  
    if [ ! -f $PID_FILE ]; then  
        echo -n $"Starting FRP client..."  
        nohup $FRPC_File -c $CONFIG_FILE < /dev/null > /dev/null 2> /dev/null &  
        echo $! > $PID_FILE  
        echo ""  
    else  
        PID=$(cat $PID_FILE)  
        if [ ! -f /proc/$PID/cmdline ]; then  
  
            echo -n $"Starting FRP client..."  
            nohup $FRPC_File -c $CONFIG_FILE < /dev/null > /dev/null 2> /dev/null &  
            echo $! > $PID_FILE  
            echo ""  
        else  
            echo "FRP client is already running..."  
        fi  
    fi;  
}  
stop()  
{  
    if [[ -f $PID_FILE ]]; then  
        echo -n $"Shutting down FRP client..."  
        kill -9 $(cat $PID_FILE)  
        rm -f $PID_FILE  
        echo ""  
    else  
        echo "FRP client is not running..."  
    fi;  
}  
status()  
{  
    if [ -f $PID_FILE ]; then  
        PID=$(cat $PID_FILE)  
        if [ -f /proc/$PID/cmdline ]; then  
            echo "FRP client is running..."  
        else  
            echo "FRP client is not running..."  
            rm -f $PID_FILE  
        fi  
    else  
        echo "FRP client is not running..."  
    fi;  
}  
[ -f $FRPC_File ] || exit 1  
# See how we were called.  
case "$1" in  
    start)  
        start  
        ;;  
    stop)  
        stop  
        ;;  
    status)  
        status  
        ;;  
    restart)  
        stop  
        sleep 3  
        start  
        ;;  
    *)  
    echo $"Usage: $0 {start|stop|status|restart}"  
    exit 1  
esac  
exit 0  

systemd

将frpc.service 放到 /lib/systemd/system 后,执行以下命令就可以了:

  1. 重载命令:systemctl daemon-reload
  2. 添加开机启动:systemctl enable frpc
  3. 启动 frpc: systemctl start frpc
  4. 查看 frpc 状态: systemctl status frpc
  5. 重启 frpc : systemctl restart frpc
# 说明:如果是 frps 只需要修改相应的名字和路径就可以了  
# frpc.service  
[Unit]  
Description=FRP Client Daemon  
After=network.target  
Wants=network.target  
  
[Service]  
Type=simple  
# 注意修改 frpc 和 frpc.ini的路径  
ExecStart=/usr/local/frpc/frpc -c /usr/local/frpc/frpc.ini  
Restart=always  
RestartSec=20s  
User=nobody  
  
[Install]  
WantedBy=multi-user.target  

指导
一、定义
NSSM是一个服务封装程序,它可以将普通exe程序封装成服务,使之像windows服务一样运行。

二、下载地址
https://nssm.cc/download

三、使用说明
解压即可,进去目录 nssm-2.24/win64

目录输入cmd进入Powershell窗口

四、输入命令

.\nssm install

常用命令

    安装服务:nssm install 服务名
    删除服务:nssm remove 服务名
    删除服务确定:nssm remove 服务名 confirm 
    修改服务(显示界面修改):nssm edit 服务名
    启动服务:nssm start 服务名
    停止服务:nssm stop 服务名
    重启服务:nssm restart 服务名

注意

对于暴露到外网的端口,请务必使用强密码,最好生成20位的随机密码,在线生成随机密码

因 frp 使用弱密码被XX的例子,希望大家引以为戒!

实在要使用弱密码,请配合 frp 的 stcp 使用

参考:
https://gist.github.com/fenying/7684afbe24f20e07201fa790aec1511c

声明:Hello Communication World|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - 使用NSSM把 FRP 安装为系统服务


道虽迩,不行不至;事虽小,不为不成