简单好用、且永久免费的内网穿透工具

举报
民工哥 发表于 2022/03/31 22:41:03 2022/03/31
【摘要】 点击关注公众号,回复“1024”获取2TB学习资源! 介绍一款简单好用的内网穿透代理工具。 frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。 frp 的特性介绍 通过在具有公网 ...

点击关注公众号,回复“1024”获取2TB学习资源!

介绍一款简单好用的内网穿透代理工具

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

e9d1f15c486d986b30a33ec0e01759d2.png

frp 的特性介绍

通过在具有公网 IP 的节点上部署 frp 服务端,可以轻松地将内网服务穿透到公网,同时提供诸多专业的功能特性,这包括:

  • 代理组间的负载均衡

  • 服务端和客户端 UI 页面

  • 端口复用,多个服务通过同一个服务端端口暴露

  • 高度扩展性的服务端插件系统,方便结合自身需求进行功能扩展

  • 多个原生支持的客户端插件,便于独立使用 frp 客户端完成某些工作

  • 客户端服务端通信支持 TCP、KCP 以及 Websocket 等多种协议

  • 采用 TCP 连接流式复用,在单个连接间承载更多请求,节省连接建立时间

frp 的原理介绍

理解它们有助于您更好地了解和使用 frp 工具

原理

frp 主要由 客户端(frpc) 和 服务端(frps) 组成,服务端通常部署在具有公网 IP 的机器上,客户端通常部署在需要穿透的内网服务所在的机器上。内网服务由于没有公网 IP,不能被非局域网内的其他用户访问。用户通过访问服务端的 frps,由 frp 负责根据请求的端口或其他信息将请求路由到对应的内网机器,从而实现通信。

代理

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

类型

851ae58e0e36625ad555358f3319cacf.png

frp 的安装方式

关于如何安装 frp 的说明

frp 采用 Golang 语言编写,支持跨平台,仅需下载对应平台的二进制文件即可执行,没有额外依赖。目前可以在 Github 的 Release 页面中下载到最新版本的客户端和服务端二进制文件,所有文件被打包在一个压缩包中。

frp release download

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


   
  1. # download
  2. $ wget https://github.com/fatedier/frp/releases/download/v0.37.0/frp_0.37.0_linux_amd64.tar.gz

编写配置文件,先通过下面提供的命令来启动服务端和客户端。如果需要在后台长期运行,建议结合其他工具使用,例如 systemd 和 supervisor 工具。


   
  1. # 启动服务端
  2. $ ./frps -c ./frps.ini
  3. # 启动客户端
  4. $ ./frpc -c ./frpc.ini

Frp 的配置文件

配置文件如何编写可以参考示例中的内容

这里包括多个 常见的使用场景和配置 示例,你可以用来亲自部署和体验这些示例。

523b481cb25a1aaa2e437bea759938c0.png 6bd384ea67ba5e845cb936bfaa564b64.png

通过 SSH 访问内网机器

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

  • 编辑好如下配置文件之后,就可以分别启动 frps 和 frpc 了

  • 然后,就可以 SSH 来访问设置的内网机器了


   
  1. # 有公网IP的机器(已部署frps服务)
  2. # 这里使用了最简化的配置,详情配置可参考官方文档
  3. $ vim frps.ini
  4. [common]
  5. bind_port = 7000  # 设置frp服务器用户接收客户端连接的端口

   
  1. # 在内网IP的机器(部署frpc服务)
  2. # 默认情况下,SSH服务通常监听在22端口
  3. $ vim frpc.ini
  4. [common]
  5. server_addr = x.x.x.x  # 公网IP地址
  6. server_port = 7000     # 公网设置frp服务器对应的端口
  7. [ssh]
  8. type = tcp
  9. local_ip = 127.0.0.1  # 本地需要暴露到公网的服务地址
  10. local_port = 22       # 本地需要暴露到公网的服务端口
  11. remote_port = 6000    # 表示在frp服务端监听的端口

   
  1. # 启动服务端
  2. $ ./frps -c ./frps.ini
  3. # 启动客户端
  4. $ ./frpc -c ./frpc.ini
  5. # 通过SSH访问内网机器
  6. # frp会将请求x.x.x.x:6000的流量转发到内网机器的22端口
  7. $ ssh -oPort=6000 test@x.x.x.x

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

  • 通过简单配置 HTTP 类型的代理让用户访问到内网的 Web 服务

  • 编辑好如下配置文件之后,就可以分别启动 frps 和 frpc 了

  • 将 www.yourdomain.com 的域名 A 记录解析到公网 IP 地址上

  • 然后,就可以绑定自定义域名和端口来访问内网机器的服务了

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


   
  1. # 有公网IP的机器(已部署frps服务)
  2. $ vim frps.ini
  3. [common]
  4. bind_port = 7000        # 设置frp服务器用户接收客户端连接的端口
  5. vhost_http_port = 8080  # 设置监听HTTP请求端口为8080

   
  1. # 在内网IP的机器(部署frpc服务)
  2. $ vim frpc.ini
  3. [common]
  4. server_addr = x.x.x.x  # 公网IP地址
  5. server_port = 7000     # 公网设置frp服务器对应的端口
  6. [web]
  7. type = http      # 协议类型
  8. local_port = 80  # 本地机器上Web服务监听的端口
  9. custom_domains = www.yourdomain.com  # 绑定自定义域名

   
  1. # 启动服务端
  2. $ ./frps -c ./frps.ini
  3. # 启动客户端
  4. $ ./frpc -c ./frpc.ini
  5. # 通过浏览器访问
  6. $ http://www.yourdomain.com:8080

安全地暴露内网服务

  • 将会创建一个只有自己能访问到的 SSH 服务代理

  • 对于某些服务来说如果直接暴露于公网上将会存在安全隐患。使用 stcp(secret tcp) 类型的代理可以避免让任何人都能访问到要穿透的服务,但是访问者也需要运行另外一个 frpc 客户端。


   
  1. # 有公网IP的机器(已部署frps服务)
  2. $ vim frps.ini
  3. [common]
  4. bind_port = 7000  # 设置frp服务器用户接收客户端连接的端口

   
  1. # 在内网IP的机器(部署frpc服务)
  2. $ vim frpc.ini
  3. [common]
  4. server_addr = x.x.x.x  # 公网IP地址
  5. server_port = 7000     # 公网设置frp服务器对应的端口
  6. [secret_ssh]
  7. type = stcp            # 使用的协议类型
  8. sk = abcdefg           # 只有sk一致的用户才能访问到此服务
  9. local_ip = 127.0.0.1   # 本地需要暴露到公网的服务地址
  10. local_port = 22        # 本地机器上Web服务监听的端口

   
  1. # 想要访问内网服务的机器(部署frpc服务)
  2. [common]
  3. server_addr = x.x.x.x  # 公网IP地址
  4. server_port = 7000     # 公网设置frp服务器对应的端口
  5. [secret_ssh_visitor]
  6. type = stcp               # 使用的协议类型
  7. role = visitor            # stcp的访问者
  8. server_name = secret_ssh  # 要访问的stcp代理的名字
  9. sk = abcdefg              # 只有sk一致的用户才能访问到此服务
  10. bind_addr = 127.0.0.1     # 绑定本地地址用于访问SSH服务
  11. bind_port = 6000          # 绑定本地端口用于访问SSH服务

   
  1. # 启动服务端
  2. $ ./frps -c ./frps.ini
  3. # 启动客户端
  4. $ ./frpc -c ./frpc.ini
  5. # 启动客户端
  6. $ ./frpc -c ./frpc.ini
  7. # 通过SSH访问内网机器
  8. $ ssh -oPort=6000 test@127.0.0.1

Frp 的高级配置

了解 frp 的一些通用功能

身份认证

frp 配置文件,目前仅支持 ini 格式的配置文件,frps 和 frpc 各自支持不同的参数。frps 主要配置服务端的一些通用参数,frpc 则需要额外配置每一个代理的详细配置。目前 frpc 和 frps 之间支持两种身份验证方式,tokenoidc默认token。通过 frpc.inifrps.ini[common]段落中配置 authentication_method 来指定要使用的身份验证方式。只有通过身份验证的客户端(frpc)才能成功连接 frps 服务。


   
  1. # 在frps配置 - Token
  2. bind_port = 7000
  3. authentication_method = token
  4. token = 12345678

   
  1. # 在frpc配置 - Token
  2. [common]
  3. server_addr = x.x.x.x
  4. server_port = 7000
  5. authentication_method = token
  6. token = 12345678
  7. [ssh]
  8. type = tcp
  9. local_ip = 127.0.0.1
  10. local_port = 22
  11. remote_port = 6000

Web 界面

目前 frpc 和 frps 分别内置了相应的 Web 界面方便用户使用。服务端 Dashboard 使用户可以通过浏览器查看 frp 的状态以及代理统计信息。客户端管理界面,frpc 内置的 Admin UI 可以帮助用户通过浏览器来查询和管理客户端的 proxy 状态和配置。


   
  1. # 在frps配置
  2. # http://[server_addr]:7500
  3. [common]
  4. dashboard_port = 7500
  5. dashboard_user = admin
  6. dashboard_pwd = admin

   
  1. # 在frpc配置
  2. # http://127.0.0.1:7400
  3. [common]
  4. admin_addr = 127.0.0.1
  5. admin_port = 7400
  6. admin_user = admin
  7. admin_pwd = admin

范围端口映射

在 frpc 的配置文件中可以指定映射多个端口,目前只支持 TCP 和 UDP 的代理类型。这一功能通过 range: 段落标记来实现,客户端会解析这个标记中的配置,将其拆分成多个 proxy,每一个 proxy 以数字为后缀命名。实际连接成功后会创建 7 个 proxy,命名为 test_tcp_0, test_tcp_1 到 test_tcp_6。


   
  1. # 在frpc配置
  2. # 映射本地6000-6005/60077个端口
  3. [range:test_tcp]
  4. type = tcp
  5. local_ip = 127.0.0.1
  6. local_port = 6000-6005,6007
  7. remote_port = 6000-6005,6007

服务端管理


   
  1. # 在frps配置 - 端口白名单
  2. [common]
  3. allow_ports = 2000-3000,3001,3003,4000-50000
  4. # 在frps配置 - 端口复用
  5. bind_port = 443
  6. vhost_https_port = 443
  7. # 在frps配置 - 代理限速
  8. [ssh]
  9. type = tcp
  10. local_port = 22
  11. remote_port = 6000
  12. bandwidth_limit = 1MB

作者: Escape 

链接:escapelife.site/posts/1bba3ee7.html

如果本文对你有帮助的话,欢迎点赞&转发,这对我继续分享&创作优质文章非常重要。感谢🙏🏻

文章来源: mingongge.blog.csdn.net,作者:民工哥,版权归原作者所有,如需转载,请联系作者。

原文链接:mingongge.blog.csdn.net/article/details/123123937

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。