通过frp在内网PC部署web应用和VPS内网穿透

实验环境

  1. 内网电脑-Windows 10
  2. 外网服务器-Vultr Ubuntu 19.10-x64

frp介绍和安装

frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力,且尝试性支持了点对点穿透。本次实验使用的frp版本是最新版本v0.31.1。
下载地址:frp Github
Windows版本安装

  • 下载win64版本的压缩包:Win-x64
  • 解压缩到电脑中的文件夹中:我是放在G:\projects\frp文件夹中。文件结构如下:
    在这里插入图片描述
    Linux版本安装
  • 下载linux-x64版本的压缩包。
    • 创建frp文件夹:mkdir frp
    • 进入文件夹:cd frp,并下载压缩包:
       wget https://github.com/fatedier/frp/releases/download/v0.31.1/frp_0.31.1_linux_amd64.tar.gz
      
    • 解压缩frp压缩包
       tar -zxvf frp_0.31.1_linux_amd64.tar.gz
      
  • 通过ll命令查看linux下的文件夹:
    在这里插入图片描述

frp配置和使用

我们看到有frpc,frpc_full.ini,frpc.ini以及 frps,frps_fill.ini, frps.ini这几个文件
如果是作为客户端,那么配置frpc.ini文件,如果是作为反向代理的服务端则使用frps.ini文件。这个实验中,我们用vultr的VPS作为外网服务器,提供反向代理服务。
修改frps.ini文件:

[common]
bind_port = 7000           #与客户端绑定的进行通信的端口
vhost_http_port = 8080     #访问客户端web服务自定义的端口号

保存文件并启动

  • 直接启动:

./frps -c ./frps.ini,

  • 后台启动:

nohup ./frps -c ./frps.ini &

启动以后,frp作为服务端就在工作了,开始监听7000端口的请求,并转发到响应的内网服务器上。
我的内网服务器是我直接的测试PC,为了测试http内网穿透的功能。配置了一个最简单的Django网站,并使用了8199这个端口,当然也可以部署其他的web应用,这里只是做一个示例,具体的配置就不详细展开了。
在这里插入图片描述
下面我们来配置frpc.ini这个文件,直接打开文本编辑器,然后打开frpc.ini文件:

[common]
server_addr = 45.77.xxx.xxx
server_port = 7000

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000

[web]
type = http      
local_port = 8199
custom_domains = test.xxx123.com

然后在在命令行模式启动frpc.exe, 这里只是一个示范,在实际的应用中并不建议运行在windows上。请注意设置域名的解析到服务器IP上,然后访问 http://test.xxx123.com,发现网站可以正常打开,到此已经完成了基本的设置。
在这里插入图片描述

性能的考虑:

我们有时候使用的穿透用反向代理服务器有可能是在境外,我的实验机就是用的Vultr的VPS,所以会出现大量的丢包和延迟现象,frp支持kcp协议,能够大大改善这种情况,是访问速度明显提升。在服务器端配置kcp端口

# frps.ini
[common]
bind_port = 7000
# kcp 绑定的是 udp 端口,可以和 bind_port 一样
kcp_bind_port = 7000

同时可以在客户端开启kcp协议:

# frpc.ini
[common]
server_addr = x.x.x.x
# server_port 指定为 frps 的 kcp_bind_port
server_port = 7000
protocol = kcp

负载均衡

可以将多个相同类型的 proxy 加入到同一个 group 中,从而实现负载均衡的功能。

目前只支持 TCP 和 HTTP 类型的 proxy。

# frpc.ini
[test1]
type = tcp
local_port = 8080
remote_port = 80
group = web
group_key = 123

[test2]
type = tcp
local_port = 8081
remote_port = 80
group = web
group_key = 123

用户连接 frps 服务器的 80 端口,frps 会将接收到的用户连接随机分发给其中一个存活的 proxy。这样可以在一台 frpc 机器挂掉后仍然有其他节点能够提供服务。
TCP 类型代理要求 group_key 相同,做权限验证,且 remote_port 相同。
HTTP 类型代理要求 group_key, custom_domains 或 subdomain 和 locations 相同

posted @ 2020-01-28 23:42  Rocky Yang  阅读(1418)  评论(0编辑  收藏  举报