由于众所周知的原因,公网环境下无法直接访问私有设备,当我们想通过远程桌面直接访问到这些设备,一般来说要通过一些转发。之前使用过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选项设置电源选项,跳闸之后让电脑自动开机,保证被访问机器长期在线)

