发布于2022年11月4日3年前 FRP内网穿透实现公网访问内网群晖 前言 frp是一个可用于内网穿透的高性能的反向代理应用,其支持 tcp, udp 协议。自从了解到NAS市场中存在有群晖这种东西后就非常想要体验一番,但无奈贫穷让我无法实现这个愿望。后来偶然间从马路上收废品的人手里几十元收了一台N230工控机,然后就开始了黑群晖的折腾之路。我在上面安装了DSM5.2系统,因为没有洗白,也就用不了群晖官方的工具外网访问;虽然路由器有公网IP,但是因为路由器不太稳,还在调整中,于是便决定先用frp实现内网穿透的方式实现外网访问。另一方面,此方法后期也可做为一种备用方式,以此避免单点故障。因本人水平有限,如有错漏,欢迎大家指出。 读懂实践本文,你可能需要在技能树中点亮以下技能: 基本的网络知识; 基本的Windows系统与Linux系统操作; VPS服务器配置; 准备 运行Windows电脑一台(其他系统也可,但具体某些操作可能有不同) 一台有公网IP的Linux服务器(可以是VPS或独立服务器) 一台运行DSM5.2系统的机器(其他版本系统思路相同,具体操作可能会不一样) SSH客户端,我用的是Putty 警告本文内容以及本人立场并不建议大家使用盗版的黑群晖系统。一方面,使用盗版直接损害厂方利益,不利于企业发展;另一方面,使用黑群晖系统稳定性较差,不利于使用者数据安全,亦不能享受群晖系统全部的功能。对群晖有需求的朋友如果有能力请购买正版设备!另,学习本文对您的各种设备造成的各种软硬件损坏,本人均不承担任何责任,请谨慎操作! 步骤: 规划端口 服务端配置 客户端配置 1. 规划端口 我们首先需要简单了解frp的工作方式,frp分为服务端和客户端。服务端运行于一台有公网IP的服务器上,以此实现为客户端提供公网访问的服务;客户端运行于内网的一台需要从外网穿透访问的设备上,其会向服务端建立连接。 在开始之前我们要规划端口的使用,在此需要确定如下内容: 服务端的侦听端口,即客户端向服务端建立连接时,服务端所提供的端口号,本文使用默认值7000;服务器做http代理时的端口号,我使用了8080;若端口与您服务器上已有服务冲突,或您希望使用其他端口,请自行修改; 客户端将要被内网穿透访问的服务有哪些,分别为其确认一个便于辨识的名称、原本使用的本地端口号、计划在frp服务器上暴露出的端口号,注意避免重复命名与端口冲突问题。 本例将使用frp服务器的5022端口提供SSH服务,xx.lexsion.net:8080提供管理页面http代理。 为防止端口滥用问题,可为服务端配置白名单,比如我计划设置5000-5050,8080为frp服务端暴露端口。 为保证数据安全,我们需要为其设置一个Token,本例我们将其设为:12345678,请自行修改为一个复杂密码。 确认以上信息后我们需访问服务器管理页面,检查服务器运行是否正常。如服务器提供商有防火墙,需为以上确认的服务端需暴露出的端口设置规则放行。若您的服务器运行的系统有开启防火墙,请登陆系统后自行配置防火墙设置。若服务器有运行宝塔面板,需要在宝塔面板中配置开放需要的端口号,或直接关闭防火墙(不推荐)。 2. 服务端配置 使用SSH工具连接有公网IP的服务器,按步骤0中计划的端口配置防火墙规则。 运行arch命令显示服务器架构。根据自己服务器系统架构,访问frp项目的Release页获取最新版的软件包下载地址,下载并解压备用(请注意,随着软件更新,地址与文件名可能会与本例中命令不同,请自行修改)。本人服务器使用CentOS7.6,64位架构,相关命令信息如下,其他系统可能会有不同: [root@lHost ~]# arch x86_64 [root@lHost ~]# wget https://github.com/fatedier/frp/releases/download/v0.27.0/frp_0.27.0_linux_amd64.tar.gz [root@lHost ~]# tar vxf frp_0.27.0_linux_amd64.tar.gz 进入解压出的文件夹,使用vi编辑器修改配置文件frps.ini并保存,内容如下: [common] # 服务端为客户端连接提供的端口号 bind_port = 7000 vhost_http_port = 8080 # 认证密钥 token = 12345678 # 用于限制哪些端口可以用,如果不使用以下语句,将没有限制。 allow_ports = 5000-5050,8080 使用以下命令创建相关目录,并将文件复制到对应的目录: cp frps /usr/bin/ mkdir /etc/frp/ cp frps.ini /etc/frp/ 使用以下命令将 frps.service 文件复制到 /etc/systemd/system/ 目录: cp systemd/frps.service /etc/systemd/system/ 使用以下命令启动frps服务: systemctl start frps 使用以下命令将其添加到开机自动启动: systemctl enable frps 使用以下命令输出运行状态。若一切正常,应能看到 Active: active (running) ...提示: systemctl status frps 若您后期需要某些调整,以下命令可能有用: 使用以下命令可删除其开机自动启动: sudo systemctl disable frps 使用以下命令可检查单元是否配置为自动启动: sudo systemctl is-enabled frps 使用以下命令立即停止: sudo systemctl stop frps 使用以下命令立即重启: sudo systemctl restart frps 使用以下命令重载配置: sudo systemctl reload frps 如果修改了frps.service文件,需使用以下命令重载systemd 系统配置: systemctl daemon-reload 使用此命令显示系统状态: systemctl status 使用以下命令输出激活的单元: systemctl 使用以下命令输出运行失败的单元: systemctl --failed 具体命令参考:systemd (简体中文) 3. 客户端配置 接下来我们在DSM系统上配置客户端。 打开浏览器,登陆DSM的Web管理页面。点击控制面板->高级模式->终端机和SNMP,勾选启用SSH功能,端口我这里保持默认的22端口,点击应用。 使用SSH客户端连接,我这里直接使用root账号和admin的密码登陆。 根据自己硬件与DSM系统,访问frp项目的Release页获取最新版的软件包下载地址,下载并解压备用(请注意,随着软件更新,地址与文件名可能会与本例中命令不同,请自行修改)。本人使用DSM5.2系统,64位架构,相关命令信息如下,其他系统可能会有不同: [root@lHost ~]# wget https://github.com/fatedier/frp/releases/download/v0.27.0/frp_0.27.0_linux_amd64.tar.gz [root@lHost ~]# tar vxf frp_0.27.0_linux_amd64.tar.gz 进入解压出的文件夹,使用vi编辑器修改配置文件frpc.ini并保存,内容如下: [common] # 以下填写服务端服务器的IP地址与端口号 server_addr = XX.XX.XX.XX server_port = 7000 # 验证的密钥,与服务端设置一致 token = 12345678 # []内可理解为一个连接的标签名;type定义连接类型(tcp、udp、http等);local_ip一般设为127.0.0.1;local_port定义服务在本地使用的端口号;remote_port定义在服务端对外提供服务的端口号 [ssh] type = tcp local_ip = 127.0.0.1 local_port = 22 remote_port = 5022 # custom_domains定义访问http代理的自定义域名,自定义域名需要在服务商处设置A记录解析到服务端的 IP [web] type = http local_port = 5000 custom_domains = xx.lexsion.net 修改完成后通过以下命令创建工作目录,并将必要文件复制到目录中: mkdir /root/FRP/ cp frpc /root/FRP/ cp frpc.ini /root/FRP/ 运行以下命令尝试启动frpc测试: ./frpc -c ./frpc.ini 此时我们可以尝试使用SSH客户端通过frp服务端的5022端口连接SSH服务;可以使用浏览器访问xx.lexsion.net:8080 打开服务端了(当然,你应该访问你自己的域名)。测试正常后按Ctrl+C退出程序。 使用以下命令备份rc文件,并将其通过vi编辑器打开,使用G键(Shift+g)让光标移动到最后一行: cp /etc/rc /etc/rc.back vi /etc/rc 在 exit 0 行前加入一行,添加以下内容并保存: ./root/FRP/frpc -c ./root/FRP/frpc.ini 重启DSM后测试frp将正常运作。我们便可以通过预定端口访问对应的服务了。 参考: frp中文文档-GitHub https://github.com/fatedier/frp/blob/master/README_zh.md
创建帐户或登录后发表意见