Frp 实现内网穿透

作者: EricKwoc | 来源:发表于2017-07-02 13:23 被阅读1246次

    首先你要有一台公网服务器
    如果没有公网服务器,可以用NATAPP,请参见这篇教程
    之前一直想用ngrok来实现,奈何交叉编译出来的包有问题,一直没法运行,无解。
    编译了windows版本的,大概是没有签名的缘故,也无法运行,最后迫不得已使用windows subsystem - ubuntu来运行Linux amd64版本。但是cubieboard始终没办法。
    直到被朋友推荐了frp。
    感觉自己得到了解脱。
    项目主页请见GitHub

    GitHub 的教程
    参考链接

    由于GitHub上的教程已经很详细了,而且是中文的,这里就略过安装部分,直接讲怎么设置开机自启。
    用服务端来演示,如果要配置客户端的话将frps换成frpc即可。

    2017-12-17更新
    frps.service文件内容可以这样写:

    [Unit]
    Description=fraps daemon
    After=network.target syslog.target
    Wants=network.target
    
    [Service]
    Type=simple
    ExecStart=/Path/to/frps -c /Path/to/frps.ini
    Restart=always
    RestartSec=1min
    
    [Install]
    WantedBy=multi-user.target
    

    以便在启动失败的时候自动重启服务。
    然后frps.ini中可在[common]中加入这样一行(支持frp_v0.11.0以上版本)

    [common]
    login_fail_exit = false
    

    这样连接服务器失败的时候就不会退出,而是每隔30s尝试连接一次,以增加服务的稳定性


    用systemd控制开机自启

    cd /lib/systemd/system/ && sudo touch frps.service
    sudo nano frps.service
    在其中添加如下内容

    [Unit]
    Description=fraps daemon
    After=network.target syslog.target
    Wants=network.target
    
    [Service]
    Type=simple
    #启动服务的命令(此处xxx换做你的实际安装目录)
    ExecStart=xxx/frps -c xxx/frps.ini
    
    [Install]
    WantedBy=multi-user.target
    

    然后启动frps
    sudo systemctl start frps
    应用自启
    sudo systemctl enable frps
    有关于systemd的知识请自行谷歌

    使用 init.d 服务控制守护进程和开机自启

    sudo nano /etc/init.d/frps
    里面粘贴如下内容:

    #!/bin/sh
    
    ### BEGIN INIT INFO
    # Provides:          frpc
    # Required-Start:    $local_fs $network
    # Required-Stop:     $local_fs
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: frpc service deamon
    # Description:       frpc service daemon
    ### END INIT INFO
    
    PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
    DAEMON=/usr/bin/frpc
    DAEMON_OPTS=-c\ /etc/frp/frpc.ini
    NAME=frpc
    USER=eric
    
    set -e
    . /lib/lsb/init-functions
    
    start() {
            echo -n "Starting $NAME: "
            start-stop-daemon --start \
                    --user $USER \
                    -m --pidfile /var/run/$NAME.pid \
                    -b --exec $DAEMON -- $DAEMON_OPTS || true
            echo "$NAME."
    }
    
    stop() {
            echo -n "Stopping $NAME: "
            start-stop-daemon --stop \
                    --pidfile /var/run/$NAME.pid || true
            echo "$NAME."
    }
    
    status() {
            status_of_proc -p /var/run/$NAME.pid "$DAEMON" $NAME && exit 0 || exit $?
    }
    
    case "$1" in
    start)
      start
            ;;
    stop)
      stop
            ;;
    status)
      status
            ;;
    restart)
      stop
      sleep 2
      start
            ;;
    *)
            echo "Usage: $NAME {start|stop|restart|status}"
            exit 1
            ;;
    esac
    exit 0
    

    Ctrl+X保存退出,然后chmod +x /etc/init.d/frps
    再用chkconfig frps on将服务添加到开机启动列表中

    使用rc.local控制开机自启(不推荐)

    sudo nano /etc/rc.local
    在最后一行添加

    /opt/frp_0.12.0_linux_amd64/frps -c /opt/frp_0.12.0_linux_amd64/frps.ini
    

    总结

    说说systemd的优点吧,今天我调试frpc的时候改了frpc的配置文件,然后把进程kill了……再然后我就连不上我宿舍里的板子了,233333
    如果用了systemd的话就可以优雅地输入
    sudo systemctl restart frpc
    然后稍等片刻再重新尝试连接,就不会断开的这么彻底……

    相关文章

      网友评论

      本文标题:Frp 实现内网穿透

      本文链接:https://www.haomeiwen.com/subject/fsplcxtx.html