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
项目地址:
参考文档:
新教材:?id=558
早期介绍教材:?id=418
其它Linux资料:
目录
代理类型
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)模式。示意图如下:
xtcp:目的是让两个客户具有直接相连。在正式运行时,其实并不需要服务端做什么事情。frp客户端就好比两个相亲的对象,frp服务端是媒婆。媒婆介绍完之后,就应该让两个相亲对象自己去聊天了。这个就是点对点模式(p2p)。在frp中,这个可以通过设置xtcp实现。这种模式的好处是不需要消耗服务器的带宽和网速,延时也较低。不过该模式还在继续开发完善阶段,目前使用起来并不太稳定,很多时候会出现连不上的情况。并且与两端的路由器防火墙、DMZ、UPNP设置都有一些关系。本人测试后发现直接连接不上,暂时还未解决该问题。
示意图如下:
点对点内网穿透
在传输大量数据时如果都经过服务器中转的话,这样会对服务器端带宽压力比较大。
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 =
dashboard_user = admin
dashboard_pwd =
dashboard_port = 7500
说明:
[common]
bind_addr = 0.0.0.0
bind_port = 7000 # 客户端与服务端进行通信的端口,即frp服务端口,需与客户端server_port一致
privilege_token = # 特权模式密钥,需与客户端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)就可以看到以下管理界面:
客户端的配置模式:stcp
客户端1:配置需要将type改为stcp即可
[common]
server_addr = 服务器公网IP或者域名
server_port = 7000
token =
[p2p123]
type = stcp
sk = 789
local_ip = 0.0.0.0
bind_port = 3390
说明
[common]
server_addr = 服务器公网IP或者域名
server_port = 7000
token =
[p2p123]
type = stcp # 选择模式stcp
sk = 789 # 只有 sk 一致的用户才能访问到此服务
local_ip = 0.0.0.0 # 本地IP
bind_port = 3390 # 映射需要端口
然后在要访问这个服务的机器上启动另外一个 FRP 客户端,配置如下:
客户端2:配置
[common]
server_addr = 服务器公网IP或者域名
server_port = 7000
token =
[p2p_ssh_visitor]
type = stcp
role = visitor
server_name = p2p123
sk = 789
bind_addr = 0.0.0.0
bind_port = 6006
说明:
[common]
server_addr = 服务器公网IP或者域名
server_port = 7000
token =
[p2p_ssh_visitor]
type = stcp
role = visitor # STCP 的访问者
server_name = p2p123 # 要访问的 STCP 代理的名字,客户端1名称一样
sk = 789 # 只有 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 =
[p2p123]
type = xtcp
sk = 789
local_ip = 0.0.0.0
bind_port = 3390
说明
[common]
server_addr = 服务器公网IP或者域名
server_port = 7000
token =
[p2p123]
type = xtcp # 选择模式xtcp
sk = 789 # 只有 sk 一致的用户才能访问到此服务
local_ip = 0.0.0.0 # 本地IP
bind_port = 3390 # 映射需要端口
然后在要访问这个服务的机器上启动另外一个 FRP 客户端,配置如下:
客户端2:配置
[common]
server_addr = 服务器公网IP或者域名
server_port = 7000
token =
[p2p_ssh_visitor]
type = xtcp
role = visitor
server_name = p2p123
sk = 789
bind_addr = 0.0.0.0
bind_port = 6006
说明:
[common]
server_addr = 服务器公网IP或者域名
server_port = 7000
token =
[p2p_ssh_visitor]
type = xtcp
role = visitor # XTCP 的访问者
server_name = p2p123 # 要访问的 XTCP 代理的名字,客户端1名称一样
sk = 789 # 只有 sk 一致的用户才能访问到此服务,与客户端1,SK一致
bind_addr = 0.0.0.0 # 本地 IP
bind_port = 6006 # 访问本地端口
客户端用命令frpc -c frpc.ini来启动frp。