frp是一款非常优秀便捷的反向代理软件,致力于解决内网穿透的问题,这几天折腾了群晖上安装frp,写本文虽然是再造了个轮子,但重点在于记录安装中遇到的小白问题。

首先贴上frp的链接https://github.com/fatedier/frp

frp分为服务端和客户端,使用frp必须需要一台公网IP的云主机或者VPS。博主正好有一台腾讯1c1g1m的吃灰小鸡,拿出来加以利用。

搭建

搭建其实没有什么过程,在云主机和本地群晖上任意位置下载frp程序,暂且就在home文件夹里,解压,解压后有以下文件。

• frpc:客户端可执行程序
• frpc_full.ini:客户端所有配置项(可以再此文件查看frp的所有的配置项)
• frpc.ini:客户端配置项
• frps:服务端可执行程序
• frps_full.ini:服务端所有配置项(可以再此文件查看frp的所有的配置项)
• frps.ini:服务端配置项
• LICENSE:许可证

根据自己的需求修改配置文件,服务端也就是云主机上需要配置frps.ini文件,客户端也就是群晖上配置frpc.ini。本着一切从简的原则(其实是懒),配置如下。

服务端frps.ini文件:

[common]
bind_port = 7000
vhost_https_port = 443

客户端frpc.ini文件

[common]
server_addr = 云服务器的公网IP
server_port = 7000

[web]
type = https
local_port = 5001
custom_domains = 自己的域名

使用vi修改好这两个文件就算是搭建完成了吧(vi的使用不再赘述)。

运行

服务端命令:

./frps -c frps.ini

客户端命令:

./frpc -c frpc.ini

如果终端没有错误提示我们的frp就搭建好了,做好DNS解析后,打开自己的域名试一下,内网穿透已经可以用了。另外有的云服务器有默认关闭无用端口,运行前记得到服务商那放行需要用到的端口号,如7000等。

问题

1. 后台运行

发现关了SSH后frp就断了,找了很久原来是要把frp命令放到后台运行,可以使用nohup命令。

服务端:

nohup ./frps -c frps.ini >/dev/null 2>&1 &

客户端:

nohup ./frpc -c frpc.ini >/dev/null 2>&1 &

说明:>/dev/null 2>&1表示丢弃,用此参数无日志文件产生,最后一个&表示后台运行。
注意:最后退出ssh时不能直接点X关闭窗口,要输入exit命令后再关窗口。

2. 查看及结束后台程序

使用ps命令查看后台进程,kill命令结束后台。

ps -aux|grep frp

a: 显示所有程序  u: 以用户为主的格式来显示   x: 显示所有程序,不以终端机来区,grep frp:表示筛选带有frp字符的。

运行后显示如下:

admin  1584  0.0  0.0  23144  2280 pts/17   S+   15:14   0:00 grep --color=auto frp
admin 16226  0.0  0.0 114012  5956 ?        Sl   Dec11   1:06 ./frpc -c ./frpc.ini

第二行就是我们要找的frp的后台进程,PID为16226

kill 16226

结束frp后台。

3. frp多开,实现服务器开放多个frp端口

frps(c)可以多开,在后台运行多个进程,只要再复制一份frps(c).ini,改为frps(c)1.ini或者其他文件名,注意多个frps(c).ini文件中端口号不能冲突,比如:第二个服务端frps1.ini文件可以设置为:

[common]
bind_port = 7001
vhost_https_port = 44443

同样对应的frpc1.ini文件可以

[common]
server_addr = 云服务器的公网IP
server_port = 7001

[web]
type = https
local_port = 本地端口
custom_domains = 自己的域名

然后修改运行命令

服务端:

./frps -c frps1.ini

客户端:

./frpc -c frpc1.ini

4. 本地多服务多端口

如想要开两个web,客户端frpc.ini配置

[common]
server_addr = 云服务器的公网IP
server_port = 7000

[web01]
type = https
local_port = 5001
custom_domains = 域名1

[web02]
type = https
local_port = 5002
custom_domains = 域名2

5. 密码访问

以上frp架设完成后,任何人都可以连接我们的frps服务,为了保证不被他人滥用,可以加密码认证。
frps.ini和frpc.ini的[common]下加一行:

# auth token
token = 【密码】

这样知道密码才能连接上。

其他

经过实测,按以上方法配置好之后,在群辉上部署SSL证书,frp不需要部署证书,一样可以走https协议。

本文只介绍frp基本安装使用,高级操作参阅frp文档。