热门标签 | 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的mysql服务器的主从架构实现说明:本文选用172.16.22.1作为主服务器,172.16.22.3作为从服务器从服务器的mysql软件版 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 本文主要介绍关于linux文件描述符设置,centos7设置文件句柄数,centos7查看进程数的知识点,对【Linux之进程数和句柄数】和【linux句柄数含义】有兴趣的朋友可以看下由【东城绝神】投 ... [详细]
  • 本文比较了eBPF和WebAssembly作为云原生VM的特点和应用领域。eBPF作为运行在Linux内核中的轻量级代码执行沙箱,适用于网络或安全相关的任务;而WebAssembly作为图灵完备的语言,在商业应用中具有优势。同时,介绍了WebAssembly在Linux内核中运行的尝试以及基于LLVM的云原生WebAssembly编译器WasmEdge Runtime的案例,展示了WebAssembly作为原生应用程序的潜力。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
  • 本文介绍了5个基本Linux命令行工具的现代化替代品,包括du、top和ncdu。这些替代品在功能上进行了改进,提高了可用性,并且适用于现代化系统。其中,ncdu是du的替代品,它提供了与du类似的结果,但在一个基于curses的交互式界面中,重点关注占用磁盘空间较多的目录。 ... [详细]
  • 该ROM为红米3S3X手机提供了最强大的自定义功能,包括美观流畅的界面、全新的起航动画、魔幻的动画效果以及冰箱冻结功能。同时,还提供了高级设置,包括悬浮窗口显示自定义、WIFI密码查看器、S8炫酷跑马灯显示自定义等多项实用功能。此外,该ROM还优化了手机的待机时间、wifi连接速度,并支持状态栏实时网速显示和电池电量百分比显示。 ... [详细]
  • 进入配置文件目录:[rootlinuxidcresin-4.0.]#cdusrlocalresinconf查看都有哪些配置文件:[rootlinuxid ... [详细]
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社区 版权所有