frp配置内网穿透,实现Windows 远程桌面连接,访问内网数据库

Frp介绍

frp 是一款高性能的反向代理应用,专注于内网穿透。它支持多种协议,包括 TCP、UDP、HTTP、HTTPS 等,并且具备 P2P 通信功能。使用 frp,您可以安全、便捷地将内网服务暴露到公网,通过拥有公网 IP 的节点进行中转。
官网:https://gofrp.org/zh-cn/

原理

frp 主要由 客户端(frpc) 和 服务端(frps) 组成,服务端通常部署在具有公网 IP 的机器上,客户端通常部署在需要穿透的内网服务所在的机器上。

内网服务由于没有公网 IP,不能被非局域网内的其他用户访问。

用户通过访问服务端的 frps,由 frp 负责根据请求的端口或其他信息将请求路由到对应的内网机器,从而实现通信。

原理图:

配置教程

1.前提要求

首先必须先要有一台具有外网ip(即:可以外网访问)的服务器。如果没有,接下来的教程就不用看了。

2.下载frp

下载地址:https://github.com/fatedier/frp/releases

3.服务端安装

  1. 把下载好的frp程序压缩包上传到服务器,或者直接在服务器上执行下载命令:

    wget https://github.com/fatedier/frp/releases/download/v0.56.0/frp_0.56.0_linux_amd64.tar.gz
  2. 下载完成后解压,修改目录名称,给执行权限

    # 解压
    tar -zxvf frp_0.56.0_linux_amd64.tar.gz
    # 修改目录名称,和权限
    mv frp_0.56.0_linux_amd64 frp
    chown -R root:root frp

    解压后的文件目录,frps是服务端执行文件,frpc是客户端执行文件,frps.toml是服务端配置文件:

  3. 编辑服务端配置文件frps.toml

    #服务端监听端口
    bindPort = 7000
    #设置认证方式为token(可选)
    auth.method = token
    #设置token(可选)
    auth.token = a123456

    完整配置文件请参考:https://gofrp.org/zh-cn/docs/reference/server-configures/

  4. 使用systemd启动服务
    在 Linux 系统下,使用systemd 可以方便地控制 frp 服务端 frps 的启动和停止、配置后台运行和开启自启。
    要使用 systemd 来控制 frps,需要先安装 systemd,然后在 /etc/systemd/system 目录下创建一个 frps.service 文件。

    • 如Linux服务端上没有安装 systemd,可以使用 yum 或 apt 等命令安装 systemd
    # yum
    yum install systemd
    # apt
    apt install systemd
    • 使用文本编辑器,如 vim 创建并编辑 frps.service 文件
    vim /etc/systemd/system/frps.service

    写入内容

    [Unit]
    # 服务名称,可自定义
    Description = frpserver
    After = network.target syslog.target
    Wants = network.target
    
    [Service]
    Type = simple
    Restart=always
    # 启动frps的命令,需修改为你的frps的安装路径
    ExecStart = /home/frp/frps -c /home/frp/frps.toml
    
    [Install]
    WantedBy = multi-user.target
    • 使用 systemd 命令,管理 frps
    # 重新加载配置
    systemctl daemon-reload
    # 启动frp
    systemctl start frps
    # 停止frp
    systemctl stop frps
    # 重启frp
    systemctl restart frps
    # 查看frp状态
    systemctl status frps
    # 查看frp状态
    systemctl enable frps

4.linux客户端

  1. 客户端要使用和服务端一样的版本,安装方式和服务端差不多,主要是配置文件不一样,客户端的配置文件是frpc.toml,配置文件示例:

    [common]
    # 改成服务端的IP
    server_addr = xxx.xxx.xxx.xx
    # 改成服务端的bind_port端口
    server_port = 7000
    # token 认证,跟服务端一致
    token=a123456
    
    # 连接名称,所有客户端唯一 windows远程桌面配置,如果要配置ssh连接,修改local_port端口号为22就好
    [rdp]
    type = tcp
    local_ip = 127.0.0.1
    local_port = 3389
    # 设置映射端口,也就是本地3389映射给服务器的3387端口
    # 访问服务器的3387就是访问客户端的3389端口
    remote_port = 3387
    
    # msyql 映射配置
    [mysql]
    type =tcp
    local_ip=127.0.0.1
    local_port=3306
    remote_port = 3309
    
    [ssh]
    type = tcp
    local_ip = 127.0.0.1
    local_port = 22
    # 设置映射端口,也就是22映射给7203
    remote_port = 7202
  2. 跟服务端一样,创建一个系统服务文件,文件名称跟服务端区分(服务端是frps.service,客户端是frpc.service)

    [Unit]
    # 服务名称,可自定义
    Description = frpcerver
    After = network.target syslog.target
    Wants = network.target
    
    [Service]
    Type = simple
    Restart=always
    # 启动frps的命令,需修改为你的frps的安装路径
    ExecStart = /home/frp/frpc -c /home/frp/frpc.toml
    
    [Install]
    WantedBy = multi-user.target
  3. 配置启动,停止和开启自启的方法和服务端的命令一样

5.windows客户端

  1. windows客户端注意需要下载和服务端相同版本的frp,配置文件和Linux版本的一样

  2. windows可以借助winsw来配置frp服务的启动、关闭和开机自启

    • 下载winsw,下载地址:https://github.com/winsw/winsw/releases

    • 复制下载的winsw.exe到frp目录下,然后创建winsw.xml配置文件

      <service>
      <!-- 该服务的唯一标识 -->
      <id>frp</id>
      <!-- 该服务的名称 -->
      <name>frp内网穿透</name>
      <!-- 该服务的描述 -->
      <description>frpc开机自启</description>
      <!-- 要运行的程序路径 -->
      <executable>frpc.exe</executable>
      <!-- 携带的参数 -->
      <arguments>-c frpc.toml</arguments>
      <!-- 第一次启动失败 5秒重启 -->
      <onfailure action="restart" delay="5 sec"/>
      <!-- 第二次启动失败 10秒后重启 -->
      <onfailure action="restart" delay="10 sec"/>
      <!-- 日志模式 -->
      <logmode>append</logmode>
      <!-- 指定日志文件目录(相对于executable配置的路径) -->
      <logpath>logs</logpath>
      </service>
    • 在当前目录打开cmd窗口,执行命令创建服务

      # 安装服务
      winsw.exe install
      # 启动服务
      winsw.exe start
      # 卸载服务
      winsw.exe uninstall
      # 停止服务
      winsw.exe stop
      # 重启服务
      winsw.exe restart
      #查看状态
      winsw.exe status
    • 安装服务后,在window的服务管理中可以看到frp服务,可以设置自启动

6.使用

  1. Mysql连接,如本例中服务端IP为:xxx.xxx.xxx.xx,端口号为:3309

  2. window远程,如本例中服务端IP为:xxx.xxx.xxx.xx,端口号为:3387

  3. linux SSH连接,如本例中服务端IP为:xxx.xxx.xxx.xx,端口号为:7202

    ssh root@xx.xxx.xx.xx -p 7202

7. 特别注意


如果服务端机器开启了防火墙,需要在防火墙放开服务器的7000端口和客户端配置里面remote_port配置的所有端口,如果是云服务,如阿里云、腾讯云,还需要在云服务器安全组放开这些端口,不然会连接不上。

THE END