首先你要有一台公网服务器
如果没有公网服务器,可以用NATAPP,请参见这篇教程
之前一直想用ngrok来实现,奈何交叉编译出来的包有问题,一直没法运行,无解。
编译了windows版本的,大概是没有签名的缘故,也无法运行,最后迫不得已使用windows subsystem - ubuntu来运行Linux amd64版本。但是cubieboard始终没办法。
直到被朋友推荐了frp。
感觉自己得到了解脱。
项目主页请见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
然后稍等片刻再重新尝试连接,就不会断开的这么彻底……