FRP内网穿透实战:无公网环境下的服务映射》

02-21181阅读0评论游戏人生

由于我即将将服务器迁移到学校的无公网环境中,因此需要研究如何通过 FRP(Fast Reverse Proxy)内网穿透 来映射一些必要的服务到外部。然而,我发现网上大部分教程都是基于 Windows 环境的 INI 配置,而我使用的 TOML 配置与之差异较大。经过一段时间的摸索,我整理了这篇文章,希望对有类似需求的朋友有所帮助。

FRP 简介

FRP 是一款强大的内网穿透工具,分为 FRPS(服务端)FRPC(客户端)。它可以转发多种类型的流量,但本文仅重点介绍最常用的两种:TCPHTTP
  • TCP:类似于端口转发,直接将端口的流量进行透明传输。
  • HTTP:类似于 Nginx 的反向代理,通过域名区分不同的后端服务,允许服务端使用单个端口转发多个网站。

FRPS(服务端)配置

Docker-Compose 配置

yaml复制
version: "3.3"services:
  frps:
    image: snowdreamtech/frps:0.61
    container_name: frps    hostname: frps    restart: always    network_mode: host    volumes:
      - /etc/localtime:/etc/localtime:ro      - ./conf/frps.toml:/etc/frp/frps.toml:ro      - ./logs:/frp/logs

frps.toml 配置

toml复制
# 监听地址bindAddr = "0.0.0.0"# 监听端口bindPort = 7000kcpBindPort = 7000# HTTP/HTTPS 监听端口vhostHTTPPort = 8080vhostHTTPSPort = 4443# 允许代理绑定的服务端端口范围allowPorts = [
  { start = 2000, end = 3000 },
  { single = 3001 },
  { single = 3003 },
  { start = 4000, end = 50000 }]# 鉴权配置auth.method = "token"auth.token = "xxxxxxxxxx"  # 请自行修改# 日志配置log.to = "/frp/logs/frps.log"log.level = "debug"log.maxDays = 180log.disablePrintColor = false# 子域名配置subdomainHost = "abc.com"  # 请自行修改# 仪表盘配置webServer.addr = "0.0.0.0"webServer.port = 7500webServer.user = "admin"webServer.password = "xxxxxxxxx"  # 请自行修改# Prometheus 监控接口enablePrometheus = true# 最大连接池大小transport.maxPoolCount = 1000
注意token域名password 需要根据实际情况自行修改。域名填写一级域名即可,后续 HTTP 反向代理会使用该域名的二级域名来区分不同的网站。

FRPC(客户端)配置

Docker-Compose 配置

yaml复制
version: '3.3'services:
  frpc:
    image: snowdreamtech/frpc:0.61
    container_name: frpc    restart: always    network_mode: host    volumes:
      - /etc/localtime:/etc/localtime:ro      - ./conf:/etc/frp:ro      - ./logs:/frp/logs      - /root/.acme.sh/xxxxxx:/etc/ssl  # 证书路径请自行配置

frpc.toml 配置

toml复制
# 连接服务端的配置serverAddr = "x.x.x.x"  # 服务端 IPserverPort = 7000# 鉴权配置auth.method = "token"auth.token = "xxxxxxxxx"# 日志配置log.to = "/frp/logs/frpc.log"log.level = "info"log.maxDays = 30log.disablePrintColor = false# 动态加载配置文件includes = ["/etc/frp/confd/*.toml"]
说明:请根据服务端配置修改 token 和其他参数。在 /etc/frp 中新建 confd 文件夹,后续需要添加的配置文件可以在此文件夹内新建 xxx.toml 文件。

配置示例

TCP 服务示例

toml复制
[[proxies]]name = "Home Assistant"  # 连接名称type = "tcp"             # 连接类型localIP = "192.168.101.194"  # 本地局域网 IPlocalPort = 8123         # 本地端口remotePort = 8122        # 远程端口transport.useEncryption = false  # 是否启用加密transport.useCompression = false  # 是否启用压缩
访问方式:通过 服务端IP:8122 访问本地的 192.168.101.194:8123

HTTP 服务示例

toml复制
[[proxies]]name = "EMBY"            # 连接名称type = "https"           # 连接类型subdomain = "emby"       # 子域名localAddr = "192.168.101.236:8091"  # 局域网 IP 和端口[proxies.plugin]type = "https2http"crtPath = "/etc/ssl/*.abc.com.cer"  # 证书路径keyPath = "/etc/ssl/*.abc.com.key"hostHeaderRewrite = "127.0.0.1"requestHeaders.set.x-from-where = "frp"
访问方式:通过 https://emby.abc.com:4443 访问本地的 192.168.101.236:8091
注意:建议使用通配符域名证书(如 *.abc.com),以方便后续扩展。

总结

通过上述配置,您可以轻松实现内网服务的外部访问。FRP 的强大功能和灵活配置使其成为内网穿透的绝佳选择。希望这篇文章能帮助您顺利完成配置。如有疑问,欢迎交流!


文章版权声明:除非注明,否则均为游戏人生原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复:表情:
AddoilApplauseBadlaughBombCoffeeFabulousFacepalmFecesFrownHeyhaInsidiousKeepFightingNoProbPigHeadShockedSinistersmileSlapSocialSweatTolaughWatermelonWittyWowYeahYellowdog
评论列表 (暂无评论,181人围观)

还没有评论,来说两句吧...

取消
微信二维码
微信二维码
支付宝二维码