准备工作
1)一台有公网IP的服务器(博主使用的是一台物理机 下行 10M 上行 100M)
2)内网服务器:
2 台 CentOS 7.8 系统 服务器,一台数据库,一台WEB服务。
1 台Windows 服务器,用于做跳板机访问。
开源仓库
https://github.com/fatedier/frp
常见编译
打包后不同的的可执行文件适用不同的平台!以下供大家参考!
darwin/386
:对应 Mac x86darwin/amd64
:对应 Mac amd64linux/386
:对应 Linux x86linux/amd64
:对应 Linux amd64Windows/386
:对应 Windows x86Windows/amd64
:对应 Windows amd64
支持协议
TCP & UDP
常见的TCP和UDP协议转发,也是用的比较多的一种!
HTTP & HTTPS
仅需要将网站转发到外网访问,可以使用这个。这样不会浪费端口。
STCP & SUDP
TCP 和 UDP 类型的服务提供一种安全访问的访问能力。避免让端口直接暴露在公网上导致任何人都能访问到。
XTCP
采用 P2P 的方式进行打洞穿透,如果能成功,后续的流量将不会经过 frps,而是直接通信,不再受到 frps 所在服务器的带宽限制。
TCPMUX
支持将单个端口收到的连接路由到不同的代理。有点和HTTP(S)相似。
部署步骤
目录说明
我们下载的源码基本上都包含3部分。
1
2
3
4
5
6
7
8
|
-rwxr-xr-x 1 1001 docker 9064448 Aug 3 23:22 frpc
-rw-r--r-- 1 1001 docker 9503 Aug 3 23:25 frpc_full.ini
-rw-r--r-- 1 1001 docker 126 Aug 3 23:25 frpc.ini
-rwxr-xr-x 1 1001 docker 12054528 Aug 3 23:22 frps
-rw-r--r-- 1 1001 docker 5010 Aug 3 23:25 frps_full.ini
-rw-r--r-- 1 1001 docker 26 Aug 3 23:25 frps.ini
-rw-r--r-- 1 1001 docker 11358 Aug 3 23:25 LICENSE
drwxr-xr-x 2 1001 docker 88 Aug 3 23:25 systemd
|
frpc 开头的为客户端运行
frps 开头的为服务端运行
systemd 为 systemctl 服务,维持 frps[c]在后台运行的
.ini 配置文件
配置文件
这里主要介绍简单配置,不介绍太复杂的内容。
服务端配置
主要是绑定的端口 13333,客户端必须链接到这个端口。
dashboard开头的配置是 frp提供的一个监控台,可选的。
token 就是密码了,越复杂越好。
vhost 虚拟主机,指定了80端口 和 443端口。
1
2
3
4
5
6
7
8
9
|
[common]
bind_port = 13333
dashboard_addr = 0.0.0.0
#dashboard_port = 13334
#dashboard_user = admin
#dashboard_pwd = dh147258369
token =5#!Lxxxxx123131dddd
vhost_http_port = 80
vhost_https_port = 443
|
客户端配置
下面是我客户端的配置。
common 远程服务器的 IP 端口 TOKEN
TCP 用的比较多一些,比如SSH,MYSQL等
一般WEB站点 HTTP / HTTPS 就用的非常多了。
我没有将复杂的配置在这个配置文件完成,还大部分是在NGINX里面做了一下。
比如 SSL 证书,HTTP 跳转 HTTPS 等
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
[common]
server_addr = 124.xxx.xxx.xxx
server_port = 13333
token = 5#!Lxxxxx123131dddd
[mysql]
type = tcp
local_ip = 127.0.0.1
local_port = 3306
remote_port = 13306
[ssh-110]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 13322
[api-web-http]
type = http
local_ip = 127.0.0.1
local_port = 80
custom_domains = api.ruyo.net
[api-web-https]
type = https
local_ip = 127.0.0.1
local_port = 443
custom_domains = api.ruyo.net
[tool-web-http]
type = http
local_ip = 127.0.0.1
local_port = 80
custom_domains = tool.ruyo.net
[tool-web-https]
type = https
local_ip = 127.0.0.1
local_port = 443
custom_domains = tool.ruyo.net
|
Server部署
1)从git上下载代码,依此执行一下代码即可
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
wget https://github.com/fatedier/frp/releases/download/v0.37.1/frp_0.37.1_linux_386.tar.gz -O frp.tar.gz
tar -zxvf frp.tar.gz -C ./
mkdir /etc/frp
cp frp_0.37.1_linux_386/frps /usr/bin/frps
cp frp_0.37.1_linux_386/frps.ini /etc/frp/frps.ini
cp frp_0.37.1_linux_386/systemd/frps.service /usr/lib/systemd/system/frps.service
systemctl status frps.service
systemctl start frps.service
|
CLIENT部署
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
wget https://github.com/fatedier/frp/releases/download/v0.37.1/frp_0.37.1_linux_386.tar.gz -O frp.tar.gz
tar -zxvf frp.tar.gz -C ./
mkdir /etc/frp
cp frp_0.37.1_linux_386/frpc /usr/bin/frpc
cp frp_0.37.1_linux_386/frpc.ini /etc/frp/frpc.ini
cp frp_0.37.1_linux_386/systemd/frpc.service /usr/lib/systemd/system/frps.service
systemctl status frpc.service
systemctl start frpc.service
|
Windows
这里主要介绍Windows客户端如何部署。
直接下载最新版本frp
https://github.com/fatedier/frp/releases/download/v0.37.1/frp_0.37.1_windows_386.zip
解压后,修改配置文件
控制台直接输入:frpc.exe -c frpc.ini 即可启动!
后台运行
1
2
3
4
5
6
7
|
@echo off
if "%1" == "h" goto begin
mshta vbscript:createobject("wscript.shell").run("""%~nx0"" h",0)(window.close)&&exit
:begin
REM
frpc.exe -c frpc.ini
|
在frpc.exe目录新建一个文本文件,复制上面的内容保存。修改后缀名为 start-frpc.bat
双击即可运行!
开机启动
可以利用任务计划来运行!缺定不太稳定,如果开机不登陆账号,无法启动服务。
开机启动2
这里分享的是 @net.ee 大佬分享的CMD运行脚本,核心是利用nssm来维护 frp的进程后台守护运行,开机启动服务 等!
如果大家相对nssm 了解一下请移步:http://www.nssm.cc/
文件下载:大佬提供文件下载 / 分流下载地址(提取码:9197)
下载压缩包减压后,得到如图文件。
分别针对的是 32位系统,64位系统,XP系统。
根据自己的系统选择不同目录中文件复制里面到 frp的目录中即可!
双击运行即可!
亲测,体验非常棒!再也不用担心Windows系统自动重启导致连不上的问题了!
使用总结
1)密钥一定要设置并且要复杂一些。
2)内网机器A 能否启动FRP 转发 到内网机器B? 答案:不能,内网机器B需要安装客户端!
3)能*墙吗?答案:能,但是没有加密非常容易导致端口或者IP被Q。
4)如果使用比较敏感的端口比如:80,443,8080,8888,请保证你的域名有备案且接入(国外服务器不用担心这个问题)。
评论 (0)