龙空技术网

使用FRP进行内网穿透实现远程访问

编程圈子 94

前言:

如今我们对“云服务器frp内网穿透”都比较重视,朋友们都想要知道一些“云服务器frp内网穿透”的相关内容。那么小编在网络上网罗了一些有关“云服务器frp内网穿透””的相关资讯,希望兄弟们能喜欢,同学们一起来了解一下吧!

在网络架构中,有时候需要远程访问位于内网的设备或服务,但由于网络拓扑或安全限制,直接从外部访问内网设备可能会受到限制。FRP(Fast Reverse Proxy)是一款开源的内网穿透工具,通过建立反向代理通道,使得内网服务可以通过公网访问。本文将介绍如何使用FRP进行内网穿透,实现远程访问内网设备的目的。

一、FRP简介1. 简介

Fast Reverse Proxy(FRP) 是一款由fatedier开发的高性能的反向代理工具,用于穿透防火墙、NAT等网络障碍,将内网服务映射到公网上。FRP支持TCP、UDP、HTTP等多种协议,操作简单,适用于各种场景。

开源地址:

FRP的架构:

2. 准备环境

两台Ubuntu系统:

Server:位于公网Client: 位于内网3. toml文件

frp新版本使用toml格式作为配置文件。

TOML(Tom’s Obvious Minimal Language)是一种用于配置文件的轻量级数据格式,设计得易读、易写。TOML 的目标是成为一种容易理解和编写的配置文件格式,同时保持足够的表达能力。

TOML 特点:

易读性: TOML 文件的语法设计旨在保持简洁、直观且易读。它使用了明显的层次结构,不依赖于标点符号过于复杂的语法。最小化: TOML 遵循最小化的设计原则,尽量减少冗余和复杂性,使得配置文件的编写和阅读变得更加简单。易于集成: TOML 被设计为易于机器处理,便于在不同的编程语言中解析和生成。因此,许多编程语言都提供了 TOML 的解析器和生成器。扩展性: TOML 具有一定的扩展性,允许在语法中添加一些自定义的元素以适应特定的应用场景。

TOML 的文件以 .toml 扩展名结尾,其中包含了键值对、表(Table)、数组等元素。下面是一个简单的 TOML 示例:

[owner]name = "Tom"dob = 1985-05-27T07:32:00Z[database]server = "localhost"ports = [8000, 8001, 8002]connection_max = 5000enabled = true
4. toml文件语法

TOML(Tom’s Obvious Minimal Language)有一套简洁而直观的规则,用于定义配置文件。以下是 TOML 的主要规则:

(1)表(Table)表的定义: 使用 [ ] 包裹表名,例如 [owner] 表示一个名为 “owner” 的表。嵌套表: 表可以嵌套,形成层次结构,例如 [owner.address] 表示 “owner” 表下的 “address” 子表。(2)键值对键值对的定义: 使用 key = value 的形式定义键值对。字符串: 字符串可以用双引号 "" 或单引号 '' 括起来,例如 name = "Tom"name = 'Tom'多行字符串: 使用三个双引号 """ 或三个单引号 ''' 来定义多行字符串。(3)数组数组的定义: 使用方括号 [] 包裹,例如 ports = [8000, 8001, 8002]不同类型的数组元素: 数组中的元素可以是不同类型的值。(4)布尔值布尔值: 使用 truefalse 表示布尔值。(5)数值整数和浮点数: TOML 支持整数和浮点数,例如 age = 30pi = 3.14。(6)日期和时间日期和时间: TOML 支持日期和时间的表示,例如 dob = 1985-05-27T07:32:00Z。(7)注释注释: 使用 # 进行单行注释,例如 # This is a comment

在 frp 的配置里,[]表放的是通用设置,[[proxies]]数组用于定义代理。 允许设置多个代理。

二、安装和配置FRP1. 下载

从 可以下载到对应操作系统的编译版本。

下载后解压缩即可。

本示例程序安装位置:

/opt/frp_0.53.0_linux_amd64/

2. 配置远程登陆SSH服务(1)Server端配置i. 配置文件: frps.toml

vim /opt/frp_0.53.0_linux_amd64/frps.toml

bindPort = 7000 # Server的绑定端口webServer.addr = "0.0.0.0" # 0.0.0.0绑定所有网卡webServer.port = Server的WEB服务端口# dashboard's username and password are both optionalwebServer.user = "Cient登陆账号"webServer.password = "Client登陆密码"transport.useEncryption = truetransport.useCompression = true
ii. 配置服务

sudo vim /etc/systemd/system/frps.service

[Unit]# 服务名称,可自定义Description = frp serverAfter = network.target syslog.targetWants = network.target[Service]Type = simple# 启动frps的命令,路径要匹配ExecStart = /opt/frp_0.53.0_linux_amd64/frps -c /opt/frp_0.53.0_linux_amd64/frps.toml[Install]WantedBy = multi-user.target1234567891011
iii. 启动和开机启动
# 启动frpsystemctl start frps# 配置frps开机自启systemctl enable frps
(2)Clinet 配置

vim /opt/frp_0.53.0_linux_amd64/frpc.ini

i. 配置文件 frpc.toml

serverAddr = "Server地址"serverPort = 7000 	# server的bindPort[[proxies]]name = "test-tcp"type = "tcp"localIP = "127.0.0.1"localPort = 22remotePort = 6000 	# frpc在client上的端口
ii. 配置服务

sudo vim /etc/systemd/system/frpc.service

[Unit]# 服务名称,可自定义Description = frp clientAfter = network.target syslog.targetWants = network.target[Service]Type = simple# 启动frps的命令,路径要匹配ExecStart = /opt/frp_0.53.0_linux_amd64/frpc -c /opt/frp_0.53.0_linux_amd64/frpc.ini[Install]WantedBy = multi-user.target
(3)实现远程访问
ssh -oPort=6000 Client登陆账号@Server地址
3. 在外网访问内网 Web 服务(1)修改 frps.toml
bindPort = 7000vhostHTTPPort = 8080vhostHTTPSPort = 8090 # 如果需要配置https proxy就设置这个
(2)配置frpc.toml
# frpc.tomlserverAddr = "x.x.x.x"serverPort = 7000[[proxies]]name = "web"type = "http"localPort = 80customDomains = [";]

域名需要配置 CNAME 记录指向 ServerIP。

4. 配置简单 http 文件服务

简单http文件服务可以直接提供静态文件访问。

修改 frpc.toml

# frpc.tomlserverAddr = "x.x.x.x"serverPort = 7000[[proxies]]name = "test_static_file"type = "tcp"remotePort = 6000[proxies.plugin]type = "static_file"localPath = "/tmp/files"stripPrefix = "static"httpUser = "abc"httpPassword = "abc"

frp还可以配置私有服务、P2P服务等,这里不再详细介绍。

三、web控制台服务端配置:

webServer.port = 7500# dashboard's username and password are both optionalwebServer.user = "admin"webServer.password = "admin"webServer.tls.certFile = "server.crt"webServer.tls.keyFile = "server.key"

访问网页 https://[serverAddr]:7500 可以看到如下控制台。

客户端配置

webServer.addr = "127.0.0.1"webServer.port = 7400webServer.user = "admin"webServer.password = "admin"

标签: #云服务器frp内网穿透 #linux启动frp