使用 frp 进行内网穿透

frp 是一个开源的内网穿透工具,可以使外网设备访问内网防火墙后的设备/服务器。
比如可以买一个 99元/年 的阿里云低配 ECS,然后把自己相对高配的旧电脑放在家里。
家里的旧电脑通过 frp 连上 ECS 之后,外网设备就可以通过 ECS 访问这台旧电脑了。
这种方案适合搭建自己的代码管理系统、CI/CD、个人博客、小型论坛、股票系统等等。

server 端(阿里云ECS)的配置

# #################################
# frps.yaml - frp 服务端配置
# 说明:此文件仅用于阅读和管理
# #################################

# 绑定的服务监听地址(默认仅本地回环),如需公网访问请设置为 0.0.0.0
bindAddr: "0.0.0.0"

# frp 服务默认监听 7000 端口(供家里旧电脑使用)
bindPort: 7000

# 可选:使用 KCP 协议加速(UDP)时监听的端口
# kcpBindPort: 7000

# 可选:QUIC 协议监听端口(建议单独配置)
# quicBindPort: 7001

# 可选:UDP 协议端口(供 UDP 转发使用)
# bindUdpPort: 7002

# 设置 token,用于客户端认证
authentication:
  method: "token"      # 可选:"token"、"oidc"
  token: "your_secure_token_here"

# 是否启用 TLS 加密
# transport:
#   tls:
#     enable: true
#     certFile: "/path/to/cert.pem"
#     keyFile: "/path/to/key.pem"

# 仪表盘 dashboard 配置(用于查看连接状态)
webServer:
  addr: "0.0.0.0"         # 监听地址(本地可设为127.0.0.1,公网需设为0.0.0.0)
  port: 7500              # dashboard 监听端口
  user: "admin"           # 登录用户名(可选)
  password: "admin"       # 登录密码(可选)
  # tlsEnable: false      # dashboard 是否启用 HTTPS(默认 false)

# 日志相关配置
log:
  level: "info"           # 日志级别:trace, debug, info, warn, error
  to: "./frps.log"        # 日志输出文件路径(默认 stdout)
  maxDays: 7              # 日志保留天数
  disablePrintColor: false

# 最大客户端连接数限制
maxPoolCount: 100

# TCP 多路复用(提升性能)
tcpMux:
  enable: true
  # keepaliveInterval: 60

# 是否允许客户端访问 frps 的配置接口(高危)
# allowPorts: [80, 443, 22]      # 控制哪些端口可被客户端映射

# 控制哪些客户端可以连接(基于 ID 认证,可选)
# clients:
#   - id: clientA
#     token: abc123

# 允许的代理类型
# allowProxyTypes:
#   - tcp
#   - udp
#   - http
#   - https
#   - stcp
#   - xtcp

# 自定义 DNS 解析器
# dnsServer: "8.8.8.8"

# 自定义端口映射范围限制(防止乱用)
# portRange:
#   min: 10000
#   max: 20000

client 端(家里旧电脑)的配置

# #################################
# frpc.yaml - frp 客户端配置
# #################################

# 服务器的 ip
serverAddr: "x.x.x.x"

# 服务器的端口(与服务端 bindPort 对应)
serverPort: 7000

# 客户端身份认证(与服务端 token 必须一致)
authentication:
  method: "token"
  token: "your_secure_token_here"

# 可选:客户端自己的唯一 ID(用于多客户端场景)
# user: "my-client-id"

# 日志相关设置
log:
  level: "info"               # 可选:trace, debug, info, warn, error
  to: "./frpc.log"            # 日志输出路径
  maxDays: 7                  # 日志保留天数
  disablePrintColor: false    # 是否禁用彩色输出

# TCP 多路复用(默认开启)
tcpMux:
  enable: true

# 连接 frps 的协议类型(可选:tcp, kcp, quic, websocket, wss)
# transport:
#   protocol: "tcp"

# #################################
# 定义需要穿透的服务(proxies)
# 支持多个,格式类似数组项
# #################################

proxies:
  # 此处开启一个 ssh 服务
  - name: "ssh"                               # 内网服务的名称(可任意)
    type: "tcp"                               # 基于 tcp
    localIP: "127.0.0.1"                      # 从公网访问内网服务的地址,默认为本机的 "127.0.0.1"
    localPort: 22                             # 从公网访问内网服务的端口,默认为本机的 22 端口(ssh-server)
    remotePort: 7001                          # 公网通过 "ssh -p 7001 root@x.x.x.x" 访问 frp 客户端的 ssh-server,即:frps 服务器的 7001 端口的数据都会被转发给内网的 ssh 服务

  # 此处开启一个 http 服务
  - name: "web"                               # 内网服务的名称(可任意)
    type: "http"                              # 基于 tcp
    localPort: 8200                           # 暴露给公网用户的端口,可以通过 http://x.x.x.x:8200 访问内网的 http 服务器
    remotePort: 8200                          # 公网映射端口
    # customDomains:  "www.yourdomain.com"    # 自定义域名(如开启,取消前面的注释)

  # STCP 加密通道(适合内网 P2P)
  # - name: "secure-service"
  #   type: "stcp"
  #   localPort: 9000
  #   secretKey: "shared_key"

  # UDP 穿透示例(如 DNS)
  # - name: "dns"
  #   type: "udp"
  #   localPort: 53
  #   remotePort: 1053

# #################################
# 可选:插件、自定义域名、多用户、TLS等高级配置
# #################################

# 支持插件,如 HTTPS → 本地 HTTP 转换
# - name: "https-plugin"
#   type: "https"
#   plugin:
#     name: "https2http"
#     localAddr: "127.0.0.1:80"
#     crtPath: "/path/to/cert.crt"
#     keyPath: "/path/to/cert.key"
#     hostHeaderRewrite: "127.0.0.1"
posted @ 2025-05-14 15:45  江南烟雨梦  阅读(184)  评论(0)    收藏  举报