Frp 搭建及使用

服务端设置

下载安装包

1
wget https://github.com/fatedier/frp/releases/download/v0.22.0/frp_0.22.0_linux_amd64.tar.gz

解压,进入目录

1
2
3
4
5
6
7
8
9
10
tar -zxvf frp_0.22.0_linux_amd64.tar.gz
cp -r frp_0.22.0_linux_amd64 frp #方便使用
cd frp
ls -a #查看文件

#只需要关注如下几个文件
frps
frps.ini
frpc
frpc.ini

前两个文件(s结尾代表server)分别是服务端程序和服务端配置文件,后两个文件(c结尾代表client)分别是客户端程序和客户端配置文件。
因为我们正在配置服务端,可以删除客户端的两个文件

rm -f frpc

rm -f frpc.ini

然后修改frps.ini文件

vim frps.ini

这个文件应有如下格式

1
2
3
4
5
6
7
8
9
[common]
bind_port = 7000
dashboard_port = 7500
token = 12345678
dashboard_user = admin
dashboard_pwd = admin
vhost_http_port = 10080
vhost_https_port = 10443
#如果没有必要,端口均可使用默认值,token、user 和 password 项请自行设置。

运行 frps 服务端

1
./frps -c frps.ini

此时访问 x.x.x.x:7500 并使用自己设置的用户名密码登录,即可看到仪表板界面

后台运行 server 端

1
nohup ./frps -c frps.ini &

客户端设置

同上下载 tar 包,解压,删除 frps* 的文件

修改配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
vim frpc.ini

[common]
server_addr = x.x.x.x
server_port = 7000
token = won517574356
[rdp]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 7001
[smb]
type = tcp
local_ip = 127.0.0.1
local_port = 445
remote_port = 7002

其中common字段下的三项即为服务端的设置。

运行 frpc 客户端

1
2
3
4
./frpc -c frpc.ini

#放入后台运行
nohup ./frpc -c frpc.ini &

windows 放入后台运行 frpc

frpc运行时始终有一个命令行窗口运行在前台,影响美观,我们可以使用一个批处理文件来将其运行在后台,而且可以双击执行,每次打开frpc不用再自己输命令了。
在任何一个目录下新建一个文本文件并将其重命名为“frpc.bat”,编辑,粘贴如下内容并保存。

1
2
3
4
5
6
7
8
@echo off
if "%1" == "h" goto begin
mshta vbscript:createobject("wscript.shell").run("""%~nx0"" h",0)(window.close)&&exit
:begin
REM
cd C:\frp
frpc -c frpc.ini
exit

frp 原理图

nginx反向代理配置

修改 nginx.conf 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# frp的接收http请求的反向代理
server {
listen 80;
server_name *.dev.yss.com dev.yss.com;

location / {
# 7071端口即为frp监听的http端口
proxy_pass http://127.0.0.1:7071;
proxy_set_header Host $host:80;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

proxy_connect_timeout 7d;
proxy_send_timeout 7d;
proxy_read_timeout 7d;

}
# 防止爬虫抓取
if ($http_user_agent ~* "360Spider|JikeSpider|Spider|spider|bot|Bot|2345Explorer|curl|wget|webZIP|qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot|NSPlayer|bingbot")
{
return 403;
}
}

nginx热加载配置文件

1
nginx -s reload

防火墙端口开放

1
2
3
4
5
6
# 开启防火墙端口   7000端口和7071端口即为上面配置的bind_port和vhost_http_port端口
firewall-cmd --zone=public --add-port=7000/tcp --permanent
firewall-cmd --zone=public --add-port=7071/tcp --permanent

# 开启后重启防火墙,使得刚刚的修改生效
firewall-cmd --reload