当前位置: 首页 > 后端技术 > PHP

使用Frp内网穿透快速搭建web应用实践

时间:2023-03-29 14:07:05 PHP

一、背景笔者最近折腾docker服务比较多。这几天想把内网的服务搬到公网,但是docker对内存要求高。具有高内存服务器的云服务更昂贵。家里虽然有台记性不错的老笔记本,但是没有公网IP地址,看来还是没办法。纠结之际,想起了FRP这个内网渗透软件,又复习了一遍。看了施工方法,发现施工步骤还是比较简单的。为方便日后参考,我把施工步骤详细记录下来。2.操作步骤配置服务器配置客户端检查和测试3.配置服务器FRP分为服务器端和客户端。一台服务器可以对应多个客户端。我首先需要在服务器上下载并安装FRP3.1文件选择frp,它是一款开源的内网穿透软件。github源码和文档地址如下https://github.com/fatedier/frp文档中可以看到编译好的二进制文件。URL地址如下:https://github下载地址中有多个版本.com/fatedier/frp/releases。我需要选择我对应系统的版本。笔者服务器使用64位Centos系统,客户端使用mac系统,所以需要下载frp_0.21.0_linux_amd64.tar.gz和frp_0.21.0_darwin_amd64.tar.gz两个压缩包,如图下图3.2下载解压现在需要在服务器中下载对应的版本,首先通过ssh登陆服务器,参考如下命令sshroot@121.42.11.33登陆服务器后,需要使用wget下载文件。参考命令如下:wgethttps://github.com/fatedier/frp/releases/download/v0.21.0/frp_0.21.0_linux_amd64.tar.gz解压刚刚下载的压缩文件,参考如下命令:tar-zxvffrp_0.21.0_linux_amd64.tar.gz命令返回结果如下:frp_0.21.0_linux_amd64/frp_0.21.0_linux_amd64/frps_full.inifrp_0.21.0_linux_amd64/frps.inifrp4_frp0.frp_0.frp_0.21。.21.0_linux_amd64/frpc_full.inifrp_0.21.0_linux_amd64/frpsfrp_0.21.0_linux_amd64/LICENSEfrp_0.21.0_linux_amd64/frpc.ini解压后进入文件夹查看,参考命令返回:cdfrp_0.21.0_linux_amd64/frpc.ini结果如下&&r--1rootroot12KAug1212:38LICENSE-rwxrwxr-x1rootroot7.2MAug1212:34frpc-rw-rw-r--1rootroot126Aug1212:38frpc.ini-rw-rw-r--1rootroot5.6KAug1212:38frpc_full.ini-rwxrwxr-x1rootroot8.6MAug1212:34frps-rw-rw-r--1rootroot26Aug1212:38frps.ini-rw-rw-r--1rootroot2.4KAug1212:38frps_full.ini3.3修改配置返回结果可以看到多个文件,不过我只需要关心frps和frps.ini就可以查看配置文件了。参考命令如下catfrps.ini返回的结果如下:[common]bind_port=7000返回结果中可以看到端口为7000,这个端口就是FRP与客户端通信的端口.因为笔者需要搭建一个web服务,所以需要在配置文件中加入。http服务的监听端口,参考如下命令vimfrps.ini修改配置文件,修改后的配置文件内容如下[common]bind_port=7000vhost_http_port=88883.4服务启动修改完成后,作者可以启动FRPS服务,参考命令如下/frps-cfrps.inireturnresult2018/08/2923:43:30[I][service.go:130]frpstcplistenon0.0.0.0:70002018/08/2923:43:30[I][service.go:172]http服务监听0.0.0.0:88882018/08/2923:43:30[I][root.go:207]启动frps成功4.配置客户端配置好服务器后,笔者还需要在内网配置客户端。此客户端也是Web服务器。具体操作如下4.1下载解压构建FRP客户端,首先需要在客户端下载FRP压缩文件;笔者mac系统下载的文件及对应参考命令如下wgethttps://github下载ub.com/fatedier/frp/releases/download/v0.21.0/frp_0.21.0_darwin_amd64.tar.gz后,还需要解压该文件。参考命令如下:tar-zxvffrp_0.21.0_darwin_amd64.tar.gz命令执行后返回结果如下xfrp_0.21.0_darwin_amd64/xfrp_0.21.0_darwin_amd64/frps_full.inixfrp_0.21.0_darwin_amd64/frps.inixfrp_0。21.0_darwin_amd64/frpcxfrp_0.21.0_darwin_amd64/frpc_full.inixfrp_0.21.0_darwin_amd64/frpsxfrp_0.21.0_darwin_amd64/LICENSExfrp_0.21.0_darwin_amd64/frpc.ini进入解压后的文件夹,查看文件列表。参考命令如下:cdfrp_0.21.0_darwin_amd64&&ll执行后返回信息如下:total35632-rw-r--r--1songstaff11KAug1212:38LICENSE-rwxr-xr-x1首歌曲8.0MAug1212:33frpc-rw-r--r--1首歌曲126BAug1212:38frpc.ini-rw-r--r--1首歌曲5.6KAug1212:38frpc_full.ini-rwxr-xr-x1首曲谱9.4MAug1212:33frps-rw-r--r--1首曲谱26BAug1212:38frps.ini-rw-r--r--1songstaff2.3KAug1212:38frps_full.ini4.2配置服务客户端时需要注意两个文件,分别是frpc和frpc.ini。查看配置文件的默认内容是什么,参考下面的命令catfrpc.ini返回结果如下[common]server_addr=127.0.0.1server_port=7000[ssh]type=tcplocal_ip=127.0.0.1local_port=22remote_port=6000在默认的客户端配置文件中,配置了一个TCP映射,但是我需要搭建一个web服务,所以我也需要添加一个HTTP映射并修改对应的服务器IP地址。参考命令如下。vimfprc.ini编辑后的结果如下[common]server_addr=121.42.11.33server_port=7000[ssh]type=tcplocal_ip=127.0.0.1local_port=22remote_port=5000[web]type=httplocal_port=8080custom_domains=test.songboy。net4.3启动服务并修改客户端的配置文件后,我需要让客户端的FRP连接到服务器的FRP服务。参考命令如下:sudo./frpc-cfrpc.ini执行命令后,返回结果如下2018/08/3009:50:07[I][proxy_manager.go:300]proxyremoved:[]2018/08/3009:50:07[I][proxy_manager.go:310]添加代理:[sshweb]2018/08/3009:50:07[I][proxy_manager.go:333]访客删除:[]2018/08/3009:50:07[I][proxy_manager.go:342]访问者添加:[]2018/08/3009:50:07[I][control.go:246][55b8b354889e6f44]登录服务器成功,获取运行id[55b8b354889e6f44],服务器udp端口??[0]2018/08/3009:50:07[I][control.go:169][55b8b354889e6f44][ssh]启动代理ysuccess2018/08/3009:50:07[I][control.go:169][55b8b354889e6f44][web]startproxysuccess在返回结果中可以看到ssh服务代理成功,web服务也是代理成功,说明作者的配置是正确的5.检查和测试前面的操作已经成功配置了内网穿透服务。现在笔者需要通过ssh登录和web服务验证服务是否可用。操作步骤如下5.1测试Web服务测试Web服务是否穿透通过访问外网地址,如果能在内网打开Web服务,则说明建立成功。这里需要搭建一个虚拟主机。参展步骤如下。5.1.2添加虚拟主机要让用户通过外网访问Web服务,首先需要配置一个域名,解析到FRP服务器。这里为了验证,我们使用hosts来添加记录。参考命令如下sudovim/etc/hosts在末尾添加一条主机记录。参考内容如下:121.42.11.33test.songboy.net添加的内容中,IP地址是外网用户可以访问的IP地址,也就是我启动的FRP服务器的IP地址建造。接下来需要添加虚拟主机,所以需要修改nginx的配置文件,在nginx配置文件中添加如下配置server{listen8080;server_nametest.songboy.net;root/Users/song/mycode/work/media-server-api/public;indexindex.htmlindex.htmindex.php;location/{try_files$uri$uri//index.php?$query_string;}location~\.php${fastcgi_pass127.0.0.1:9000;fastcgi_indexindex.php;fastcgi_paramSCRIPT_FILENAME$document_root$fastcgi_script_name;includefastcgi_params;}}重启nginx,参考命令sudonginx-sreload5.1.3通过浏览器访问网站,网址地址如下http://test.songboy.net:8888/访问结果如下图5.2测试SSH服务验证SSH的方法是通过ssh连接外网地址。如果登录到本地服务器,则说明ssh服务搭建成功。使用ssh登录,参考命令如下ssh-p5000song@test.songboy.net查看当前文件夹,验证是否映射成功,参考命令如下ls-l返回结果如下总计0drwx------@4首歌曲13671918:37Applicationsdrwx------@12首歌曲40883009:47Desktopdrwx------@30首歌曲10208608:58Documentsdrwx-----+120songstaff408082917:05下载drwx------@65songstaff221081816:12Librarydrwx---+5songstaff17081715:19Moviesdrwx------+5songstaff17072611:45Musicdrwx------+4songstaff13682819:21Picturesdrwxr-xr-x+4songstaff13671916:33Publicdrwxr-xr-x8歌曲员工27282414:26configdrwxr-xr-x22歌曲员工74881411:00datadrwxr-xr-x7歌曲员工23882419:31dockerFiledrwxr-xr-x12歌曲员工40883009:28filesdrwxr-xr-x7songstaff23881309:54mycoderwxrwxrwx20songstaff68082716:35在xhprof的返回结果中可以看到文件夹和客户端的文件夹一致,说明ssh服务和验证成功作者:唐庆松微信:songboy8888日期:2018-08-30