3

frp 概念及通用功能

 9 months ago
source link: https://dusays.com/614/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

frp 概念及通用功能

机器人
这篇文章介绍了frp的概念和通用功能。它解释了frp的工作原理和不同类型的代理,例如TCP、UDP、XTCP等。frp通过内网穿透技术实

很多小伙伴询问 frp 原理,文本简单解释一下。在 frp 中一个代理对应一个需要暴露的内网服务。一个客户端可同时配置多个代理。一些概念,理解它们有助于小伙伴们更好地了解和使用 frp。

frp 是由客户端和服务端组成,服务端通常部署在有公网 IP 的机器上,客户端通常部署在需穿透的内网服务所在的机器上。

内网服务器由于没有公网 IP,不能被非局域网内其他用户访问。

用户通过访问服务端 frps,由 frp 负责根据请求端口或其它信息将请求路由到对应的内网机器,从而实现通信。

通过内网穿透技术,可使内网设备即便没有公网 IP 及端口,也可被公网的用户访问。

frp 支持多种代理类型来适配不同使用场景:

| 类型 | 描述 |
| tcp | 单纯的 TCP 端口映射,服务端会根据不同端口路由到不同的内网服务 |
| udp | 单纯的 UDP 端口映射,服务端会根据不同端口路由到不同的内网服务 |
| http | 针对 HTTP 应用定制了一些额外功能,如修改 Host Header,增加鉴权 |
| https | 针对 HTTPS 应用定制了一些额外功能 |
| stcp | 安全的 TCP 内网代理,需在被访问者和访问者的机器上都部署 frpc,不需在服务端暴露端口 |
| sudp | 安全的 UDP 内网代理,需在被访问者和访问者的机器上都部署 frpc,不需在服务端暴露端口 |
| xtcp | 点对点的内网穿透代理,功能同 stcp,但是流量不需要经过服务器中转 |
| tcpmux | 支持服务端 TCP 端口多路复用,通过同一个端口访问不同的内网服务 |

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

注意:frp 会为本地服务 22 端口,在 frps 所在服务端监听 6000 端口,将 6000 端口接收到的连接和本地服务 22 端口关联,透传流量,从而实现让用户在外部访问内部服务。

[dns]
type = udp
local_ip = 127.0.0.1
local_port = 53
remote_port = 6000

注意:frp 会为本地服务 53 端口,在 frps 所在服务端监听 6000 端口,将 6000 端口接收到的连接和本地服务 53 端口关联,透传流量,从而实现让用户在外部访问内部服务。

[stcp-visitor]
role = visitor
type = stcp
server_name = stcp-test
sk = abc
bind_port = -1

[xtcp-visitor]
role = visitor
type = xtcp
server_name = xtcp-test
sk = abc
bind_addr = 127.0.0.1
bind_port = 9002
fallback_to = stcp-visitor
fallback_timeout_ms = 200

注意:当连接 127.0.0.1:9002 时超过 200ms 打洞还未成功的话,会回退到用 stcp-visitor 建立连接。fallback 后,之前触发的打洞操作仍然会继续,一般来说打洞完成需要耗时会比较长。

TCPMUX

frp 支持将单个端口收到的连接路由到不同代理。目前支持复用器只有 httpconnect。当 frps.ini 的 common 中设置 tcpmux_httpconnect_port,frps 将会监听在这个端口,接收 HTTP 的请求。frps 会根据 HTTP 请求中的 host 路由到不同的后端代理。frps.ini 的配置如下:

[common]
bind_port = 7000
tcpmux_httpconnect_port = 1337

frpc.ini 的配置如下:

[common]
server_addr = x.x.x.x
server_port = 7000

[proxy1]
type = tcpmux
multiplexer = httpconnect
custom_domains = test1
local_port = 80

[proxy2]
type = tcpmux
multiplexer = httpconnect
custom_domains = test2
local_port = 8080

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK