Windows下利用FRP实现多端口内网穿透的实战指南
1. 为什么需要内网穿透先说说我自己的经历吧。去年在家办公的时候公司内网有好几个服务需要远程访问OA系统、代码仓库、测试环境还有内部文档平台。每次都要连VPN特别麻烦而且速度慢得像蜗牛。后来技术部的同事推荐了FRP这个神器我才发现原来内网穿透可以这么简单高效。FRPFast Reverse Proxy是一款开源的内网穿透工具它的核心功能就是把内网的服务映射到公网。想象一下你家的内网就像一个小房间FRP就是在这个房间墙上开了一扇门让外面的人可以直接进来。最厉害的是它能同时开好几扇门多端口映射每个门通向不同的服务。在Windows环境下使用FRP特别适合这些场景远程办公时需要访问公司内网的多个服务开发调试时需要把本地服务暴露给同事或客户家里搭建了NAS、监控等设备需要远程管理游戏服务器需要让朋友联机我实测下来FRP比传统的VPN方案更灵活可以精确控制哪些端口对外开放而且配置简单性能也很稳定。下面我就手把手教你如何在Windows上搞定多端口内网穿透。2. 准备工作搭建FRP环境2.1 硬件和软件需求在开始之前你需要准备两样东西一台有公网IP的服务器比如阿里云、腾讯云的ECS你的Windows电脑内网机器FRP分为服务端frps和客户端frpc。服务端要装在公网服务器上客户端装在内网的Windows电脑上。这里有个小技巧如果你的云服务器带宽不大建议选按量付费的大带宽实例穿透速度会快很多。2.2 下载和安装FRP首先去GitHub下载最新版的FRP。我推荐用0.44.0版本这个版本我用了一年多特别稳定。下载地址在FRP的GitHub releases页面选择对应系统的压缩包。解压后你会看到一堆文件其实核心的就两个frps.exe服务端程序frpc.exe客户端程序把frps相关的文件复制到云服务器frpc相关的文件复制到你的Windows电脑。建议单独建个文件夹存放比如D:\frp这样管理起来方便。3. 配置FRP服务端3.1 基础配置在云服务器上用记事本新建一个frps.ini文件内容如下[common] bind_port 7000 dashboard_port 7500 dashboard_user admin dashboard_pwd your_password token your_token这里有几个关键参数要注意bind_port是服务端监听的端口客户端就是通过这个端口连接dashboard开头的三个参数是控制面板的配置建议修改默认密码token是客户端连接的凭证相当于密码一定要设得复杂些3.2 启动服务端在frps.ini同目录下新建一个start_frps.bat文件内容就一行frps.exe -c frps.ini双击运行这个bat文件如果看到frps started successfully就说明服务端启动成功了。为了让服务端能一直运行建议用nssm把它注册为系统服务nssm install frps D:\frp\frps.exe -c D:\frp\frps.ini nssm start frps4. 配置FRP客户端4.1 基础客户端配置在Windows电脑上新建frpc.ini文件[common] server_addr 你的服务器IP server_port 7000 token your_token [web] type tcp local_ip 127.0.0.1 local_port 80 remote_port 8080 [ssh] type tcp local_ip 127.0.0.1 local_port 22 remote_port 2222这个配置实现了两个端口的映射把本地的80端口映射到服务器的8080端口把本地的22端口映射到服务器的2222端口4.2 多端口映射技巧如果需要映射更多端口直接在下面添加新段落就行。比如我再加一个远程桌面和数据库端口[rdp] type tcp local_ip 127.0.0.1 local_port 3389 remote_port 33389 [mysql] type tcp local_ip 127.0.0.1 local_port 3306 remote_port 33060这里有个实用技巧remote_port最好选5位数端口比如10000-65535之间的避免和常用端口冲突。我习惯用3开头的端口比如3081、3082这样好记。4.3 启动客户端同样新建一个start_frpc.batfrpc.exe -c frpc.ini双击运行后如果看到start proxy success就说明连接成功了。这时候你访问服务器IP:8080就能访问到内网的80端口服务了。5. 进阶配置与优化5.1 域名绑定如果你有域名可以配置域名访问。首先在域名解析里添加A记录指向服务器IP然后修改frpc.ini[web] type tcp local_ip 127.0.0.1 local_port 80 remote_port 8080 custom_domains your.domain.com这样访问your.domain.com:8080就能直达内网服务了。5.2 安全加固为了安全考虑建议做这些防护措施修改默认的dashboard端口和密码设置复杂的token在云服务器安全组里只开放必要的端口定期查看frps的日志文件5.3 性能调优如果感觉速度不够快可以尝试这些优化启用压缩在common段添加tcp_mux true调整传输协议protocol kcp增加并发连接数pool_count 106. 常见问题排查6.1 连接失败怎么办首先检查这几项服务器安全组是否放行了相应端口服务器防火墙是否允许frps.exe通信客户端配置的server_addr和token是否正确服务端和客户端的版本是否一致6.2 端口被占用如果启动时报端口被占用可以用netstat -ano查看哪个程序占用了端口修改frps.ini里的bind_port换一个端口记得客户端配置的server_port也要相应修改6.3 服务自动断开遇到频繁断开的情况可以在common段添加heartbeat_timeout 90检查服务器带宽是否跑满查看服务器CPU和内存使用情况7. 实际应用案例去年我给公司搭建了一套远程开发环境用FRP映射了这些端口3081前端开发服务器3082后端API服务3083数据库管理工具3084文档系统配置是这样的[frontend] type tcp local_ip 127.0.0.1 local_port 3000 remote_port 3081 [backend] type tcp local_ip 127.0.0.1 local_port 8080 remote_port 3082这样开发团队在任何地方都能访问测试环境效率提升特别明显。而且FRP的稳定性很好连续运行几个月都不需要重启。