青年:最近我想升级一下电脑配置,向项目经理申请,他拒绝了,产品经理听到后,也帮忙出主意说,最近用的teamviewer都是商用的,你能为公司省点钱,找个免费的替代产品,换电脑的事就板上钉钉了。
禅师:国外认为人类是由猿猴进化而来的,在中国神话故事里也有类似的桥段。话说猴子如果想转世做人,就要把毛拔掉,有些猴子一毛不拔,直到现在也不配做人。
青年:大师就教教他们怎么好好做人吧
禅师:本猿已经够秃了,不能再拔了。
青年:目前市面上的远程工具动不动要收费,实在是不友好,尤其是teamviewer莫名其妙的就判为商用,苦其久矣。有没有什么更优秀的远程工具?
禅师:何必使用第三方工具,自己搭建一套内网穿透工具,想怎么玩就怎么玩,也避免了被卡脖子。目前推荐使用frp实现内网穿透,不仅可以远程访问,也可以通过 ssh 访问内网机器,通过http或https访问内网web 服务等等,让家里的电脑成为公网服务器,相比腾讯云或阿里云,简直把上云成本降为零。
青年:听上去很诱人,刚刚双十一买了一个腾讯云服务器,新用户99一年,1核CPU、1G内存,就这点配置也就只能挂个静态页面。听大师这么一说,感觉前途又光明起来了呢。
禅师:年轻人不要高兴的太早,脚踏实地才是我们搞技术的本分。接下来就一起踏上这场“穿透”之旅吧。首先第一步,先买一个云服务器。
青年满脑子充满了问号,内网穿透不就是为了干掉云服务器,怎么第一步就是先买一台云服务器呢,难道我们长大后都要变成自己讨厌的样子吗。
大师不紧不慢的说,买云服务器是为内网穿透找一个跳板,比如你公司里的电脑想要访问家里的电脑是不可能的,两个不同局域网的电脑就像两个不同世界里的人,说不上话的,这个云服务器就是穿线搭桥的红娘,千里姻缘一线牵。
首先说明的是,需要一台win10系统的家里电脑作为客户端,一台腾讯云服务器作为服务端,搭建好后就可以用手机,单位电脑,或者笔记本访问家里电脑上的服务了。
下载软件传到腾讯云服务器上
https://github.com/fatedier/frp/releases/
使用FinalShell工具将frp_0.34.3_linux_amd64.tar.gz上传到腾讯云的/opt路径下,在腾讯云服务器终端执行以下命令进行frp服务端设置
cd /opt
tar -zxvf frp_0.34.3_linux_amd64.tar.gz
mv frp_0.34.3_linux_amd64 frp
cd /opt/frp
vi frps.ini
frps.ini内容设置
[common]
bind_port = 7000
token = thismytoken
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = 123456
vhost_http_port = 10080
vhost_https_port = 10443
- bind_port表示客户端和服务端连接的端口,客户端也需同样设置并一致(必填)
- token是用于客户端和服务端连接的口令,客户端也需同样设置并一致(必填)
- dashboard_port是服务端仪表板的端口,服务端仪表板查看frp服务运行信息。(按需)
- dashboard_user和dashboard_pwd是打开仪表板页面登录用的用户名和密码(按需)
- vhost_http_port和vhost_https_port用于HTTP或HTTPS请求时使用的端口(按需)
按Esc输入:wq保存frps.ini内容
使用命令启动frp服务器端
cd /opt/frp
./frps -c frps.ini
启动成功
将从https://github.com/fatedier/frp/releases/下载的frp_0.34.3_windows_amd64.zip放在家里电脑的D盘下并解压
打开frpc.ini,设置如下
[common]
server_addr = 1.1.1.1
server_port = 7000
token = thismytoken
[rdb]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 6000
- server_addr就是购买腾讯云服务器给的外网访问的IP,此处的1.1.1.1是瞎写的,填上自己购买的腾讯云服务器IP即可,可在云服务器-实例-主IPv4地址看到(必填)
- bind_port表示客户端和服务端连接的端口,服务端也需同样设置并一致(必填)
- token是用于客户端和服务端连接的口令,服务端也需同样设置并一致(必填)
- [rdb]是一个规则名称,可自定义
- type是转发的协议类型
- local_port是本地应用的端口号,本例子的3389是远程桌面的默认端口
- remote_port是该条规则在服务端开放的端口号,在公司电脑win10电脑开始里输入mstsc,调出远程桌面连接,输入腾讯云服务器IP加remote_port就可远程家里电脑了,比如,填入1.1.1.1:6000
启动客户端
由于win10电脑没法像linux电脑使用命令行启动frp,需要新建一个vbs格式文件,按win10电脑的方式启动frp客户端,本质上也是启动文件和配置文件一起启动
创建文件frp.vbs,输入内容
dim objShell
set objShell=wscript.createObject("WScript.Shell")
iReturnCode=objShell.Run("D:\frpc\frp_0.34.3_windows_amd64\frpc.exe -c D:\frpc\frp_0.34.3_windows_amd64\frpc.ini",0,TRUE)
其中有两处路径替换为frpc.exe所在的目录,如D:\frpc\frp_0.34.3_windows_amd64
点击frp.vbs,查看任务管理器
在浏览器中输入腾讯云服务器IP:7500也就是1.1.1.1:7500,查看服务端仪表板frp服务信息,输入账号:admin,密码:123456
在单位win10电脑中点击开始,输入mstsc调出远程桌面连接,输入腾讯云服务器IP:6000也就是1.1.1.1:6000,就可以远程访问家里电脑了,以后就可以告别teamviewer了
由于以上家里的电脑(frp客户端)安装在win10系统上,使用3389可实现远程桌面,对标linux系统,远程访问软件就要用到FinalShell或Xshell,因此在linux系统上安装客户端需要在frpc.ini,加上以下内容:
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 7001
在FinalShell或Xshell中输入腾讯云服务器IP:7001也就是1.1.1.1:7001,加上linux的账密就可访问
在家里的电脑(frp客户端)开启了一个web服务,比如启动tomcat,那么客户端的配置文件frpc.ini需要填入以下内容
[web]
type = http
local_ip = 127.0.0.1
local_port = 8080
custom_domains = www.youdomain.com
以上custom_domains格外扎眼,这个就是域名设置,必须要有,www.youdomain.com还是在腾讯云买的最便宜5块钱一年,域名注册-我的域名-注册域名中即可购买,然后解析域名,将腾讯云服务器IP和自定义的域名绑定,以后访问腾讯云服务器就直接输入域名就可以了,比如用百度,就直接输入www.baidu.com
然后公司电脑浏览器输入www.youdomain.com:10080即可(此处的10080就是服务端设置的vhost_http_port),查看到家里电脑(frp客户端)启动的web服务
在家里电脑(frp客户端)的frpc.ini添加以下内容
[my_static_file]
type = tcp
remote_port = 6001
plugin = static_file
plugin_local_path = E:\\temp
plugin_strip_prefix = static
plugin_http_user = abc
plugin_http_passwd = 123
plugin是需要用到的插件
plugin_local_path是要对外暴露的文件目录
plugin_strip_prefix访问url携带的前缀
plugin_http_user访问账号
plugin_http_passwd访问密码
在单位电脑的浏览器输入:
http://1.1.1.1:6001/static/
输入账号密码就可查看家里电脑分享的文件,其中1.1.1.1是腾讯云服务器对外的IP
青年:说了那么多的腾讯云,请问大师这么卖力的为腾讯云宣传,能拿多少提成?
禅师:这个是商业机密,你能保守秘密吗?
青年:当然
禅师:我也能
总结:
1.frp服务端设置( 腾讯云服务器)
2.frp客户端设置(家里局域网电脑)
3.frp应用