简介

官网文档地址:https://gofrp.org/docs/overview/

GitHub:https://github.com/fatedier/frp/releases

frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网;

systemd 后台启动及开机自启

环境:

  • 云服务器:centOS 7.9;
  • 被穿透主机(本机):windows 10 64;

步骤:

  1. 服务端下载文件frp_0.43.0_linux_amd64.tar.gz,解压到/usr/local/frp文件夹下,并删除frpc开头的文件(服务端不需要);

  2. 如果Linux服务端上没有安装 systemd,可以使用 yumapt 等命令安装 systemd

    1
    2
    3
    4
    # yum
    yum install systemd
    # apt
    apt install systemd
  3. 编辑 frps.service 文件,修改配置中的 frp 安装路径;

    1
    vim /etc/systemd/system/frps.service

    内容:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    [Unit]
    # 服务名称,可自定义
    Description = frp server
    After = network.target syslog.target
    Wants = network.target

    [Service]
    Type = simple
    # 启动frps的命令,需修改为您的frps的安装路径
    ExecStart = /usr/local/frp/frps -c /usr/local/frp/frps.ini

    [Install]
    WantedBy = multi-user.target
  4. 大功告成,现在可以使用命令管理 frps;

    1
    2
    3
    4
    5
    6
    7
    8
    # 启动frp
    systemctl start frps
    # 停止frp
    systemctl stop frps
    # 重启frp
    systemctl restart frps
    # 查看frp状态
    systemctl status frps

远程访问 windows 桌面

  1. 客户端下载frp_0.43.0_windows_amd64.zip,解压到任意目录,删除frps开头的文件;

  2. 修改服务端的 frps.ini 文件,设置 frp 服务器用户接收客户端连接的端口;

    1
    2
    3
    [common]
    bind_port = 7000 //服务器监听端口,需要开启安全组和防火墙
    token = 123456789 //用于验证客户端
  3. 在需要被访问的内网机器上(SSH 服务通常监听在 22 端口)部署 frpc,修改 frpc.ini 文件,修改「server_addr」为服务器地址:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [common]
    server_addr = x.x.x.x
    server_port = 7000
    token = 123456789 //需要与上面服务器端配置的 token 一致,用于安全验证

    [ssh]
    type = tcp
    local_ip = 127.0.0.1
    local_port = 3389 //windows 远程桌面端口,需要被访问主机防火墙开启 3389 端口,linux 的端口为 22
    remote_port = 6000 //访问端口,需要开启安全组和防火墙
  4. 分别开启服务端和客户端;

    1
    2
    3
    nohup /etc/frp/frps -c /etc/frp/frps.ini & //服务端后台启动
    systemctl start frps //或者以这种方式后台运行 frps
    ./frpc.exe -c ./frpc.ini //运行客户端程序
  5. 远程连接输入xxx.xxx.xxx.xxx:6000端口访问;

注意:

  1. 云服务器需要开放 6000 和 7000 端口的安全组和防火墙;
  2. 被穿透的 windows 主机需要开启防火墙的 3389 端口;
  3. 被穿透的主机需要开启远程左桌面服务(设置→系统→远程桌面);

出现的问题

访问主机时,密码正确但是却提示「你的凭据不工作」

解决方案:

找到

组策略→计算机配置→管理模板→windows组件→远程桌面服务→远程桌面会话主机→安全

更改远程(rdp)连接要求使用指定的安全层为启用 RDP;

参考来源:

访问内网web

  1. 服务器端修改 frps.ini 文件,设置监听 HTTP 请求端口为 4001;

    1
    2
    3
    [common]
    ...
    vhost_http_port = 4001
  2. 服务器安全组和防火墙放行 4001 端口;

  3. 被穿透端修改 frpc.ini 文件,添加 web 节点,可以指定多个;

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    [common]
    server_addr = x.x.x.x
    server_port = 7000

    [web]
    type = http
    local_port = 4000
    custom_domains = www.hahai.com //如果没有域名可以填写云服务器 ip 地址

    [web2]
    type = http
    local_port = 8080
    custom_domains = www.yourdomain2.com
  4. 本地防火墙开放端口 4000,启动 web 应用映射到 4000 端口;

  5. 修改本机 host 记录,添加如下一行;

    1
    xxx.xxx.xxx.xxx www.hahai.com // xxx.xxx.xxx.xxx 为服务器地址
  6. 分别启动 frps 和 frpc 后,即可通过 域名:端口 访问;

为本地HTTP服务启动HTTPS

服务端修改 frps.ini;

1
2
3
[common]
...
vhost_https_port = 443

被穿透端修改 frpc.ini(需要提前准备好 SSL 证书,即 server.crt,server.key);

1
2
3
4
5
6
7
8
9
10
11
12
13
14
...
[httpsweb]
type = https
local_port = 4000
custom_domains = www.hahai.com

plugin = https2http
plugin_local_addr = 127.0.0.1:4000

# HTTPS 证书相关的配置
plugin_crt_path = D:/Frp/server.crt
plugin_key_path = D:/Frp/server.key
plugin_host_header_rewrite = 127.0.0.1
plugin_header_X-From-Where = frp

分别启动 frps 和 frpc 即可实现 https 访问;