【代理】FRP 内网穿透、反向代理与 SOCKS5 转发实战

原版地址:https://github.com/fatedier/frp

我这边把几篇关于 FRP 的零散笔记合并整理成一篇,方便后面直接查。整篇还是围绕我平时最常用的几个场景来写:基础反向代理、边界主机回连、配合 Proxifier/Proxychains 做流量转发、以及常见排错

FRP(Fast Reverse Proxy)本质上就是一个反向代理工具。它支持 TCP、UDP、HTTP、HTTPS 等多种协议,在我平时做内网穿透、远程调试、授权测试环境流量转发的时候都比较常用。简单理解,就是通过一台公网机器做中转,让我从外部能够继续访问内网目标。

一、我通常怎么理解 FRP

  • 公网 VPS 跑 frps,负责监听和接收连接
  • 边界主机或内网主机跑 frpc,主动回连到 VPS
  • 我需要访问什么服务,就在客户端配置里把对应端口映射出来

所以它最适合的就是:公网打不进来,但目标主机能主动出网 的场景。

二、编译与准备

如果我要自己编译 frp,首先会准备 Go 环境。Go 环境安装教程可以参考:

https://www.runoob.com/go/go-environment.html

如果是在中国大陆网络环境下,拉依赖有时比较慢,我一般会先配置模块代理:

https://github.com/goproxy/goproxy.cn/blob/master/README.zh-CN.md

go env -w GOPROXY=https://goproxy.cn,direct

进入源码目录以后,再根据当前版本的 README 或 Makefile 来执行构建。老版本里也有人直接用:

sh ./package.sh

不同版本的构建方式不完全一样,所以我这里还是建议以当前仓库的说明为准。

三、FRP 下载地址

如果不准备自己编译,直接下载官方 Release 即可:

https://github.com/fatedier/frp/releases

常见平台版本一般都能在 Release 页面找到,例如:

Windows amd64
Windows 386
Linux amd64
Linux 386

四、最基础的反向代理

这是我最常用的场景:一台公网 VPS 做服务端,一台边界主机做客户端。

1. 公网侧启动 frps

frps -p 9090

如果用配置文件,我一般会直接写成:

# frps.ini
[common]
bind_addr = 0.0.0.0
bind_port = 7000
token = your-strong-token

然后启动:

frps.exe -c frps.ini

2. 内网侧启动 frpc

边界主机主动回连到公网服务端:

# frpc.ini
[common]
server_addr = 45.76.153.192
server_port = 7000
token = your-strong-token

[socks]
type = tcp
remote_port = 6000
plugin = socks5

启动客户端:

frpc.exe -c frpc.ini

这样我在本地只要访问公网服务器的对应端口,就能通过 FRP 转到内网侧提供的代理能力。

五、我怎么配合 Proxifier / Proxychains 使用

很多时候,我并不是单纯映射一个 Web 端口,而是希望把整段流量通过 SOCKS 代理走过去。这时我一般会配合 Proxifier 或 Proxychains 来使用。

1. Proxifier

  • 代理地址填写公网 VPS 地址
  • 代理端口填写 FRP 映射出来的 SOCKS5 端口
  • 协议选 SOCKS5

这样本地不支持代理的软件,也可以被强制走代理。

2. Proxychains

Linux 下我更常用 Proxychains。把配置文件里加上:

socks5  公网IP  端口

之后像下面这样运行即可:

proxychains curl http://ip-api.com/json/?lang=zh-CN

如果返回的出口 IP 已经变成目标链路,那说明代理通了。

六、一个典型内网场景

我平时常见的场景是这样的:

  • VPS:100.20.14.14
  • 边界 Web 服务器:42.41.52.13 / 192.168.10.10
  • 内网其他主机:192.168.10.20、192.168.10.30

这时候我会把边界 Web 服务器作为 FRP 客户端,让它主动连到 VPS。等隧道建立之后,我再通过 VPS 转发到边界主机,进一步访问内网其它地址。这样整个链路会比较清晰,也方便我统一管理。

七、常见问题排查

1. 连不上服务端

  • 先看服务端端口是否真的开放
  • 再看安全组、防火墙是否放行
  • 确认 token 是否一致
  • 确认 frps 和 frpc 版本不要差太多

2. 隧道建立了,但业务流量不通

  • 先确认客户端本地服务本身能不能访问
  • 再确认 remote_port 是否被占用
  • 如果配合 Proxifier / Proxychains,要检查代理协议是否填对

3. 访问慢或者不稳定

  • 优先检查链路质量,而不是一上来就怀疑工具
  • 日志里重点看重连、超时和鉴权失败
  • 必要时把配置精简,只保留当前确实要用的映射

八、补充说明

  • 如果只是正常部署,我优先建议直接用官方 Release
  • 正式环境建议开启 token 和 TLS,不要裸奔
  • 如果要开 SOCKS5,记得做好账号、端口和来源控制
  • Dashboard 不建议直接暴露到公网

九、总结

我自己把几篇 FRP 相关内容合并之后,核心其实就两件事:

  1. 让内网主机主动回连公网服务端,建立稳定隧道
  2. 再配合 Proxifier / Proxychains,把需要的流量转进去

只要把这两层关系理顺,FRP 的用法就不会乱。后面如果我要继续扩展 HTTP、HTTPS、域名转发或者多端口映射,也都是在这个基础上往上叠。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 共1条

请登录后发表评论

    暂无评论内容