通过 frp 内网穿透 实现公网访问内网服务

2024-04-16 20:09:10 24点赞 339收藏 18评论

本文首发于只抄博客,欢迎点击原文链接了解更多内容。

前言

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

通过 frp 内网穿透 实现公网访问内网服务

与 Tailscale、ZeroTier 之类的异地组网工具不同,frp 是把内网的服务穿透在公网上,让所有人都可以访问。因此,部署 frp 的前提是有一台具有公网 IP服务器

下载

首先,我们需要去 Github 的下载最新版本的 frp,根据自身的系统以及架构下载正确的版本,常见有 amd64、arm64 等,下载时注意区分。下载完成后,分为 frps 与 frpc 文件,其中 frps 为服务端,用于具有公网 IP 的服务器;frpc 为客户端,用于内网服务器,而对应 toml 文件则是其配置文件。

从 v0.52.0 版本开始,frp 支持 toml, yaml, json 作为配置文件,ini 将被废弃

服务端

基本配置

  1. 将 frps 文件上传至 /opt/frp 目录,并添加运行权限 chmod +x frps

  2. 创建一个配置文件 vim /opt/frp/frps.yaml

bindPort: 7000 auth: token: password webServer: addr: 0.0.0.0 port: 7500 user: admin password: password

  1. 通过 ./frps -c ./frps.yaml 运行,输出以下内容就代表运行成功

2024-04-16 19:00:08.773 [I] [frps/root.go:105] frps uses config file: ./frps.yaml 2024-04-16 19:00:09.022 [I] [server/service.go:237] frps tcp listen on 0.0.0.0:7000 2024-04-16 19:00:09.022 [I] [frps/root.go:114] frps started successfully 2024-04-16 19:00:09.023 [I] [server/service.go:350] dashboard listen on 0.0.0.0:7500

  1. 访问 7500 端口,就可以进入 frp 面板了

通过 frp 内网穿透 实现公网访问内网服务
  1. 服务端完成以上配置即可,具体穿透的端口只需要在客户端配置

后台运行

  1. 通过 ./frps -c ./frps.yaml 运行,一般只用于测试,实际使用还需要使用 systemd 来让 frp 在后台运行

  2. 创建 /etc/systemd/system/frps.service 文件,用于描述 frps 服务的配置

[Unit] Description=frps service After=network.target NetworkManager.service systemd-networkd.service iwd.service ​ [Service] Type=simple Restart=always ExecStart=/opt/frp/frps -c /opt/frp/frps.yaml ​ [Install] WantedBy=multi-user.target

  1. 启动 frps 服务

systemctl enable frps systemctl start frps

客户端

基本配置

  1. 将 frpc 文件上传至 /opt/frp 目录,并添加运行权限 chmod +x frpc

  2. 创建一个配置文件 vim /opt/frp/frpc.yaml

    • serverAddr: 服务器的公网 IP

    • serverPort: 服务器 frp 端口

    • token: 与 frps.yaml 保持一致

    • proxies: 需要穿透的服务,以 AList 为例

    • 更多配置项可以查看官方文档 - 客户端配置

serverAddr: x.x.x.x serverPort: 7000 auth: token: password proxies: - name: AList type: tcp localPort: 5244 remotePort: 5244

  1. 通过 ./frpc -c ./frpc.yaml 运行,输出以下内容就代表运行成功

2024-04-16 19:13:44.111 [I] [sub/root.go:142] start frpc service for config file [./frpc.yaml] 2024-04-16 19:13:44.112 [I] [client/service.go:294] try to connect to server... 2024-04-16 19:13:44.549 [I] [client/service.go:286] [b997b2af10c6f8dd] login to server success, get run id [b997b2af10c6f8dd] 2024-04-16 19:13:44.551 [I] [proxy/proxy_manager.go:173] [b997b2af10c6f8dd] proxy added: [AList] 2024-04-16 19:13:44.693 [I] [client/control.go:170] [b997b2af10c6f8dd] [AList] start proxy success

  1. 再次打开 frp 面板,就可以看到,Client Counts 变为 1

通过 frp 内网穿透 实现公网访问内网服务
  1. 点击左侧的 Proxies -> TCP,还可以看到具体的每一项,此时,访问服务器的 5244 端口,就可以直接打开 AList

通过 frp 内网穿透 实现公网访问内网服务

后台运行

  1. 通过 ./frpc -c ./frpc.yaml 运行,一般只用于测试,实际使用还需要使用 systemd 来让 frp 在后台运行

  2. 创建 /etc/systemd/system/frpc.service 文件,用于描述 frpc 服务的配置

[Unit] Description=frpc service After=network.target NetworkManager.service systemd-networkd.service iwd.service ​ [Service] Type=simple Restart=always ExecStart=/opt/frp/frpc -c /opt/frp/frpc.yaml ​ [Install] WantedBy=multi-user.target

  1. 启动 frpc 服务

systemctl enable frpc systemctl start frpc


展开 收起
18评论

  • 精彩
  • 最新
  • 由于每个端口都要设置转发,实际使用还是有些不便。我是主力tailscale,frp为辅,只在打洞失败的环境下使用frp(比如单位)。

    校验提示文案

    提交
  • 内网提供公网使用,通过FRP和nat123内网穿透方法都可以支持点到点直连模式,前者适合自己搭建,后者直接内网IP映射出去。

    校验提示文案

    提交
  • 已经稳定运行几年了,非常好用!简单稳定 [龇牙] 就是每个服务要设置端口映射,重装软路由的时候发现没备份,要崩溃…… [尴尬]

    校验提示文案

    提交
    不在路由器上设置端口转发,客户端能联上服务端吗?

    校验提示文案

    提交
    可以

    校验提示文案

    提交
    收起所有回复
  • 其实用op的插件设置服务端和客户端很方便,不需要对着记事本手写配置 [吐舌]

    校验提示文案

    提交
    [欢呼] 能安插件的当然优先用插件啦 方便一些 我是直接在Debian上运行的

    校验提示文案

    提交
    收起所有回复
  • 这种方式速度会受服务器限制吗?

    校验提示文案

    提交
    会的

    校验提示文案

    提交
    收起所有回复
  • 比用ddns好在哪里呢?IPv6+inadyn+ddns也很好用。

    校验提示文案

    提交
    frp是转发,最无感,不需要你有ipv6(公司单位酒店等都没有ipv6的),也不需要用户在设备上安装什么APP

    校验提示文案

    提交
    还有,你可以有80443

    校验提示文案

    提交
    收起所有回复
  • 不如直接stun ddns

    校验提示文案

    提交
  • 每次看到这种文章,我就默默感谢一下电信给我的ipv4,感谢一下tp给我的ddns。虽然电信悄摸摸给我弄掉两次了,但是最终还是给回来了

    校验提示文案

    提交
  • 需要公网IP就难倒了大部分人。

    校验提示文案

    提交
    用节点小宝呀,不用公网IP

    校验提示文案

    提交
    收起所有回复
  • 在docker玩弄了下,整个server网络掛了

    校验提示文案

    提交
  • 咋用域名

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
339
扫一下,分享更方便,购买更轻松