当前位置: 首页 > Linux

使用frp搭建内网穿透的概念

时间:2023-04-06 02:57:26 Linux

内网穿透内网穿透,即NAT穿透,网络连接的名词,当电脑在局域网中时,外网和内网的电脑节点需要连接和通信,有时候会出现不支持内网穿透的情况。——来自百度百科。简单来说,就是让Internet(外网)设备访问LAN(内网)设备提供的服务,这里的设备通常是电脑。内网穿透应用场景对于开发者来说,一个典型的应用场景就是第三方授权(一般为oauth2.0)和支付回调的开发调试。通过内网穿透工具将第三方SDK的回调地址映射到本地开发环境,实现实时调试。二是节省部署成本(通常是公网服务器的成本)。通过将应用程序部署在本机,然后利用内网穿透工具对外提供服务,这样不仅可以节省服务器租用成本,还可以提高服务器的硬件配置。本文适用于第一种情况,即针对低频开发调试。内网渗透搭建工具1.ngrok这是一款国外的渗透工具。1.0版是开源的。目前,2.0及以上版本已经闭源,并提供免费和付费服务。2.frp是国产开源工具。最新版本为0.26.0。它有更详细的中文文档,并一直在维护和更新。由于frp一直是开源的,并且积极维护更新频繁,再加上中文文档的加持,本文最终选择frp作为构建工具。注意:frp需要有公网ip的服务器独立搭建。本文使用阿里云ECS。frp下载及版本选择官方github发布地址,最新版本为0.26.0版本选择说明:frp_0.26.0_darwin_amd64.tar.gz——适用于MacOS系统frp_0.26.0_freebsd_386.tar.gz——适用于FreeBSD32位系统frp_0.26.0_freebsd_amd64.tar.gz-适用于FreeBSD64位系统frp_0.26.0_linux_386.tar.gz-适用于Linux32位系统frp_0.26.0_linux_amd64.tar.gz-适用于Linux64位系统frp_0.26.0_linux_arm。tar.gz-适用于Linux32位嵌入式系统frp_0.26.0_linux_arm64.tar.gz-适用于Linux64位嵌入式系统frp_0.26.0_linux_mips.tar.gzfrp_0.26.0_linux_mips64.tar。gzfrp_0.26.0_linux_mips64le.tar.gzfrp_0.26.0_linux_mipsle.tar.gzfrp_0.26.0_windows_386.zip-forWindows32位系统frp_0.26.0_windows_amd64.zip-forWindows64位系统本文服务器系统为CentOS764-位我选择了frp_0.26.0_linux_adm64.tar.gz;本机系统是MacOSX,所以我选择了frp_0.26.0_darwin_amd64.tar.gz。下载方法:1.直接点击链接,使用浏览器下载到本机。使用ssh工具连接阿里云ECS,然后使用lrzsz工具的rz命令将frp_0.26.0_linux_amd64.tar.gz上传到服务器,解压压缩包frp_0.26.0_darwin_amd64.tar.gz直接上本地机器。注:ssh工具和lrzsz工具的安装和使用可以搜索。2、终端命令方式2.1.服务器使用wget下载wgethttps://github.com/fatedier/frp/releases/download/v0.26.0/frp_0.26.0_linux_amd64.tar.gz解压tar-xzvffrp_0.26.0_linux_amd64.tar.gz2.2,使用curl下载curl-Ohttps://github.com/fatedier/frp/releases/download/v0.26.0/frp_0.26.0_darwin_amd64.tar.gz解压tar-xzvffrp_0.26.0_darwin_amd64。tar.gzfrp压缩包文件说明每个压缩包解压后包含以下文件和一个systemd文件夹:frpc——客户端可执行二进制文件frpc_full.ini——客户端配置文件frpc.ini——包括所有配置项——使用的配置文件由客户端,包括最简单的配置frps——服务端的可执行二进制文件frps_full.ini——包含所有配置项的服务端配置文件Configuresystemd-文件夹,用于添加frpc和frps作为服务配置,使用linux下systemd作为daemon,macos下launchd作为daemon注意:服务器只需要使用frp_0.26.0_linux_amd64目录下的frps相关文件,本机(客户端)只需要使用frp_0目录下的frpc相关文件.26.0_darwin_amd64目录。服务器配置和启动1.打开服务器上的frps.ini:vifrps.ini注意:确保已经进入工作目录/root/frp_0.26.0_linux_amd64/。2、配置frps监听的端口:按i进入编辑模式,在最后添加一行:vhost_http_port=8080,这样frps.ini最终配置如下:[common]bind_port=7000vhost_http_port=8080注意:vhost_http_port监听的端口不能被占用,否则会导致frps无法启动。端口可根据实际需要修改;bind_port端口为frp服务器与客户端的通信端口,默认为7000。3、保存配置退出:按Esc键,输入:wq。4、启动frps程序:./frps-c./frps.ini注意:出现permissiondenied错误,说明frps可能没有权限运行,先grant:chmod700frps然后执行启动命令再次。客户端配置及启动1、进入本机frp_0.26.0_darwin_amd64目录,打开frpc.ini文件;2、以配置访问内网的web服务(常见情况)为例,最后修改frpc.ini如下:[common]server_addr=x.x.x.xserver_port=7000[web]type=httplocal_ip=127.0.0.1local_port=3000注:x.x.x.x是运行frps的服务器的公网ip,local_port是本机启动web服务对应的端口。请根据实际情况进行修改。3、启动frpc程序:sudo./frpc-c./frpc.ini注意:此时frpc会尝试通过7000端口与frps建立通信连接,如果一切顺利,终端会提示连接成功成功了;但实际情况显示连接失败,因为还少了两步:1、需要登录阿里云控制台,将7000端口添加到阿里云ECS安全组的入站规则中。同样,8080端口也需要添加。具体操作参考:添加安全组规则;2.在服务器防火墙规则中添加7000和8080,具体操作参考:CentOS7使用firewalld打开和关闭防火墙和端口。一切准备就绪后,frpc启动并连接成功,打开浏览器输入http://x.x.x.x:8080即可访问本机的服务http://127.0.0.1:3000(当然本机的web服务需要处于启动状态)。至此,一个最简单配置的基于frp的内网穿透搭建完成。更多配置和使用请参考官方文档:frp官方中文文档。扩展:在服务器端添加frps作为服务通过上面的方法在终端直接启动frps会占用终端,而且停止重启等管理操作不方便。为了方便管理frps的启动、停止、重启和启动,我们需要将frps添加为系统服务,通过systemd守护进程进行管理。在frp_0.26.0_linux_amd64目录下的systemd目录下,已经为我们准备了一个添加服务的模板:frpc.servicefrpc@.servicefrps.service——服务器使用这个模板frps@.service1,进入目录/root/frp_0。26.0_linux_amd64/systemd,编辑frps.service:cd/root/frp_0.26.0_linux_amd64/systemdvifrps.service2,将user=nobody改为user=root,保存;注意:root表示运行frps的用户。3、服务运行配置项为:ExecStart=/usr/bin/frps-c/etc/frp/frps.ini,我们需要将二进制文件frps复制或者移动到/usr/bin目录下,配置该文件frps.ini复制或移动到/etc/frp目录,但/etc/frp目录不存在,需要手动创建一个。3.1.将frps复制到/usr/bin目录:cp~root/frp_0.26.0_linux_amd64/frps/usr/bin3.2,创建frp目录,将frps.ini复制到/etc/frp目录:cd/etcmkdirfrpcp~root/frp_0。26.0_linux_amd64/frps.ini/etc/frp4.将frps.service移动到/etc/systemd/system目录:mv~root/frp_0.26.0_linux_amd64/systemd/frps.service/etc/systemd/system5。完成以上步骤,我们就可以愉快的使用systemctl来管理frps了:启动frps:systemcltstartfrps停止frps:systemcltstopfrps重启frps:systemctlrestartfrps查看frps状态:systemctlstatusfrps启动frps:systemctlenablefrps这样,客户端程序frpc可以添加为管理服务。不同的是,MacOS使用launchd而不是systemd进行管理。具体操作方法请自行搜索,但如果只是用于低频开发调试,好像没必要给frpc加客户端,毕竟终端一条启动命令就可以了。更多实战经验分享,请参考:我的个人博客