frp内网穿透云服务器。云服务器映射多个家庭局域网内网端口。家庭Windows主机内网运行多个web程序

c++练习生2.5 2024-07-26 12:03:01 阅读 50

这篇文章最终要实现的效果是,把云服务器的公网IP绑定到自己本地局域网上的主机一样的效果。相当于局域网主机有了一个自己的公网IP地址。

FRP (Fast Reverse Proxy) 是一个用 Go 语言编写的高性能反向代理应用程序,主要用于内网穿透。它允许位于 NAT 或防火墙后的内网服务通过在公共网络上部署一个 frp 服务器(通常称为 frps)来对外提供服务。通过在客户端(frpc,即 frp 客户端)配置相应的代理规则,外部网络上的用户可以访问这些被防火墙或 NAT 限制的内部资源。

核心功能

内网穿透:FRP 可以帮助内网服务穿透 NAT 和防火墙,使得这些服务可以从外部网络访问。反向代理:支持 TCP、UDP、HTTP、HTTPS 等多种协议的反向代理。负载均衡:FRP 支持通过配置多个入口节点来实现简单的负载均衡。加密传输:FRP 支持通过自定义设置使用加密传输,确保数据在传输过程中的安全性。身份验证:FRP 服务端和客户端支持多种身份验证方式,保证连接的安全性。访问控制:可以通过配置文件限制访问权限,管理不同客户端的访问规则。

组件说明

frps(FRP Server)

部署在具有公网 IP 地址的服务器上。负责接收来自 FRP 客户端的连接请求,并将请求转发到后端的具体服务。可以配置多种监听端口,支持不同的服务和协议。

frpc(FRP Client)

部署在内网环境中,需要进行穿透的服务器上。负责将内网服务通过建立到 FRP 服务器的连接暴露给外部网络。可以配置多个代理规则,以支持多个内网服务的穿透。

配置实例

以下是一个基本的 FRP 服务器和客户端配置的示例:

FRP 服务器配置(frps.ini)

<code>[common]

bind_port = 7000

FRP 客户端配置(frpc.ini)

[common]

server_addr = x.x.x.x # 替换为 FRP 服务器的公网 IP

server_port = 7000

[ssh]

type = tcp

local_ip = 127.0.0.1

local_port = 22

remote_port = 6000

在此配置中,FRP 客户端将本地的 SSH 服务(通常运行在端口 22)通过 FRP 服务器暴露在公网的 6000 端口上。这意味着,任何能访问 FRP 服务器 IP 地址在 6000 端口的用户都可以通过这个端口连接到内网的 SSH 服务。

使用场景

FRP 非常适合以下使用场景:

内网的 Web 服务需要暴露到互联网上。访问部署在内网的 API 或数据库服务器。远程办公时,访问公司内部网络资源。IoT 设备远程管理和数据访问。

总之,FRP 是一个功能强大且灵活的内网穿透和反向代理工具,适用于多种网络穿透和服务暴露需求。

实际操作

1.配置服务器

## 准备一个云服务器,具有公网Ip的服务器,建议使用香港服务器,免域名备案

输入wget命令下载frp服务器

wget https://github.com/fatedier/frp/releases/download/v0.41.0/frp_0.41.0_linux_amd64.tar.gz

1.下载完成后的文件夹执行以下命令

在这里插入图片描述

<code>tar -zxvf frp_0.41.0_linux_amd64.tar.gz

2.生成对于文件夹

cd frp_0.41.0_linux_amd64

3.查看所有文件

ll

在这里插入图片描述

<code>vim frps.ini

4.配置服务端的文件,dashboard_port是web控制面板的端口号

在这里插入图片描述

5.执行命令,运行服务端,日志文件会输出在nohop.out中

<code>nohup ./frps -c ./frps.ini &

6.查看日志,若是输出successful表示启动成功

cat nohup.out

在这里插入图片描述

7.访问web控制面板。地址为,ip:7500。若出现以下界面,表示服务器配置成功

在这里插入图片描述

2.配置windows,自己的主机。去github下载对应windows的压缩包。找到v0.41版本

2.1.下载frp的windows压缩包

<code>https://github.com/fatedier/frp/releases?page=3

请添加图片描述

2.2.解压到一个文件夹

在这里插入图片描述

2.3.配置fprc.ini

type一定要选择tcp的方式,并且指定local 和remote端口,否则remote的端口会随机生成

<code>[common]

server_addr =x.x.x.x

server_port = 7000

[local_80]

type = tcp

local_port = 80

remote_port=80

[local_3000]

type = tcp

local_port = 3000

remote_port=8080

在这里插入图片描述

这里我将本地的80端口映射到了远程服务器上也是80端口,本地的3000端口映射到远程的8080端口。当我访问远程主机 ip:80后会映射到我本地的localhost:80端口。访问远程的ip:8080端口会映射到我本地开启的localhost:3000端口。这样就实现的内网穿透

在这里插入图片描述

2.4.cmd进入控制框,执行 frpc.exe文件

一定要使用cmd的方式执行exe文件,否则执行运行不了。

在这里插入图片描述

在这里插入图片描述

这里是我已经开启了,所以会报错error。到此,服务器就完成了外网映射内网。

2.5查看服务器web端的tcp注册界面,显示online表示注册成功。地址为,ip:7500

在这里插入图片描述

2.6输入服务器ip地址+端口号访问测试。成功!

这里就实现了访问<code>远程服务器—》远程服务器转发----》内网windows主机

在这里插入图片描述

3.购买域名,完成自定义域名功能

3.1阿里云或者腾讯购买一个非常便宜的域名,我买好了8RMB一年。然后配置dns解析

在这里插入图片描述

配置域名解析

在这里插入图片描述

在这里插入图片描述

点击确定后就完成了自定义域名绑定。可以使用域名访问内网的应用了,绑定后稍微等1min。因为阿里云要解析同步数据。

在这里插入图片描述

查看远程web控制面板,有数据。

在这里插入图片描述

猜测一下为什么不用http,要使用tcp呢?

HTTP(超文本传输协议)和 TCP(传输控制协议)都是网络通信的重要协议,它们在网络中扮演着不同但互补的角色。理解它们之间的关系,有助于更好地把握现代网络通信的工作原理。

TCP - 传输控制协议

TCP 是一种传输层协议,它为上层应用提供了一种可靠的数据传输服务。TCP 确保数据可以在网络中从一端可靠地传输到另一端,即确保数据的完整性和正确性。TCP 主要的特点包括:

面向连接:在数据开始传输之前,TCP 需要源和目标之间建立连接。可靠传输:TCP 通过序号、确认应答、重传机制等确保数据正确无误地到达目标地。流控制和拥塞控制:TCP 有机制来调整数据的发送速率,以匹配接收方的处理速度和网络的当前状态。有序传输:TCP 保证数据按照发送顺序到达接收端。

HTTP - 超文本传输协议

HTTP 是一种应用层协议,用于分布式、协作式、超媒体信息系统。HTTP 是 Web 上使用的主要协议,用于在 Web 浏览器和服务器之间传输网页和其他数据。HTTP 主要特点包括:

无状态协议:HTTP 协议自身不保存之前的请求记录,每次请求之间是独立的。基于请求-响应模式:客户端发送请求后,服务器回送响应。可扩展:HTTP 允许传输任意类型的数据对象,通过 MIME 类型标识数据的格式。

它们之间的联系

<code>HTTP 和 TCP 之间的主要联系是,HTTP 建立在 TCP 提供的服务之上。HTTP 作为应用层协议,使用 TCP 在网络中传输数据,依赖 TCP 提供可靠性和顺序性保证。

依赖关系:HTTP 依赖于 TCP 来确保数据包的可靠性、顺序和错误检测。当你通过浏览器访问一个网站时,浏览器(HTTP 客户端)首先与服务器建立一个 TCP 连接,然后通过这个连接发送和接收 HTTP 消息。性能影响:TCP 的性能(如连接建立的延迟、重传等)可以直接影响 HTTP 的响应时间和效率。

总结来说,HTTP 和 TCP 是现代互联网通信的基石,它们共同协作,使得网络通信既可靠又高效。HTTP 利用 TCP 的传输服务在用户和网络服务之间高效地交换信息。

大胆猜测为什么使用tcp连接也能实现http访问内网应用。(若有错误请鸽鸽告知)

http在应用层,而tcp在运输层。故frp只会解析到tcp层后,就会把数据包转发给内网的主机。这里frp不需要解析到http层,因为frp作为一个中转站,只是负责转发数据而已,更简单点说,frp也可以是一个运行在网络层的路由器。只负责报文的存储转发和路由而已。故可以不使用http层与内网进行通信。

当内网应用接收到tcp的连接后,交给程序,最后封装好数据再次返回给frp,frp拿到数据后返回给客户端。

在这里插入图片描述

以下对于网络模型进行讲解

五层网络模型,又称为TCP/IP五层模型,是用来描述计算机网络通信的一种模型。这个模型从下到上分为物理层、数据链路层、网络层、传输层和应用层。这些层次定义了网络通信的不同方面,并且各自负责不同的功能。下面详细介绍每一层的功能和相关协议:

1. 物理层

物理层负责在物理媒体(如电缆、光纤等)上进行原始的数据传输,不关心数据的含义和结构。物理层的任务主要是确保原始数据可靠地在网络介质上进行传输。物理层包括的设备有网线、光纤、调制解调器等,以及相关的接口标准,如RJ45、100BASE-T等。

2. 数据链路层

数据链路层的主要任务是将原始比特流转换成逻辑的结构化数据包,称为帧。这一层提供介质访问和错误检测功能,确保数据在网络设备间准确无误地传输。此层的协议包括以太网(Ethernet)、PPP(Point-to-Point Protocol)等。数据链路层设备包括交换机、网桥等。

3. 网络层

网络层负责在多个网络间转发数据包,这包括决定数据的路径和路由。网络层使用的协议主要是IP协议,包括IPv4和IPv6。此层的设备有路由器,它用来连接不同的网络,确保数据包能找到从源头到目的地的最佳路径。

4. 传输层

传输层负责提供端到端的数据传输服务,这包括建立、管理和终止会话。传输层确保数据的完整性和正确顺序传输到目的地。这一层的主要协议有TCP(传输控制协议)和UDP(用户数据报协议)。TCP提供可靠的连接,确保数据无误并顺序到达;UDP则提供更快但不可靠的连接。

5. 应用层

应用层是最靠近用户的一层,负责处理特定的应用服务细节。这一层的协议包括HTTP(超文本传输协议)、FTP(文件传输协议)、SMTP(简单邮件传输协议)等。应用层直接为用户的应用程序(如网页浏览器、电子邮件客户端)提供服务。

总结

五层网络模型为网络设计和开发提供了一种结构化的方式,使得网络通信的每一个方面都能被逐一考虑和实现。每一层都执行其特定的功能,同时支持上层的服务并利用下层的服务。通过这种方式,网络的设计和管理变得更为模块化和清晰。

在这里插入图片描述



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。