frd搭建内网穿透服务

frp 的作用

  • 利用处于内网或防火墙后的机器,对外网环境提供 http 或 https 服务。
  • 对于 http, https 服务支持基于域名的虚拟主机,支持自定义域名绑定,使多个域名可以共用一个80端口。
  • 利用处于内网或防火墙后的机器,对外网环境提供 tcp 和 udp 服务,例如在家里通过 ssh 访问处于公司内网环境内的主机。

架构

搭建过程

首先搭建服务端frps

  1. 找一台公网机器,这里我用的阿里云的服务器。

  2. 根据对应的操作系统及架构,从 Release 页面下载最新版本的程序。
    wget https://github.com/fatedier/frp/releases/download/v0.20.0/frp_0.20.0_linux_amd64.tar.gz
    解压
    tar -xvf frp_0.20.0_linux_amd64.tar.gz

  3. 修改 frps.ini 文件,设置 http 访问端口为 8080:

    1
    2
    3
    4
    # frps.ini
    [common]
    bind_port = 7000
    vhost_http_port = 8080
  4. 因为服务器的80端口被nginx占用,所以我们利用nginx做一个反向代理,这样内网映射直接可以使用域名,不用加端口号了。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    server {
    listen 80;
    server_name *.17wpw.com;
    location / {
    proxy_set_header Host $host;
    proxy_set_header X-Real-Ip $remote_addr;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_pass http://127.0.0.1:8080;
    client_max_body_size 500M;
    }
    }
  5. 添加开机自动启动服务
    vi /etc/systemd/system/frps.service 新建此文件,并写入以下内容:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    [Unit]
    Description=frps daemon

    [Service]
    Type=simple
    ExecStart=/usr/bin/frps -c /etc/frps/frps.ini

    [Install]
    WantedBy=multi-user.target

    启动并设为开机自启。

    $ systemctl start frps

    $ systemctl enable frps

    ————centos6.5及以下———————

    vi /etc/rc.local
    在最下面加一行/usr/sbin/frp/frps -c /usr/sbin/frp/frps.ini
    其中 /usr/sbin/frp 是程序放置的目录,重启ok

  6. 把内网穿透的域名解析到服务器的IP。

使用客户端frpc

  1. 根据对应的操作系统及架构,从 Release 页面下载最新版本的程序,MacOs可以使用darwin_amd64.tar.gz版本。修改 frpc.ini 文件,假设 frps 所在的服务器的 IP 为 x.x.x.x,local_port 为本地机器上 web 服务对应的端口, 绑定自定义域名 www.yourdomain.com:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    # frpc.ini
    [common]
    server_addr = x.x.x.x
    server_port = 7000

    [web]
    type = http
    local_port = 80
    custom_domains = www.yourdomain.com
  2. MacOs或者linux启动 frpc:

    ./frpc -c ./frpc.ini

  3. windows可以新建一个bat文件放到目录中启动。

    1
    2
    3
    4
    	@echo off
    echo run begin
    frpc.exe -c ./frpc.ini
    pause