调用博主最近登录时间
生活中的HYGGE
使用Frp实现内网穿透便于外网访问本机JavaWeb项目

使用Frp实现内网穿透便于外网访问本机JavaWeb项目

hygge
2023-07-07 / 0 评论 / 200 阅读 / 正在检测是否收录...

使用Frp实现内网穿透便于外网访问本机JavaWeb项目

背景

ljsg49mg.png

在微信开发者工具里调用uni.getLocation调试没有效果,笔记本没有对应的传感器

ljsg4fqa.png

真机调试需要勾选微信小程序位置接口权限,由于后端部署在本机上,真机调试无法链接,所以进行一下内网穿透

准备工作

搭建一个完整的frp服务链,我们需要

  1. VPS一台(也可以是具有公网IP的实体机)
  2. 访问目标设备(就是你最终要访问的设备)
  3. 简单的Linux基础(会用cp等几个简单命令即可)
文章中用到的端口别忘记设置安全组和宝塔防火墙!

服务端设置

SSH连接到VPS之后运行如下命令查看处理器架构,根据架构下载不同版本的frp

arch

查看结果,如果是“X86_64“即可选择”amd64”,
运行如下命令,根据架构不同,选择相应版本并进行下载

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

然后解压

tar -zxvf frp_0.51.0_linux_amd64.tar.gz

文件夹改个名,方便使用

cp -r frp_0.51.0_linux_amd64 frp

把解压出来的文件夹复制到你想要的目录下,为了方便我直接放在用户目录下了,进入该目录

cd frp

查看一下文件

ls -a

我们只需要关注如下几个文件

  • frps
  • frps.ini
  • frpc
  • frpc.ini

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

rm frpc
rm frpc.ini

然后修改frps.ini文件

vim frps.ini

这个文件应有如下格式

[common]
bind_port = 7000
dashboard_port = 7500
token = 12345678
dashboard_user = admin
dashboard_pwd = admin
vhost_http_port = 7880
vhost_https_port = 7843
subdomain_host = lisok.cn
如果没有必要,端口均可使用默认值,token、user和password项请自行设置。
  • “bind_port”表示用于客户端和服务端连接的端口,这个端口号我们之后在配置客户端的时候要用到。
  • “dashboard_port”是服务端仪表板的端口,若使用7500端口,在配置完成服务启动后可以通过浏览器访问 x.x.x.x:7500 (其中x.x.x.x为VPS的IP)查看frp服务运行信息。
  • “token”是用于客户端和服务端连接的口令,请自行设置并记录,稍后会用到。
  • “dashboard_user”和“dashboard_pwd”表示打开仪表板页面登录的用户名和密码,自行设置即可。
  • “vhost_http_port”和“vhost_https_port”用于反向代理HTTP主机时使用。
  • "subdomain_host"自定义二级域名,后续在客户端会配置一个"subdomain",部署完成后将通过{subdomain}.{subdomain_host}:{vhost_http_port} 来访问自己的 web 服务。

编辑完成后保存(vim保存如果不会请自行搜索)。
之后我们就可以运行frps的服务端了

./frps -c frps.ini

如果看到屏幕输出这样一段内容,即表示运行正常,如果出现错误提示,请检查上面的步骤。

2023/07/07 15:22:39 [I] [service.go:130] frps tcp listen on 0.0.0.0:7000
2023/07/07 15:22:39 [I] [service.go:172] http service listen on 0.0.0.0:7880
2023/07/07 15:22:39 [I] [service.go:193] https service listen on 0.0.0.0:7843
2023/07/07 15:22:39 [I] [service.go:216] Dashboard listen on 0.0.0.0:7500
2023/07/07 15:22:39 [I] [root.go:210] Start frps success

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

ljsg4y34.png

服务端后台运行

至此,我们的服务端仅运行在前台,如果Ctrl+C停止或者关闭SSH窗口后,frps均会停止运行,因而我们使用 nohup命令将其运行在后台。

nohup后台程序管理或关闭相关命令可自行查询资料,上面这个连接中也有所提及。
nohup ./frps -c frps.ini &

输出如下内容即表示正常运行

nohup: ignoring input and appending output to 'nohup.out'

此时可先使用Ctrl+C关闭nohup,frps依然会在后台运行,使用jobs 或者 ps -aux | grep frps命令查看后台运行的程序
在结果中我们可以看到frps正在后台正常运行

[1]+  Running                 nohup ./frps -c frps.ini &

此时访问 x.x.x.x:7500 依然可以打开仪表板界面,至此,服务端即设置完成,你可以关闭SSH窗口了。

客户端设置

frp的客户端就是我们想要真正进行访问的那台设备,大多数情况下应该会是一台Windows主机,因而本文使用Windows主机做例子;Linux配置方法类似,不再赘述。

同样地,根据客户端设备的情况选择相应的frp程序进行下载,Windows下下载和解压等步骤不再描述。
假定你下载了“frp_0.51.0_windows_amd64.zip”,将其解压在了C盘根目录下,并且将文件夹重命名为“frp”,可以删除其中的frps和frps.ini文件。
用文本编辑器打开frpc.ini,与服务端类似,内容如下。

[common]
server_addr=116.xxx.xxx.xxx
server_port=7000
token=12345678
[web]
type=http
local_port=8085
remote_port=7880
subdomain=nwys
# 仅仅复制以上即可,以下是其他协议的例子,不必复制
[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字段下的三项即为服务端的设置。

  • “server_addr”为服务端IP地址,填入即可。
  • “server_port”为服务器端口,填入你设置的端口号即可,如果未改变就是7000
  • “token”是你在服务器上设置的连接口令,原样填入即可。

自定义规则

frp实际使用时,会按照端口号进行对应的转发,原理如下图所示。

ljsg57mp.png

上面frpc.ini的rdp、smb字段都是自己定义的规则,自定义端口对应时格式如下。

  • “[xxx]”表示一个规则名称,自己定义,便于查询即可。
  • “type”表示转发的协议类型,有TCP和UDP等选项可以选择,如有需要请自行查询frp手册。
  • “local_port”是本地应用的端口号,按照实际应用工作在本机的端口号填写即可。
  • “remote_port”是该条规则在服务端开放的端口号,自己填写并记录即可。

RDP,即Remote Desktop 远程桌面,Windows的RDP默认端口是3389,协议为TCP,建议使用frp远程连接前,在局域网中测试好,能够成功连接后再使用frp穿透连接。

SMB,即Windows文件共享所使用的协议,默认端口号445,协议TCP,本条规则可实现远程文件访问。

配置完成frpc.ini后,就可以运行frpc了

frpc程序不能直接双击运行!

使用命令提示符或Powershell进入该目录下

cd C:\frp

并执行

./frpc -c frpc.ini

运行frpc程序,窗口中输出如下内容表示运行正常。

2023/07/07 16:14:56 [I] [service.go:205] login to server success, get run id [2b65b4e58a5917ac], server udp port [0]
2023/07/07 16:14:56 [I] [proxy_manager.go:136] [2b65b4e58a5917ac] proxy added: [rdp smb]
2023/07/07 16:14:56 [I] [control.go:143] [smb] start proxy success
2023/07/07 16:14:56 [I] [control.go:143] [rdp] start proxy success

不要关闭命令行窗口,此时可以在局域网外使用相应程序访问 x.x.x.x:xxxx (IP为VPS的IP,端口为自定义的remote_port)即可访问到相应服务。

工具使用

参考引用7的地址

ljsg5h7r.png

软件设置中的参数不包含域名设置,所以建议手动编辑一下配置文件再使用软件托管。

ljsg5l61.png

引用

  1. frp官网-简单、高效的内网穿透工具:https://gofrp.org/
  2. frp github release:https://github.com/fatedier/frp/releases
  3. frp document:https://gofrp.org/docs/overview/
  4. 使用frp进行内网穿透:https://sspai.com/post/52523
  5. 使用frp进行内网穿透:https://blog.csdn.net/qq_41743601/article/details/127461156
  6. 新手入门 - 详解 frp 内网穿透 frpc.ini 配置:https://www.ioiox.com/archives/79.html
  7. CnFRP控制台-内网映射外网访问的工具 : [https://www.52pojie.cn/thread-1647522-1-1.html]
0

评论 (0)

取消