快捷搜索:  汽车  科技

frp内网穿透是什么?Frp-实现内网穿透的高性能反向代理

frp内网穿透是什么?Frp-实现内网穿透的高性能反向代理把其客户端 frpc 放置在内网服务器上,把服务端 frps 放置在具有外网 IP 的服务器上。用户需要访问内网服务时,首先向外网服务器发送请求,经过 frps 代理的转发,送达对应的内网服务,内网服务进行响应,并再次通过代理把响应返回到用户。Frp架构Frp 提供了不同操作系统的安装包,包括 Darwin、Linux 和 Windows 平台,下载后进行安装,也可以下载源码自行编译。安装完成后,就会得到两个应用程序:frps 和 frpc,以及对应的配置文件 frps.ini 和 frpc.ini。把 fprs 和 frps.ini 放到具有公网 IP 的机器上,并把 frpc 和 frpc.ini 放到内网环境的机器上。分别启动:./frps -c ./frps.ini ./frpc -c ./frpc.iniFrp 就会根据配置文件的配置进行反向代理。Frp 实现反向代理和内网穿透的

NAT(Network Address Translation,网络地址转换)毫无疑问是一个十分有意义的发明:其通过在互联网中分隔出一个个的专用内网,极大地解决了 IP 地址不足的问题,且有效地避免了主机经受外部网络的攻击。然而,对于开发者而言,NAT 有时又令人头疼:想搭一个个人网站,可家用宽带又不提供固定 IP;建了一个 NAS 服务,可离开内网就访问不了;公司内网服务器出了问题,防火墙和 NAT 让人不得不赶回公司。内网穿透技术应运而生,为开发者们提供了便利。Frp(Fast Reverse Proxy,快速反向代理)就是一个十分有用的内网穿透工具。

frp内网穿透是什么?Frp-实现内网穿透的高性能反向代理(1)

内网穿透

简介

Frp,是 fatedier 在 Github 上开源的可以实现内网穿透的高性能反向代理应用,项目位于 https://github.com/fatedier/frp,目前版本为 v0.33.0。Frp 作为一个反向代理,可以把一个在 NAT 或防火墙后的本地服务暴露到互联网中,实现在本地服务器提供可被外网访问的包括 tcp、UDP 和 HTTP 等协议的应用服务,对于个人低成本的服务器搭建,以及远程进行内网的访问和控制等,具有重要的意义。Frp 支持 TCP 和 UDP 协议,为 HTTP 和 HTTPS 应用协议提供了额外的能力,且尝试性地支持了点对点穿透。Frp 使用了简单的配置文件方式实现内网穿透服务的搭建,部署门槛低,方便使用。

frp内网穿透是什么?Frp-实现内网穿透的高性能反向代理(2)

Frp内网穿透

安装

Frp 提供了不同操作系统的安装包,包括 Darwin、Linux 和 Windows 平台,下载后进行安装,也可以下载源码自行编译。安装完成后,就会得到两个应用程序:frps 和 frpc,以及对应的配置文件 frps.ini 和 frpc.ini。把 fprs 和 frps.ini 放到具有公网 IP 的机器上,并把 frpc 和 frpc.ini 放到内网环境的机器上。分别启动:

./frps -c ./frps.ini ./frpc -c ./frpc.ini

Frp 就会根据配置文件的配置进行反向代理。

示例

Frp 实现反向代理和内网穿透的架构如下:

frp内网穿透是什么?Frp-实现内网穿透的高性能反向代理(3)

Frp架构

把其客户端 frpc 放置在内网服务器上,把服务端 frps 放置在具有外网 IP 的服务器上。用户需要访问内网服务时,首先向外网服务器发送请求,经过 frps 代理的转发,送达对应的内网服务,内网服务进行响应,并再次通过代理把响应返回到用户。

我们来看一些 frp 的使用例子。使用 SSH 访问内网机器,是一个内网穿透的常用场景。修改 frps.ini 文件,设置 frp 服务器端接受客户端流量的端口:

# frps.ini [common] bind_port = 7000

同时,修改对应的客户端配置文件 frpc.ini:

# frpc.ini [common] server_addr = x.x.x.x server_port = 7000 [ssh] type = tcp local_ip = 127.0.0.1 local_port = 22 remote_port = 6000

其中 x.x.x.x 为 frps 所在的服务器的公网 IP 地址。在这个例子中,我们在 frp 的服务端的 7000 端口启动了代理服务,然后在客户端连接代理,并在服务器启动 SSH 服务,使用 6000 端口进行 SSH 的 22 端口的映射。分别启动 frps 和 frpc,此时,就可以通过 SSH,访问在内网的机器:

ssh -oPort=6000 root@x.x.x.x

除了 SSH 以外,通过内网穿透使得外网能够访问本地的 Web 服务,也是十分常见的场景。Frp 通过 vhost 实现,在服务端设置 HTTP 访问端口为 8080:

# frps.ini [common] bind_port = 7000 vhost_http_port = 8080

而在客户端则绑定自定义域名:

# frpc.ini [common] server_addr = x.x.x.x server_port = 7000 [web] type = http local_port = 80 custom_domains = www.yourdomain.com

再把 www.yourdomain.com 的域名 A 记录解析到 IP x.x.x.x,就可以通过浏览器访问 http://www.yourdomain.com:8080,直接访问到位于内网的 Web 服务了。

此外,frps 还提供了简单的文件访问服务,可以很方便地实现一个从外网访问内网静态文件的服务。在服务端的 7000 端口启动代理服务,而客户端则启用 static_file 静态文件插件,并进行配置:

# frpc.ini [common] server_addr = x.x.x.x server_port = 7000 [test_static_file] type = tcp remote_port = 6000 plugin = static_file # 要对外暴露的文件目录 plugin_local_path = /tmp/file # 访问 url 中会被去除的前缀,保留的内容即为要访问的文件路径 plugin_strip_prefix = static plugin_http_user = abc plugin_http_passwd = abc

在浏览器访问 http://x.x.x.x:6000/static/,并输入基本验证所需的用户名和密码,就可以访问到内网机器中 /tmp/file 目录下的文件了。

Frpp 还提供了一个图形界面面板 dashboard,方便查看 frp 的状态,以及代理统计信息的展示,在 frps.ini 中指定 dashboard 服务的端口即可启用:

[common] dashboard_port = 7500 # dashboard 用户名密码,默认都为 admin dashboard_user = admin dashboard_pwd = admin

启动后在浏览器打开 http://[server_addr]:7500 访问 dashboard 界面,就可以进行代理的管理:

frp内网穿透是什么?Frp-实现内网穿透的高性能反向代理(4)

Frp Dashboard

总结

Frp 作为一个反向代理和内网穿透工具,其功能强大,对于包括 SSH、HTTP、DNS、Unix套接字等服务提供了高性能的反向代理支持,且使用十分方便,仅需简单的 ini 文件就可以完成配置,免除了复杂的部署和安装工作,此外,还支持包括点对点穿透、图形化面板、加密压缩、配置热加载、白名单、多路复用、连接池、负载均衡、健康检查等丰富而多样的进阶配置,使其能够适应不同的应用场景,值得使用。

猜您喜欢: