frp ---- golang编写的内网穿透工具简介

官网: https://gofrp.org/

frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。

frp 采用 Golang 编写,支持跨平台,仅需下载对应平台的二进制文件即可执行,没有额外依赖。

由于采用 Golang 编写,所以系统需求和最新的 Golang 对系统和平台的要求一致

下载

https://github.com/fatedier/frp/releases
目前可以在 Github 的 Release 页面中下载到最新版本的客户端和服务端二进制文件,所有文件被打包在一个压缩包中。
在这里插入图片描述
mac 一般下载列表中第一个
Linux 一般下载列表中第一个
Windows一般下载列表中第一个

部署

解压缩下载的压缩包,将其中的 frpc 拷贝到内网服务所在的机器上,将 frps 拷贝到具有公网 IP 的机器上,放置在任意目录。

编写配置文件,先通过 ./frps -c ./frps.ini 启动服务端,再通过 ./frpc -c ./frpc.ini 启动客户端。如果需要在后台长期运行,建议结合其他工具使用,例如 systemd 和 supervisor。

原理

frp 主要由 客户端(frpc) 和 服务端(frps) 组成,服务端通常部署在具有公网 IP 的机器上,客户端通常部署在需要穿透的内网服务所在的机器上。

内网服务由于没有公网 IP,不能被非局域网内的其他用户访问。

用户通过访问服务端的 frps,由 frp 负责根据请求的端口或其他信息将请求路由到对应的内网机器,从而实现通信。

代理

在 frp 中一个代理对应一个需要暴露的内网服务。一个客户端支持同时配置多个代理。

frp 支持多种代理类型来适配不同的使用场景。

在这里插入图片描述

示例

通过 SSH 访问内网机器

这个示例通过简单配置 TCP 类型的代理让用户访问到内网的服务器。

  1. 在具有公网 IP 的机器上部署 frps,修改 frps.ini 文件,这里使用了最简化的配置,设置了 frp 服务器用户接收客户端连接的端口:
[common]
bind_port = 7000
  1. 在需要被访问的内网机器上(SSH 服务通常监听在 22 端口)部署 frpc,修改 frpc.ini 文件,假设 frps 所在服务器的公网 IP 为 x.x.x.x:
server_addr = x.x.x.x
server_port = 7000

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000

local_ip 和 local_port 配置为本地需要暴露到公网的服务地址和端口。remote_port 表示在 frp 服务端监听的端口,访问此端口的流量将会被转发到本地服务对应的端口。

  1. 分别启动 frps 和 frpc。

  2. 通过 SSH 访问内网机器,假设用户名为 test:
    ssh -oPort=6000 test@x.x.x.x
    frp 会将请求 x.x.x.x:6000 的流量转发到内网机器的 22 端口。

通过自定义域名访问内网的 Web 服务

这个示例通过简单配置 HTTP 类型的代理让用户访问到内网的 Web 服务。

HTTP 类型的代理相比于 TCP 类型,不仅在服务端只需要监听一个额外的端口 vhost_http_port 用于接收 HTTP 请求,还额外提供了基于 HTTP 协议的诸多功能。

  1. 修改 frps.ini 文件,设置监听 HTTP 请求端口为 8080:
[common]
bind_port = 7000
vhost_http_port = 8080
  1. 修改 frpc.ini 文件,假设 frps 所在的服务器的 IP 为 x.x.x.x,local_port 为本地机器上 Web 服务监听的端口, 绑定自定义域名为 custom_domains。

常见报错:

zsh: exec format error:

你可能需要更换别的安装包进行尝试

bad cpu xxxx

你可能需要更换别的安装包进行尝试

start error: port unavailable

可能是公网ip服务器端的端口被占用

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
内网穿透是指通过一种技术手段,将内网中的服务暴露到公网中,使得外部网络可以访问到内网中的服务。在golang中,可以使用frp(Fast Reverse Proxy)来实现内网穿透。 要使用golang进行内网穿透,首先需要下载frp的客户端和服务端二进制文件。你可以在frp的GitHub Release页面中找到最新版本的文件,并选择适合你操作系统的版本进行下载。\[3\] 在部署frp之前,你需要在具有公网IP的机器上部署frps(frp服务器),并进行简单的配置。在frps.ini文件中,你可以设置frp服务器接收客户端连接的端口。\[2\] 接下来,在需要被访问的内网机器上部署frpc(frp客户端),并进行相应的配置。在frpc.ini文件中,你需要设置frps所在服务器的公网IP和端口,并指定要进行内网穿透的服务类型和相关参数,比如SSH服务的本地IP、本地端口和远程端口。\[2\] 通过以上配置,frp会将公网访问frps的流量转发到内网机器的指定端口,从而实现内网穿透。例如,通过SSH访问内网机器,可以使用以下命令:ssh -oPort=6000 test@x.x.x.x,其中x.x.x.x是frps所在服务器的公网IP。\[1\] 需要注意的是,内网穿透涉及到网络安全和防火墙配置等问题,请确保在使用frp进行内网穿透时,采取适当的安全措施,以保护内网的安全。 #### 引用[.reference_title] - *1* *2* *3* [frp ---- golang编写内网穿透工具简介](https://blog.csdn.net/weixin_44235759/article/details/121353931)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悠闲的线程池

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值