frp 内网穿透实现公网访问教程:零成本实现公网访问内网服务
最近在家里搭建了个人NAS服务,但很快遇到了一个棘手的问题:在外网环境下无法访问家中的资源。尝试过各种方案后,终于通过frp解决了这个痛点。今天我就把这段实践经历整理成教程,手把手教你如何通过frp实现公网访问内网服务。
什么是frp?
frp是一个专注于内网穿透的高性能反向代理工具,支持TCP、UDP、HTTP、HTTPS等多种协议,甚至还能实现P2P通信。它的核心功能是通过公网服务器中转,将内网服务安全地暴露到公网。与Tailscale、ZeroTier等组网工具不同,frp专注于服务暴露,可以让任何人都能访问你的内网服务。
重要提示: 部署frp必须有一台具备公网IP的服务器(VPS),这是整个方案的基础。我使用的是腾讯云的轻量应用服务器,性价比很高。
下载与准备
首先到 Github发布页 下载最新版本。这里有个小技巧:使用uname -a命令查看系统架构,确保下载正确版本(常见amd64/arm64)。解压后你会看到两个关键文件:
-
frps - 服务端程序(用于公网服务器)
-
frpc - 客户端程序(用于内网设备)
从v0.52.0开始,frp改用toml/yaml/json配置文件,ini格式已被废弃。建议新手从最新版本开始学习。
服务端配置
基础配置
-
上传frps到服务器
/opt/frp目录 -
添加执行权限:
chmod +x frps -
创建配置文件
frps.yaml:
bindPort: 7000 auth: token: your_secure_password # 建议使用强密码 webServer: addr: 0.0.0.0 port: 7500 # 管理面板端口 user: admin # 面板用户名 password: dashboard_password # 面板密码
配置说明:
-
bindPort:客户端连接端口
-
token:客户端认证密钥,相当于密码
-
webServer:内置监控面板配置
启动测试:./frps -c ./frps.yaml :一般只用于测试,实际使用还需要使用 systemd 来让 frp 在后台运行,方法在下面
看到"frps started successfully"提示表示启动成功
后台运行(生产环境)
正式使用时需要配置systemd服务:
-
创建
/etc/systemd/system/frps.service
[Unit] Description=frps service After=network.target [Service] Type=simple Restart=always ExecStart=/opt/frp/frps -c /opt/frp/frps.yaml [Install] WantedBy=multi-user.target
-
启用服务:
systemctl enable frps systemctl start frps systemctl status frps # 检查运行状态
客户端配置
基础配置
-
上传frpc到内网设备
/opt/frp -
添加执行权限:
chmod +x frpc -
创建配置文件
frpc.yaml:
serverAddr: 你的服务器IP # 公网服务器IP
serverPort: 7000 # 与服务端bindPort一致
auth:
token: your_secure_password # 与服务端token相同
proxies:
- name: AList # 服务名称(自定义)
type: tcp # 传输协议
localPort: 5244 # 内网服务端口
remotePort: 5244 # 公网暴露端口
启动客户端:./frpc -c ./frpc.yaml :一般只用于测试,实际使用还需要使用 systemd 来让 frp 在后台运行,方法在下面
看到"start proxy success"提示表示穿透成功
多服务配置技巧
如果需要暴露多个服务,只需在proxies下追加配置:
proxies:
- name: WebService
type: http # HTTP协议
localPort: 8080
customDomains: ["your.domain.com"] # 绑定域名
- name: SSH
type: tcp
localPort: 22
remotePort: 2222 # 通过2222端口访问SSH
后台运行(生产环境)
与服务端类似,创建systemd服务:
-
创建
/etc/systemd/system/frpc.service
[Unit] Description=frpc service After=network.target [Service] Type=simple Restart=always ExecStart=/opt/frp/frpc -c /opt/frp/frpc.yaml [Install] WantedBy=multi-user.target
-
启用服务:
systemctl enable frpc systemctl start frpc
安全加固建议
-
防火墙配置:只开放必要的端口(7000/7500)
-
定期更新:关注Github发布页,及时升级版本
-
访问控制:通过面板IP白名单限制管理访问
-
HTTPS加密:对Web服务启用HTTPS加密传输
经验分享: 我在实际使用中将remotePort设置为非常用端口(如52000+范围),有效减少了端口扫描攻击。
进阶应用场景
除了基础穿透,frp还能实现:
-
远程桌面连接(Windows/macOS)
-
家庭监控摄像头访问
-
本地开发环境临时外网测试
-
IoT设备远程管理
经过一周的稳定运行,我的AList服务通过frp实现了完美的公网访问,传输速度达到带宽上限。整个过程从配置到上线只用了不到30分钟,frp的学习曲线非常平缓。
最终效果: 现在无论身在何处,我都能通过公网IP:5244访问家中的NAS服务,手机端也能流畅播放4K影片,彻底解决了远程访问的痛点。
点击链接加入群聊四群:722808830
点击链接加入群聊三群:751529538(已满)
点击链接加入群聊二群:376877156(已满)
点击链接加入群聊一群:622891808(已满)
饿了么红包
本站附件分享,如果附件失效,可以去找找看