FRP内网穿透实现公网访问内网群晖

FRP内网穿透实现公网访问内网群晖

前言

frp是一个可用于内网穿透的高性能的反向代理应用,其支持 tcp, udp 协议。自从了解到NAS市场中存在有群晖这种东西后就非常想要体验一番,但无奈贫穷让我无法实现这个愿望。后来偶然间从马路上收废品的人手里几十元收了一台N230工控机,然后就开始了黑群晖的折腾之路。我在上面安装了DSM5.2系统,因为没有洗白,也就用不了群晖官方的工具外网访问;虽然路由器有公网IP,但是因为路由器不太稳,还在调整中,于是便决定先用frp实现内网穿透的方式实现外网访问。另一方面,此方法后期也可做为一种备用方式,以此避免单点故障。因本人水平有限,如有错漏,欢迎大家指出。

读懂实践本文,你可能需要在技能树中点亮以下技能:

  • 基本的网络知识;
  • 基本的Windows系统与Linux系统操作;
  • VPS服务器配置;

准备

  • 运行Windows电脑一台(其他系统也可,但具体某些操作可能有不同)
  • 一台有公网IP的Linux服务器(可以是VPS或独立服务器)
  • 一台运行DSM5.2系统的机器(其他版本系统思路相同,具体操作可能会不一样)
  • SSH客户端,我用的是Putty

警告
本文内容以及本人立场并不建议大家使用盗版的黑群晖系统。一方面,使用盗版直接损害厂方利益,不利于企业发展;另一方面,使用黑群晖系统稳定性较差,不利于使用者数据安全,亦不能享受群晖系统全部的功能。对群晖有需求的朋友如果有能力请购买正版设备!另,学习本文对您的各种设备造成的各种软硬件损坏,本人均不承担任何责任,请谨慎操作!

步骤:

  1. 规划端口
  2. 服务端配置
  3. 客户端配置

1. 规划端口

我们首先需要简单了解frp的工作方式,frp分为服务端和客户端。服务端运行于一台有公网IP的服务器上,以此实现为客户端提供公网访问的服务;客户端运行于内网的一台需要从外网穿透访问的设备上,其会向服务端建立连接。
在开始之前我们要规划端口的使用,在此需要确定如下内容:

  1. 服务端的侦听端口,即客户端向服务端建立连接时,服务端所提供的端口号,本文使用默认值7000;服务器做http代理时的端口号,我使用了8080;若端口与您服务器上已有服务冲突,或您希望使用其他端口,请自行修改;
  2. 客户端将要被内网穿透访问的服务有哪些,分别为其确认一个便于辨识的名称、原本使用的本地端口号、计划在frp服务器上暴露出的端口号,注意避免重复命名与端口冲突问题。
    本例将使用frp服务器的5022端口提供SSH服务,xx.lexsion.net:8080提供管理页面http代理。
  3. 为防止端口滥用问题,可为服务端配置白名单,比如我计划设置5000-5050,8080为frp服务端暴露端口。
  4. 为保证数据安全,我们需要为其设置一个Token,本例我们将其设为:12345678,请自行修改为一个复杂密码。

确认以上信息后我们需访问服务器管理页面,检查服务器运行是否正常。如服务器提供商有防火墙,需为以上确认的服务端需暴露出的端口设置规则放行。若您的服务器运行的系统有开启防火墙,请登陆系统后自行配置防火墙设置。若服务器有运行宝塔面板,需要在宝塔面板中配置开放需要的端口号,或直接关闭防火墙(不推荐)。

2. 服务端配置

  1. 使用SSH工具连接有公网IP的服务器,按步骤0中计划的端口配置防火墙规则。
  2. 运行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
  3. 进入解压出的文件夹,使用vi编辑器修改配置文件frps.ini并保存,内容如下:

    [common]
    # 服务端为客户端连接提供的端口号
    bind_port = 7000
    vhost_http_port = 8080
    
    # 认证密钥
    token = 12345678
    
    # 用于限制哪些端口可以用,如果不使用以下语句,将没有限制。
    allow_ports = 5000-5050,8080
  4. 使用以下命令创建相关目录,并将文件复制到对应的目录:

    cp frps /usr/bin/
    mkdir /etc/frp/
    cp frps.ini /etc/frp/
  5. 使用以下命令将 frps.service 文件复制到 /etc/systemd/system/ 目录:

    cp systemd/frps.service /etc/systemd/system/
  6. 使用以下命令启动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 (简体中文)#%E7%BC%96%E5%86%99%E5%8D%95%E5%85%83%E6%96%87%E4%BB%B6)

3. 客户端配置

接下来我们在DSM系统上配置客户端。

  1. 打开浏览器,登陆DSM的Web管理页面。点击控制面板->高级模式->终端机和SNMP,勾选启用SSH功能,端口我这里保持默认的22端口,点击应用。
  2. 使用SSH客户端连接,我这里直接使用root账号和admin的密码登陆。
  3. 根据自己硬件与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
  4. 进入解压出的文件夹,使用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
  5. 修改完成后通过以下命令创建工作目录,并将必要文件复制到目录中:

    mkdir /root/FRP/
    cp frpc /root/FRP/
    cp frpc.ini /root/FRP/
    1. 运行以下命令尝试启动frpc测试:
    ./frpc -c ./frpc.ini
  6. 此时我们可以尝试使用SSH客户端通过frp服务端的5022端口连接SSH服务;可以使用浏览器访问xx.lexsion.net:8080 打开服务端了(当然,你应该访问你自己的域名)。测试正常后按Ctrl+C退出程序。
  7. 使用以下命令备份rc文件,并将其通过vi编辑器打开,使用G键(Shift+g)让光标移动到最后一行:

    cp /etc/rc /etc/rc.back
    vi /etc/rc
  8. exit 0 行前加入一行,添加以下内容并保存:

    ./root/FRP/frpc -c ./root/FRP/frpc.ini
  9. 重启DSM后测试frp将正常运作。我们便可以通过预定端口访问对应的服务了。

参考:

  1. frp中文文档-GitHub
    https://github.com/fatedier/frp/blob/master/README_zh.md

标签: none

添加新评论