利用frp实现内网穿透

由于众所周知的原因,公网环境下无法直接访问私有设备,当我们想通过远程桌面直接访问到这些设备,一般来说要通过一些转发。之前使用过teamviewer,但免费版有一些使用限制,再加上有新闻说teamviewer连接密钥泄露。考虑换一种方式,在网上找到了可用的解决方案,记录下来。

首先需要准备一台具有公网IP的主机(此处选用阿里云的特惠云主机,安装了CENTOS 7系统)来作为服务端

根据不同的架构下载软件包:

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

其他平台的软件包可查看 https://github.com/fatedier/frp/releases

解压后修改目录下的frps.ini文件,配置如下:

[common]
#服务端端口
bind_port = 7000  
#管理面板端口
dashboard_port = 8000   
#服务端验证token
token = 123456
#管理面板用户
dashboard_user = admin 
#管理面板密码 
dashboard_pwd = 123456  
vhost_http_port = 80 
vhost_https_port = 443 
#子域名
subdomain_host = ziyuming.cn  

更多的配置项在frps_full.ini中有完整的说明。

执行./frps -c frps.ini启动服务。

看到Start frps success就启动成功了。

访问服务器ip:8000打开工作台,登陆后可以看到下面的界面。

但目前服务允许在前台,关闭SSH连接后服务就会终止。这里利用nohup来后台运行,vi start.sh

nohup ./frps -c frps.ini &

执行sh start.sh就可以后台启动了。

接下来配置需要被访问的设备,这里是一台windows主机。

到上面的地址中下载windows对应的软件包。

解压后修改目录下的frpc.ini文件,配置如下:

[common]
#服务端IP
server_addr = 
#服务端端口
server_port = 10000
#服务端验证token
token = 123456

[RemoteDesktop]
#本地的远程桌面
type = tcp
local_ip = 127.0.0.1
#实际访问的本地端口
local_port = 3389
#从公网访问的远程端口
remote_port = 9833

[httpTest]
#虚拟机中部署的web应用
type = http
local_ip = 172.18.0.1
local_port = 80
#子域名,配置后可通过子域名访问,这里是app.ziyuming.cn 
subdomain = app

打开powershell执行./frpc -c frpc.ini,看到start proxy success就启动成功了。

此时就可以通过连接服务器的 9833 访问到内网的3389了。

同时可以通过 app.ziyuming.cn 来访问内网部署的web应用,用来调试支付回调等就很方便了。

之前使用了ngrok服务来实现内网穿透,但老的版本存在内存泄漏问题,而新的版本需要付费,现在frp完美替代了它。

在windows上设置后台运行,新建一个start.bat,键入下列内容。

@echo off
if "%1" == "h" goto begin
mshta vbscript:createobject("wscript.shell").run("""%~nx0"" h",0)(window.close)&&exit
:begin
REM
cd [软件所在目录]
frpc -c frpc.ini
exit

执行bat文件就可以后台启动了,可以将这个文件添加到计划任务开机自启动。

友情提醒:一定要注意做好局域网内的访问控制。

(可以修改bios选项设置电源选项,跳闸之后让电脑自动开机,保证被访问机器长期在线)

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部