你的位置:首页 > 互联网IT

frp内网穿透的四种模式:tcp、udp、stcp、xtcp

frp xtcp是什么,frp stcp是什么

FRP内网映射,穿透工具,FRP内网转发

系统:Windows/Linux

软件:FRP

软件下载:frp_0.34.3_windows_amd64.zip

                   frp_0.34.3_linux_amd64.tar.gz

项目地址:https://github.com/fatedier/frp/releases  

参考文档:https://gofrp.org/docs/

教材:https://www.zhuguodong.com/?id=558

早期介绍教材:https://www.zhuguodong.com/?id=418

其它Linux资料:http://www.nasge.com/archives/17.html

代理类型

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

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

什么是frp?

frp 是一个高性能的反向代理应用,可以帮助您轻松地进行内网穿透,对外网提供服务,支持 tcp, http, https 等协议类型,并且 web 服务支持根据域名进行路由转发。frp 是一款跨平台的内网穿透工具,支持 Windows、macOS 与 Linux,它需要你有一台拥有固定公网 IP 的电脑,VPS 最好,然后就能愉快的进行内网穿透了。还支持 https,甚至可以用它进行小程序开发。

frp项目的github地址

frp 的作用

  • 利用处于内网或防火墙后的机器,对外网环境提供 http 或 https 服务。

  • 对于 http 服务支持基于域名的虚拟主机,支持自定义域名绑定,使多个域名可以共用一个80端口。

  • 利用处于内网或防火墙后的机器,对外网环境提供 tcp 服务,例如在家里通过 ssh 访问处于公司内网环境内的主机。

  • 可查看通过代理的所有 http 请求和响应的详细信息。(待开发)

使用示例

根据对应的操作系统及架构,从 frp的Release 页面下载最新版本的程序。

将 frps 及 frps.ini 放到具有公网 IP 的机器上。

将 frpc 及 frpc.ini 放到处于内网环境的机器上。

然后配置frps.ini或frpc.ini 文件中的内容。

服务器端用命令frps -c frps.ini来启动frp。
客户端用命令frpc -c frpc.ini来启动frp。

frp的四种模式:tcp、udp、stcp、xtcp

  • tcp和udp:就是将普通的tcp端口或者udp端口映射到公网上,相当于你的设备直接向公网暴露了一个tcp端口。任何设备都可以尝试连接这个端口。这里就会有很大的安全风险。

  • stcp:出于安全和防止攻击的考虑,frp提供了使用密钥验证的tcp,这就是frp的Secret TCP(stcp)模式。示意图如下:

frp内网穿透的四种模式:tcp、udp、stcp、xtcp 互联网IT 第1张

  • xtcp:目的是让两个客户具有直接相连。在正式运行时,其实并不需要服务端做什么事情。
    frp客户端就好比两个相亲的对象,frp服务端是媒婆。媒婆介绍完之后,就应该让两个相亲对象自己去聊天了。
    这个就是点对点模式(p2p)。在frp中,这个可以通过设置xtcp实现。
    这种模式的好处是不需要消耗服务器的带宽和网速,延时也较低。
    不过该模式还在继续开发完善阶段,目前使用起来并不太稳定,很多时候会出现连不上的情况。并且与两端的路由器防火墙、DMZ、UPNP设置都有一些关系。本人测试后发现直接连接不上,暂时还未解决该问题。

示意图如下:

frp内网穿透的四种模式:tcp、udp、stcp、xtcp 互联网IT 第2张frp内网穿透的四种模式:tcp、udp、stcp、xtcp 互联网IT 第3张

点对点内网穿透

在传输大量数据时如果都经过服务器中转的话,这样会对服务器端带宽压力比较大。

FRP 提供了一种新的代理类型 XTCP 来解决这个问题,XTCP 模式下可以在传输大量数据时让流量不经过服务器中转。实现方式是在传输数据的两端都部署上 FRP 客户端上用于建立直接的连接。

Internet
FRP
客户端
服务端VPS
客户端

首先在 FRP 服务端 配置上增加一个 UDP 端口用于支持该类型的客户端: bind_udp_port = 7001

其中,客户端B是需要做端口映射的电脑。Visitor是访问端的电脑,只用于stcp模式和xtcp模式。

服务器端的frps配置

frps.ini

案列:

[common]

bind_port = 7000

bind_udp_port = 7001

vhost_http_port = 88

token = 123456


dashboard_user = admin

dashboard_pwd = 123456

dashboard_port = 7500


说明:

[common]

bind_addr = 0.0.0.0

bind_port = 7000            # 客户端与服务端进行通信的端口,即frp服务端口,需与客户端server_port一致

privilege_token = 123456    # 特权模式密钥,需与客户端frpc.ini一致


vhost_http_port = 8080      # http服务端口,开启后服务端完成通过域名访问部署于内网的 Web 服务部署,这里将 HTTP 访问端口设为 8080

vhost_https_port = 443      # https服务端口


dashboard_port = 7500       # 控制台端口 通过 Dashboard 可以方便的查看 FRP 的状态以及代理统计信息展示 通过 http://[server_addr]:7500 访问 Dashboard 界面,用户名密码默认都为 admin。


bind_udp_port = 7001


服务器端用命令frps -c frps.ini来启动frp。
启动后输入http://[服务器ip]:7500,并输入所设置的账号(admin)和密码(admin)就可以看到以下管理界面:

frp内网穿透的四种模式:tcp、udp、stcp、xtcp 互联网IT 第4张

客户端的配置模式:stcp

  • 客户端1:配置需要将type改为stcp即可

[common]

server_addr = 服务器公网IP或者域名

server_port = 7000

token = 123456


[p2p123]

type = stcp

sk = 123456789

local_ip =  0.0.0.0

bind_port = 3390


说明

[common]

server_addr = 服务器公网IP或者域名

server_port = 7000

token = 123456


[p2p123]

type = stcp                 # 选择模式stcp

sk = 123456789              # 只有 sk 一致的用户才能访问到此服务

local_ip =  0.0.0.0         # 本地IP

bind_port = 3390            # 映射需要端口

然后在要访问这个服务的机器上启动另外一个 FRP 客户端,配置如下:

客户端2:配置

[common]

server_addr = 服务器公网IP或者域名

server_port = 7000

token = 123456


[p2p_ssh_visitor]

type = stcp

role = visitor

server_name = p2p123

sk = 123456789

bind_addr = 0.0.0.0

bind_port = 6006


说明:

[common]

server_addr = 服务器公网IP或者域名

server_port = 7000

token = 123456


[p2p_ssh_visitor]

type = stcp

role = visitor            # STCP 的访问者

server_name = p2p123      # 要访问的 STCP 代理的名字,客户端1名称一样

sk = 123456789            # 只有 sk 一致的用户才能访问到此服务,与客户端1,SK一致

bind_addr = 0.0.0.0       # 本地 IP

bind_port = 6006          # 访问本地端口

客户端用命令frpc -c frpc.ini来启动frp。

客户端的配置模式:xtcp

  • 客户端1:配置需要将type改为xtcp即可

[common]

server_addr = 服务器公网IP或者域名

server_port = 7000

token = 123456


[p2p123]

type = xtcp

sk = 123456789

local_ip = 0.0.0.0

bind_port = 3390


说明

[common]

server_addr = 服务器公网IP或者域名

server_port = 7000

token = 123456


[p2p123]

type = xtcp                 # 选择模式xtcp

sk = 123456789              # 只有 sk 一致的用户才能访问到此服务

local_ip =  0.0.0.0         # 本地IP

bind_port = 3390            # 映射需要端口

然后在要访问这个服务的机器上启动另外一个 FRP 客户端,配置如下:

客户端2:配置

[common]

server_addr = 服务器公网IP或者域名

server_port = 7000

token = 123456


[p2p_ssh_visitor]

type = xtcp

role = visitor

server_name = p2p123

sk = 123456789

bind_addr = 0.0.0.0

bind_port = 6006


说明:

[common]

server_addr = 服务器公网IP或者域名

server_port = 7000

token = 123456


[p2p_ssh_visitor]

type = xtcp

role = visitor            # XTCP 的访问者

server_name = p2p123      # 要访问的 XTCP 代理的名字,客户端1名称一样

sk = 123456789            # 只有 sk 一致的用户才能访问到此服务,与客户端1,SK一致

bind_addr = 0.0.0.0       # 本地 IP

bind_port = 6006          # 访问本地端口


客户端用命令frpc -c frpc.ini来启动frp。

客户端的配置模式:tcp

客户端的配置模式:udp

参考这个:https://www.zhuguodong.com/?id=558


参考资料

https://blog.csdn.net/deng_xj/article/details/89187944

http://nicktcl.cn/2020/03/29/908/

https://blog.csdn.net/htxhtx123/article/details/104219317

https://www.baidu.com/s?wd=frp+xtcp%E6%98%AF%E4%BB%80%E4%B9%88&rsv_spt=1&rsv_iqid=0xaa2bcdd60000a2db&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&rqlang=&tn=baiduhome_pg&ch=&rsv_enter=1&rsv_dl=ib&rsv_btype=i&inputT=10811

https://www.baidu.com/s?wd=frp+stcp%E6%98%AF%E4%BB%80%E4%B9%88&rsv_spt=1&rsv_iqid=0x8864637c0001686c&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&rqlang=&tn=baiduhome_pg&ch=&rsv_enter=1&rsv_dl=ib&rsv_btype=i&inputT=4599





frp 提供了一种新的代理类型 xtcp 用于应对在希望传输大量数据且流量不经过服务器的场景。


使用方式同 stcp 类似,需要在两边都部署上 frpc 用于建立直接的连接。


目前处于开发的初级阶段,并不能穿透所有类型的 NAT 设备,所以穿透成功率较低。穿透失败时可以尝试 stcp 的方式。


frps.ini服务端配置

[common]

bind_addr = 0.0.0.0

bind_port = 7000

bind_udp_port = 7001

privilege_token = frp888

启动 frpc,转发内网的 ssh 服务,配置如下,不需要指定远程端口:


frpc.ini客户端配置

[common]

server_addr = 服务端IP

server_port = 7000

privilege_token = frp888


[p2p_ssh]

type = xtcp

sk = abcdefg

local_ip = 127.0.0.1

local_port = 22


在要访问这个服务的机器上启动另外一个 frpc,配置如下:

要访问对方

frpc.ini客户端配置

[common]

server_addr = 服务端IP

server_port = 7000

privilege_token = frp888


[p2p_ssh_visitor]

type = xtcp

role = visitor

server_name = p2p_ssh #同上面[p2p_ssh]一致

sk = abcdefg #同上面一致

bind_addr = 127.0.0.1

bind_port = 2222


说明:

bind_addr = 127.0.0.1绑定监听本地IP

bind_port = 2222绑定监听本地端口,可自定义。


本地SSH工具通过 127.0.0.1:2222,既可访问到已穿透的SSH服务。


server_name = 要访问的穿透服务名称。

sk = 只有 sk 一致的用户才能访问到此服务,可自定义。

role = stcp 的访问者,可自定义。


bind_udp_port = 7001frps服务端除正常配置外需要额外配置一个 udp 端口用于支持该类型的客户端,可自定义。


注意:这是最精简使用的方法实例,如你有更多要求,请参考详细参数阅读,而进行编写


  • 发表评论
  • 查看评论
【暂无评论!】

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。