frp有很详细的官方教程:https://gofrp.org/docs/
里面甚至有一些例子。最简单的例子:https://gofrp.org/docs/examples/ssh/
frp还支持p2p内网穿透,即服务器端只充当牵线搭桥的作用,当两个客户端通过服务器端建立p2p连接后,就没服务器端什么事了,不再消耗服务器端的流量。p2p的例子:https://gofrp.org/docs/examples/xtcp/
注意,如果服务器端设置了token的话,客户端的token要放到common下面。
可以用supervisor实现开机自启。
¶ CentOS
在CentOS 8 Stream上测试通过。这里以实现开启自启frps为例。
安装supervisor
:
sudo yum install supervisor
默认是不激活的,还得手动激活supervisord服务:
sudo systemctl enable supervisord
sudo systemctl start supervisord
然后在/etc/supervisord.d/frps.ini
里写入:
[program:frps]
directory=frp安装目录绝对路径
command=frp安装目录绝对路径/frps -c frp安装目录绝对路径/frps.ini
autostart=true
autorestart=true
stderr_logfile=/tmp/frps_stderr.log
stdout_logfile=/tmp/frps_stdout.log
user = 你的用户名
sudo supervisorctl update frps
sudo supervisorctl status frps
frps RUNNING pid 33557, uptime 0:02:09
¶ debian系
在Deepin 20上测试通过。这里以实现开机自启frpc为例。
先安装supervisor
:
sudo apt install supervisor
然后在/etc/supervisor/conf.d/frpc.conf
里写入:
[program:frpc]
directory=frp安装目录绝对路径
command=frp安装目录绝对路径/frpc -c frp安装目录绝对路径/frpc.ini
autostart=true
autorestart=true
stderr_logfile=/tmp/frpc_stderr.log
stdout_logfile=/tmp/frpc_stdout.log
user = 你的用户名
然后
sudo supervisorctl update frpc
frpc: added process group
sudo supervisorctl status frpc
frpc RUNNING pid 6214, uptime 5:17:13
更改了/etc/supervisor/conf.d/frpc.conf
之后,这样重启:
sudo supervisorctl restart frpc
注意,如果当前的连接是通过frpc提供的内网穿透通道提供的,那么重启的过程中当前连接会断掉,然后这个shell就会被杀掉,然后这个重启过程会中断,然后连接就永远丢失了。为了使得重启的过程不会因为连接中断而终止,要用nohup
使其与当前shell
detach:
sudo -s
nohup supervisorctl restart frpc &
参考文献:Supervisor使用详解
¶ 多用户
fp-multiuser: https://github.com/gofrp/fp-multiuser
frpc.toml:
serverAddr = ""
serverPort = 7000
user = ""
metadatas.token = ""
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort =
remotePort =
参考:
配置文件切换到 toml 后,不支持meta_token参数
https://github.com/fatedier/frp/blob/dev/doc/server_plugin.md#metadata
还可以用frp_plugin_allowed_ports限制每个user能映射到的端口:https://github.com/Parmicciano/frp_plugin_allowed_ports