官网XTCP介绍
《XTCP介绍》
实现图
fprs.toml
# frps 服务端口(不填,则默认:7000)
bindPort = 81
auth.token = "token 令牌"
公司电脑frpc.toml
serverAddr = "frps公网服务器域名或ip"
serverPort = frps 服务端口
auth.token = "token 令牌"
loginFailExit = false
# 这里表示如果 xtcp 打洞失败时,使用 stcp 远程链接公司电脑
[[proxies]]
# stcp的服务名称要和家用电脑配置的serverName一致
name = "company_stcp_remote_desktop"
type = "stcp"
# 这个secretKey要和家用电脑一致
secretKey = "abcdefg"
localIP = "127.0.0.1"
# 公司电脑远程桌面端口(一般情况下会改成其它端口)
localPort = 3389
[[proxies]]
# xtcp的服务名称要和家用电脑配置的serverName一致
name = "company_xtcp_remote_desktop"
type = "xtcp"
secretKey = "abcdefg"
localIP = "127.0.0.1"
# 公司电脑远程桌面端口(一般情况下会改成其它端口)
localPort = 3389
家用电脑frpc.toml
XTCP 的配置方式和 STCP 很类似。但是会采用 P2P 的方式进行打洞穿透,如果成功,后续的流量将不会经过 frps,而是直接通信,不再受到 frps 所在服务器的带宽限制。
由于打洞成功率取决于所处网络的 NAT 类型,所以 XTCP 的可用性和稳定性无法保证。在需要可靠连接的情况下,建议使用 STCP 替代。
当 visitor 配置了 keepTunnelOpen = true 时,frpc 会定期检测隧道是否打开,如果没有,则会尝试打洞建立隧道,这样可以始终保持隧道打开,在需要连接对端服务时,可以避免延迟。
默认情况下,visitor 会在接收到用户连接后尝试打洞,如果打洞失败,可以尝试多次建立连接,程序会尝试其他的打洞策略,有可能在多次重试后成功打洞。一旦打洞成功,后续新增连接不必重复打洞,而是可以复用隧道。
serverAddr = "frps公网服务器域名或ip"
serverPort = frps 服务端口
auth.token = "token 令牌"
loginFailExit = false
[[visitors]]
# 家用电脑 stcp visitors 名称(随意)
name = "company_stcp_remote_desktop_visitor"
type = "stcp"
# 公司电脑 stcp name
serverName = "company_stcp_remote_desktop"
secretKey = "abcdefg"
# stcp-visitor 的 bindPort 设置为 -1 表示不需要监听物理端口,只接受 fallback 的连接即可。
bindPort = -1
[[visitors]]
# 家用电脑 xtcp visitors 名称(随意)
name = "company_xtcp_remote_desktop_visitor"
type = "xtcp"
# 公司电脑 xtcp name
serverName = "company_xtcp_remote_desktop"
secretKey = "abcdefg"
bindAddr = "127.0.0.1"
# 使用家用电脑的23389端口远程桌面链接到公司电脑3389端口电脑(注意:Windows必须是专业版的,并且要启用远程桌面和设置密码)
bindPort = 23389
# 配置了 keepTunnelOpen = true 时,frpc 会定期检测隧道是否打开,如果没有,则会尝试打洞建立隧道,这样可以始终保持隧道打开,在需要连接对端服务时,可以避免延迟。
keepTunnelOpen = true
# 如果 xtcp 打洞失败,则使用 stcp 进行链接,fallbackTo = 上面的 stcp name
fallbackTo = "company_stcp_remote_desktop_visitor"
# 当连接 127.0.0.1:23389 超过 200ms p2p 打洞还未成功的话,会回退到使用 company_stcp_remote_desktop_visitor 建立连接。
fallbackTimeoutMs = 200
当连接 127.0.0.1:23389 超过 200ms p2p 打洞还未成功的话,会回退到使用 company_stcp_remote_desktop_visitor 建立连接。fallback 后,之前触发的打洞操作仍然会继续,一般来说打洞完成需要的耗时会比较长。
如果打洞成功,下次建立新的连接时,将不需要再次打洞,会很快完成连接建立,不会触发 fallback。
需要注意根据访问端和被访问端的延迟情况来合理设置超时时间,以避免超时时间太短,即使打洞成功连接也来不及建立,而一直触发 fallback。
stcp-visitor 的 bindPort 设置为 -1 表示不需要监听物理端口,只接受 fallback 的连接即可。