内网穿透frp部署安装

1.简介

1.1.frp 是什么?

frp 是一款高性能的反向代理应用,专注于内网穿透。它支持多种协议,包括 TCP、UDP、HTTP、HTTPS 等,并且具备 P2P 通信功能。使用 frp,您可以安全、便捷地将内网服务暴露到公网,通过拥有公网 IP 的节点进行中转。

架构图:

1.2.为什么选择 frp?

通过在具有公网 IP 的节点上部署 frp 服务端,您可以轻松地将内网服务穿透到公网,并享受以下专业特性:

  1. 多种协议支持:客户端服务端通信支持 TCP、QUIC、KCP 和 Websocket 等多种协议。

  2. TCP 连接流式复用:在单个连接上承载多个请求,减少连接建立时间,降低请求延迟。

  3. 端口复用:多个服务可以通过同一个服务端端口暴露。

  4. P2P 通信:流量不必经过服务器中转,充分利用带宽资源。

  5. 客户端插件:提供多个原生支持的客户端插件,如静态文件查看、HTTPS/HTTP 协议转换、HTTP、SOCKS5 代理等,以便满足各种需求。

  6. 服务端插件系统:高度可扩展的服务端插件系统,便于根据自身需求进行功能扩展。

  7. 用户友好的 UI 页面:提供服务端和客户端的用户界面,使配置和监控变得更加方便。

1.3.工作原理

frp 主要由两个组件组成:客户端(frpc) 和 服务端(frps)。通常情况下,服务端部署在具有公网 IP 地址的机器上,而客户端部署在需要穿透的内网服务所在的机器上。

由于内网服务缺乏公网 IP 地址,因此无法直接被非局域网内的用户访问。用户通过访问服务端的 frps,frp 负责根据请求的端口或其他信息将请求路由到相应的内网机器,从而实现通信

1.4.代理类型

 

在 frp 中,一个代理对应一个需要公开访问的内网服务。一个客户端可以同时配置多个代理,以满足不同的需求。

  • frp: 支持多种代理类型,以适应不同的使用场景。以下是一些常见的代理类型:

  • TCP:提供纯粹的 TCP 端口映射,使服务端能够根据不同的端口将请求路由到不同的内网服务。

  • UDP:提供纯粹的 UDP 端口映射,与 TCP 代理类似,但用于 UDP 流量。

  • HTTP:专为 HTTP 应用设计,支持修改 Host Header 和增加鉴权等额外功能。

  • HTTPS:类似于 HTTP 代理,但专门用于处理 HTTPS 流量。

  • STCP:提供安全的 TCP 内网代理,要求在被访问者和访问者的机器上都部署 frpc,不需要在服务端暴露端口。

  • SUDP:提供安全的 UDP 内网代理,与 STCP 类似,需要在被访问者和访问者的机器上都部署 frpc,不需要在服务端暴露端口。

  • XTCP:点对点内网穿透代理,与 STCP 类似,但流量不需要经过服务器中转。

  • TCPMUX:支持服务端 TCP 端口的多路复用,允许通过同一端口访问不同的内网服务。

  • 每种代理类型适用于不同的使用情境,您可以根据需求选择合适的代理类型来配置 frp。

2.客户端安装和配置

2.1.环境准备

首先,请从 Release 页面下载适用于您的操作系统和架构的最新程序。

三种架构安装包:

接下来,将二进制文件和服务器配置文件放在服务器 A 上,该服务器具有公共 IP 地址。最后,将二进制文件和客户端配置文件放在服务器 B 上,该服务器位于无法从公共 Internet 直接访问的机器上

一些防病毒软件错误地将 frpc 标记为恶意软件并将其删除。这是因为 frp 是一种能够创建反向代理的网络工具。防病毒软件有时会标记反向代理,因为它们能够绕过防火墙端口限制。如果您使用的是防病毒软件,则可能需要在防病毒设置中将 frpc 列入白名单/排除,以避免意外隔离/删除。。

上传压缩包到服务器中

将压缩包上传到Linux服务器后解压到当前目录,然后进入解压后的文件夹目录

 
cd /usr/local/frp tar -zxvf frp_0.57.0_linux_amd64.tar.gz mv frp_0.57.0_linux_amd64/ frp cd frp

2.2.客户端配置文件修改

通过设置 frp 客户端要连接到的 for frp client 来修改服务器 A

# frps.toml bindPort = 7000

这里也有一些额外的配置,根据需要修改

# 绑定端口,修改为实际使用的端口号
bindPort = 7000

# TCP Mux 连接端口,默认值为5002
tcpmuxHTTPConnectPort = 5002

# 强制使用 TLS 加密传输
transport.tls.force = true

# 认证令牌,确保此值保持安全
auth.token = "wxly1122.."

# 服务器仪表盘设置
webServer.addr = "10.206.0.3"  # 服务器地址
webServer.port = 1000          # 服务器端口
webServer.user = "admin"       # 登录用户名
webServer.password = "Wxly1122.."  # 登录密码

# 虚拟主机端口配置
vhostHTTPPort = 8080           # HTTP 端口
vhostHTTPSPort = 1443          # HTTPS 端口

# 日志配置
log.to = "/var/log/frps.log"   # 日志文件路径
log.level = "info"             # 日志等级
log.maxDays = 3                # 日志保留天数
log.disablePrintColor = false  # 是否禁用日志颜色输出

2.3.客户端启动方法

2.3.1.前台启动

命令行输入

./frps -c ./frps.toml

 

2.3.2.后台启动

要后台启动 frps,可以使用 nohup 命令和 & 符号来将其进程放到后台运行。例如:

bashCopy Code
nohup ./frps -c ./frps.toml > frps.log 2>&1 &

这里的参数说明:

  • nohup:在你退出会话时仍保持进程运行。

  • frps.log 2>&1:将标准输出和错误输出重定向到 frps.log 文件中。

  • &:将进程放到后台运行。

2.3.3.设置frp开机自启动
# 需要先 cd 到 frp 解压目录.
# 复制文件
cp frps /usr/local/bin/frps
mkdir /etc/frp
cp frps.ini /etc/frp/frps.ini
# 编写 frp service 文件,以 ubuntu 为例
vim /usr/lib/systemd/system/frps.service # 有时候需要手动创建system文件夹


# frps.service内容如下
[Unit]
Description=frps
After=network.target
 
[Service]
TimeoutStartSec=30
ExecStart=/usr/local/bin/frps -c /etc/frp/frps.ini
ExecStop=/bin/kill $MAINPID
 
[Install]
WantedBy=multi-user.target

 启动 frp 并设置开机启动

systemctl enable frps
systemctl start frps
systemctl status frps

部分服务器上,可能需要加 .service 后缀来操作,即:

systemctl enable frps.service
systemctl start frps.service
systemctl status frps.service

3.服务端安装和配置

3.1.环境准备

将合适的压缩包发送到服务器端的机器上,server是给客户端用的,所以我们将安装包发送到服务端之后,使用client文件

3.2.服务端配置文件修改

3.2.1.单台内网设备

官方给的文档如下:

在服务器 B 上进行修改,并将字段设置为 frps 服务器的公有 IP 地址:frpc.tomlserverAddr
# frpc.tomlserverAddr = "x.x.x.x"serverPort = 7000

[[proxies]]
name = "ssh"type = "tcp"localIP = "127.0.0.1"localPort = 22remotePort = 6000

 我们可以在配置文件中添加token,用于验证

[common]
# 服务器地址,FRP 客户端将连接到这个地址
server_addr = 119.45.46.176

# 认证令牌,用于确保客户端和服务器之间的安全连接
token = wxly1122..

# 服务器端口,FRP 服务端监听的端口
server_port = 7000

[mysql]
# 代理类型,设置为 TCP 协议以支持 MySQL 连接
type = tcp

# 本地 MySQL 服务的 IP 地址
local_ip = 127.0.0.1

# 本地 MySQL 服务的端口号
local_port = 3306

# 远程 MySQL 服务的端口号,这个端口号将暴露给外部
remote_port = 3316
3.2.2.多个 SSH 服务共享同一端口

这里我就不做演示,下面是官方给的模版文档,按照上面的例子修改即可

此示例使用 tcpmux 类型的代理实现通过同一端口公开的多个 SSH 服务。同理,只要客户端支持 HTTP Connect 代理连接方式,就可以通过这种方式实现端口复用。

在具有公网 IP 的机器上部署 frps,并修改 frps.toml 文件。下面是一个简化的配置:

机器1上部署

serverAddr = "x.x.x.x"
serverPort = 7000

[[proxies]]
name = "ssh1"
type = "tcpmux"
multiplexer = "httpconnect"
customDomains = ["machine-a.example.com"]
localIP = "127.0.0.1"
localPort = 22

机器2上部署

serverAddr = "x.x.x.x"
serverPort = 7000

[[proxies]]
name = "ssh2"
type = "tcpmux"
multiplexer = "httpconnect"
customDomains = ["machine-b.example.com"]
localIP = "127.0.0.1"
localPort = 22
  • 要使用 SSH ProxyCommand 访问内部机器 A,假设用户名为 “test”:

ssh -o 'proxycommand socat - PROXY:x.x.x.x:%h:%p,proxyport=5002' test@machine-a.example.com
  • 要访问内部机器 B,唯一的区别是域名,假设用户名是 “test”:

ssh -o 'proxycommand socat - PROXY:x.x.x.x:%h:%p,proxyport=5002' test@machine-b.example.com

2.4.客户端启动方法

2.4.1.windows环境

进入到解压好的文件夹,编辑frpc配置文件,修改方法不变,同上

修改完成之后在文件夹中点击上方的目录按钮

 然后执行启动命令

frpc.exe -c frpc.toml

2.4.2.linux环境

也是进入配置文件目录,执行启动命令 amd和arm架构启动命令相同

./frpc -c ./frpc.toml

如上图所示及启动成功

4.测试连接

4.1.数据库连接测试

由于我们将本地环境的端口映射到公网环境

 所以我们要在云服务器上安全组放通这个端口

然后我们测试一下连接,通过公网ip加上端口访问数据库,可以连接成功

连接成功之后可以正常访问数据库的内容,由于当时连接完我忘记截图了 ,这里就不展示

 

4.2.边端设备22端口连接测试

同理,上位机边端设备22端口也是通过这个方法

修改配置文件中

将3306换成22 3316替换成云服务器上暴露的端口,或者不修改在配置文件中添加新的也可 

重新启动

然后回到云服务器对外暴露6000端口

放通完成之后使用xshell进行连接 公网ip+6000端口 使用边端设备的用户密码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值