Frp 实现内网穿透

首先你要有一台公网服务器
如果没有公网服务器,可以用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 实现内网穿透)