1. 为什么需要内网穿透很多开发者都遇到过这样的场景你在本地电脑上搭建了一个Web服务可能是个人博客、测试环境或者某个正在开发的项目。你想让远方的同事或者客户看看效果却发现对方根本无法访问——因为你的服务跑在本地内网没有公网IP。这时候就需要内网穿透技术来帮忙了。FRPFast Reverse Proxy是目前最流行的内网穿透工具之一。它通过在公网服务器和本地机器之间建立安全通道将内网服务映射到公网上。相比其他方案FRP配置简单、性能稳定特别适合个人开发者和小型团队使用。我去年帮一个创业团队部署演示环境时就用了FRP。他们需要在投资人面前展示还在开发中的Web应用但代码和数据库都在办公室的测试机上。用FRP只花了15分钟就解决了访问问题最终演示非常顺利。下面我就把这个实战经验完整分享给大家。2. 环境准备与安装2.1 服务器端配置首先需要准备一台有公网IP的云服务器阿里云、腾讯云等都行。登录服务器后推荐使用一键安装脚本wget https://code.aliyun.com/MvsCode/frps-onekey/raw/master/install-frps.sh -O ./install-frps.sh chmod 700 ./install-frps.sh ./install-frps.sh install运行脚本时会交互式配置几个关键参数服务端口默认5443这是FRP服务端监听端口客户端通过这个端口连接HTTP/HTTPS端口默认80/443最终访问网页时用的端口管理面板端口默认6443用于查看连接状态Token相当于密码客户端和服务端要保持一致重要安全提示Token一定要设置复杂值我就遇到过有人用简单密码被恶意连接的情况。建议使用16位以上随机字符串。2.2 客户端配置在需要暴露服务的本地机器上从GitHub下载对应版本的FRP客户端。解压后先清理不必要的文件rm -rf frps* # 删除服务端文件 chmod 777 frpc # 添加执行权限然后编辑配置文件frpc.ini核心配置包括server_addr云服务器公网IPserver_port与服务端配置的端口一致token必须与服务端设置相同web段配置定义要暴露的本地服务3. 详细配置解析3.1 服务端关键参数在云服务器上安装完成后配置文件通常位于/etc/frp/frps.ini。建议检查以下参数[common] bind_port 5443 # 客户端连接端口 vhost_http_port 80 # 外部访问HTTP端口 dashboard_port 6443 # 管理面板端口 token your_strong_password # 认证密钥端口冲突处理如果80端口被Nginx等占用可以改为8080等端口。但要注意访问时需带端口号如http://ip:8080。3.2 客户端配置实战假设本地运行着一个监听80端口的Web服务典型配置如下[common] server_addr 123.123.123.123 server_port 5443 token your_strong_password [web] type http local_port 80 custom_domains yourdomain.com # 或直接写服务器IP调试技巧初次启动建议在前台运行查看日志./frpc -c ./frpc.ini看到start proxy success就说明连接成功了。如果失败常见原因有服务器防火墙未放行端口Token不一致本地服务未正常运行4. 安全加固与优化4.1 基础安全措施除了设置强Token外还建议修改默认端口避免使用5443、6443等常见端口启用TLS加密在[common]段添加tls_enable trueIP白名单通过allow_ports限制可访问IP4.2 性能优化配置对于高并发场景可以调整[common] max_pool_count 50 # 连接池大小 tcp_mux true # 启用多路复用实测数据在我的项目中开启TCP多路复用后并发性能提升了约30%。4.3 域名绑定最佳实践如果有域名建议在DNS解析中添加A记录指向服务器IP配置文件中使用域名而非IP启用HTTPS需要配合Nginx反向代理5. 常见问题排查5.1 连接失败排查步骤检查服务器端口通不通telnet 服务器IP 5443查看服务端日志journalctl -u frps -f确认本地服务可访问curl http://localhost5.2 性能问题处理如果访问速度慢可以更换离用户更近的云服务器区域调整pool_count参数增加连接数检查服务器带宽是否够用5.3 服务自启动配置让FRP客户端开机自动运行sudo cp frpc /usr/local/bin/ sudo vim /etc/systemd/system/frpc.service服务文件内容参考[Unit] DescriptionFRP Client Afternetwork.target [Service] ExecStart/usr/local/bin/frpc -c /path/to/frpc.ini Restartalways [Install] WantedBymulti-user.target最后执行sudo systemctl enable frpc sudo systemctl start frpc6. 进阶使用场景6.1 多服务同时映射一个客户端可以暴露多个服务只需添加多个配置段[blog] type http local_port 80 custom_domains blog.yourdomain.com [api] type http local_port 3000 custom_domains api.yourdomain.com6.2 配合Nginx使用对于生产环境建议用Nginx做反向代理server { listen 80; server_name yourdomain.com; location / { proxy_pass http://127.0.0.1:8080; # FRP映射的端口 proxy_set_header Host $host; } }这样既能实现HTTPS又能做负载均衡。6.3 远程开发调试除了Web服务还可以映射SSH22端口数据库如MySQL的3306开发工具端口如VSCode的3000配置示例[ssh] type tcp local_ip 127.0.0.1 local_port 22 remote_port 2222 # 通过服务器2222端口访问7. 监控与维护7.1 使用Dashboard访问http://服务器IP:6443可以看到当前连接数流量统计各代理状态7.2 日志分析服务端日志通常位于/var/log/frps.log重点关注新连接记录认证失败警告异常断开信息7.3 定期更新FRP项目更新频繁建议每季度检查新版本# 服务端升级 ./install-frps.sh update # 客户端更新 wget https://github.com/fatedier/frp/releases记得更新前备份配置文件