原因前文已述,不再多言。

frp 是一个反向代理应用。这里简单说一下啥是代理,代理可分为正向与反向两种。

正向代理,比如你想通过Google查点资料,结果被和谐了。这时呢,你下载了一款科学上网软件,装上它之后再连接Google,妥了。

背后原理是什么呢?

在这里科学上网充当了一个正向代理的角色,当你访问Google时,它把你浏览器的请求拿过来发到它在国外的服务器上,国外的服务器再向Google请求。 因为国外没有墙,自然能访问Google了。得到Google的回复后再转给你。对于Google来说,它认为是那个服务器访问的它。 服务器就是正向代理,正向代理隐藏了真实的客户端(你)。

反向代理,与此相反。

当你在北京访问 www.baidu.com 服务器 nginx 时,nginx 指派北京的服务器把你要的内容返还给你,因为北京这台服务器离你近,反应快; 当你在广州时,nginx 指派广州的服务器把内容返回给你,因为此时它发现广州的服务器离你近,反应快。

但是对于你来说,这一切都是透明的。你一直认为自己访问的就是 baidu,到底是那台服务器响应你的,你根本不关心。在这里 nginx 就是反向代理, 反向代理隐藏真实服务端。

我们安装的 frp 就是一个类似 nginx 的反向代理,你通过远程桌面连接它,它就指派公司电脑响应你。实现了远程办公的功能。

前提条件:

  1. 一个公网服务器(阿里云、腾讯云、华为云……);
  2. 公司电脑一台;
  3. 家里电脑一台。

配置服务端 frps:

  1. 下载

    安装包地址https://github.com/fatedier/frp/releases,选择适合服务器的版本;

  2. 解压

    解压之后可以看到一些frps为前缀的文件,这些是服务端(server)使用的;frpc前缀的文件是客户端(client)使用的。

    frps_full.ini是示例文件,供我们参考。我们主要编辑frps.ini文件。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    
    # 配置开始设置
    [common]
    # frp 服务端端口(必须)
    bind_port = 7000
    # frp 服务端token(必须)
    token = 12345678
       
    # 仪表盘端口、用户名、密码(方便后台查看连接情况)
    dashboard_port = 7500
    dashboard_user = admin
    dabshboard_pwd = admin
    
  3. 启动

    1
    
    frps -c frps.ini
    

    这时就可以访问仪表盘查看连接情况等信息。例如 http://xxx.xxx.xxx.xxx:7500 ,输入用户名/密码(admin/admin)就 OK 了。

    为了保证关闭终端后它依然工作需要使用nohup命令,例如:

    1
    
    nohup frps -c frps.ini
    

配置客户端 frpc:

  1. 下载安装包到公司电脑上任意目录,比如我放到 D:\tools\frp_0.28.0_windows_amd64.zip。解压。

  2. 打开frpc.ini,配置如下:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    # 配置开始
    [common]
    # 你的服务器ip地址或者域名(就是上面配置服务端所在机器的地址)
    server_addr = 0.0.0.0
    # 服务器端口,默认为7000(与上面服务端配置保持相同)
    server_port = 7000
    # 类似于密码(与上面服务端配置保持相同)
    token = 12345678
    
    # 远程桌面连接的名字,随意命名
    [rdp] 
    # 远程连接使用的协议
    type = tcp 
    # 本地ip,填你需要转发到的目的ip
    # 如果是转发到frp客户端所在本机则填 127.0.0.1
    # 否则填对应机器的内网ip
    local_ip = 127.0.0.1
    # 远程桌面连接使用的端口
    local_port = 3389
    # frp 服务端的远程监听端口,即你访问服务端的 remote_port 就相当于访问
    # 客户端的 local_port,如果填0则会随机分配一个端口
    remote_port = 7001
    
  3. 运行,使用 cmd 或者 PowerShell 进入目录,执行

    1
    
    frpc.exe -c frpc.ini
    

    这样当在家用使用 mstsc 访问 xxx.xxx.xxx.xxx:7001 时,服务器就会指定这个客户端响应,也就是我们远程连接到公司电脑上了。

  4. 开机自启,编写批处理脚本frp.bat:

    1
    2
    3
    4
    5
    6
    7
    8
    
    @echo off
    if "%1" == "h" goto begin
    mshta vbscript:createobject("wscript.shell").run("""%~nx0"" h",0)(window.close)&&exit
    :begin
    REM
    cd 你的目录
    frpc -c frpc.ini
    exit
    

生成bat的快捷方式,并放在启动目录下

所有用户目录:C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp

或者当前用户:C:\Users\你的用户名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

即可开机自启。