• 首页
  • AI产品
  • 解决方案
  • 帮助支持
  • 招商加盟
  • 关于我们
  • 联系我们
  • 低成本内网穿透技术,轻松实现内网资源的外网访问

    使用帮助 admin 发布时间:2026-03-13 浏览:136 次


    在日常工作和生活中,我们常常会遇到这样的需求:出差时想访问家里NAS上的文件、在家办公需要连接公司内网的开发服务器、调试本地Web项目时想分享给异地客户预览……但由于家庭或小型办公网络多为内网(无公网IP),外网设备无法直接访问内网资源。此时,内网穿透技术就成为了关键解决方案,而FRP(Fast Reverse Proxy)作为一款开源、轻量、高性能的内网穿透工具,无需复杂配置和高额成本,就能轻松实现内网资源的外网访问,是个人和小型团队的首选。

    本文将从FRP核心原理、前期准备、分步部署(服务端+客户端)、常见场景配置、故障排查及低成本优化等方面,详细讲解如何用FRP实现内网穿透,全程通俗易懂,新手也能快速上手。

    一、FRP核心介绍与优势(低成本关键所在)

    1.1 FRP是什么

    FRP是一款基于Go语言开发的高性能反向代理工具,专门用于内网穿透场景。它采用C/S(客户端/服务端)架构,核心逻辑是:通过一台拥有公网IP的服务器(服务端,frps)作为“中间人”,让内网设备(客户端,frpc)主动与服务端建立长连接,从而打通内网到外网的“数据隧道”,实现外网设备通过访问公网服务器,间接访问内网资源。

    简单来说,内网设备没有公网IP,外网无法主动“找到”它,FRP就相当于让内网设备主动“伸出手”,抓住公网服务器的“手”,后续外网的访问请求,就通过这只“手”传递给内网设备,实现穿透效果。

    1.2 FRP的低成本优势

    相较于商业内网穿透服务(如花生壳、Ngrok付费版),FRP的低成本优势尤为突出,主要体现在以下3点:

    • 开源免费:FRP是完全开源的工具,无任何功能限制,无需支付任何费用,彻底摆脱商业服务的付费枷锁。

    • 硬件要求低:公网服务器无需高性能配置,入门级云服务器(1核1G内存、1M带宽)即可稳定运行,月费仅几十元,甚至可利用闲置的有公网IP的设备(如旧电脑、树莓派)搭建,实现零成本。

    • 配置简单:核心配置仅需几行代码,无需专业的网络知识,跟着教程一步步操作,10分钟即可完成部署,后续无需过多维护。

    此外,FRP还支持TCP、UDP、HTTP、HTTPS等多种协议,可满足不同场景需求(如远程桌面、SSH连接、Web预览、NAS访问等),兼容性强,稳定性高,是低成本内网穿透的最优解之一。

    二、前期准备(必做,缺一不可)

    在部署FRP之前,需要准备好以下两件核心设备,确保后续部署顺利进行,所有准备工作均围绕“低成本”展开,无需额外增加开支。

    2.1 公网服务器(服务端载体)

    核心要求:拥有固定公网IP(静态IP最佳,动态IP可配合DDNS解析弥补),系统推荐Linux(如Ubuntu、CentOS,占用资源少、稳定性强),配置无需过高,1核1G内存、1M带宽即可满足个人及小型团队使用。

    低成本方案:

    • 云服务器:选择国内主流云厂商(阿里云、腾讯云、华为云)的入门级服务器,新用户首月低至9元,年付仅几十元,性价比极高。

    • 闲置设备改造:如果家里有旧电脑、树莓派,且能获取公网IP(可联系宽带运营商申请,部分地区免费),可直接安装Linux系统,作为公网服务器,实现零成本。

    注意:如果使用云服务器,需提前在云厂商控制台开放后续需要用到的端口(如FRP服务端端口、代理端口),否则会导致连接失败。

    2.2 内网设备(客户端载体)

    即需要被外网访问的内网资源设备,如:家用NAS、办公电脑、本地服务器、树莓派等,系统支持Windows、Linux、macOS,无需额外配置,只要能正常连接内网(连入路由器)、能访问外网即可。

    2.3 其他准备

    • FRP安装包:从FRP官方GitHub仓库(https://github.com/fatedier/frp/releases)下载对应系统的安装包,服务端和客户端需下载相同版本(避免版本不兼容),推荐选择稳定版(如v0.61.1),无需安装,解压即可使用。

    • 基础操作能力:掌握简单的Linux命令(如解压、编辑文件、启动服务)、Windows命令行操作,无需深入学习,教程会给出具体命令,直接复制执行即可。

    三、FRP分步部署(核心步骤,全程图解式讲解)

    部署分为两大步骤:公网服务器部署FRP服务端(frps)、内网设备部署FRP客户端(frpc),两者配置完成后,即可建立连接,实现内网穿透。以下以“Linux公网服务器+Windows内网电脑”为例,讲解详细部署流程,其他系统可类比操作。

    3.1 第一步:公网服务器(Linux)部署FRP服务端(frps)

    此步骤的核心是:在公网服务器上启动FRP服务端,设置监听端口、认证信息,让服务端处于等待客户端连接的状态。

    3.1.1 下载并解压FRP安装包

    1. 登录Linux公网服务器(可通过Xshell、Putty等工具SSH登录,输入服务器IP、用户名、密码)。

    2. 执行以下命令,下载FRP安装包(以v0.61.1版本、Linux amd64架构为例,可根据服务器架构替换下载链接):wget https://github.com/fatedier/frp/releases/download/v0.61.1/frp_0.61.1_linux_amd64.tar.gz

    3. 解压安装包(解压后会生成一个同名文件夹,包含服务端和客户端相关文件):        tar -zxvf frp_0.61.1_linux_amd64.tar.gz

    4. 进入解压后的文件夹(文件夹名称可根据实际版本调整):       cd frp_0.61.1_linux_amd64

    解压后,文件夹内核心文件说明(多余文件可删除,如Windows相关的.exe文件,节省空间):

    文件名称

    作用

    对应角色

    frps

    FRP服务端二进制程序(核心执行文件)

    公网服务器(服务端)

    frps.toml(或frps.ini)

    FRP服务端配置文件(核心配置)

    公网服务器(服务端)

    frpc

    FRP客户端二进制程序

    内网设备(客户端)

    frpc.toml(或frpc.ini)

    FRP客户端配置文件

    内网设备(客户端)

    注:新版本FRP默认使用toml格式配置文件(frps.toml、frpc.toml),旧版本使用ini格式(frps.ini、frpc.ini),两者配置逻辑一致,本文以toml格式为例,ini格式可类比修改。

    3.1.2 编辑服务端配置文件(frps.toml)

    服务端配置无需复杂,核心是设置“监听端口”(客户端连接服务端的端口)和“认证信息”(防止非法客户端连接),具体操作如下:

    1. 执行以下命令,编辑配置文件(使用vim编辑器,新手可直接复制命令):        vim frps.toml

    2. 清空文件原有内容,复制粘贴以下核心配置(按需修改参数,注释已标注说明,可直接使用默认值):        # 连接信息配置(核心必配)bindAddr = "0.0.0.0"  # 服务端监听地址,默认0.0.0.0,监听所有网络接口bindPort = 7000       # 服务端监听端口,客户端通过此端口连接服务端,建议保留默认7000userConnTimeout = 60  # 客户端连接超时时间(秒),无需修改# 鉴权配置(核心必配,防止非法连接)auth.method = "token"  # 认证方式,推荐token认证auth.token = "frp123456"  # 认证token,客户端需与服务端一致,建议修改为随机强字符串(可通过openssl rand -hex 16生成)# 服务端管理后台配置(可选,便于监控连接状态)webServer.addr = "0.0.0.0"  # 管理后台监听地址webServer.port = 7500        # 管理后台端口,通过公网IP:7500访问webServer.user = "admin"     # 管理后台用户名webServer.password = "admin123"  # 管理后台密码# 日志配置(可选,便于排查故障)log.level = "info"     # 日志级别,info即可log.maxDays = 3        # 日志保留天数,3天足够

    3. 保存并退出:按“Esc”键,输入“:wq”,回车即可(若输入错误,可输入“:q!”强制退出,重新编辑)。

    3.1.3 启动FRP服务端,并设置开机自启

    启动服务端后,需设置开机自启,避免服务器重启后,FRP服务失效,无需手动重新启动。

    1. 临时启动服务端(测试配置是否正确):       ./frps -c frps.toml启动成功后,会显示“frps uses config file: frps.toml”“bind to 0.0.0.0:7000”等信息,说明服务端已正常运行,可按“Ctrl+C”暂时停止服务。

    2. 设置开机自启(永久启动,推荐systemd方式,适用于Ubuntu 16.04+、CentOS 7+):

      1. 创建服务文件:            sudo vim /etc/systemd/system/frps.service

      2. 复制粘贴以下内容(注意修改“ExecStart”中的FRP安装路径,需与实际解压路径一致):            [Unit]Description=FRP Server ServiceAfter=network.target[Service]Type=simpleExecStart=/root/frp_0.61.1_linux_amd64/frps -c /root/frp_0.61.1_linux_amd64/frps.toml  # 替换为实际路径Restart=always  # 服务异常时自动重启RestartSec=5    # 重启间隔5秒[Install]WantedBy=multi-user.target

      3. 重新加载systemd配置,启动frps服务,并设置开机自启:            sudo systemctl daemon-reloadsudo systemctl start frpssudo systemctl enable frps

      4. 查看服务运行状态(确认是否启动成功):            sudo systemctl status frps若显示“active (running)”,说明服务端已成功启动并设置开机自启,即使服务器重启,FRP服务也会自动运行。

    3.1.4 开放服务器端口(关键步骤,否则连接失败)

    如果使用云服务器,需在云厂商控制台开放以下端口(与服务端配置一致),否则客户端无法连接服务端:

    • 核心端口:7000(服务端监听端口,客户端连接用)

    • 可选端口:7500(管理后台端口,如需访问管理界面)

    • 后续代理端口:根据内网服务需求开放(如远程桌面3389、SSH 22、Web 80等)

    开放方法(以阿里云为例):登录阿里云控制台 → 找到对应服务器 → 进入“安全组” → 点击“配置规则” → “添加安全组规则”,协议选择TCP,端口范围填写对应端口(如7000/7000),授权对象填写0.0.0.0/0(允许所有外网IP访问,按需调整),保存即可。

    如果是本地闲置设备作为服务器,需在路由器后台开放对应端口(端口转发),具体方法可参考路由器说明书。

    3.2 第二步:内网设备(Windows)部署FRP客户端(frpc)

    此步骤的核心是:在内网设备上启动FRP客户端,配置服务端地址、认证信息,以及需要暴露的内网服务(如远程桌面、Web服务),让客户端主动连接服务端,打通数据隧道。

    3.2.1 下载并解压FRP安装包

    1. 打开FRP官方GitHub仓库,下载与服务端相同版本的Windows安装包(如v0.61.1,选择frp_0.61.1_windows_amd64.zip)。

    2. 将安装包解压到电脑任意路径(如D:\frp),解压后核心文件与Linux版本一致,重点关注frpc.exe(客户端执行文件)和frpc.toml(客户端配置文件)。

    3.2.2 编辑客户端配置文件(frpc.toml)

    客户端配置的核心是:指定服务端地址和认证信息,以及需要暴露的内网服务(即“代理规则”),不同内网服务的配置略有差异,以下以“远程桌面(最常用)”和“Web服务”为例,给出通用配置。

    1. 打开解压后的文件夹,找到frpc.toml文件,用记事本或Notepad++打开。

    2. 清空原有内容,复制粘贴以下核心配置(按需修改参数,注释已标注说明):        # 连接服务端的核心配置(必配,与服务端一致)serverAddr = "110.110.110.104"  # 公网服务器的公网IP(必填,替换为自己的服务器IP)serverPort = 7000                # 服务端监听端口(与服务端bindPort一致,默认7000)loginFailExit = true             # 登录失败后退出,无需修改transport.dialServerTimeout = 60 # 连接服务端超时时间,无需修改# 鉴权配置(必配,与服务端完全一致)auth.method = "token"auth.token = "frp123456"        # 与服务端auth.token一致,否则无法连接# 日志配置(可选)log.level = "info"log.maxDays = 3# 代理规则配置(核心,暴露内网服务,可配置多个,按需添加)# 示例1:暴露内网Windows远程桌面服务(默认端口3389)[[proxies]]name = "rdp-proxy"               # 代理名称,自定义(如rdp-proxy)type = "tcp"                     # 代理类型,远程桌面用TCP协议localIP = "127.0.0.1"            # 内网服务IP,本地设备填127.0.0.1即可localPort = 3389                 # 内网服务端口,远程桌面默认3389remotePort = 7001                # 公网访问端口,自定义(如7001),需在服务器开放此端口# 示例2:暴露内网Web服务(如本地Tomcat、Nginx,默认端口80)[[proxies]]name = "web-proxy"type = "tcp"localIP = "127.0.0.1"localPort = 80remotePort = 7002                # 公网访问端口,自定义,需在服务器开放# 示例3:暴露内网SSH服务(如Linux内网设备,默认端口22)[[proxies]]name = "ssh-proxy"type = "tcp"localIP = "127.0.0.1"localPort = 22remotePort = 7003                # 公网访问端口,自定义,需在服务器开放

    3. 修改关键参数:

      1. serverAddr:替换为自己公网服务器的公网IP(可在云服务器控制台查看)。

      2. auth.token:必须与服务端的auth.token完全一致,否则无法通过认证。

      3. remotePort:每个代理规则的远程端口需唯一,且需在公网服务器开放对应端口(如示例中的7001、7002、7003)。

      4. localPort:根据内网服务的实际端口修改(如Web服务若用8080端口,就改为8080)。

    4. 保存文件,关闭编辑器。

    3.2.3 启动FRP客户端,并设置开机自启

    客户端启动后,会主动连接服务端,建立数据隧道,设置开机自启,可确保内网设备重启后,穿透服务自动恢复。

    1. 临时启动客户端(测试配置是否正确):

      1. 按住“Win+R”,输入“cmd”,打开命令提示符。

      2. 切换到FRP客户端解压路径(如D:\frp),执行以下命令:            cd D:\frpfrpc.exe -c frpc.toml

      3. 启动成功后,会显示“login to server success”“start proxy success”等信息,说明客户端已成功连接服务端,隧道已打通。此时不要关闭命令提示符,否则穿透服务会中断。

    2. 设置开机自启(永久启动,无需手动打开命令提示符):

      1. 新建一个文本文档,复制粘贴以下内容(注意修改FRP客户端的路径,与实际解压路径一致):            @echo offcd /d D:\frp  # 替换为FRP客户端解压路径frpc.exe -c frpc.toml

      2. 将文本文档保存为“frpc-start.bat”(保存类型选择“所有文件”,编码选择“ANSI”)。

      3. 按住“Win+R”,输入“shell:startup”,打开开机启动文件夹。

      4. 将“frpc-start.bat”文件复制到开机启动文件夹中,重启电脑后,客户端会自动启动,无需手动操作。

    3.3 第三步:测试穿透效果(验证是否成功)

    部署完成后,需用外网设备(如手机流量、异地电脑)测试是否能正常访问内网资源,以“远程桌面”为例,测试步骤如下:

    1. 确保公网服务器FRP服务端、内网设备FRP客户端均正常运行。

    2. 用外网设备(如手机开热点,连接电脑),打开“远程桌面连接”(Windows自带,按住“Win+R”,输入“mstsc”)。

    3. 在“计算机”栏输入:公网IP:远程端口(如110.110.110.104:7001,对应客户端配置中的rdp-proxy代理)。

    4. 输入内网设备的用户名和密码,点击“连接”,若能成功登录内网设备的桌面,说明穿透成功。

    其他服务测试(如Web服务):用外网浏览器访问“公网IP:远程端口”(如110.110.110.104:7002),若能正常显示内网Web页面,说明穿透成功。

    四、常见场景配置(拓展,满足不同需求)

    除了上述远程桌面、Web服务,FRP还支持多种常见场景,以下给出核心配置,按需添加到客户端frpc.toml文件中即可。

    4.1 访问内网NAS(如群晖、威联通)

    NAS默认端口一般为5000(HTTP)、5001(HTTPS),配置如下:

    [[proxies]]
    name = "nas-proxy-http"
    type = "tcp"
    localIP = "192.168.1.100"  # NAS的内网IP(可在路由器后台查看)
    localPort = 5000
    remotePort = 7004
    
    [[proxies]]
    name = "nas-proxy-https"
    type = "tcp"
    localIP = "192.168.1.100"
    localPort = 5001
    remotePort = 7005

    测试:外网浏览器访问“公网IP:7004”,即可登录NAS管理界面。

    4.2 远程访问内网数据库(如MySQL)

    MySQL默认端口为3306,配置如下:

    [[proxies]]
    name = "mysql-proxy"
    type = "tcp"
    localIP = "127.0.0.1"
    localPort = 3306
    remotePort = 7006

    测试:用外网设备的数据库工具(如Navicat),连接“公网IP:7006”,输入数据库用户名和密码,即可远程操作内网数据库。

    4.3 P2P穿透(优化速度,降低服务器带宽压力)

    当外网设备与内网设备处于同一运营商网络时,可开启FRP的P2P模式(XTCP),数据直接在两台设备之间传输,不经过公网服务器,大幅提升访问速度,同时降低服务器带宽消耗(适合大文件传输)。

    配置步骤(需同时修改服务端和客户端):

    1. 服务端frps.toml添加以下配置:        # P2P配置p2p.enable = truep2p.listenPort = 7007  # P2P监听端口,需在服务器开放

    2. 客户端frpc.toml添加以下配置(替换原有的TCP代理):        [[proxies]]name = "p2p-rdp"type = "xtcp"  # P2P模式,类型为xtcplocalIP = "127.0.0.1"localPort = 3389sk = "frp-p2p-123"  # 密钥,用于P2P连接认证,自定义

    3. 外网设备也需部署FRP客户端(同版本),配置如下:        serverAddr = "公网IP"serverPort = 7000auth.token = "frp123456"[[proxies]]name = "p2p-rdp-client"type = "xtcp"role = "visitor"  # 外网设备作为访问者serverName = "p2p-rdp"  # 与内网客户端的代理名称一致sk = "frp-p2p-123"  # 与内网客户端的sk一致bindAddr = "127.0.0.1"bindPort = 7008  # 外网设备本地监听端口

    4. 测试:外网设备打开远程桌面,连接“127.0.0.1:7008”,即可通过P2P模式访问内网远程桌面。

    五、常见故障排查(新手必看,解决90%的问题)

    部署过程中,可能会遇到连接失败、无法访问等问题,以下是最常见的故障及解决方法,按优先级排查:

    5.1 客户端无法连接服务端(显示“login failed”)

    • 原因1:服务端未启动或启动失败。解决:登录公网服务器,执行“sudo systemctl status frps”,查看服务状态,若未启动,执行“sudo systemctl start frps”。

    • 原因2:服务端端口未开放。解决:检查云服务器安全组或路由器端口转发,确保7000端口(服务端监听端口)已开放。

    • 原因3:客户端配置错误。解决:检查客户端frpc.toml中的serverAddr(公网IP是否正确)、serverPort(是否与服务端一致)、auth.token(是否与服务端一致)。

    • 原因4:服务器防火墙拦截。解决:关闭Linux服务器防火墙(sudo ufw disable),或开放对应端口(sudo ufw allow 7000)。

    5.2 客户端连接成功,但外网无法访问内网服务

    • 原因1:客户端代理规则配置错误。解决:检查localIP(内网服务IP是否正确,本地设备填127.0.0.1,其他设备填对应内网IP)、localPort(内网服务端口是否正确)。

    • 原因2:远程端口未开放。解决:在云服务器安全组开放客户端配置中的remotePort(如7001、7002)。

    • 原因3:内网服务未启动。解决:检查内网设备上的服务(如远程桌面、Web服务)是否正常启动,确保本地能访问(如本地访问127.0.0.1:3389,能打开远程桌面)。

    • 原因4:内网设备防火墙拦截。解决:关闭内网设备的防火墙(Windows关闭防火墙,Linux执行sudo ufw disable),或允许对应服务端口通过。

    5.3 访问速度慢、卡顿

    • 原因1:服务器带宽不足。解决:升级云服务器带宽(如从1M升级到2M),或开启P2P模式(XTCP),降低带宽压力。

    • 原因2:网络延迟高。解决:选择与内网设备同运营商的云服务器(如内网是电信宽带,选择电信云服务器)。

    • 原因3:FRP日志级别过高。解决:将服务端和客户端的log.level改为“warn”,减少日志占用的资源。

    六、低成本优化技巧(进一步降低成本,提升体验)

    6.1 降低服务器成本

    • 选择云服务器新用户优惠:国内云厂商新用户首月低至9元,年付仅几十元,可选择“轻量应用服务器”,无需复杂配置,直接部署。

    • 利用闲置设备:旧电脑、树莓派等设备,只要能获取公网IP,可直接作为服务端,零成本部署。

    • 动态IP优化:如果服务器是动态公网IP(如家用宽带),可使用DDNS服务(如阿里云DDNS、花生壳免费版),将动态IP绑定到域名,避免IP变化后需要重新配置客户端。

    6.2 提升穿透稳定性

    • 设置日志切割:在服务端和客户端配置中,开启日志保留(log.maxDays=3),避免日志过大占用磁盘空间。

    • 开启自动重启:服务端和客户端均设置开机自启,并配置服务异常自动重启(如Linux的Restart=always),确保穿透服务长期稳定运行。

    • 定期更新FRP版本:从官方GitHub下载最新稳定版,修复已知bug,提升稳定性和安全性。

    6.3 增强安全性

    • 修改默认端口:将服务端bindPort(默认7000)、管理后台端口(默认7500)改为自定义端口,避免被恶意扫描。

    • 使用强token:通过“openssl rand -hex 16”生成随机强字符串作为auth.token,避免简单密码被破解。

    • 限制访问IP:在云服务器安全组中,将授权对象改为指定IP(如仅允许自己的外网IP访问),避免非法访问。

    七、总结

    FRP作为一款开源免费的内网穿透工具,以其低成本、配置简单、稳定性高的优势,完美解决了内网资源无法外网访问的痛点。通过一台低成本的公网服务器(或闲置设备),配合简单的服务端、客户端配置,就能快速打通内网到外网的通道,满足远程桌面、NAS访问、Web预览、数据库远程操作等多种场景需求。

    本文讲解的部署流程,全程围绕“低成本”展开,新手只需跟着步骤一步步操作,10分钟即可完成部署,后续无需过多维护。如果遇到问题,可参考故障排查部分,基本能解决大部分常见问题。

    无论是个人用户(如远程访问家里的文件、监控),还是小型团队(如异地办公、项目调试),FRP都是实现内网穿透的最优选择,无需支付高额的商业服务费用,就能轻松享受外网访问内网资源的便捷。


    

    在线咨询

    点击这里给我发消息售前咨询专员

    点击这里给我发消息售后服务专员

    在线咨询

    免费通话

    24h咨询:19245332011


    如您有问题,可以咨询我们的24H咨询电话!

    免费通话

    微信扫一扫

    微信联系
    返回顶部