FRP内网穿透
导读
校园网内也就是局域网内部机器由于没有公网IP,因此无法被局域网外部的客户端直接访问。FRP就是这样一个用于内网穿透的应用,它需要一台拥有公网IP的服务器作为中转,实现访问内网机器的目的。比如你在实验室的服务器上,需要部署一个其他服务器或者树莓派也能访问的服务,就需要进行frp内网穿透。
是什么
- FRP是一款开源的内网穿透工具,它可以让外部用户通过公网访问内网中的服务,而不需要暴露内网的IP地址和端口号。FRP的主要原理是通过一个中转服务器,在公网与内网之间建立一个反向代理通道,将公网用户的请求转发到内网中的服务。
- 举个例子,如果你在内网中有一个Web服务器,通常情况下只有内网用户才能访问该服务器。但是,如果你想让外部用户也能够访问该服务器,就需要将该服务器暴露在公网上。这时候,你可以使用FRP来实现内网穿透,将Web服务器的端口映射到FRP服务器的公网IP地址和端口号上,外部用户就可以通过该地址访问该服务器了。
- FRP支持多种协议,包括TCP、UDP、HTTP和HTTPS等。它可以在不同的操作系统上运行,包括Windows、Linux、Mac OS等。FRP有两个主要组件:服务器端和客户端。服务器端需要在公网上运行,用来转发公网用户的请求;客户端需要在内网中运行,用来将内网服务映射到公网上。
安装与使用
步骤
- 访问FRP的官方网站 https://github.com/fatedier/frp ,并下载适合你操作系统的版本。
- 解压下载的压缩包到你想要安装的目录。
- 配置FRP客户端和服务器端,可以根据官方文档的指引进行配置。配置文件是一个
INI
格式的文件,包含了各种参数的配置信息。在[common]
部分中需要配置服务器的IP地址和端口号等信息,在[xxx]
部分中需要配置具体的服务信息,包括服务的端口号、类型等。需要根据实际情况进行配置。 - 在命令行终端中进入到FRP所在的目录,然后启动FRP服务器端和客户端。启动命令格式如下:
-
启动FRP服务器端(在服务器上运行):
./frps -c frps.ini
其中,frps.ini是FRP服务器端的配置文件。
-
启动FRP客户端(在内网中运行):
./frpc -c frpc.ini
其中,frpc.ini是FRP客户端的配置文件。
- 通过公网IP地址和端口号访问内网中的服务。
- 启动FRP客户端之后,就可以通过公网IP地址和端口号访问内网中的服务了。访问地址的格式为:
<public_ip>:<public_port>
。其中,public_ip
是FRP服务器的公网IP地址,public_port
是FRP服务器上对应服务的公网端口号。用户可以通过浏览器或者其他工具访问该地址,就可以访问内网中的服务了。
内网与公网理解
如果你的Linux服务器只有内网IP地址,那么它只能在局域网内部访问。其他不在该局域网内的计算机无法直接访问该服务器,因为它没有公网IP地址,也就无法直接被互联网访问。
如果你需要将该服务器的服务暴露到公网,可以使用内网穿透技术或者其他类似的方案,将内网服务映射到公网IP地址和端口上,以供公网用户访问。常用的内网穿透工具包括FRP、ngrok、花生壳等。
具体的配置
以下是一个基本的FRP配置示例,可以用于将本地的SSH服务映射到公网上:
-
在FRP服务器上创建一个配置文件
frps.ini
,并添加以下内容:[common] bind_port = 7000 vhost_http_port = 8080 dashboard_port = 7500 dashboard_user = admin dashboard_pwd = admin123 [ssh] type = tcp local_ip = 127.0.0.1 local_port = 22 remote_port = 6000
其中,
bind_port
是FRP服务器的监听端口,vhost_http_port
是虚拟主机的HTTP访问端口,dashboard_port
是FRP控制面板的访问端口,dashboard_user
和dashboard_pwd
是控制面板的登录用户名和密码。[ssh]
是一个自定义的服务名称,type
指定了服务类型为TCP,local_ip
是本地服务的IP地址,local_port
是本地服务的端口号,remote_port
是映射到公网的端口号。 -
在FRP客户端(即需要映射到公网的本地机器)上创建一个配置文件
frpc.ini
,并添加以下内容:[common] server_addr = [your.frp.server.com](http://your.frp.server.com) server_port = 7000 dashboard_port = 7400 dashboard_user = admin dashboard_pwd = admin123 [ssh] type = tcp local_ip = 127.0.0.1 local_port = 22 remote_port = 6000
其中,
server_addr
和server_port
是FRP服务器的地址和端口号,dashboard_port
、dashboard_user
和dashboard_pwd
是客户端控制面板的访问端口、用户名和密码。[ssh]
是一个自定义的服务名称,type
指定了服务类型为TCP,local_ip
是本地服务的IP地址,local_port
是本地服务的端口号,remote_port
是映射到公网的端口号。 -
在FRP服务器上启动FRP服务:
./frps -c frps.ini
-
在本地机器上启动FRP客户端:
./frpc -c frpc.ini
在启动之后,本地SSH服务就会被映射到
your.frp.server.com:6000
这个公网地址上,可以通过该地址来访问本地机器的SSH服务。
原理与流程图
先说结论:比如你现在有两个服务器,两个网段:一个192开头一个10开头,192可以访问10下的服务,但是10无法访问192下的服务,也就是说大的网段不能访问小的,因此你需要在小的网段也就是在192下运行frpc客户端,大的网段也就是10下运行frps服务端,顺序一定要搞清楚!!
FRP实现内网穿透的流程图:
+-----------------+
| |
| FRP服务器 |
| |
+-----------------+
|
|
|
+-----------------+
| |
| FRP客户端 |
| |
+-----------------+
|
|
|
+-------------------------------+
| |
| 内网服务(IP:Port) |
| |
+-------------------------------+
- FRP客户端与FRP服务器建立长连接,并向服务器发送需要穿透到公网的服务信息。
- FRP服务器在接收到客户端的服务信息后,为该服务分配一个公网IP地址和端口号,并将其映射到客户端指定的IP地址和端口号上。
- 外部用户通过访问FRP服务器的公网IP地址和端口号,就可以访问到内网服务。
- FRP客户端和服务器之间采用长连接通信,可以保持连接状态,实现实时数据传输。
- FRP还支持多种加密方式,保证数据传输的安全性。
需要注意的是,将内网服务映射到公网上存在一定的安全风险,应该采取一些安全措施,以防止未经授权的访问和攻击。
总结
本文主要讲解了frp是什么,怎么用,原理以及配置文件的修改,可以说是很全面了,如果有问题也欢迎来评论区讨论,谢谢大家!!