热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

frp内网穿透教程

简介我们常常会有远程访问服务器的需求,然而我们的服务器虽然能够访问外网(如百度等网站),但是却没有公网IP,

简介

我们常常会有远程访问服务器的需求,然而我们的服务器虽然能够访问外网(如百度等网站),但是却没有公网IP,这就是说,我们是无法在非局域网内部访问服务器的,因此内网穿透就成了一个需求。frp则提供了一种优雅的内网穿透方案,它是一个高性能反向代理应用,支持UDP和TCP协议,当需要将内网的一些服务(如ssh、tensorboard、web等服务)转发出来在自己电脑上随时访问的时候,frp是一个很不错的选择,因为它几乎不需要对需要穿透的服务器的防火墙进行配置。


优势

不同于Teamviewer或者向日葵这种图形界面的穿透工具,frp不访问图像界面从而对带宽的需求比较小,因此也不容易出现卡顿等情况。而且,一旦服务器出现断网情况时,frp会在网络恢复后自动重连,若将其注册为系统服务并设置开机自启,那么将永远不会掉线。相比于一些内网穿透服务,frp配置简单,可选加密,公网IP服务器只做解析,实际数据不经过它,因此是非常安全的。


服务端配置

这里的服务端指的是一台拥有公网IP的服务器(可在阿里云等购买学生机,配置足够,也不贵),这也是frp部署的必要设备。我们要进行内网穿透的服务器(如实验室的GPU主机)在frp服务中,称为客户端。

首先,通过官方仓库下载服务软件包,由于我这边的客户端和服务端都是Linux系统(一般都是这个情况),我这边两边都通过下载链接下载程序包(你也可以本地下载后拷贝或者上传过去)。

下面,我们首先讲解服务端的配置,通过tar -xzvf frp_0.35.1_linux_amd64.tar.gz命令解压frp服务程序包,然后进入解压后的目录中,会看到如下图所示的文件结构,其中有两个绿色的frpcfrps为客户端和服务端的可执行文件,frpc.inifrps.ini则为对应的配置文件,其余文件不需要太过在意。

在这里插入图片描述

首先编辑frps.ini这个服务端配置文件(命令为vim frps.ini),修改为如下内容。

[common]
# 这个绑定端口表示的是frp客户端访问frp服务端的端口,客户端配置文件中要和它一致
bind_port = 10000
# frp服务的管理页面端口
dashboard_port = 7500
# frp服务管理员账号
dashboard_user = root
# frp服务管理员密码
dashboard_pwd = admin

上述就是服务端的配置文件,各项的含义已经进行了详细备注,还需要注意的是,如果你使用的是阿里云、腾讯云之类的云主机,其实默认是开启了防火墙(或者安全组)的,配置文件中涉及的端口是无法访问的,这也之后配置的frp客户端是无法和frp服务端建立通讯的,因此需要需要在安全组中添加相应的TCP规则。

此时,我们就可以通过nohup ./frps -c frps.ini >/dev/null 2>&1 &来开启frp服务并放到后台运行了,当然也可以用screen新建会话执行./frps -c frps.ini然后保存会话即可,我这里使用的是screen会话的方式,具体操作流程和输出结果如下。

screen -S frp
./frps -c frps.ini
Ctrl A + D离开会话

在这里插入图片描述

此时,服务端的配置其实已经完成了,如果你想要验证服务端的配置是否成功,可以在自己的电脑上通过公网服务器ip:7500并使用上面配置的管理员账户和密码登录,看到如下界面,代表frp服务端的配置是没有问题的。

在这里插入图片描述


客户端配置

同样的,客户端机器也下载同一版本的和操作系统适配的frp程序包,我这里用的和上面服务端用的是一致的,因为都是64位Linux系统。

解压进入解压得到的目录中,编辑frpc.ini配置文件(命令为vim frpc.ini),首先的common项为与服务端建立连接的必选项,后面每个中括号及其下面的内容为一个转发配置,包括中括号括着的配置名(随意)、连接类型(type = tcp默认不写为tcp)、本机ip(local_ip = 127.0.0.1即可)、需要进行转发的服务使用的端口(如ssh服务则配置local_port = 22)以及服务端上对应的访问端口(remote_port = 2022,使用公网ip+这个端口即可访问内网主机的服务,前提这个端口在公网服务器上要没有使用,显然22端口肯定是使用的,所以这里改为2022)。

由于我这里只需要转发ssh服务、tensorboard服务和web服务,所以配置如下。这里需要补充说明的是,转发的服务务必保证开启才能通过公网ip访问到。

[common]
# 必填项,为服务端frp所在服务器的公网ip和其对应的bind_port
server_addr = 填公网ip
server_port = 10000# 下面每个中括号及其下面的项为一个端口转发配置# 第一个,转发22端口的ssh服务,命名为amax-ssh,命名随意
[amax-ssh]
# 连接类型
type = tcp
# 本机ip
local_ip = 127.0.0.1
# 本机服务端口
local_port = 22
# 服务端对应端口
remote_port = 2022[amax-tensorboard]
local_ip = 127.0.0.1
local_port = 6006
remote_port = 6006[amax-web]
local_ip = 127.0.0.1
local_port = 80
remote_port = 8000

修改配置完成后,通过nohup ./frpc -c frpc.ini >/dev/null 2>&1 &后台开启服务或者类似上面新开screen会话的方式后台开启服务,结果如下图。

在这里插入图片描述

此时通过公网ip加上2022端口就能远程连接内网服务器了,需要注意输入正确的内网服务器的账号和密码即可,相应的tensorboard也可以通过浏览器输入公网ip:6006访问,得到如下结果。

在这里插入图片描述


自动启动配置

由于服务器的重启会导致后台进程丢失,因此需要重新开启frp服务端和客户端,着显然是很不稳定的,因此可以将其注册为系统服务,重启后自动启动即可,由于客户端和服务端配置类似,我这里就以客户端为例。

首先,注册系统服务frpc,命令为vim /lib/systemd/system/frpc.service,此处包括下面的配置都需要管理员权限。

在其中填写下面的内容,注册服务,写完后保存并退出。

[Unit]
Description=frpc service
After=network.target network-online.target syslog.target
Wants=network.target network-online.target[Service]
Type=simple# 此处需要修改为你的开启frpc服务的命令,下面知识我的例子
ExecStart=/root/frp_0.35.1_linux_amd64/frpc -c /root/frp_0.35.1_linux_amd64/frpc.ini[Install]
WantedBy=multi-user.target

此时通过systemctl start frpc来开启服务,并通过systemctl enable frpc来配置服务开机自启,此时就可以保证重启后frp服务不会丢失了。


总结

本文讲解了如何通过公网主机部署frp服务进行内网穿透,它可以方便地进行内网服务地转发。如果我的文章对你有所帮助,欢迎点赞收藏评论一键三连,你的支持是我不懈创作的动力。


推荐阅读
  • 用阿里云的免费 SSL 证书让网站从 HTTP 换成 HTTPS
    HTTP协议是不加密传输数据的,也就是用户跟你的网站之间传递数据有可能在途中被截获,破解传递的真实内容,所以使用不加密的HTTP的网站是不 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 如果应用程序经常播放密集、急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了。因为MediaPlayer存在如下缺点:1)延时时间较长,且资源占用率高 ... [详细]
  • 本文详细介绍了在 CentOS 7 系统中配置 fstab 文件以实现开机自动挂载 NFS 共享目录的方法,并解决了常见的配置失败问题。 ... [详细]
  • 应用链时代,详解 Avalanche 与 Cosmos 的差异 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 本文介绍了如何利用 `matplotlib` 库中的 `FuncAnimation` 类将 Python 中的动态图像保存为视频文件。通过详细解释 `FuncAnimation` 类的参数和方法,文章提供了多种实用技巧,帮助用户高效地生成高质量的动态图像视频。此外,还探讨了不同视频编码器的选择及其对输出文件质量的影响,为读者提供了全面的技术指导。 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 在软件开发过程中,经常需要将多个项目或模块进行集成和调试,尤其是当项目依赖于第三方开源库(如Cordova、CocoaPods)时。本文介绍了如何在Xcode中高效地进行多项目联合调试,分享了一些实用的技巧和最佳实践,帮助开发者解决常见的调试难题,提高开发效率。 ... [详细]
  • 本文详细介绍了在 Ubuntu 系统上搭建 Hadoop 集群时遇到的 SSH 密钥认证问题及其解决方案。通过本文,读者可以了解如何在多台虚拟机之间实现无密码 SSH 登录,从而顺利启动 Hadoop 集群。 ... [详细]
  • 本文介绍如何在 Android 中自定义加载对话框 CustomProgressDialog,包括自定义 View 类和 XML 布局文件的详细步骤。 ... [详细]
  • 微信小程序详解:概念、功能与优势
    微信公众平台近期向200位开发者发送了小程序的内测邀请。许多人对微信小程序的概念还不是很清楚。本文将详细介绍微信小程序的定义、功能及其独特优势。 ... [详细]
  • 本文详细介绍了MySQL数据库的基础语法与核心操作,涵盖从基础概念到具体应用的多个方面。首先,文章从基础知识入手,逐步深入到创建和修改数据表的操作。接着,详细讲解了如何进行数据的插入、更新与删除。在查询部分,不仅介绍了DISTINCT和LIMIT的使用方法,还探讨了排序、过滤和通配符的应用。此外,文章还涵盖了计算字段以及多种函数的使用,包括文本处理、日期和时间处理及数值处理等。通过这些内容,读者可以全面掌握MySQL数据库的核心操作技巧。 ... [详细]
  • 本文介绍了如何使用 Node.js 和 Express(4.x 及以上版本)构建高效的文件上传功能。通过引入 `multer` 中间件,可以轻松实现文件上传。首先,需要通过 `npm install multer` 安装该中间件。接着,在 Express 应用中配置 `multer`,以处理多部分表单数据。本文详细讲解了 `multer` 的基本用法和高级配置,帮助开发者快速搭建稳定可靠的文件上传服务。 ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
author-avatar
真理往往是废话
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有