论坛风格切换切换到宽版
  • 4941阅读
  • 0回复

内网穿透工具 FRP 使用实例 [复制链接]

上一主题 下一主题
离线海豚
 

发帖
14003
金钱
437127
威望
0
贡献值
1
只看楼主 倒序阅读 使用道具 0 发表于: 2022-09-16

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

身份验证

服务端和客户端的 common 配置中的 token 参数一致则身份验证通过。

公网服务端 frps.ini 配置文件、内网客户端 frpc.ini 配置文件

[common]
token = [url]www.nasge.com[/url]
Ini

 

通过 TCP 访问内网机器

这里以访问 SSH 服务为例,Linux系统环境下设置

公网服务端配置

首先修改 FRP 公网服务端 frps.ini 配置文件,默认文件无需修改,直接下一步使用命令启动 frps 服务端

root@U-NAS:~/frp# vi frps.ini
# frps.ini 内容
[common]
bind_port = 7000
Ini

在frp目录下输入【./frps -c ./frps.ini】命令启动 frps

root@U-NAS:~/frp# ./frps -c ./frps.ini
2019/12/18 13:29:34 [I] [service.go:141] frps tcp listen on 0.0.0.0:7000
2019/12/18 13:29:34 [I] [root.go:205] start frps success
Bash

出现【Start frps success】代表运行成功

 

内网客户端配置

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

root@U-NAS:~/frp# vi frpc.ini
[common]
# server_addr 为 FRP 服务端的公网 IP
server_addr = 192.168.44.130
# server_port 为 FRP 服务端监听的端口
server_port = 7000
[ssh]
type = tcp
# local_ip 为 内外客户端IP
local_ip = 127.0.0.1 
# local_port 为 内外客户端端口
local_port = 22 
# remote_port 为 公网服务端映射端口
remote_port = 6000 
[web]
type = tcp
local_ip = 127.0.0.1
local_port = 80
remote_port = 6001
Bash

在frp目录下输入【./frpc -c ./frpc.ini】命令启动 frpc

root@U-NAS:~/frp# ./frpc -c ./frpc.ini
2019/12/17 17:33:31 [I] [service.go:249] [35481b55cd500a76] login to server success, get run id [35481b55cd500a76], server udp port [0]
2019/12/17 18:33:31 [I] [proxy_manager.go:144] [35481b55cd500a76] proxy added: [ssh web]
2019/12/17 18:33:31 [I] [control.go:164] [35481b55cd500a76] [ssh] start proxy success
2019/12/17 18:33:31 [I] [control.go:164] [35481b55cd500a76] [web] start proxy success
Bash

这样就可以成功在 FRP 公网服务端上成功建立一个内网客户端连接,在 FRP 服务端上成功注册了一个端口为 60006001 的服务,接下来我们就可以通过这两个端口访问内网客户端上 SSH 22端口、WEB:80端口服务。

  • 公网服务端 192.168.44.130:6000 定向为 内网客户端 127.0.0.1:22【SSH端口】
  • 公网服务端 192.168.44.130:6001 定向为 内网客户端 127.0.0.1:80【WEB端口】

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

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

现在通过 FRP 就可以很容易实现这一功能,这里以 HTTP 服务为例

公网服务端配置

首先修改 FRP 公网服务端 frps.ini 配置文件,通过 vhost_http_port 参数来设置 HTTP 访问端口,这里将 HTTP 访问端口设为 8090

root@U-NAS:~/frp# vi frps.ini
[common]
bind_port = 7000
# vhost_http_port 参数来设置 HTTP 访问端口,此处示例:8090
vhost_http_port = 8090
Bash

在frp目录下输入【./frps -c ./frps.ini】命令启动 frps

root@U-NAS:~/frp# ./frps -c ./frps.ini
2019/12/18 13:59:34 [I] [service.go:141] frps tcp listen on 0.0.0.0:7000
2019/12/18 13:59:34 [I] [service.go:183] http service listen on 0.0.0.0:8090
2019/12/18 13:59:34 [I] [root.go:205] start frps success
Bash

出现【Start frps success】代表运行成功

内网客户端配置

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

这里通过 local_port 和 custom_domains 参数来设置本地机器上 Web 服务对应的端口自定义的域名,这里我们分别设置端口为 80,对应自定义域名 例如:[url]www.666.com[/url]

# frpc.ini 内容
[common]
server_addr = 192.168.44.130
# 对应公网服务端的IP
server_port = 7000
# 对应公网服务端的端口
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
[web]
type = http
# local_port 为本地机器上 Web 服务对应的端口
local_port = 80
# custom_domains 为本地机器上 Web 服务对应的自定义的域名
custom_domains = [url]www.666.com[/url]
Ini

在frp目录下输入【./frpc -c ./frpc.ini】命令启动 frpc

 

最后将自定义域名 例如:[url]www.666.com[/url]

  • A记录 解析到【frpc.ini 配置文件内 server_addr 对应的 IP】
  • CNAME 解析到【frpc.ini 配置文件内 server_addr 对应的域名】

现在便可以通过【 http://www.666.com:8090 】这个 URL 访问到处于内网机器上对应的 Web 服务。

  • 8090端口对应的是 公网服务端 frps.ini 配置文件中 vhost_http_port 对应的 8090 端口

 

HTTPS 服务配置方法类似

公网服务端 frps.ini 配置文件 将 vhost_http_port 替换为 vhost_https_port

内网客户端 frpc.ini 配置文件 将 type = http 替换为 type = https

 

通过密码保护你的 Web 服务

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

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

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

# frpc.ini 内容
[common]
server_addr = 192.168.44.130
# 对应公网服务端的IP
server_port = 7000
# 对应公网服务端的端口
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
[web]
type = http
# local_port 为本地机器上 Web 服务对应的端口
local_port = 80
# custom_domains 为本地机器上 Web 服务对应的自定义的域名
custom_domains = [url]www.666.com[/url]
# 设置认证的用户名
http_user = 666
# 设置认证的密码
http_pwd = 123456
Ini

在frp目录下输入【./frpc -c ./frpc.ini】命令启动 frpc

 

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

 

效果演示

FRP通过密码保护Web服务

给 Web 服务增加自定义子域名托管

在多人同时使用一个 frps 时,通过自定义二级域名的方式来使用会更加方便。

公网服务端配置

首先修改在 FRP 公网服务端 frps.ini 配置文件,通过 subdomain_host 参数来设置自定义域名,这里将参数设置为 例如:777.com

# frps.ini 内容
[common]
bind_port = 7000
# vhost_http_port 参数来设置 HTTP 访问端口,此处示例:8090
vhost_http_port = 8090
# subdomain_host 参数来设置  Web 服务增加自定义二级域名
# 将泛域名 *.777.com 解析到 frps 所在公网服务器的 IP 地址
subdomain_host = 777.com
Bash

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

只需要将 *.{subdomain_host} 解析到 frps 所在公网服务器。
例如:

  • subdomain_host = 777.com、公网服务器IP为 192.168.44.130
  • *.777.com A记录 泛解析为 192.168.44.130

在frp目录下输入【./frps -c ./frps.ini】命令启动 frps

root@U-NAS:~/frp# ./frps -c ./frps.ini
2019/12/18 17:42:17 [I] [service.go:141] frps tcp listen on 0.0.0.0:7000
2019/12/18 17:42:17 [I] [service.go:183] http service listen on 0.0.0.0:8090
2019/12/18 17:42:17 [I] [service.go:240] Dashboard listen on 0.0.0.0:7500
2019/12/18 17:42:17 [I] [root.go:205] start frps success
Bash

出现【Start frps success】代表运行成功

 

内网客户端配置

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

[web_test]
type = http
local_port = 80
# subdomain 为 frps.ini 配置文件内 subdomain_host = 777.com 对应自定义子域名前缀
subdomain = test
Ini

在frp目录下输入【./frpc -c ./frpc.ini】命令启动 frpc

 

FRP 服务端 和 FRP 客户端都启动成功后,通过 test.777.com 就可以访问到内网的 Web 服务。

同一个 HTTP 或 HTTPS 类型的代理中 custom_domains 和 subdomain 可以同时配置。

需要注意的是如果 FPR 服务端配置了 subdomain_host,则 custom_domains 中不能是属于 subdomain_host 的子域名或者泛域名(subdomain_hostcustom_domains 两个参数内域名不能相同)。

---------------------------------- THE END ----------------------------------

评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

灌水
我爱潜水!
快速回复
限100 字节
 
上一个 下一个