准备工作
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,请保证你的域名有备案且接入(国外服务器不用担心这个问题)。
原文链接:https://oimi.me/872.html