
如果你手头有一台阿里云轻量应用服务器但发现它没有公网IP或者你正在使用宝塔面板管理服务器却苦于无法从外网直接访问又或者你家里有一台绿联NAS想把它的一些服务暴露到公网但运营商不给你公网IP——那么这篇文章就是为你准备的。这三个看似独立的问题其实指向同一个核心痛点如何在缺乏直接公网IP的环境下安全、稳定地将内网服务映射到公网供自己或团队远程访问很多人会想到端口转发、DDNS但在云服务器无公网IP、家庭宽带无公网IP的双重限制下这些传统方案几乎失效。本文将为你提供一个经过实战验证的整合方案利用FRPFast Reverse Proxy内网穿透技术以一台具备公网IP的服务器作为跳板为中转打通你的阿里云轻量服务器无公网IP、宝塔面板以及家庭绿联NAS。这个方案的核心价值在于它不依赖于任何一端的公网IP而是通过“服务端-客户端”的架构在复杂的网络环境中开辟一条稳定的隧道。读完本文你将能清晰地掌握FRP穿透的核心原理为什么它能解决无公网IP的访问难题。完整的搭建流程从云服务器FRP服务端部署到内网客户端宝塔服务器、绿联NAS的配置。宝塔面板的特殊处理如何安全地穿透Web面板和管理端口。绿联NAS的配置要点针对NAS的特性进行优化配置。安全与性能实践避免常见陷阱确保服务稳定可靠。我们直接进入正题。1. 场景拆解为什么需要FRP以及它解决了什么根本问题在深入配置之前我们必须先理解问题的本质。你的网络环境很可能面临以下两种或多种情况场景A阿里云轻量服务器无公网IP。部分轻量应用服务器套餐或特定区域实例可能只分配内网IP这意味着你无法通过互联网直接SSH连接或访问其上的Web服务如宝塔面板。场景B家庭网络无公网IP。大多数家庭宽带由运营商分配的是私网IPCGNAT你的绿联NAS虽然在内网可以访问但外部网络根本无法直接寻址到它。场景C需要统一入口。你可能希望用一个域名或一个公网服务器IP来统一管理访问散落在不同内网环境中的多个服务宝塔、NAS网页端、NAS的Docker服务等。传统的DDNS动态域名解析在场景B中完全失效因为它需要一个公网IP来绑定域名。端口转发在场景A和B中也无法实施因为你的路由器或云服务器控制台根本没有公网IP可供转发。FRP的解决方案是“曲线救国”你需要一台拥有公网IP的服务器以下简称“公网服务器”或“FRP服务端”。这可以是另一台阿里云ECS、腾讯云CVM或者其他任何具有固定公网IP的VPS。在这台公网服务器上运行FRP服务端frps。在你的无公网IP的阿里云轻量服务器和家庭绿联NAS上分别运行FRP客户端frpc。客户端主动连接到公网服务器的服务端建立一条加密隧道。当外部用户访问公网服务器的某个特定端口时服务端会通过这条隧道将请求转发给对应的内网客户端再由客户端交给内网中真正的服务如宝塔的8888端口、NAS的5000端口。简单比喻公网服务器就像一个“接待处”FRP服务端而你的内网设备是“办公室”FRP客户端。外部访客无法直接进入办公室但他们可以到接待处登记。接待处通过内部电话隧道通知办公室办公室再把访客需要的信息传递出来。这样访客无需知道办公室的具体地址内网IP也能完成访问。接下来我们开始具体的部署。2. 环境准备与架构说明在开始操作前请确保你拥有以下资源并理解整个架构角色设备要求本文示例用途FRP服务端具备公网IP的云服务器1核1G以上CentOS 7/Ubuntu 18.04开放所需端口。接收所有外部请求并转发给对应的客户端。FRP客户端1无公网IP的阿里云轻量服务器可访问互联网安装宝塔面板。穿透宝塔面板(8888)和SSH(22)服务。FRP客户端2家庭绿联NAS可访问互联网支持Docker或能运行FRP客户端。穿透NAS管理界面(5000)、文件服务或其他自建服务。网络架构图逻辑外部用户 -- [公网IP:端口] -- (FRP服务端 公网服务器) -- [隧道] -- (FRP客户端 阿里云轻量服务器) -- 宝塔面板(内网IP:8888) -- (FRP客户端 绿联NAS) -- NAS管理页(内网IP:5000)重要安全前置提醒最小化暴露只穿透必要的服务端口。强密码与认证务必为FRP服务端和客户端配置强密码或Token认证。防火墙公网服务器务必在安全组/防火墙中仅开放必需的端口如FRP服务端端口、你要暴露的服务端口。使用非标端口避免使用80、443、22、3389等常见端口作为公网访问端口可降低被自动化工具扫描的风险。3. 第一步在公网服务器上部署FRP服务端 (frps)这是整个架构的枢纽必须首先搭建。3.1 下载并安装FRP通过SSH登录你的公网服务器。# 创建并进入FRP工作目录 mkdir -p /opt/frp cd /opt/frp # 查看系统架构选择对应版本 (通常x86_64选择amd64) arch # 输出若为 x86_64则下载amd64版本。绿联NAS多为ARM架构但服务端通常用x86。 # 前往FRP GitHub Release页面查看最新版本号替换下面的v0.52.3 wget https://github.com/fatedier/frp/releases/download/v0.52.3/frp_0.52.3_linux_amd64.tar.gz # 解压 tar -zxvf frp_0.52.3_linux_amd64.tar.gz # 进入解压后的目录 cd frp_0.52.3_linux_amd64 # 查看文件其中 frps 是服务端程序frps.ini 是服务端配置模板 ls -l3.2 配置FRP服务端 (frps.ini)备份并编辑服务端配置文件# 备份原始配置 cp frps.ini frps.ini.bak # 使用vim或nano编辑配置 vim frps.ini以下是一个安全且功能完整的基础配置请根据注释修改# frps.ini [common] # FRP服务端监听的端口客户端通过此端口连接。必须开放防火墙。 bind_port 7000 # 认证令牌客户端配置必须与此一致。请务必修改为强密码 token YourStrongPasswordHere123! # 仪表板端口用于查看FRP连接状态可选但推荐 dashboard_port 7500 # 仪表板用户名和密码 dashboard_user admin dashboard_pwd YourDashboardPassword456! # 日志记录 log_file ./frps.log log_level info log_max_days 3 # 允许客户端绑定的端口范围可选增加安全性 allow_ports 10000-60000 # 子域名配置可选如果你有域名并想用子域名访问不同服务 # subdomain_host frp.yourdomain.com关键配置解释bind_port这是FRP的核心通信端口所有客户端都通过这个端口连接到服务端。确保服务器安全组和系统防火墙如firewalld/ufw放行此端口TCP。token这是服务端和客户端之间的共享密钥用于认证。必须设置且不要使用默认值。dashboard_portWeb管理界面端口可以查看连接状态和流量统计。同样需要放行防火墙。allow_ports限制客户端只能使用10000-60000范围内的端口来暴露服务避免占用系统关键端口。3.3 设置系统服务与启动为了方便管理我们将FRP服务端设置为systemd服务。# 创建systemd服务文件 sudo vim /etc/systemd/system/frps.service将以下内容粘贴进去注意修改ExecStart路径为你实际的FRP路径[Unit] DescriptionFrp Server Service Afternetwork.target [Service] Typesimple Usernobody Restarton-failure RestartSec5s ExecStart/opt/frp/frp_0.52.3_linux_amd64/frps -c /opt/frp/frp_0.52.3_linux_amd64/frps.ini WorkingDirectory/opt/frp/frp_0.52.3_linux_amd64 [Install] WantedBymulti-user.target保存后启动并设置开机自启# 重载systemd配置 sudo systemctl daemon-reload # 启动frps服务 sudo systemctl start frps # 设置开机自启 sudo systemctl enable frps # 查看服务状态确认运行正常 (状态应为 active (running)) sudo systemctl status frps # 查看日志确认无报错 sudo journalctl -u frps -f3.4 验证服务端访问仪表板在浏览器打开http://你的公网服务器IP:7500使用配置的用户名密码登录。你应该能看到一个空的连接列表。检查端口监听运行sudo ss -tunlp | grep 7000应看到frps正在监听7000端口。至此FRP服务端已部署完毕。接下来配置客户端。4. 第二步配置阿里云轻量服务器FRP客户端 - 穿透宝塔登录你的无公网IP的阿里云轻量服务器。4.1 下载并配置FRP客户端 (frpc)操作步骤与服务端类似但运行的是frpc。# 在轻量服务器上操作 mkdir -p /opt/frp cd /opt/frp # 根据轻量服务器架构下载通常是amd64 wget https://github.com/fatedier/frp/releases/download/v0.52.3/frp_0.52.3_linux_amd64.tar.gz tar -zxvf frp_0.52.3_linux_amd64.tar.gz cd frp_0.52.3_linux_amd64编辑客户端配置文件frpc.inicp frpc.ini frpc.ini.bak vim frpc.ini以下是针对穿透宝塔面板和SSH的客户端配置# frpc.ini [common] # 公网FRP服务端的地址和端口 server_addr 你的公网服务器IP server_port 7000 # 必须与服务端 frps.ini 中的 token 一致 token YourStrongPasswordHere123! # 客户端管理配置可选 admin_addr 127.0.0.1 admin_port 7400 admin_user admin admin_pwd admin_local_pwd # 日志 log_file ./frpc.log log_level info log_max_days 3 # 第一个穿透服务宝塔Web面板 [bt_panel] type tcp # 本地宝塔服务监听的IP和端口默认是8888 local_ip 127.0.0.1 local_port 8888 # 在公网服务器上暴露的端口。外部用户将通过 公网IP:10000 访问宝塔。 remote_port 10000 # 第二个穿透服务SSH服务用于远程管理 [bt_ssh] type tcp local_ip 127.0.0.1 local_port 22 # 使用另一个远程端口例如10001 remote_port 10001 # 你可以继续添加其他服务如MySQL、其他Web应用等 # [web_app] # type tcp # local_ip 127.0.0.1 # local_port 8080 # remote_port 10002配置关键点server_addr填写你公网服务器的IP地址。remote_port这是外部用户访问服务时使用的端口。需要在公网服务器的防火墙/安全组中放行例如10000, 10001。local_port这是你轻量服务器内部服务实际运行的端口。宝塔默认是8888请根据你的实际情况修改。4.2 启动FRP客户端并测试同样创建systemd服务来管理sudo vim /etc/systemd/system/frpc.service[Unit] DescriptionFrp Client Service Afternetwork.target [Service] Typesimple Usernobody Restarton-failure RestartSec5s ExecStart/opt/frp/frp_0.52.3_linux_amd64/frpc -c /opt/frp/frp_0.52.3_linux_amd64/frpc.ini WorkingDirectory/opt/frp/frp_0.52.3_linux_amd64 [Install] WantedBymulti-user.target启动服务sudo systemctl daemon-reload sudo systemctl start frpc sudo systemctl enable frpc sudo systemctl status frpc测试穿透是否成功回到公网服务器的FRP仪表板 (http://公网IP:7500)你应该能看到一个客户端在线并且下面列出了bt_panel和bt_ssh两个代理。在你的本地电脑上打开浏览器访问http://公网服务器IP:10000。如果配置正确你应该能看到宝塔面板的登录页面。重要安全警告通过FRP暴露宝塔面板后务必在宝塔面板的“安全”设置中添加IP访问限制仅允许你自己的公网IP并确保面板密码足够复杂。因为现在任何人都能通过公网IP:10000尝试登录。5. 第三步配置绿联NASFRP客户端 - 穿透NAS服务绿联NAS通常基于Linux但可能没有包管理器。推荐使用Docker方式运行FRP客户端这是最通用和干净的方法。假设你的绿联NAS已开启SSH或能在终端中执行命令部分型号通过“网络服务”-“SSH”开启。5.1 通过Docker运行FRP客户端在绿联NAS的终端中操作# 1. 创建一个目录存放配置文件 mkdir -p /opt/frp_nas cd /opt/frp_nas # 2. 创建客户端配置文件 frpc_nas.ini vim frpc_nas.ini将以下内容粘贴到frpc_nas.ini中注意修改server_addr和token# frpc_nas.ini [common] server_addr 你的公网服务器IP server_port 7000 token YourStrongPasswordHere123! # NAS Web管理界面 (通常端口是5000) [nas_web] type tcp local_ip 192.168.1.100 # 修改为你的NAS在内网的实际IP地址 local_port 5000 remote_port 20000 # 在公网服务器上使用20000端口映射NAS # NAS的SMB文件共享服务 (端口445) [nas_smb] type tcp local_ip 192.168.1.100 local_port 445 remote_port 20445 # 注意穿透SMB用于外网访问可能存在性能和安全隐患请谨慎评估。 # NAS上的其他服务例如PhotoStation、Download Station等 # [nas_photo] # type tcp # local_ip 192.168.1.100 # local_port 80 # remote_port 20080关键修改local_ip必须填写你的绿联NAS在家庭局域网内的固定IP地址例如192.168.1.100。请在你的路由器中为NAS设置静态IP分配。remote_port为每个服务分配一个在公网服务器上唯一的端口。5.2 使用Docker容器运行客户端使用Docker可以避免在NAS系统上直接安装依赖更加方便。# 在 /opt/frp_nas 目录下运行以下命令启动FRP客户端容器 docker run -d \ --name frpc_nas \ --restartalways \ -v /opt/frp_nas/frpc_nas.ini:/etc/frp/frpc.ini \ snowdreamtech/frpc:latest命令解释-d后台运行。--restartalways容器退出时总是重启实现自启。-v ...将宿主机(/opt/frp_nas/frpc_nas.ini)的配置文件挂载到容器内的默认配置路径。snowdreamtech/frpc:latest一个维护良好的FRP客户端Docker镜像。5.3 验证NAS穿透再次查看公网服务器的FRP仪表板现在应该能看到两个客户端在线一个来自轻量服务器一个来自NAS。在本地电脑浏览器访问http://公网服务器IP:20000应该能打开绿联NAS的Web管理登录界面。重要同样强烈建议在NAS的防火墙或安全设置中限制外网访问IP并启用HTTPS和强密码认证。6. 进阶配置域名访问与HTTPS通过IP端口访问不够友好且不安全。我们可以使用域名并配置HTTPS。6.1 域名解析与Nginx反向代理推荐假设你有一个域名yourdomain.com并且公网服务器上安装了Nginx。域名解析将域名或子域名如nas.yourdomain.com,bt.yourdomain.com的A记录指向你的公网服务器IP。在公网服务器安装Nginx(如果未安装)sudo apt install nginx或sudo yum install nginx。配置Nginx反向代理以宝塔面板为例为bt.yourdomain.com配置sudo vim /etc/nginx/conf.d/bt-proxy.conf添加以下配置server { listen 80; server_name bt.yourdomain.com; # 你的子域名 location / { proxy_pass http://127.0.0.1:10000; # 转发到FRP暴露的本地端口 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; # 支持WebSocket宝塔终端需要 proxy_read_timeout 300s; proxy_send_timeout 300s; } # 可选限制访问IP # allow 你的办公室IP; # allow 你的家庭IP; # deny all; }为NAS配置类似 (nas.yourdomain.com代理到127.0.0.1:20000)。重载Nginxsudo nginx -t sudo systemctl reload nginx。访问现在你可以通过http://bt.yourdomain.com访问宝塔面板通过http://nas.yourdomain.com访问NAS。6.2 配置HTTPS使用Let‘s Encrypt免费证书使用Certbot可以轻松获取并自动续签证书。# 安装Certbot (以Ubuntu为例) sudo apt update sudo apt install certbot python3-certbot-nginx # 为两个域名申请证书 sudo certbot --nginx -d bt.yourdomain.com -d nas.yourdomain.com按照提示操作Certbot会自动修改Nginx配置将HTTP重定向到HTTPS。完成后即可通过https://bt.yourdomain.com安全访问。7. 常见问题与排查思路在配置过程中你可能会遇到以下问题。这里提供一个系统的排查清单。问题现象可能原因排查步骤解决方案FRP服务端启动失败1. 端口被占用2. 配置文件语法错误3. 权限不足1.sudo systemctl status frps查看错误日志。2.sudo journalctl -u frps -f跟踪日志。3.sudo ss -tunlp | grep 7000检查端口占用。1. 修改bind_port或停止占用程序。2. 检查frps.ini的[common]等段落格式。3. 确保服务文件ExecStart路径正确。客户端无法连接服务端1. 服务端IP/端口错误2. 防火墙/安全组未放行3. Token不匹配4. 服务端未启动1. 客户端执行frpc -c frpc.ini看具体报错。2. 在客户端telnet 公网IP 7000测试连通性。3. 检查服务端和客户端token是否完全一致。1. 核对server_addr和server_port。2. 检查公网服务器安全组阿里云/腾讯云控制台和系统防火墙 (firewall-cmd/ufw)。3. 确保token字符串一致注意空格。能连接但访问不了服务1. 远程端口未放行2. 本地服务未运行或IP/端口错误3. 客户端配置错误1. 在公网服务器telnet 127.0.0.1 10000测试本地端口。2. 在客户端机器curl 127.0.0.1:8888测试本地服务。3. 检查FRP仪表板看对应代理是否在线。1. 在公网服务器安全组放行remote_port(如10000)。2. 确保宝塔/NAS服务正在运行且local_ip和local_port正确。3. 重启客户端sudo systemctl restart frpc。HTTPS访问不正常1. 证书问题2. Nginx配置错误3. FRP不支持WebSocket1. 检查证书路径和有效期sudo certbot certificates。2. 检查Nginx错误日志sudo tail -f /var/log/nginx/error.log。3. 宝塔终端等功能需要WebSocket。1. 更新证书sudo certbot renew。2. 确保Nginx配置中包含了proxy_set_header Upgrade和Connection指令。3. 在FRP客户端配置中对于WebSocket服务可尝试type http并设置custom_domains。连接不稳定经常断开1. 网络波动2. 服务端/客户端资源不足3. 心跳配置问题1. 查看服务端和客户端日志中的断开信息。2. 监控服务器CPU和内存使用情况。1. 在[common]段增加心跳配置tcp_mux trueheartbeat_interval 30heartbeat_timeout 90。2. 考虑升级服务器配置或优化网络线路。NAS Docker容器无法启动1. 配置文件路径错误2. Docker服务未运行3. 镜像拉取失败1.docker logs frpc_nas查看容器日志。2.sudo systemctl status docker检查Docker服务。3.docker ps -a查看容器状态。1. 确认-v挂载的配置文件路径绝对正确。2. 重启Docker服务。3. 尝试指定镜像版本号如snowdreamtech/frpc:0.52.3。8. 安全加固与最佳实践将内网服务暴露到公网安全是重中之重。请务必遵循以下实践使用高强度Token/密码FRP服务端和客户端的token、仪表板密码、宝塔面板密码、NAS密码均需使用随机生成的高强度密码。限制访问来源Nginx层面在server块中使用allow和deny指令只允许你信任的IP段访问。云服务器安全组仅开放必要的端口如80, 443, 7000并对管理端口如7500仪表板设置源IP限制。服务自身宝塔面板、NAS管理界面都应设置IP白名单或失败登录锁定。全程使用HTTPS通过Nginx配置SSL证书强制将所有HTTP流量重定向到HTTPS。避免在公网传输明文密码。使用非标准端口避免对FRP服务端端口7000和暴露的服务端口如10000使用22, 80, 443, 3389等常见端口。定期更新关注FRP的GitHub Release定期更新服务端和客户端到稳定版本修复潜在漏洞。最小化暴露只穿透绝对必要的服务。例如不要轻易将NAS的SMB445端口暴露给公网这存在较高风险。可以考虑使用SFTP或WebDAV over HTTPS作为替代。监控与日志定期检查FRP服务端和客户端的日志 (frps.log,frpc.log)关注异常连接和登录失败信息。可以利用fail2ban等工具对异常访问进行封禁。备份配置将你的frps.ini,frpc.ini, Nginx配置等文件进行备份。在服务器重置或迁移时能快速恢复。9. 总结与扩展思路通过本文的步骤你已经成功搭建了一个基于FRP的、不依赖客户端公网IP的混合内网穿透架构。这个方案的核心优势在于其通用性和可控性。你不仅解决了阿里云轻量服务器无公网IP访问宝塔的问题也实现了家庭绿联NAS的公网访问所有流量都经由你完全掌控的公网服务器中转。你可以进一步扩展这个架构穿透更多服务将你内网开发的Web应用、数据库谨慎、远程桌面、游戏服务器等统统纳入管理。使用STCP模式增强安全对于极度敏感的服务可以使用FRP的stcp秘密TCP模式避免在服务端暴露任何端口访问者也需要运行一个特定的frpc才能访问实现点对点加密隧道。负载均衡与高可用如果你有多个公网服务器可以在客户端配置多个server_addr实现故障转移。或者部署多个FRP服务端做负载均衡。与自动化运维结合使用Ansible、SaltStack等工具批量部署和更新FRP客户端配置。最后记住技术是为需求服务的。在享受内网穿透带来的便利时永远将安全性放在首位。定期审计你的配置和日志不要让便利成为安全的短板。这套由你亲手搭建的穿透网络将成为你管理分布式资源和服务的强大工具。