尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

基于FRP实现阿里云服务器与绿联NAS内网穿透实战指南

基于FRP实现阿里云服务器与绿联NAS内网穿透实战指南 1. 背景与核心概念你是否遇到过这样的困境手头有一台性能不错的阿里云轻量应用服务器但因为没有公网IP无法直接访问其上的宝塔面板进行远程管理同时家里或办公室的绿联NAS存储了大量重要数据你希望能在任何地方安全地访问它但苦于没有公网IP或运营商封锁了端口这两个看似独立的难题其实可以通过一套成熟的内网穿透方案——FRP完美地串联解决。本文将为你详细拆解如何利用一台拥有公网IP的阿里云服务器作为FRP服务端为另一台无公网IP的阿里云轻量服务器运行宝塔面板和本地局域网内的绿联NAS作为FRP客户端建立稳定的内网穿透隧道。学完本文你将掌握FRP的核心原理与架构理解客户端/服务端的工作模式。阿里云服务器环境搭建在CentOS/Ubuntu系统上部署并配置FRP服务端。无公网IP服务器配置在另一台轻量服务器上安装宝塔面板并配置FRP客户端将宝塔面板的Web端口安全地暴露到公网。绿联NAS本地映射在绿联NAS通常基于Linux系统上部署FRP客户端将NAS的Web管理界面或文件服务端口映射到公网。安全与最佳实践配置Token认证、限制访问IP、使用二级域名等确保服务安全可靠。无论你是个人开发者、运维工程师还是NAS爱好者这套方案都能让你低成本、高效率地实现远程管理和访问彻底摆脱网络环境的限制。2. 环境准备与版本说明在开始动手之前请确保你已准备好以下资源并了解对应的版本信息。版本需要根据你的项目实际情况调整本文示例以常见环境为例重点演示配置思路。2.1 硬件与网络资源阿里云ECS服务器FRP服务端1台必须拥有公网IP地址。本文示例系统为CentOS 7.9。最低配置1核2G即可满足FRP服务需求。阿里云轻量应用服务器FRP客户端11台无公网IP。本文示例系统为CentOS 7.9并计划安装宝塔面板。绿联NASFRP客户端21台位于家庭或办公室局域网内无公网IP。本文以绿联NAS常见系统基于Linux为例。域名可选但推荐一个已备案的域名用于通过子域名如bt.yourdomain.com,nas.yourdomain.com访问服务比直接使用IP端口更友好、更安全。2.2 软件版本FRP本文使用frp_0.52.3_linux_amd64版本。FRP更新较快请务必前往 FRP官方GitHub Release页面 下载适用于你服务器架构的最新稳定版。如何判断架构在服务器执行arch命令x86_64对应amd64aarch64对应arm64。宝塔面板本文安装宝塔Linux正式版8.0.5。安装命令会获取最新版版本号可能随时间变化。系统防火墙CentOS 7使用firewalldUbuntu使用ufw。阿里云服务器还需在安全组中放行相应端口。2.3 最终访问逻辑图在开始配置前先通过文字描述理解整个数据流用户浏览器访问bt.yourdomain.com:8080(指向FRP服务端公网IP)。阿里云FRP服务端监听8080端口收到请求。FRP服务端根据配置将请求通过已建立的加密隧道转发给轻量服务器上的FRP客户端。轻量服务器的FRP客户端将请求转发给本机127.0.0.1:8888(宝塔面板默认端口)。宝塔面板处理请求并返回结果沿原路径返回给用户。访问NAS的流程同理只是端口和转发目标不同。3. 核心原理FRP如何实现内网穿透FRP (Fast Reverse Proxy) 是一个高性能的反向代理应用专为内网穿透设计。它的核心是C/S (客户端/服务器) 架构。服务端 (frps)部署在具有公网IP的机器上如我们的阿里云ECS。它监听一个或多个公网端口等待客户端的连接。客户端 (frpc)部署在内网环境中需要被访问的机器上如无公网IP的轻量服务器、绿联NAS。它会主动与公网的服务端建立一条或多条稳定的控制连接隧道。穿透过程隧道建立内网的frpc启动后主动连接到公网的frps并认证。这条连接通常用于控制和管理。端口映射在frpc的配置文件中我们定义规则例如“将服务端的8080端口映射到本机的8888端口”。请求转发当外部用户访问公网IP:8080时请求到达frps。frps发现8080端口对应某个已连接的frpc于是通过之前建立的隧道将请求转发给该frpc。内部响应frpc收到请求后将其转发给内网中指定的服务如127.0.0.1:8888的宝塔。服务处理完的响应再沿原路返回给外部用户。关键优势无需公网IP内网服务无需任何公网IP即可被访问。穿透性强由于是客户端主动向外连接能有效绕过大多数NAT和防火墙限制。协议支持广泛支持TCP、UDP、HTTP、HTTPS、STCP等。配置灵活支持多端口、多服务映射。4. 实战部署阿里云FRP服务端配置首先我们在那台拥有公网IP的阿里云ECS服务器上部署FRP服务端。4.1 登录服务器与下载FRP使用SSH工具如Xshell, FinalShell, 或系统终端登录你的阿里云ECS。# 切换到常用目录如 /usr/local cd /usr/local # 下载FRP最新版本请从GitHub Release页获取实际链接 # 以 0.52.3 amd64 为例 sudo wget https://github.com/fatedier/frp/releases/download/v0.52.3/frp_0.52.3_linux_amd64.tar.gz # 解压 sudo tar -zxvf frp_0.52.3_linux_amd64.tar.gz # 重命名目录以便管理可选 sudo mv frp_0.52.3_linux_amd64 frp # 进入目录 cd frp解压后你会看到一系列文件其中frps和frps.ini是服务端所需的。4.2 配置FRP服务端 (frps.ini)使用vim或nano编辑frps.ini文件。sudo vim frps.ini将内容修改为如下配置这是一个兼顾安全与功能的基础配置[common] # FRP服务端监听的端口用于接收客户端连接 bind_port 7000 # 认证令牌客户端连接时必须提供相同的token这是最重要的安全设置 token your_strong_token_here_123456 # 仪表板端口用于查看FRP状态用户名密码访问建议修改 dashboard_port 7500 # 仪表板用户名 dashboard_user admin # 仪表板密码 dashboard_pwd your_dashboard_password # 启用Prometheus监控可选 enable_prometheus true # 子域名配置如果你打算用域名访问需要设置此项 # 例如客户端配置subdomain bt且你拥有域名yourdomain.com # 访问 bt.yourdomain.com 即可映射到对应服务需将*.yourdomain.com解析到服务器IP subdomain_host yourdomain.com # 日志配置 log_file ./frps.log log_level info log_max_days 3关键参数解释bind_port客户端连接服务端的端口。需要在阿里云安全组和服务器防火墙中放行。token务必设置为一个复杂且唯一的字符串这是防止未授权客户端连接的关键。dashboard_portWeb管理界面端口方便查看连接状态。同样需要放行且务必修改默认密码。subdomain_host如果你有域名并希望用service.yourdomain.com的形式访问就需要设置此项并在域名DNS处添加一条*.yourdomain.com的A记录指向服务器公网IP。4.3 设置系统服务与开机自启推荐为了让frps在后台稳定运行并在系统重启后自动启动我们将其配置为systemd服务。# 创建systemd服务文件 sudo vim /etc/systemd/system/frps.service将以下内容粘贴进去注意修改ExecStart的路径为你实际的frps路径[Unit] DescriptionFrp Server Service Afternetwork.target [Service] Typesimple Usernobody Restarton-failure RestartSec5s # 重点这里指向你的frps可执行文件和配置文件路径 ExecStart/usr/local/frp/frps -c /usr/local/frp/frps.ini [Install] WantedBymulti-user.target保存退出后执行以下命令# 重新加载systemd配置 sudo systemctl daemon-reload # 启动frps服务 sudo systemctl start frps # 设置开机自启 sudo systemctl enable frps # 查看服务状态确认运行正常 (Active: active (running)) sudo systemctl status frps # 查看日志确认无报错 sudo journalctl -u frps -f4.4 配置防火墙与安全组服务器防火墙 (firewalld)sudo firewall-cmd --permanent --add-port7000/tcp # 客户端连接端口 sudo firewall-cmd --permanent --add-port7500/tcp # 仪表板端口 # 后续映射的端口也需要放行例如宝塔穿透的8080端口 sudo firewall-cmd --permanent --add-port8080/tcp sudo firewall-cmd --permanent --add-port8081/tcp # 假设NAS用8081 sudo firewall-cmd --reload阿里云安全组登录阿里云控制台找到你的ECS实例进入安全组配置添加入方向规则放行上述端口7000, 7500, 8080, 8081等。至此FRP服务端已部署完毕。你可以通过http://你的公网IP:7500并使用设置的账号密码访问仪表板目前应该还没有客户端连接。5. 实战配置无公网IP轻量服务器宝塔面板接下来我们在那台没有公网IP的阿里云轻量应用服务器上操作。5.1 安装宝塔面板首先按照宝塔官网的指令安装面板。以CentOS为例# 使用官方脚本安装 sudo yum install -y wget wget -O install.sh https://download.bt.cn/install/install_6.0.sh sh install.sh ed8484bec安装过程会提示你确认安装完成后命令行会输出宝塔面板的访问地址、用户名和密码务必记录下来。默认访问地址是http://服务器内网IP:8888。5.2 下载并配置FRP客户端同样在这台轻量服务器上下载FRP客户端。cd /usr/local sudo wget https://github.com/fatedier/frp/releases/download/v0.52.3/frp_0.52.3_linux_amd64.tar.gz sudo tar -zxvf frp_0.52.3_linux_amd64.tar.gz sudo mv frp_0.52.3_linux_amd64 frp-client cd frp-client现在编辑客户端配置文件frpc.inisudo vim frpc.ini写入以下配置[common] # 指向你的FRP服务端的公网IP和端口 server_addr 你的FRP服务端公网IP server_port 7000 # 必须与服务端配置的token一致 token your_strong_token_here_123456 # 客户端管理配置可选 admin_addr 127.0.0.1 admin_port 7400 admin_user admin admin_pwd admin_client # 日志 log_file ./frpc.log log_level info log_max_days 3 # 重点定义第一个服务 - 穿透宝塔面板 [web-bt-panel] type tcp local_ip 127.0.0.1 local_port 8888 # 宝塔面板默认内网端口 remote_port 8080 # 在FRP服务端上监听的公网端口 # 如果你有域名并配置了subdomain_host也可以使用http类型和子域名 # [web-bt-panel-http] # type http # local_ip 127.0.0.1 # local_port 8888 # subdomain bt # 访问 bt.yourdomain.com # 注意使用http类型时remote_port通常设置为80且需要域名解析。配置解释server_addr填写第一步中那台ECS的公网IP。[web-bt-panel]这是一个“代理”配置段的名称可以自定义。type tcp宝塔面板使用TCP协议。local_port 8888宝塔面板在本机监听的端口。remote_port 8080这是关键。意味着外部用户将通过访问FRP服务端IP:8080来访问这台内网机器的宝塔面板。5.3 启动FRP客户端并测试同样配置systemd服务以实现后台运行和开机自启。sudo vim /etc/systemd/system/frpc.service内容如下修改路径[Unit] DescriptionFrp Client Service Afternetwork.target [Service] Typesimple Usernobody Restarton-failure RestartSec5s ExecStart/usr/local/frp-client/frpc -c /usr/local/frp-client/frpc.ini [Install] WantedBymulti-user.target保存后执行sudo systemctl daemon-reload sudo systemctl start frpc sudo systemctl enable frpc sudo systemctl status frpc现在回到你的FRP服务端仪表板 (http://服务端IP:7500)你应该能看到一个客户端在线并且有一个web-bt-panel的代理处于活跃状态。5.4 访问测试打开你的浏览器访问http://FRP服务端公网IP:8080。 如果一切配置正确你将会看到宝塔面板的登录界面。使用之前记录下的宝塔用户名和密码登录即可。重要安全提醒此时你的宝塔面板已暴露在公网。请立即在宝塔面板的“面板设置”中修改默认的8888端口这不会影响FRP配置因为FRP连接的是本机端口并务必修改一个非常复杂的用户名和密码开启面板访问IP限制仅允许你的办公IP或家庭IP访问是更佳实践。6. 实战配置绿联NAS本地映射绿联NAS通常基于定制化的Linux系统我们可以通过SSH功能需在NAS管理界面中开启登录到其后台进行操作。具体开启SSH的方法请参考绿联官方文档或对应型号的教程。6.1 登录NAS并部署FRP客户端通过SSH客户端连接你的绿联NAS。其用户名密码通常可在NAS的“系统设置”-“通用设置”中找到。# 连接NAS假设NAS内网IP为 192.168.1.100 ssh admin192.168.1.100连接后选择一个目录存放FRP例如/volume1/public这是一个通常可写的公共目录或/root。# 进入目录以下以/root为例请根据你的NAS实际情况调整 cd /root # 下载对应架构的FRP。绿联NAS多为ARM架构请使用 uname -m 确认。 # 如果是aarch64 (ARM64) wget https://github.com/fatedier/frp/releases/download/v0.52.3/frp_0.52.3_linux_arm64.tar.gz tar -zxvf frp_0.52.3_linux_arm64.tar.gz cd frp_0.52.3_linux_arm64 # 如果是armv7l # wget https://github.com/fatedier/frp/releases/download/v0.52.3/frp_0.52.3_linux_arm.tar.gz6.2 配置NAS的FRP客户端创建并编辑frpc.ini文件vim frpc.ini写入配置。这里我们假设要穿透NAS的Web管理界面默认端口通常是5000和文件服务如SMB/AFP但穿透复杂协议建议用STCP或点对点模式本文以简单HTTP/HTTPS为例。[common] server_addr 你的FRP服务端公网IP server_port 7000 token your_strong_token_here_123456 # 穿透NAS的Web管理界面 (HTTP) [web-nas-admin] type tcp local_ip 127.0.0.1 local_port 5000 # 绿联NAS默认管理端口请根据实际情况确认 remote_port 8081 # 在FRP服务端使用8081端口 # 穿透NAS的HTTPS管理界面 (可选如果启用) [web-nas-admin-https] type tcp local_ip 127.0.0.1 local_port 5001 # 常见的HTTPS管理端口 remote_port 8082 # 示例穿透一个简单的文件浏览服务如通过WebDAV # [web-nas-files] # type http # local_ip 127.0.0.1 # local_port 8080 # 假设NAS内部有个Web服务在8080端口 # subdomain files # 访问 files.yourdomain.com # 注意使用subdomain需要服务端配置subdomain_host且域名已解析。6.3 启动NAS的FRP客户端由于NAS的系统可能不是标准的systemd我们可以使用nohup或创建启动脚本的方式让它在后台运行。# 赋予执行权限 chmod x frpc # 使用nohup在后台启动 nohup ./frpc -c ./frpc.ini ./frpc.log 21 # 查看进程和日志确认是否启动成功 ps aux | grep frpc cat frpc.log为了开机自启你需要将启动命令添加到NAS的开机脚本中。绿联NAS的开机自启方法可能因型号和系统版本而异常见方法是编辑/etc/rc.local文件如果存在且可写在exit 0之前添加启动命令。# 例如编辑rc.local vim /etc/rc.local # 在文件末尾exit 0 之前添加 cd /root/frp_0.52.3_linux_arm64 nohup ./frpc -c ./frpc.ini ./frpc.log 21 保存并赋予rc.local执行权限chmod x /etc/rc.local6.4 测试NAS穿透在浏览器中访问http://FRP服务端公网IP:8081你应该能看到绿联NAS的登录界面。访问https://FRP服务端公网IP:8082(如果配置了) 则进入HTTPS界面。7. 进阶配置与安全加固基础穿透已经实现但直接使用IP端口访问既不安全也不方便。下面进行进阶优化。7.1 使用域名与Nginx反向代理强烈推荐在FRP服务端阿里云ECS上安装Nginx通过域名和80/443端口来代理访问并配置SSL证书。安装Nginx# CentOS sudo yum install -y nginx sudo systemctl start nginx sudo systemctl enable nginx配置域名解析将你的域名如yourdomain.com解析到FRP服务端的公网IP。如果需要子域名解析*.yourdomain.com到该IP。配置Nginx反向代理 创建配置文件例如/etc/nginx/conf.d/frp-proxy.conf。# 代理宝塔面板 (通过8080端口) server { listen 80; server_name bt.yourdomain.com; # 你的子域名 # 重定向到HTTPS可选但推荐 # return 301 https://$server_name$request_uri; location / { proxy_pass http://127.0.0.1:8080; # 转发给本机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; # 宝塔面板可能需要以下配置来处理WebSocket proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; } } # 代理NAS管理界面 (通过8081端口) server { listen 80; server_name nas.yourdomain.com; location / { proxy_pass http://127.0.0.1:8081; 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; } } # HTTPS配置需要SSL证书 # server { # listen 443 ssl http2; # server_name bt.yourdomain.com; # ssl_certificate /path/to/your/cert.pem; # ssl_certificate_key /path/to/your/key.pem; # ... # SSL其他配置 # location / { # proxy_pass http://127.0.0.1:8080; # ... # 同上proxy配置 # } # }保存后测试配置并重载Nginxsudo nginx -t sudo systemctl reload nginx现在你可以通过http://bt.yourdomain.com访问宝塔通过http://nas.yourdomain.com访问NAS无需记忆端口。7.2 FRP服务端安全加固修改默认端口将服务端的bind_port(7000) 和dashboard_port(7500) 改为不常见的端口。强化Token使用长且复杂的随机字符串作为token。限制Dashboard访问在frps.ini中可以为dashboard设置dashboard_addr 127.0.0.1这样仪表板只能通过服务器本地访问。或者通过防火墙/安全组只允许特定IP访问7500端口。使用TLS加密传输在[common]部分配置tls_enable true并在服务端和客户端配置证书可以加密FRP控制通道防止流量被监听。7.3 客户端配置优化连接池与健康检查对于重要服务可以配置pool_count来增加连接池提高稳定性。配置health_check_type tcp和health_check_timeout_s等参数进行健康检查。失败重试客户端配置login_fail_exit false可以在连接失败后不断重试而不是直接退出。8. 常见问题与排查思路在配置和使用过程中你可能会遇到以下问题。这里提供一个排查清单。问题现象可能原因排查步骤与解决方案FRP服务端启动失败1. 端口被占用2. 配置文件语法错误3. 权限不足1.sudo netstat -tlnp | grep :7000查看端口占用。2.sudo /usr/local/frp/frps -c /usr/local/frp/frps.ini前台运行看报错。3. 检查frps.ini文件权限和路径是否正确。FRP客户端连接失败1. 服务端地址/端口错误2. Token不匹配3. 服务端防火墙/安全组未放行端口4. 客户端网络无法访问服务端1. 确认server_addr和server_port正确。2. 确认服务端和所有客户端的token完全一致。3. 检查服务端firewalld和阿里云安全组规则确保bind_port(如7000) 已放行。4. 从客户端telnet 服务端IP 7000测试连通性。能连接但无法访问服务1. 客户端local_ip或local_port错误2. 客户端本地服务未运行3. 远程端口冲突或被占用4. FRP服务端防火墙未放行远程端口1. 在客户端机器上curl 127.0.0.1:8888测试宝塔是否正常。2. 确认宝塔/NAS服务已启动 (systemctl status bt或查看进程)。3. 在服务端netstat -tlnp | grep :8080查看remote_port是否被其他程序占用。4. 检查服务端防火墙和安全组是否放行了remote_port(如8080, 8081)。通过域名访问Nginx返回502 Bad Gateway1. Nginx配置中proxy_pass地址错误2. FRP客户端未运行或映射未成功3. 后端服务(FRP映射端口)未启动1. 检查Nginx配置中proxy_pass http://127.0.0.1:8080;的端口是否与FRPremote_port一致。2. 访问http://服务端IP:8080直接测试FRP映射是否成功。3. 在服务端curl 127.0.0.1:8080测试FRP服务端本机端口是否可达。访问速度慢或不稳定1. 服务端带宽不足2. 客户端与服务端网络延迟高3. 传输数据量大1. 升级服务端公网带宽。2. 考虑更换地域更近的云服务器。3. 对于大文件传输FRP可能不是最佳选择可考虑SFTP直连或云同步方案。绿联NAS SSH无法连接或命令不存在1. 未开启SSH功能2. 系统为精简版缺少wget/tar等命令1. 在绿联NAS管理界面确认已开启SSH。2. 尝试使用curl或busybox wget。或者先在PC下载好对应架构的FRP通过绿联NAS的文件管理功能上传到共享目录再通过SSH进入该目录解压。9. 最佳实践与工程建议将内网穿透用于生产环境或重要服务时务必遵循以下最佳实践以保障安全与稳定。最小化暴露原则不要将所有服务都映射到公网。只映射必要的服务如管理界面并且为这些服务设置强密码和二次验证。使用非标准端口FRP服务端的bind_port、dashboard_port以及映射的remote_port尽量不使用7000、7500、8080、80、443等常见端口可减少被自动化工具扫描的风险。IP白名单宝塔面板在面板设置中开启“API接口”和“面板访问限制”只允许你的固定公网IP访问。FRP服务端在阿里云安全组和服务器防火墙中为bind_port、dashboard_port以及映射的业务端口设置源IP限制仅允许你的办公网络IP或家庭IP访问。Nginx可以在Nginx配置的location块中使用allow和deny指令限制IP。启用HTTPS通过Nginx配置SSL证书将HTTP流量重定向到HTTPS。宝塔面板本身也支持SSL但通过FRP穿透后在Nginx层统一处理SSL更为方便和高效。可以使用Let‘s Encrypt申请免费证书。分离环境如果条件允许用于FRP服务端的云服务器最好与运行重要业务的服务分开。即使FRP服务端被攻破也能隔离风险。定期更新与监控定期关注FRP的GitHub Release更新到最新稳定版本以修复潜在漏洞。利用FRP服务端的仪表板监控客户端连接状态。配置云监控或自定义脚本监控FRP服务进程是否存活。日志与审计保留FRP服务端和客户端的日志定期检查是否有异常连接尝试。在frps.ini和frpc.ini中配置合理的log_level和log_max_days。备选方案对于绿联NAS如果只是需要远程访问文件可以优先考虑厂商自带的远程访问服务如绿联云虽然速度可能受限但安全性由厂商保障。FRP方案更适用于需要完全自主控制和高带宽的场景。通过以上步骤你已经成功构建了一个以阿里云公网服务器为枢纽打通无公网IP云服务器和本地绿联NAS的稳定内网穿透通道。这套方案的核心在于理解FRP的C/S架构和端口映射逻辑并在此基础上层层加固安全。
返回列表