内网穿透工具 FRP


frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力,且尝试性支持了点对点穿透。

FRP 安装

FRP 采用 Go 语言开发,支持 Windows、Linux、MacOS、ARM等多平台部署。FRP 安装非常容易,只需下载对应系统平台的软件包,并解压就可用了。

这里以 Linux 为例,为了方便管理我们把解压后的目录重命名为 frp :

$ wget https://github.com/fatedier/frp/releases/download/v0.15.1/frp_0.15.1_linux_amd64.tar.gz
$ tar xzvf frp_0.15.1_linux_amd64.tar.gz
$ mv frp_0.15.1_linux_amd64 frp
$ cd frp

更多平台的软件包下载地址:https://github.com/fatedier/frp/releases

FRP 配置

FRP 服务端配置

配置 FRP 服务端的前提条件是需要一台具有公网 IP 的设备,得益于 FRP 是 Go 语言开发的,具有良好的跨平台特性。你可以在 Windows、Linux、MacOS、ARM等几乎任何可联网设备上部署。

这里以 Linux 为例,FRP 默认给出两个服务端配置文件,一个是简版的 frps.ini,另一个是完整版本 frps_full.ini。

我们先来看看简版的 frps.ini,通过这个配置可以快速的搭建起一个 FRP 服务端。

$ vim frps.ini

[common]
bind_port = 7000
  • 默认配置中监听的是 7000 端口,可根据自己实际情况修改。

通过上面简单的两步就可以成功启动一个监听在 7000 端口的 FRP 服务端。

启动 FRP 服务端

$ ./frps -c ./frps.ini

FRP 客户端配置

和 FRP 服务端类似,FRP 默认也给出两个客户端配置文件,一个是简版的 frpc.ini,另一个是完整版本 frpc_full.ini。

这里同样以简版的 frpc.ini 文件为例,假设 FRP 服务端所在服务器的公网 IP 为 114.125.102.89

  1. 打开frp.ini
    $ vim frpc.ini
    
  2. 键入如下配置文件,根据自己的实际情况填写公网IP和端口号,默认7000
    [common]
    # server_addr 为 FRP 服务端的公网 IP 
    server_addr = 114.125.102.89
    # server_port 为 FRP 服务端监听的端口 
    server_port = 7000
    

启动 FRP 客户端

$ ./frpc -c ./frpc.ini

这样就可以成功在 FRP 服务端上成功建立一个客户端连接,当然现在还并不能对外提供任何内网机器上的服务,因为我们并还没有在 FRP 服务端注册任何内网服务的端口。

FRP 使用实例

下面我们就来看几个常用的例子,通过这些例子来了解下 FRP 是如何实现内网服务穿透的。

通过 TCP 访问内网机器

这里以访问 SSH 服务为例, 修改 FRP 客户端配置文件 frpc.ini 文件并增加如下内容:

$ vim frpc.ini  	#打开客户端配置文件

# 增加如下内容
[ssh]
type = tcp
local_ip = 127.0.0.1	
local_port = 22
remote_port = 6000

启动 FRP 客户端

$ ./frpc -c ./frpc.ini

这样就在 FRP 服务端上成功注册了一个端口为 6000 的服务,接下来我们就可以通过这个端口访问内网机器上 SSH 服务,假设用户名为 demo:

ssh -oPort=6000 demo@114.125.102.89

通过自定义域名访问部署于内网的 Web 服务

有时需要在公有网络通过域名访问我们在本地环境搭建的 Web 服务,但是由于本地环境机器并没有公网 IP,无法将域名直接解析到本地的机器。

现在通过 FRP 就可以很容易实现这一功能,这里以 HTTP 服务为例:首先修改 FRP 服务端配置文件,通过 vhost_http_port 参数来设置 HTTP 访问端口,这里将 HTTP 访问端口设为 8080。

$ vim frps.ini	# 打开服务端配置文件

#增加 vhost_http_port = 8080 根据自身情设置端口号
[common]
bind_port = 7000
vhost_http_port = 8080  # 服务端要访问的端口号

启动 FRP 服务端

$ ./frps -c ./frps.ini

其次我们在修改 FRP 客户端配置文件并增加如下内容:

$ vim frpc.ini  # 打开客户端配置文件

# 增加如下内容
[web]
type = http
local_port = 8080  # 本地服务程序的端口号
custom_domains = demo.com   # 填写服务端的域名地址,或者填写服务端的 IP 地址

这里通过 local_port 和 custom_domains 参数来设置本地机器上 Web 服务对应的端口和自定义的域名,这里我们分别设置端口为 8080,对应域名为 demo.com

最后将 mike.hi-linux.com 的域名 A 记录解析到 FRP 服务器的公网 IP 上,现在便可以通过 http://demo.com:8080 这个 URL 访问到处于内网机器上对应的 Web 服务。

  • TTPS 服务配置方法类似,只需将 vhost_http_port 替换为 vhost_https_port, type 设置为 https 即可。

通过密码保护你的 Web 服务

由于所有客户端共用一个 FRP 服务端的 HTTP 服务端口,任何知道你的域名和 URL 的人都能访问到你部署在内网的 Web 服务,但是在某些场景下需要确保只有限定的用户才能访问。

FRP 支持通过 HTTP Basic Auth 来保护你的 Web 服务,使用户需要通过用户名和密码才能访问到你的服务。需要实现此功能主要需要在 FRP 客户端的配置文件中添加用户名和密码的设置

$ vim frpc.ini
[web]
type = http 
local_port = 80
custom_domains = demo.com # 填写服务端的域名地址,或者填写服务端的 IP 地址
# 设置认证的用户名  
http_user = abc
# 设置认证的密码
http_pwd = abc

这时访问 http://demo.com:8080 这个 URL 时就需要输入配置的用户名和密码才能访问。

  • 该功能目前仅限于 HTTP 类型的代理

给 Web 服务增加自定义二级域名

在多人同时使用一个 FRP 服务端实现 Web 服务时,通过自定义二级域名的方式来使用会更加方便。

通过在 FRP 服务端的配置文件中配置 subdomain_host参数就可以启用该特性。之后在 FRP 客户端的 http、https 类型的代理中可以不配置 custom_domains,而是配置一个 subdomain 参数。

然后只需要将 *.{subdomain_host} 解析到 FRP 服务端所在服务器。之后用户可以通过 subdomain 自行指定自己的 Web 服务所需要使用的二级域名,并通过 {subdomain}.{subdomain_host} 来访问自己的 Web 服务。

首先我们在 FRP 服务端配置 subdomain_host 参数:

$ vim frps.ini
[common]
subdomain_host = demo.com

其次在 FRP 客户端配置文件配置 subdomain 参数:

$ vim frpc.ini
[web]
type = http
local_port = 80
subdomain = test

然后将泛域名 *.demo.com 解析到 FRP 服务端所在服务器的公网 IP 地址。FRP 服务端 和 FRP 客户端都启动成功后,通过 test.demo.com 就可以访问到内网的 Web 服务

修改 Host Header

通常情况下 FRP 不会修改转发的任何数据。但有一些后端服务会根据 HTTP 请求 header 中的 host 字段来展现不同的网站,例如 Nginx 的虚拟主机服务,启用 host-header 的修改功能可以动态修改 HTTP 请求中的 host 字段。

实现此功能只需要在 FRP 客户端配置文件中定义 host_header_rewrite 参数。

$ vim frpc.ini
[web]
type = http
local_port = 80
custom_domains = test.demo.com
host_header_rewrite = dev.demo.com

原来 HTTP 请求中的 host 字段 test.demo.com 转发到后端服务时会被替换为 dev.hi-linux.com

  • 该功能仅限于 HTTP 类型的代理。

参考: 更多内容请访问 https://www.hi-linux.com/posts/25686.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值