一、什么是frp
1.1内网穿透
如下图所示,一样平常环境下,公网内的装备都可以或许被恣意一台装备访问到!!而差别局域网内的装备是相互隔离的,局域网A的装备是无法访问到局域网B内的装备
而内网穿透技能,顾名思义就是能让公网、大概当前局域网外的恣意装备访问到局域网内某个装备!如下图,装备C实现了内网穿透技能,以是局域网内恣意装备都可以或许访问到当前装备
那么有了内网穿透我们可以做啥呢?
1.长途访问和管理:内网穿透答应您从任何地方通过互联网毗连到位于其他局域网内中的装备或服务器,举个最简单的例子就是,当你在家里想长途访问公司的电脑时,由于你的两个装备是处于差别局域网内,默认环境下是无法相互访问的,这时就可以通过内网穿透来实现
2.游戏娱乐:比如你在家用电脑开游戏服,想约请朋侪参加联机,由于你家里的网络与朋侪的网络处于差别的局域网,当朋侪想要联机参加你的游戏服时,就必要你的电脑利用内网穿透技能将装备访问权袒露出去
3.共享本地服务:实现文件共享,如文件共享、打印机访问或监控摄像头;通过内网穿透技能,我们可以随时随地访问家里装备的资源、服务
4.测试和开辟环境:开辟职员可以利用内网穿透将本地开辟环境袒露给外部天下;比如我们要本地测试githubwebhooks就可以通过内网穿透来让外部的服务访问到我们本地服务
1.2frp简介原理简述
简单地说,frp就是一个反向署理软件,它的作用是将内网中的服务器袒露到互联网上,它体积轻量但功能很强大!!!通过它我们可以很方便实现内网穿透功能!!!
它着实有两个服务:
客户端frpc,安装在我们内网中某台物理机上
服务端frps,安装在一个公网服务器上
如下图:
起首公网上先摆设了frps服务,并设置了毗连端口
然后在内网中运行frpc服务,启动时会毗连到公网上的frpc服务,并保持保持住这个长毗连(假如断开了会举行重试)
当用户公网地点时,会先在本地看是否有可用的毗连,假如没有,那么frps服务就会将哀求转发到frpc服务上
再由frpc将哀求转发到内网中恣意一个服务上
FRP的长处:它可以隐蔽内网中的服务器,克制因直接袒露内网服务器导致的安全题目。别的,FRP还支持动态端口映射,可以方便地实现内网的服务器负载均衡
二、公网服务器frps摆设
上文提到,frp着实是有两个服务的,一个存在于公网的frp服务端,也是就frps;一个就是摆设在局域网物理机上的frp客户端,也就是frpc
那么本节将先容下frps的一个摆设,这里利用到的docker镜像是snowdreamtech/frps,必要留意的是本文利用的是最新的版本,以是设置文件和如今网上大部分教程是有所收支的!!!
如下图,从docker镜像的具体信息可以看出,该镜像发布时间的一个时间,以及利用的设置文件路径,设置文件具体信息可以看frp官网
下面开始正式摆设frps服务...
2.1添加设置文件
起首找个位置,添加一个设置文件frps.toml,我这里设置文件完备路径为/home/moyuanjun/frp/frps.toml,设置文件内容如下,具体每个设置项参考解释,更多设置可查阅frp官网
bindPort=7000
log.to="console"
vhostHTTPPort=7100
vhostHTTPSPort=7200
auth.method="token"
auth.token="password"
webServer.port=7300
webServer.addr="0.0.0.0"
webServer.user="admin"
webServer.password="admin"
2.2Docker容器摆设
设置文件整完,下面我们开始摆设docker!!!
起首先拉取下最新的docker镜像snowdreamtech/frps
sudodockerpullsnowdreamtech/frps
这里提前拉取了下镜像,重要目标就是要确认下拉取下来的snowdreamtech/frps镜像的版本是否是最新的,这里我就是简单看下镜像的创建时间(没办法,差别的docker源上最新版本大概存在差别,我这次就被坑惨了!!!)
1.docker运行:如下下令,运行snowdreamtech/frps,这里唯一要调解的是-v/home/moyuanjun/frp/frps.toml:/etc/frp/frps.toml,要将前面我本地设置文件路径改成你本身的
sudodockerrun-d\
--networkhost\
-v/home/moyuanjun/frp/frps.toml:/etc/frp/frps.toml\
--namefrps\
snowdreamtech/frps
2.3日记查察
上文我们已经完成了frpsdocker容器的摆设,但实际上我们只看到容器起来了!!但是frps具体运行环境我们是无法知道得知的!!
着实我们在frps.toml中设置了log.to="console",日记实际上已经输出了,这里我们直接通过dockerlogsfrps就可以查察到日记信息了:
固然假如我们想要查察及时的日记,可以利用dockerlogs-ffrps来开启一个及时的终端进程,就可以或许及时监控到日记的输出:
2.4frps仪表盘我本身的服务器是阿里云的,默认环境下防火墙只开启了几个常用端口,以是在开始前,我这边还必要设置下阿里云的防火墙,为frp开放了一批端口出来还记得我们在frps.toml中设置了仪表盘信息嘛,下面我们可以通过ip/域名:[webServer.port]来访问仪表盘页面!!!初次必要登录,用户名暗码就是frps.toml设置的内容:
如下图,就是仪表盘的界面了:
三、内网frpc摆设下面我们还必要一个frpc客户端,当我们运行frpc服务时将和公网上的frps创建一个长毗连,当我们访问公网不存在的服务时会转发到frpc,然后frpc再做一个二次转发那么本节将先容下frpc的一个摆设,这里利用到的docker镜像是snowdreamtech/frpc,必要留意的是本文利用的是最新的版本,以是设置文件和如今网上大部分教程是有所收支的!!!如下图,从docker镜像的具体信息可以看到,该镜像的一个发布时间,以及利用的设置文件路径,设置文件具体信息可以看frp官网
下面开始正式摆设frpc服务...3.1添加设置文件还是一样,我们必要先找个位置,添加一个设置文件frpc.toml,我这里设置文件完备路径为/Users/qianyin/frp/frpc.toml,设置文件最简内容如下,具体每个设置项参考解释,更多设置可查阅frp官网
serverPort=7000
serverAddr="www.kunlunxu.cc"
log.to="console"
auth.token="password"
3.2Docker容器摆设设置文件整完,下面我们开始摆设docker!!!起首先拉取下最新的docker镜像snowdreamtech/frpc
dockerpullsnowdreamtech/frpc
这里提前拉取了下镜像,重要目标就是要确认下拉取下来的snowdreamtech/frpc镜像的版本是否是最新的,这里我就是简单看下镜像的创建时间(没办法,差别的docker源上最新版本大概存在差别,我这次就被坑惨了!!!)
docker运行:如下下令,运行snowdreamtech/frpc,这里唯一要调解的是-v/Users/qianyin/frp/frpc.toml:/etc/frp/frpc.toml,要将前面我本地设置文件路径改成你本身的
dockerrun-d\
--networkhost\
-v/Users/qianyin/frp/frpc.toml:/etc/frp/frpc.toml\
--namefrpc\
snowdreamtech/frpc
同样的,这里我们可以通过dockerlogsfrpc来查察启动日记
固然我们也可以通过查察frps仪表板中客户端毗连数,来确定frpc的毗连环境
3.3将内网上本地html服务袒露到公网(tcp版本)
起首本地我们先起一个服务,我这里直接利用vscode插件LiveServer起了一个静态服务
下面我们修改frpc设置文件,添加一个署理设置,我们盼望的是,当访问公网ip/域名:7001可以或许通过frps转发到内网上的frpc服务上,然后再通过fprc署理到内网的192.168.0.108:5500上;设置完备内容如下,参数先容看解释,重要就是加了[[proxies]]设置:
#frpc.toml
serverPort=7000#[必选]要毗连的frps端口
serverAddr="www.kunlunxu.cc"#[必选]要毗连的frps地点
log.to="console"#[可选]日记设置,通过打印的方式输出日记
auth.token="password"#[可选]token设置,frps设置的token,着实就是暗码
+[[proxies]]
+name="web"#署理名称(任意填)
+type="tcp"#署理范例
+localIP="192.168.0.108"#署理地点,要转发到哪个地点
+localPort=5500#署理端口,要转发到哪个端口
+remotePort=7001#长途端口(和长途frps哪个端口绑定在一起,访问对应端口将利用该署理)
重启frpc:着实就是重启docker容器
dockerstopfrpc
dockerstartfrpc
访问http://www.kunlunxu.cc:7001将正常展示内网上本地项目:
下面是一个浅显流程图:
3.4将内网上本地html服务袒露到公网(html版本)
下面我们换一种设置方式,下面是完备设置内容如下,参数先容看解释;由于我们在frps上设置了vhostHTTPPort=7100那么当我们访问公网服务器7100端口时,转发到frpc后会走type="http"的设置:
#frpc.toml
serverPort=7000#[必选]要毗连的frps端口
serverAddr="www.kunlunxu.cc"#[必选]要毗连的frps地点
log.to="console"#[可选]日记设置,通过打印的方式输出日记
auth.token="password"#[可选]token设置,frps设置的token,着实就是暗码
[[proxies]]
name="web-tcp"#署理名称(任意填)
type="tcp"#署理范例
localIP="192.168.0.108"#署理地点,要转发到哪个地点
localPort=5500#署理端口,要转发到哪个端口
remotePort=7001#长途端口(和长途frps哪个端口绑定在一起,访问对应端口将利用该署理)
+[[proxies]]
+name="web-html"#署理名称(任意填)
+type="http"#署理范例
+localIP="192.168.0.108"#署理地点,要转发到哪个地点
+localPort=5500#署理端口,要转发到哪个端口
+customDomains=["www.kunlunxu.cc"]#限定公网地点,只有对应地点上
frps转发了html才会走到这里
重启frpc:着实就是重启docker容器
dockerstopfrpc
dockerstartfrpc
访问http://www.kunlunxu.cc:7100将正常展示内网上本地项目:
下面是一个浅显流程图:
四、碰到题目
1、版本题目:如今网上大部分文章的设置文件还是frps.ini或frpc.ini,写法上也是老的写法,以是这里假如你安装的是最新版本那么肯定请以frp官网为准
2、怎样确定Docker容器利用的设置文件是哪个?答案是可直接查察容器的信息来举行确认
怎样查察日记?正如上文可在设置文件中设置log.to="console"并共同dockerlogs来查察服务输出的日记
1.上文中webServer.addr设置了"0.0.0.0",是由于默认环境下是该值为127.0.0.1,在测试过程中发现假如保持默认值无法访问到仪表盘页面了!!!
2.在最开始我是跑了一个React项目,然后试图在frpc中将项目袒露出去,末了发现不停无法署理乐成!!!经排查发现原来该项目无法通过内网IP举行访问的,固然相对的办理办法就是必要调解webpack中的设置!!厥后省方便就直接利用vscode插件LiveServer起了一个静态服务来举行测试!!以是这里重要就是想提示下,在测试前请确保你的本地服务可以或许正常通过内网IP举行访问,同时设置中只管不要直接写127.0.0.1,只管利用具体的内网IP
3.在阿里云上,拉取snowdreamtech/frps镜像时总是发现最新版本和hub.docker上对不上,经排查发现题目出在Docker设置的源上,由于我这边利用了阿里云加快器,但是由于DockerHub的限定,导致利用镜像加快器后无法获取最新官方镜像,临时办理办法就是去掉加快器设置,直接毗连DockerHub举行获取:
rm/etc/docker/daemon.json
sudosystemctldaemon-reload
sudosystemctlrestartdocker
版权声明:本文为CSDN博主「杨治中」的原创文章,依照CC4.0BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/huzia/article/details/134060346
链接:https://juejin.cn/post/7293392480452247562
END
官方站点:www.linuxprobe.com
Linux下令大全:www.linuxcool.com
刘遄老师QQ:5604215
Linux技能交换群:2636170
(新群,火热加群中……)
想要学习Linux体系的读者可以点击"阅读原文"按钮来相识册本《Linux就该这么学》,同时也非常得当专业的运维职员阅读,成为辅助您工作的高代价工具书!
我要评论