尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

内网穿透实战:基于frp实现远程访问与本地服务暴露

内网穿透实战:基于frp实现远程访问与本地服务暴露 1. 从“局域网孤岛”到“随时访问”为什么我们需要内网穿透如果你和我一样经常需要远程访问家里的电脑、NAS或者想把自己在本地开发的服务临时分享给朋友测试那你一定遇到过这个经典难题设备明明就在家里网络也通为什么在外面就是连不上这堵看不见的“墙”就是NAT网络地址转换和运营商防火墙。我们家庭宽带分配到的通常是内网IP路由器再通过一个公网IP与外界通信。外部网络无法主动发起对内部设备的连接请求这就好比你的家在一个没有门牌号的大院里快递员知道大院地址但不知道具体该敲哪一扇门。“内网穿透”技术就是解决这个问题的钥匙。它通过在公网服务器有固定IP或域名和你的内网设备之间建立一条稳定的“隧道”。外部请求先到达公网服务器再由服务器通过这条隧道转发给你的内网设备从而实现从外网访问内网服务。这就像在大院门口公网服务器安排了一位管家穿透客户端快递员把包裹交给管家管家再根据房号内网设备标识准确送到你手上。在众多内网穿透工具中frp以其配置灵活、性能稳定、社区活跃而备受青睐。它采用C/S架构分为服务端frps和客户端frpc。服务端部署在具有公网IP的服务器上负责接收外部流量客户端部署在内网设备上主动连接服务端并注册需要暴露的服务。今天我们就来手把手搞定在Windows客户端和Linux服务器上部署frp的全过程让你彻底告别“局域网孤岛”。2. 战前准备服务器与客户端的选型与基础配置在开始敲命令之前合理的规划和准备能避免后续很多麻烦。这里我们假设你已经拥有一台云服务器如阿里云、腾讯云、AWS等系统为Ubuntu 22.04 LTS客户端是你的Windows 10/11电脑。2.1 服务器端frps环境剖析你的云服务器是整条隧道的“枢纽”它的选择和配置至关重要。服务器基础要求公网IP这是必须的。确保你的云服务器实例分配了公网IPv4地址。部分云厂商的服务器默认只开通了IPv6或处于私有网络需要在控制台手动申请或绑定弹性公网IP。安全组/防火墙这是新手最容易踩坑的地方。云服务器的安全组或防火墙规则默认会拦截大部分入站端口。我们需要为frp服务端开放必要的端口。通常frps默认监听7000端口用于与客户端建立控制连接。此外我们后续映射的每个服务如远程桌面、Web服务都需要一个独立的端口这些端口也需要在安全组中放行。一个稳妥的做法是先规划好你要暴露哪些服务记下它们的端口号一并配置。系统权限建议使用具有sudo权限的普通用户进行操作而非直接使用root账户以提高安全性。域名与SSL可选但推荐如果你希望通过域名而非IP端口来访问服务并且希望通信加密那么需要准备一个域名并为frps配置TLS证书。这对于暴露Web服务如个人博客、仪表盘尤为重要。你可以使用Let‘s Encrypt申请免费证书。本文为简化流程先以IP直连为例但会在配置中预留SSL的选项。2.2 客户端frpc环境确认客户端是你的Windows电脑需要确保网络正常能够访问互联网。你计划从外部访问的服务在本地是正常运行的。例如你想穿透远程桌面请先在局域网内测试RDP连接是否正常想穿透一个本地Web应用请先用浏览器访问http://localhost:端口确认服务已启动。知晓这些本地服务的监听端口如RDP默认3389HTTP服务可能是8080等。2.3 frp版本选择与下载前往frp项目的GitHub Releases页面根据服务器和客户端的系统架构下载对应的版本。对于大多数情况服务器Linux选择linux_amd64版本。客户端Windows选择windows_amd64版本。下载后你将得到一个压缩包如frp_0.xx.x_linux_amd64.tar.gz和frp_0.xx.x_windows_amd64.zip。里面包含frps服务端程序、frpc客户端程序以及它们各自的配置文件示例frps.ini,frpc.ini和完整配置文件frps_full.ini,frpc_full.ini。完整配置文件包含了所有可配置项的说明是极好的参考手册。3. 服务器端部署实战从安装到守护进程现在我们登录到Linux服务器开始部署frp服务端。3.1 上传、解压与目录规划通过SFTP工具如WinSCP、FileZilla或scp命令将Linux版的frp压缩包上传到服务器的某个目录例如/opt。# 切换到目录并解压 cd /opt sudo tar -zxvf frp_0.xx.x_linux_amd64.tar.gz # 重命名目录以便管理 sudo mv frp_0.xx.x_linux_amd64 frp cd frp解压后你会看到一系列文件。我们主要关心frps可执行文件和frps.ini配置文件。一个好的习惯是建立独立的目录来存放这些文件并与系统服务集成。3.2 核心配置文件frps.ini详解使用vim或nano编辑frps.ini文件。一个最基础但功能完整的配置如下[common] bind_addr 0.0.0.0 bind_port 7000 # 仪表盘端口用于查看frps状态 dashboard_port 7500 # 仪表盘登录账号密码 dashboard_user admin dashboard_pwd your_strong_password_here # 客户端连接认证令牌强烈建议设置增强安全性 token your_secure_token_here # 子域名配置如果你打算用子域名访问服务如web.yourdomain.com subdomain_host yourdomain.com # 最大连接池大小根据客户端数量调整 max_pool_count 50关键配置项解读bind_addr 0.0.0.0: 表示监听所有网络接口这是标准做法。token: 这是服务端和客户端之间的“暗号”。客户端配置中必须使用相同的token才能成功连接。务必将其修改为一个强密码并妥善保管。dashboard_port,user,pwd: 开启了frps的内置Web管理面板你可以通过http://你的服务器IP:7500来查看连接状态、流量统计非常直观。subdomain_host: 这是实现“子域名访问”功能的关键。假设你拥有域名yourdomain.com并已将*.yourdomain.com的A记录解析到你的服务器IP。在客户端配置中你可以为某个服务设置subdomain web那么外部用户访问http://web.yourdomain.com时frps会根据子域名web将请求转发给对应的客户端。这比记端口号方便得多。3.3 配置系统服务Systemd实现开机自启与自动守护手动运行./frps -c ./frps.ini虽然可以启动但一旦SSH断开进程就终止了。我们需要将其配置为系统服务。创建Systemd服务单元文件sudo vim /etc/systemd/system/frps.service写入以下内容[Unit] DescriptionFrp Server Service Afternetwork.target [Service] Typesimple Usernobody Restarton-failure RestartSec5s ExecStart/opt/frp/frps -c /opt/frp/frps.ini ExecReload/opt/frp/frps reload -c /opt/frp/frps.ini [Install] WantedBymulti-user.targetUsernobody: 使用一个低权限用户运行服务是安全最佳实践。Restarton-failure: 服务异常退出时自动重启。ExecStart: 指向你的frps可执行文件和配置文件绝对路径。启用并启动服务# 重载systemd配置 sudo systemctl daemon-reload # 设置开机自启 sudo systemctl enable frps # 立即启动服务 sudo systemctl start frps # 查看服务状态和日志 sudo systemctl status frps sudo journalctl -u frps -f看到active (running)状态并且日志显示“frps started successfully”之类的信息说明服务端已成功启动。3.4 服务器防火墙与安全组配置这是打通内外网络的最后一道关卡必须配置正确。云平台安全组以阿里云/腾讯云为例登录云服务器控制台找到你的实例所属的安全组添加入方向规则协议TCP端口范围7000frps控制端口 授权对象0.0.0.0/0或你的固定IP以提升安全。协议TCP端口范围7500仪表盘端口 授权对象建议设置为你的办公IP或0.0.0.0/0如果临时查看。协议TCP端口范围你计划为内网服务映射的公网端口例如远程桌面用33890Web服务用8080授权对象按需设置。服务器本地防火墙如果启用如ufwsudo ufw allow 7000/tcp sudo ufw allow 7500/tcp sudo ufw allow 33890/tcp # 举例 sudo ufw reload现在你可以尝试在浏览器访问http://你的服务器IP:7500输入配置的用户名密码应该能看到frps的仪表盘了。这证明服务端部署成功。4. Windows客户端配置以远程桌面和Web服务为例服务端就绪后我们回到Windows电脑配置客户端来暴露本地服务。4.1 解压与配置文件准备将Windows版的frp压缩包解压到一个方便的位置例如D:\Tools\frp。在这个目录下找到frpc.ini文件用记事本或VS Code等编辑器打开。4.2 详解frpc.ini配置文件一个配置了远程桌面和HTTP Web服务的客户端配置示例如下[common] server_addr 你的服务器公网IP server_port 7000 token your_secure_token_here # 必须与frps.ini中的token一致 # 示例1暴露Windows远程桌面RDP [rdp] type tcp local_ip 127.0.0.1 local_port 3389 remote_port 33890 # 在服务器端映射的端口 # 示例2暴露一个本地运行的Web服务例如在localhost:8080 [web] type http local_ip 127.0.0.1 local_port 8080 # 使用子域名方式访问需在frps配置subdomain_host subdomain myweb # 或者使用自定义域名需将域名解析到服务器IP custom_domains myapp.yourdomain.com # 或者使用端口方式访问无需域名 # remote_port 8080 # 示例3暴露一个TCP类型的自定义服务如Minecraft服务器 [my_game] type tcp local_ip 127.0.0.1 local_port 25565 remote_port 25565配置逻辑深度解析[common]段定义了客户端如何连接服务端。server_addr和server_port指向你的frps服务器。token是认证密钥。每个[xxx]代表一个需要穿透的“代理”名称可以自定义如[rdp],[web]。type: 指定代理类型。tcp用于转发原始的TCP流量如RDPSSH数据库游戏http/https用于Web应用frps可以处理HTTP协议实现基于域名或路径的路由。local_ip和local_port: 你的内网服务实际监听的地址和端口。remote_port: 当typetcp时外部用户通过服务器IP:remote_port来访问你的服务。确保此端口已在服务器安全组开放。subdomain和custom_domains: 当typehttp/https时使用。这是frp非常强大的功能。假设frps配置了subdomain_host yourdomain.com此处设置subdomain myweb那么外部访问http://myweb.yourdomain.com的请求就会被自动转发到本地的8080端口。custom_domains则用于指定完全独立的域名。4.3 启动客户端与验证连接保存好frpc.ini文件后打开命令提示符CMD或PowerShell切换到frp目录执行frpc.exe -c frpc.ini如果一切配置正确你会看到连接成功的日志例如“proxy [rdp] start success”。此时你可以进行测试测试远程桌面在另一台不在同一局域网的电脑上打开“远程桌面连接”输入地址你的服务器公网IP:33890点击连接。你应该能看到Windows的登录界面。请注意直接暴露RDP端口到公网存在安全风险务必确保Windows账户使用强密码并考虑启用网络级身份验证NLA。测试Web服务确保你的本地Web服务例如运行在localhost:8080的应用正在运行。然后在外部浏览器访问http://myweb.yourdomain.com或http://你的服务器IP:8080取决于你的配置应该能看到你的本地网站。4.4 配置Windows客户端开机自启后台服务让frpc在后台运行并开机自启才能保证服务持续可用。在Windows上我们可以将其注册为系统服务。使用第三方工具nssm推荐nssm是一个优秀的Windows服务封装工具。下载nssm将nssm.exe放到frp目录或系统PATH路径下。以管理员身份打开命令提示符切换到frp目录执行nssm install frpc在弹出的GUI窗口中Path: 浏览选择frpc.exe。Startup directory: 自动填充为frp目录。Arguments: 输入-c frpc.ini。点击“Install service”。之后你可以在“服务”管理器中找到名为frpc的服务将其启动类型设置为“自动”。使用Windows计划任务创建一个在系统启动时运行frpc.exe的计划任务也可以实现自启但作为服务管理的便捷性不如nssm。5. 进阶配置与深度避坑指南基础功能跑通后我们来看看如何优化和解决常见问题。5.1 提升安全性与连接稳定性使用强Token和仪表盘密码这是第一道防线切勿使用默认或弱密码。限制访问来源在frps的[common]段可以使用allow_ports来限制客户端可以绑定哪些远程端口使用privilege_allow_ips来限制允许连接frps的客户端IP进一步提升安全性。启用TLS加密通信在[common]段添加tls_enable true可以为frps和frpc之间的控制连接启用TLS加密防止通信被窃听。对于typehttps的代理还需要配置证书。配置连接保活与重试在frpc的[common]段可以设置tcp_mux true # 启用多路复用提升性能 heartbeat_interval 30 heartbeat_timeout 90 login_fail_exit false # 连接失败不退出持续重试这些参数有助于在网络波动时保持连接稳定并自动重连。5.2 常见问题排查思路问题1frpc连接失败日志显示 “connection timed out” 或 “login to server failed”。排查链检查服务器IP和端口确认server_addr和server_port(7000) 无误。检查服务器防火墙/安全组这是最常见的原因。确保云服务器安全组和系统防火墙如ufw/iptables已放行7000端口。可以用telnet 你的服务器IP 7000命令从客户端测试端口连通性。检查Token确认frps和frpc中的token完全一致包括大小写和特殊字符。服务器端frps是否运行登录服务器执行sudo systemctl status frps查看状态sudo journalctl -u frps -n 50查看最新日志。问题2连接成功但无法访问映射的服务如远程桌面连不上网页打不开。排查链检查本地服务首先在Windows本机用127.0.0.1:本地端口确认服务本身是正常运行的。检查frpc配置确认local_ip和local_port填写正确。如果服务绑定在127.0.0.1这里就填127.0.0.1如果绑定在0.0.0.0也可以填127.0.0.1或本机局域网IP。检查远程端口冲突与开放确认remote_port在服务器上没有被其他程序占用并且该端口已在云服务器安全组和服务器本地防火墙中放行。这是仅次于上一步的常见坑点。检查代理类型确认type选择正确。RDP是tcp普通网站是http或https。查看frpc/frps日志连接建立后访问请求的转发日志会打印出来从中可以看到转发是否成功以及可能的错误信息。问题3使用子域名访问时出现 “no available connection” 或 “route not found”。排查链检查frps配置确认subdomain_host已正确设置为你的一级域名如yourdomain.com。检查DNS解析确认你访问的子域名如myweb.yourdomain.com的A记录已正确解析到frps服务器的公网IP。可以使用ping或nslookup命令验证。检查frpc配置确认subdomain填写正确且没有和custom_domains冲突。5.3 性能调优与资源管理连接池管理在frps的[common]段max_pool_count控制每个代理的最大连接池大小。对于并发量不大的个人使用默认值50足够。如果穿透的服务并发很高可以适当调大。带宽限制如果服务器带宽有限可以在frpc的每个代理段设置bandwidth_limit来限制单个代理的带宽避免某个服务占满全部带宽。日志管理默认日志会输出到控制台。可以在配置文件中通过log_file,log_level,log_max_days等参数将日志写入文件并控制日志级别和保留时间便于长期排查问题。经过以上步骤你应该已经成功搭建了一套属于自己的、稳定可用的内网穿透环境。从服务器部署、安全配置到客户端的多服务暴露和开机自启再到后期的排错与优化这套流程覆盖了个人用户绝大多数使用场景。frp的强大之处在于其简洁的配置和极高的灵活性一旦理解了[common]和各个代理段[xxx]的配置逻辑你就可以轻松地将任何内网服务安全、稳定地暴露到公网彻底打破网络的边界。
返回列表