Skip to content

Latest commit

 

History

History
209 lines (170 loc) · 6.81 KB

File metadata and controls

209 lines (170 loc) · 6.81 KB

FRP vps端的安装

  • 下载frp, 使用 curl -# -LJO <地址>下载frp 的安装包, 地址在GitHub寻找:https://github.com/fatedier/frp/releases, 会下载到当前文件夹.

  • 使用tar -zxvf <文件名>解压. 会解压到一个新文件夹. 然后使用mv 1 2来给文件夹重新命名(可选步骤).

  • 删除安装包: rm frp_0.52.3_linux_amd64.tar.gz

  • 编辑服务器配置文件frps.toml来允许http代理穿透和ssh的代理穿透.

    # frps.toml
    bindPort = 7000
    #内部通信端口
    vhostHTTPPort = 8080
    #向外暴露的http端口, 使用的时候输入的网址也是这个端口
    auth.method = "token"
    #授权方法为密匙
    auth.token = "1234"
    #密匙内容
  • 在vps的网页管理端加入防火墙规则, 允许使用7000 以及 6000 端口进行入站通讯.

  • 服务启动命令: ./frps -c ./frps.toml, 要在安装frp的目录内执行.

可以在~/.profile文件中加入下面一句, 下次可以使用命令 frp-start快速启动:

alias frp-start='~/frp_0.52.3_linux_amd64/frps -c ~/frp_0.52.3_linux_amd64/frps.toml'

内网客户端的安装

  • 下载同样的frp: curl -# -LJO https://github.com/fatedier/frp/releases/download/v0.52.3/frp_0.52.3_linux_amd64.tar.gz

  • 使用命令解压: tar -zxvf frp_0.52.3_linux_amd64.tar.gz

  • 删除安装包: rm frp_0.52.3_linux_amd64.tar.gz

  • 编辑客户机配置文件frpc.toml, 结果如下:

    serverAddr = "192.9.179.x"
    #vps的ip
    serverPort = 7000
    #vps的内部通讯端口
    auth.method = "token"
    #验证方法为密匙
    auth.token = "1234"
    #密匙内容服务端要和客户端一致
    
    [[proxies]]
    name = "web"
    #不重要的名字
    type = "http"
    #协议, 如果要放网页就用http
    localIP = "192.168.3.139"
    #内网服务器的ip
    localPort = 8080
    #内网服务器的web服务端口, 不重要, 主要看本地的服务对外端口是什么, 跟服务器上暴露的无关
    customDomains = ["192.x.179.x"]
    #vps的域名, 没有域名就用IP地址
    
    [[proxies]]
    name = "ssh"
    #ssh服务
    type = "tcp"
    localIP = "192.168.3.139"
    localPort = 22
    remotePort = 6000
    #vps服务器上需要在防火墙打开的端口

frp的使用

  • 启动命令:./frpc -c ./frpc.toml, 要在frp安装目录下运行.

  • 可以在~/.profile文件中加入下面一句, 下次可以快速启动:alias frp-start='~/frp_0.52.3_linux_amd64/frpc -c ~/frp_0.52.3_linux_amd64/frpc.toml'

  • frp支持多个客户端. 使用frp服务器来代理ssh, 那么在客户端配置上, 只需要如下配置就可以. 例如

    serverAddr = "192.9.xxx.x"
    #vps的ip
    serverPort = 7000
    #vps的绑定端口
    auth.method = "token"
    #验证方法为密匙
    auth.token = "1234"
    #密匙内容服务端要和客户端一致
    
    [[proxies]]
    name = "ssh2"
    #ssh服务
    type = "tcp"
    localIP = "192.168.3.156"
    localPort = 22
    remotePort = 6001
    • 可以看到这台机器的配置上内网地址变了, 说明是不同的机器. 服务器需要暴露的端口也变了, 这样就可以区分不同的内网机器了.
    • 还有name参数也要跟别的机器区分开, 不然同时使用就会有冲突.
    • 要注意同样需要在vps上打开6001端口.
  • 如果要在一台机器上部署多个服务, 代理类型用tcp就可以, 也可以兼容常见的http服务. 例如:

    serverAddr = "xxx.xxx.xxx.xxx"
    serverPort = 7000
    auth.method = "token"
    auth.token = "xxxx"
    
    [[proxies]]
    name = "app1"
    type = "http"
    localIP = "192.168.3.131"
    localPort = 8081
    #因为这里是http类, 不用指定代理机器上的端口, 机器上有vhttphost参数统一指定
    
    [[proxies]]
    name = "app2"
    type = "tcp"
    localIP = "192.168.3.131"
    localPort = 808
    remotePort = 8897
    # 第二个服务
    
    [[proxies]]
    name = "ssh"
    type = "tcp"
    localIP = "192.168.3.131"
    localPort = 22
    remotePort = 6002
    #ssh 服务
    • 以上8897端口和6002端口要在代理服务器(frp server端)打开.

提供一个简单的静态文件服务器

  • 可以使用插件来提供frp客户端机器上静态文件访问的服务.

    serverAddr = "x.x.x.x"
    serverPort = 7000
    auth.method = "token"
    auth.token = "xxxx"
    
    [[proxies]]
    name = "static_file"
    type = "tcp"
    remotePort = 8897
    [proxies.plugin]
    type = "static_file"
    # 本地文件目录,对外提供访问
    localPath = "/home/johnson/luck44"
    # URL 中的前缀,将被去除,保留的内容即为要访问的文件路径
    stripPrefix = "lucky"
    httpUser = "abc"
    httpPassword = "abc"
    • localPath是本机的文件目录路径
    • stripPrefix 是URL的请求子目录
    • 然后要填入用户名和密码
    • 使用网址http://x.x.x.x:8897/lucky来访问这个文件服务器
    • 共享文件夹内容发生变化以后, 要reload frp服务

将以上注册为服务就可以在后台运行不用每次手动启动

  • 首先在/lib/systemd/system/建立frp.service对象文件, 其中写入:

    [Unit]
    Description=FrpService
    After=network-online.target
    #在网络启动后执行Frp服务
    Wants=network-online.target
    
    [Service]
    Type=simple
    User=root
    #以root权限运行
    Restart=on-abort
    #停止时重启
    ExecStart=/home/ubuntu/frp_0.52.3_linux_amd64/frps -c /home/ubuntu/frp_0.52.3_linux_amd64/frps.toml
    #不能在路径中使用~符号, 要写绝对路径 上面是服务端
    ExecStart=/home/johnson/frp_0.52.3_linux_amd64/frpc -c /home/johnson/frp_0.52.3_linux_amd64/frpc.toml
    #以上为客户端
    [Install]
    WantedBy=multi-user.target
    • systemctl start frp.service启动服务
    • systemctl stop frp.service停止服务
    • systemctl enable frp.service设置开机启动, 同理设为disable就是不要开机启动
    • systemctl status frp.service查看服务状态
    • systemctl daemon-reload修改服务配置文件后要重新加载
  • 然后在~/.profile文件里面加入下面两句用来快速启动和关闭:

    • alias frp-start='sudo systemctl start frp.service', 使用frp-start即可
    • alias frp-stop='sudo systemctl stop frp.service', 使用frp-stop即可
    • alias frp-status='sudo systemctl status frp.service'
    • alias frp-restart='sudo systemctl restart frp.service'

注意事项

  • frp的服务器端(VPS端)要先启动, 客户端才能启动成功. 两者不独立. 客户端依赖于服务器端. 所以启动时要注意顺序.
  • 在实际使用中发现问题, 此服务在开机时会启动失败需要手动启动. 在服务的定义文件中, 执行可执行命令语句之前加入一句 ExecStartPre=/bin/sleep 10, 延时10秒, 等待网络启动完毕以后就可以自动启动成功.