由于国内家庭宽带几乎没有给用户分配固定ip,所以有时需要让外网的设备访问到内网的机器就需要用到内网穿透。市面上比较知名的提供这类服务的产品有花生壳、Teamview、向日葵远控等,但几乎都是收费的且不能绑定自己的域名,不是很方便。所以就自己在服务器上部署了一个穿透服务。
什么是Frp
frp是一种快速反向代理,可帮助您将NAT或防火墙后面的本地服务器公开到Internet。到目前为止,它支持TCP和UDP以及HTTP和HTTPS协议,在这些协议中,请求可以通过域名转发到内部服务。frp还具有P2P连接模式。
为什么使用 frp ?
通过在具有公网 IP 的节点上部署 frp 服务端,可以轻松地将内网服务穿透到公网,同时提供诸多专业的功能特性,这包括:
- 客户端服务端通信支持 TCP、KCP 以及 Websocket 等多种协议。
- 采用 TCP 连接流式复用,在单个连接间承载更多请求,节省连接建立时间。
- 代理组间的负载均衡。
- 端口复用,多个服务通过同一个服务端端口暴露。
- 多个原生支持的客户端插件(静态文件查看,HTTP、SOCK5 代理等),便于独立使用 frp 客户端完成某些工作。
- 高度扩展性的服务端插件系统,方便结合自身需求进行功能扩展。
- 服务端和客户端 UI 页面。
服务端部署
查看系统架构选择相应的版本
frp服务端在windows和linux系统下等可以部署运行,但各个版本之间又存在差异,所以要根据系统的架构选择相应的版本进行下载安装,以Linux为例,在linux系统中输入命令uname -a可以直接显示 Linux 系统架构信息。
下载对应的服务端文件到服务器上,解压后只保留frps.ini、frps两个文件。
编辑frp.ini,设置端口号
[common]
bind_port = 端口号
服务端配置完毕,连接服务器并进入到frp所在目录通过命令 ./frps -c ./frps.ini
启动服务端
success即表示成功
客户端配置
下载相应的客户端文件,我本地使用windows系统且系统为64位所以下载frp_0.34.3_windows_amd64.zip 下载后解压任意目录都可。建议给文件夹重命名一个简约的名称。在客户端仅仅保留frpc.ini、frpc两个文件,需要编辑的是frpc.ini文件。
在frpc.ini中写入以下代码
[common]
server_addr = 填写远程服务器的ip
server_port = 填写服务器frps.ini中配置的端口号
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 穿透使用的端口号,可任意填写但要在安全组中开放
在windows开始搜索PowerShell
通过cd命令打开frpc文件夹,输入启动客户端的命令./frpc -c ./frpc.ini
客户端配置完毕
测试使用
配置完frp服务后,就可以在外网访问一些内网的服务了。本文演示映射的是3389端口,windows远程连接端口,所以可以远程连接内网的计算机。
首先要在本地计算机开启远程管理功能(该功能目前仅在windows专业版和企业版可开启)
开启这个功能后就可以在其他设备上远程管理这台计算机了。甚至可以使用微软的Microsoft Remote Desktop工具在手机端远程管理计算机。
参考文章:使用手机管理你的Windows
登录地址:IP:端口
账号:本地计算机用户名
密码:一般为开机密码
进程守护
如果需要在后台长期运行,就需要守护服务
服务端
如果安装有宝塔面板地话可以在插件市场安装Supervisor管理器
在插件中进行如下配置,其中运行目录要选择frp所在目录,启动命令./frps -c ./frps.ini 前一定要加上路径,非绝对路径是无法启动的
客户端配置
在frp目录下创建一个bat文件,写入以下代码
@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
启动bat文件即可
rathole
rathole,类似于 frp 和 ngrok,是另一个安全、稳定、高性能的内网穿透工具,用 Rust 语言编写。用法和frp类似
项目地址:https://github.com/rapiz1/rathole