当前位置 : 主页 > 编程语言 > 其它开发 >

frp 用于内网穿透的基本配置和使用

来源:互联网 收集:自由互联 发布时间:2022-06-04
frp 用于内网穿透的基本配置和使用 今天是端午节,先祝端午安康! frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、
frp 用于内网穿透的基本配置和使用

今天是端午节,先祝端午安康!

frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。

本文就以 配置 frp,使得可以从外网访问内网远程桌面(端口号 3389)为最终目标 展开。使用的公网服务器操作系统为 CentOS 7.6,内网的机器操作系统为 Windows 10。访问 frp 的网站以下载对应操作系统和架构的程序。另外不要忘记在内网机器上设置“允许远程连接”哦。

frps

frp 的服务端,用于部署在公网的服务器上,与内网通信转发流量,下载程序后自带了配置文件 frps.ini

frp 配置文件如下:

[common]
bind_port = 7000
log_file = ./frps.log
token = nihaonihao123123

bind_port 表示监听在服务器本地的端口log_file 表示日志文件位置token 表示密码 (只有在 frpc 中配置相同的密码才能连接该 frps)

配置完成后可以使用 ./frps -c ./frps.ini 启动(如果没有执行权限,可使用 chmod a+x frps赋予其权限后再执行)

注册为 systemctl 服务

首先创建 systemctl 配置文件frps.service

[Unit]
Description = frp server
After = network.target syslog.target
Wants = network.target

[Service]
Type = simple
WorkingDirectory=/PATH/TO/YOUR/FRP
ExecStart = /PATH/TO/YOUR/FRP/frps -c /PATH/TO/YOUR/FRP/frps.ini

[Install]
WantedBy = multi-user.target

其中 WorkingDirectoryExecStart 要改为 frps 程序所在的路径。需要注意的是,由于在 frps 的配置文件中 log_file 使用了相对路径,因此需要要指定 WorkingDirectory。

执行如下命令以注册并启动 frps 服务:

cp /PATH_TO_FILE/frps.service /etc/systemd/system
systemctl enable frps
systemctl start frps

可以使用 netstat -lntup | grep 7000 (即 frp 配置文件中设定的端口)查看服务是否成功启动。

至此,服务器端的服务配置完成~

frpc

frp 的客户端,部署在需要穿透出去的内网机器上。启动后会与上面的服务端通信,告诉他该怎么转发我 frpc 的流量(也就是我们要做的配置了)。下载程序后自带了配置文件 frpc.ini(注意与上面的 frps.ini 区分)。

配置如下:

[common]
server_addr = 1.2.3.4
server_port = 7000
log_file = .\\frps.log
token = nihaonihao123123

[LBWNB]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 6135

common 项中配置的是服务器端的信息,注意 Linux 和 Windows 下的路径分隔符不同,Windows 下由于 “\” 会转义因此需要两个 “\”

下面的一个项中是自定义的一个名字(不能与其它 frpc 重复),type 表示通信协议类型,local_ip 表示监听内网机器本地的地址(将数据转发到这个地址上),local_port 表示监听内网机器本地的端口号,remote_port告知远程服务器,我这个 frpc 要通过(服务器上的)这个端口与外界通信,请它在服务器上监听。

配置完成后可以使用 ./frpc -c ./frpc.ini 启动。

注册为 Windows 服务

起初使用了 sc create,不仅没有服务描述,还总是启动失败。感觉这个命令似乎有点过于简单,甚至有点过时了。后改用 WinSW。

WinSW 的配置文件命名比较奇怪。需要与可执行文件名一致,如我的 exe 文件为 WinSW-x64.exe,配置文件名就一定要为 WinSW-x64.xml。好处似乎是,可以将 WinSW-x64.exe 随意命名,如 NiHao.exe ,配置文件名为 NiHao.xml 即可。
本来以为第二个参数可以任意指定配置文件的名称,尝试了数次。最后参考了WinSW配置文件的官方文档,第二个参数为 path,只是路径,不是文件名,好吧。

将配置文件改为如下(自行替换为实际路径):

<service>
  <id>my_frpc</id>
  <name>frpC</name>
  <description>frp 客户端程序,用于映射至外网</description>
  <executable>C:\PATH\TO\YOUR\FRP\frpc.exe</executable>
  <arguments>-c frpc.ini</arguments>
</service>

似乎无需显式指定工作路径也可以正常打印日志,如需指定,可以使用 <workingdirectory> 标签

执行一下 install 和 start 命令即可注册和启动 frpc 服务。

.\WinSW-x64.exe install
.\WinSW-x64.exe start

对应的,停止和删除可以执行 stop, uninstall。

可以使用 netstat -ano | findstr 7000 检查是否与服务端建立了连接(Linux 和 Windows 下的 netstat 参数也不太相同)。

至此,服务器端的服务配置完成~ 此时可以使用 远程桌面应用 在 互联网上访问内网机器了。

图为在 Android 手机上进行远程桌面 后记

nssm 似乎也可以用来方便地注册 Windows 服务,没有尝试,可以参考文章:注册frpc为windows服务,可在未登录用户时启动、将frpc注册成windows系统服务。

可以在微软的远程桌面客户端页面对应跳转下载。居然还有 Android 或 IOS 的远程桌面应用,在紧急情况下用用吧QAQ。

没想到的是,周末刚刚部署好,现在就用上了——突然通知线上有个样式的问题。心想直接用这个试试吧。结果还是有点卡的(服务器带宽为6M,像是当前网络的问题)。直接远程写代码还是够呛,而且很多图标背景还是黑色,估计是文件资源管理器 explorer.exe 的bug了。最后在本地下载代码写好后,拷贝到远程再编译发布。最为诡异的是,我第二天回到公司打开电脑,右下角的图标还是模模糊糊的,就像前一天弱网环境下远程一样0.0。

后来尝试在网络环境较好的时候,体验还是不错的。

参考

frp中文站

windows下基于frp的内网穿透部署

frp 内网穿透远程桌面(Windows 10)配置

WINDOWS将FRP设置为服务并开机自启

如何在线下载Google Play里面的应用

apkpure(用于下载 Google Play 的 Android 应用)

上一篇:SpringBoot Restful 接口实现
下一篇:没有了
网友评论