FRP: 使用frp实现内网穿透

先前介绍过ngrok的使用,相比ngrok还有一个更加简单方便搭建的工具,就是今天介绍的FRP。

简介

  • frp 是一个高性能的反向代理应用,可以帮助您轻松地进行内网穿透,对外网提供服务,支持 tcp, udp, http, https 等协议类型,并且 web 服务支持根据域名进行路由转发。
  • 这里主要说下怎么内网穿透,实际按照教程,自己将NAT VPS做端口转发之类的也是完全一样的。

原理

  • FRP的原理挺容易理解的:公网服务器和内网客户端建立连接,外网用户先去访问公网服务器特定端口,触发公网服务器和内网的互动,并返回信息给外网用户。具体的可以看之前Ngrok那里写的NAT穿透原理

一个例子

数据准备

  • 内网地址IP:192.168.1.111,SSH为222,HTTPS为4443,HTTP为8080
  • 外网地址IP:45.32.35.67,SSH监听为6666,HTTPS为443,HTTP为80
  • 域名为:https://quickbox.liyuans.com

预期结果

  • 外网访问 https://quickbox.liyuans.comhttp://quickbox.liyuans.com 可以访问到内网上搭建的网站

使用教程

DNS解析

  • quickbox.liyuans.com解析到公网服务器IP上,此例子为45.32.35.67

公网服务端操作

下载

  • 最新版本可在官方Release界面找到
  • 连接上公网服务器,部署一下文件:
wget https://github.com/fatedier/frp/releases/download/v0.9.3/frp_0.9.3_linux_amd64.tar.gz
tar xzf frp_0.9.3_linux_amd64.tar.gz
cd frp_0.9.3_linux_amd64

文件编辑

nano frps_min.ini
  • 写入以下内容
# frps_min.ini
[common]
bind_port = 7777
vhost_https_port = 443
vhost_http_port = 80

[ssh]
listen_port = 6666
auth_token = liyuans.com

[web1]
type = https
custom_domains = quickbox.liyuans.com
auth_token = liyuans.com

[web2]
type = http
custom_domains = quickbox.liyuans.com
auth_token = liyuans.com

配置文件含义

  • COMMON中内容:

    • bind_port是公网服务器与内网通信的端口,这里是7777
    • vhost_https_port是配置下文的网站穿透的,即外网访问HTTPS服务时候的端口
    • vhost_http_port是配置下文的网站穿透的,即外网访问HTTP服务时候的端口
  • SSH中内容:

    • SSH是自定义的名字,可以有多个,我这里用来标记SSH连接;
    • listen_port是公网服务器上的监听端口,这里是6666
    • auth_token则为连接的验证信息,两边一致就行
  • web中内容:

    • WEB是自定义的名字,可以有多个,我这里用来标记WEB连接;
    • type是指连接的方式,HTTP或HTTPS;
    • custom_domains即我们绑定的域名
    • auth_token同上

启动服务端

./frps -c ./frps_min.ini
  • 开机启动

nano /etc/rc.local

里面添加我们的启动语句,具体要看自己的路径而定

/root/frp_0.9.3_linux_amd64/frps -c /root/frp_0.9.3_linux_amd64/frps_min.ini

内网客户端操作

下载

  • 最新版本可在官方Release界面找到
  • 连接上公网服务器,部署一下文件:
wget https://github.com/fatedier/frp/releases/download/v0.9.3/frp_0.9.3_linux_amd64.tar.gz
tar xzf frp_0.9.3_linux_amd64.tar.gz
cd frp_0.9.3_linux_amd64

编辑文件

nano frpc_min.ini
  • 写入以下内容
# frpc_min.ini
[common]
server_addr = 45.32.35.67
server_port = 7777
auth_token = liyuans.com

[ssh]
local_ip = 192.168.1.111
local_port = 222

[web1]
type = https
local_port = 4443

[web2]
type = http
local_port = 8080

配置文件含义

  • COMMON中内容:

    • server_addr是公网服务器地址;
    • bind_port是公网服务器与内网通信的端口,这里是7777
    • auth_token则为连接的验证信息,两边一致就行
  • SSH中内容:

    • SSH是自定义的名字,可以有多个,我这里用来标记SSH连接,两边要一致;
    • local_ip是内网服务器上的IP,这里是192.168.1.111
    • local_port是内网服务器上的SSH端口,这里是222
  • web中内容:

    • WEB是自定义的名字,可以有多个,我这里用来标记WEB连接;
    • type是指连接的方式,HTTP或HTTPS;
    • local_port是指内网服务器上的HTTP或HTTPS的端口

启动客户端

./frpc -c ./frpc_min.ini
  • 开机启动
nano /etc/rc.local

里面添加我们的启动语句,具体要看自己的路径而定

/root/frp_0.9.3_linux_amd64/frpc -c /root/frp_0.9.3_linux_amd64/frpc_min.ini

完成

写在最后

  • 文中未写特权模式以及其他使用方式,具体参考 官方教程
  • 文中如有错误,欢迎指出。

我的博客即将搬运同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan

Tags: