通过frp搭建自己的内网穿透服务

本文介绍如何通过frp在自己的云服务器上搭建内网穿透服务,提供对外暴露的web服务。

内网穿透可以将本机的服务通过云服务器拥有的公有ip暴露到公网上供他人访问,应用场景有很多,比如做微信小程序开发时需要调试接口,或者向别人演示自己还未正式上线的小demo等。

在阅读本文内容之前,需要有一些前置准备:

  • 你拥有一个域名
  • 你拥有一台具有公网ip地址的云主机

frp

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

下载

如果你是win系统,可以通过frp的github releases点击下载文件。

如果你是linux系统,你可以通过wget下载:

1
wget https://github.com/fatedier/frp/releases/download/v0.58.1/frp_0.58.1_linux_amd64.tar.gz

这里以win为例,下载完压缩包解压之后,你会看到如下的目录结构:

1
2
3
4
5
6
--frp_0.58.1_windows_amd64
|-----frpc.toml
|-----frpc.exe
|-----frps.exe
|-----frps.toml
|-----LICENSE

这里介绍一下,这个frpc.toml是客户端的配置文件,客户端指的是你需要进行内网穿透的机器。c就是client的意思。frpc.exe就是客户端的frp程序的启动文件。

frps.toml就是源服务器的配置文件,源服务器指的就是你的云服务器(拥有公网ip的)。同理,这个s就是source的意思。

那其实我们现在用的win机器,只需要保留frpc.toml和frpc.exe就行了,剩下的frps.toml和frps.exe可以删除掉。因为云服务器使用linux系统这个exe他也用不了,所以我们在云服务器上还需要从giithub上下载这个frp的文件。

同样的,在云服务器上下载了文件后,也可以删除掉frpc.toml和frpc,只需要保留frps.toml和frps即可。

接下来介绍具体操作步骤:

对于客户端(win机器)

  1. 通过github releases下载文件

  2. 保留文件中的frpc.tomlfrpc.exe即可

  3. 配置frpc.toml

  4. 启动frpc服务

对于云主机(linux机器)

  1. 通过sh命令获取frp文件

    1
    wget https://github.com/fatedier/frp/releases/download/v0.58.1/frp_0.58.1_linux_amd64.tar.gz
  2. 保留文件中的frps.tomlfrps即可

  3. 配置frps.toml

  4. 启动frps服务

如果你不想每次都进入frp安装目录下通过 xxx/frps -c xxx/frps.toml 来启动的话,可以通过systemd来添加frp服务,通过systemctl统一管理。具体步骤如下:

  1. /lib/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 = /path/to/frps -c /path/to/frps.toml

    [Install]
    WantedBy = multi-user.target
  2. 通过systemd管理frps

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # 设置自启动
    sudo systemctl enable frps
    # 启动frp
    sudo systemctl start frps
    # 停止frp
    sudo systemctl stop frps
    # 重启frp
    sudo systemctl restart frps
    # 查看frp状态
    sudo systemctl status frps

对外提供web服务

  1. 在云主机上配置frps.toml

    1
    2
    bindPort = 7000
    vhostHTTPPort = 8080
  2. 在win机器(客户端)上配置frpc.toml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    serverAddr = "x.x.x.x"  <-云主机公网ip地址
    serverPort = 7000

    [[proxies]]
    name = "web"
    type = "http"
    localPort = 80 <-暴露本机80端口的服务
    customDomains = ["www.yourdomain.com"]

    [[proxies]]
    name = "web2"
    type = "http"
    localPort = 8080 <-暴露本机8080端口的服务
    customDomains = ["www.yourdomain2.com"]

    记得把自己的域名解析到云主机上!

  3. 启动服务

    1
    to/path/frps -c frps.toml

    或者 通过systemd

​ win机器同理,通过powershell或者cmd执行exe程序并通过 -c 指定应用的配置文件。

至此,内网穿透已经实现,你可以愉快的向别人分享你的demo啦!😊


结尾附上frp的官方文档,本文还有些不完善的地方或者没有提到的功能,可以参考frp官方文档。