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

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

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

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

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

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

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

FRP 服务器配置(frps.ini)

[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.下载完成后的文件夹执行以下命令

tar -zxvf frp_0.41.0_linux_amd64.tar.gz

2.生成对于文件夹

cd frp_0.41.0_linux_amd64

3.查看所有文件

ll
vim frps.ini

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

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

nohup ./frps -c ./frps.ini &

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

cat nohup.out

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

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

2.1.下载frp的windows压缩包

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

2.2.解压到一个文件夹

2.3.配置fprc.ini

type一定要选择tcp的方式,并且指定local 和remote端口,否则remote的端口会随机生成
[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地址+端口号访问测试。成功!

这里就实现了访问远程服务器---》远程服务器转发----》内网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 类型标识数据的格式。
它们之间的联系

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(简单邮件传输协议)等。应用层直接为用户的应用程序(如网页浏览器、电子邮件客户端)提供服务。

总结

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

相关推荐
AAA.建材批发刘哥1 小时前
Linux快速入门-Linux文件系统管理
linux·运维·服务器·c语言·学习方法
cwj&xyp2 小时前
Python(二)str、list、tuple、dict、set
前端·python·算法
dlnu20152506222 小时前
ssr实现方案
前端·javascript·ssr
古木20192 小时前
前端面试宝典
前端·面试·职场和发展
正在走向自律3 小时前
阿里云ESC服务器一次性全部迁移到另一个ESC
服务器·阿里云·云计算
gywl3 小时前
openEuler VM虚拟机操作(期末考试)
linux·服务器·网络·windows·http·centos
轻口味3 小时前
命名空间与模块化概述
开发语言·前端·javascript
前端小小王4 小时前
React Hooks
前端·javascript·react.js
迷途小码农零零发4 小时前
react中使用ResizeObserver来观察元素的size变化
前端·javascript·react.js