
1. 为什么需要内网穿透想象一下这个场景你家里有一台性能强劲的Linux服务器平时用来跑各种服务、做开发测试。但当你出差在外想通过SSH连接家里的服务器时发现根本连不上。这是因为家庭宽带通常没有固定公网IP运营商分配的动态IP也经常变化导致外部无法直接访问内网设备。这就是内网穿透要解决的问题。简单来说内网穿透就是在公网和内网之间建立一条隧道让外部设备能够访问内网中的服务。相比商业远程控制软件自建内网穿透方案有三大优势完全自主控制不依赖第三方服务数据在自己掌控中性能更好直连服务器没有中间商赚差价成本更低一台最基础的云服务器就能搞定frpFast Reverse Proxy是目前最流行的开源内网穿透工具之一它用Go语言编写跨平台支持好配置简单性能稳定。我用了三年多从没遇到过崩溃的情况。2. 准备工作硬件与软件需求2.1 硬件准备要搭建完整的frp内网穿透环境你需要准备以下设备公网服务器建议选择国内主流云服务商的轻量应用服务器1核1G配置就够用。我实测阿里云和腾讯云的入门级机型年费约100-200元完全能满足需求。内网服务器这是你要远程访问的目标设备可以是家里的NAS、开发机甚至是树莓派。只要它能运行Linux系统并保持联网状态就行。客户端设备这是你用来远程连接的工具Windows/Mac/Linux都可以只要能运行SSH客户端就行。2.2 软件准备所有设备都需要安装对应版本的frpwget https://github.com/fatedier/frp/releases/download/v0.51.3/frp_0.51.3_linux_amd64.tar.gz tar -zxvf frp_0.51.3_linux_amd64.tar.gz mv frp_0.51.3_linux_amd64 frp注意截至2023年10月最新稳定版是0.51.3。建议去GitHub查看最新版本号替换上面的下载链接。3. 公网服务器配置详解3.1 安全组设置在云服务器控制台找到安全组配置需要开放以下端口端口号协议用途说明7000TCPfrp服务端与客户端通信7500TCPfrp仪表板访问端口6000-7000TCPSSH转发端口范围建议设置源IP为0.0.0.0/0允许所有IP访问如果对安全性要求高可以限定为你的常用IP段。3.2 frps服务端配置进入frp目录编辑frps.ini[common] bind_port 7000 token your_secure_token_123 dashboard_port 7500 dashboard_user admin dashboard_pwd Admin123 log_level info log_max_days 3关键参数说明token是客户端连接时的验证密码建议设置复杂一些dashboard_*是管理界面登录凭证log_*相关参数帮助排查问题启动服务端./frps -c frps.ini测试是否启动成功浏览器访问http://你的公网IP:7500应该能看到frp仪表板。4. 内网服务器配置实战4.1 frpc客户端配置在内网服务器上编辑frpc.ini[common] server_addr 你的公网IP server_port 7000 token your_secure_token_123 admin_addr 127.0.0.1 admin_port 7400 [home_ssh] type tcp local_ip 127.0.0.1 local_port 22 remote_port 6001配置要点server_*必须与frps配置一致[home_ssh]是服务名称可以自定义remote_port建议在6000-7000范围内启动客户端./frpc -c frpc.ini4.2 SSH服务检查很多Linux发行版默认不开启SSH服务需要手动安装sudo apt update sudo apt install openssh-server sudo systemctl enable --now ssh检查SSH是否正常运行sudo netstat -tulnp | grep 22应该能看到类似输出tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1234/sshd5. 客户端连接测试5.1 Linux/Mac连接方式在终端直接使用SSH命令连接ssh -p 6001 内网用户名公网IP第一次连接会提示确认主机密钥输入yes后输入内网服务器的用户密码即可登录。5.2 Windows连接方式推荐使用PuTTY或MobaXterm主机名填写公网IP端口填写6001对应remote_port连接类型选择SSH点击Open输入内网服务器的用户名密码6. 进阶配置与优化6.1 设置系统服务为了避免手动启动建议将frps/frpc设置为系统服务。公网服务器创建/etc/systemd/system/frps.service[Unit] Descriptionfrp server Afternetwork.target [Service] Typesimple Usernobody Restarton-failure RestartSec5s ExecStart/path/to/frps -c /path/to/frps.ini [Install] WantedBymulti-user.target内网服务器创建/etc/systemd/system/frpc.service只需将frps改为frpc。启用并启动服务sudo systemctl enable frps sudo systemctl start frps sudo systemctl status frps6.2 多设备管理技巧如果需要穿透多个内网设备可以采用这些方案端口区分法为每个设备分配不同的remote_port[device1_ssh] remote_port 6001 [device2_ssh] remote_port 6002子域名法配合域名解析为每个设备分配子域名多token策略不同设备使用不同token增强安全性7. 常见问题排查指南问题1连接超时检查公网服务器安全组设置确认frps服务正常运行netstat -tulnp | grep 7000测试端口是否开放telnet 公网IP 7000问题2认证失败确认frps和frpc的token完全一致检查token是否包含特殊字符导致解析错误查看日志journalctl -u frps -f问题3SSH连接被拒绝确认内网SSH服务已启动检查防火墙规则sudo ufw status验证本地SSH连接ssh localhost我在实际使用中发现90%的问题都能通过日志找到原因。养成查看日志的习惯能节省大量排查时间。frp的日志非常详细通常会明确告诉你哪里配置出错。