在frp内网穿透中,Fallback 机制是在实现XTCP配置中P2P的方式进行打洞穿透失败时,退回到STCP链接走服务器转发。

这里只讲最简单的配置windows远程桌面的3389端口配置。

服务器配置

bindPort = 7000

# 权限认证
auth.method = "token"
auth.token = "123455"

被连接客户端配置

# 服务器域名端口
serverAddr = "服务器域名或公网IP"
serverPort = 7000

# 权限认证
auth.method = "token"
auth.token = "123455"

# stcp 协议配置
[[proxies]]
name = "stcp_desktop"
type = "stcp"
secretKey = "123456"
localIP = "127.0.0.1"
localPort = 3389
# 加密压缩传输内容
transport.useEncryption = true
transport.useCompression = true

# xtcp 协议配置
[[proxies]]
name = "xtcp_desktop"
type = "xtcp"
secretKey = "123456"
localIP = "127.0.0.1"
localPort = 3389
# 加密压缩传输内容
transport.useEncryption = true
transport.useCompression = true

发起连接的客户端

# 服务器域名端口
serverAddr = "服务器域名或公网IP"
serverPort = 7000

# 权限认证
auth.method = "token"
auth.token = "123455"

# stcp 协议配置
[[visitors]]
name = "stcp_desktop_visitor"
type = "stcp"
# 被连接客户端配置的stcp name
serverName = "stcp_desktop"
secretKey = "123456"

# stcp-visitor 的 bindPort 设置为 -1 表示不需要监听物理端口,只接受 fallback 的连接即可。
bindPort = -1

# 加密压缩传输内容
transport.useEncryption = true
transport.useCompression = true

# xtcp 协议配置
[[visitors]]
name = "xtcp_desktop_visitor"
type = "xtcp"
# 被连接客户端配置的 xtcp name
serverName = "xtcp_desktop"
secretKey = "123456"
bindAddr = "127.0.0.1"

# 发起连接的客户端电脑的23389端口远程桌面链接到被连接客户端电脑3389端口电脑
bindPort = 23389

# 加密压缩传输内容
transport.useEncryption = true
transport.useCompression = true

# 配置了 keepTunnelOpen = true 时,frpc 会定期检测隧道是否打开,如果没有,则会尝试打洞建立隧道,这样可以始终保持隧道打开,在需要连接对端服务时,可以避免延迟。
keepTunnelOpen = true

# 如果 xtcp 打洞失败,则使用 stcp 进行链接,fallbackTo = 上面的 stcp name
fallbackTo = "stcp_desktop_visitor"
# 打洞超过时间,200ms还未成功的话,会回退到使用 stcp_desktop_visitor 建立连接。
fallbackTimeoutMs = 200

测试

在发起连接的客户端的电脑上,打开mstsc远程客户端