[GH-ISSUE #1795] xtcp模式成功的条件 #1420

Closed
opened 2026-05-05 12:53:52 -06:00 by gitea-mirror · 5 comments
Owner

Originally created by @EsCool on GitHub (May 8, 2020).
Original GitHub issue: https://github.com/fatedier/frp/issues/1795

我最近在使用xtcp模式,发现有时候可以成功有时候不会成功。所以想请教下xtcp能够成功的条件是怎样的。
我已知的有:
无公网IP的路由器内的节点(手机),访问有公网的路由器的节点 成功
手机4G,访问有公网的路由器的节点 成功
有公网IP的路由器内的节点(手机),访问有公网的路由器的节点/访问无公网路由器的节点 成功

无公网IP的路由器节点,访问无公网IP的路由器节点 失败
手机4G,访问无公网IP的路由器节点 失败

看起来xtcp能够成功的条件是 需要两端至少一方有公网IP

使用frp的版本是0.32

Originally created by @EsCool on GitHub (May 8, 2020). Original GitHub issue: https://github.com/fatedier/frp/issues/1795 我最近在使用xtcp模式,发现有时候可以成功有时候不会成功。所以想请教下xtcp能够成功的条件是怎样的。 我已知的有: 无公网IP的路由器内的节点(手机),访问有公网的路由器的节点 成功 手机4G,访问有公网的路由器的节点 成功 有公网IP的路由器内的节点(手机),访问有公网的路由器的节点/访问无公网路由器的节点 成功 无公网IP的路由器节点,访问无公网IP的路由器节点 失败 手机4G,访问无公网IP的路由器节点 失败 看起来xtcp能够成功的条件是 需要两端至少一方有公网IP 使用frp的版本是0.32
Author
Owner

@QQ2017 commented on GitHub (May 9, 2020):

这涉及到网络类型,一般来讲至少一方为“Full Cone NAT”则成功穿透几率较高。
具体什么原理百度相关关键字了解吧。

<!-- gh-comment-id:626172257 --> @QQ2017 commented on GitHub (May 9, 2020): 这涉及到网络类型,一般来讲至少一方为“Full Cone NAT”则成功穿透几率较高。 具体什么原理百度相关关键字了解吧。
Author
Owner

@rvier commented on GitHub (May 18, 2020):

不需要公网ip 我这里一边Full Clone 一边 Symmetric(Visitor) 打洞成功
一边Full Clone 一边Port Restricted Cone(Visitor) 型NAT 经测试目前无效
若想正常连接 查看两边的NAT类型把

<!-- gh-comment-id:630369676 --> @rvier commented on GitHub (May 18, 2020): 不需要公网ip 我这里一边Full Clone 一边 Symmetric(Visitor) 打洞成功 一边Full Clone 一边Port Restricted Cone(Visitor) 型NAT 经测试目前无效 若想正常连接 查看两边的NAT类型把
Author
Owner

@rvier commented on GitHub (May 18, 2020):

@QQ2017
请问一下Port Restricted Cone 型NAT 有成功的么?
上述配置只要把一边换成Port Restricted Cone型 就肯定打不通

<!-- gh-comment-id:630375806 --> @rvier commented on GitHub (May 18, 2020): @QQ2017 请问一下Port Restricted Cone 型NAT 有成功的么? 上述配置只要把一边换成Port Restricted Cone型 就肯定打不通
Author
Owner

@MindFollowing commented on GitHub (May 26, 2020):

@ QQ2017请问
一下端口限制锥型NAT有成功的么?
上述配置只要把一边换成端口限制锥型就肯定打不通

公司A机器(对称型Symmetric Nat)
家里B机器(端口限制圆锥形 Port restrict NAT)路由器开放了DMZ 指定了电脑的IP

两边互相向服务器S 建立连接后
A访问B正常
B无法访问A

目前Symmetric NAT 是非常难建立P2P,目前查阅的文献、Google都表明,此类型的NAT正常情况下无法建立P2P连接,只有通过端口预测如下:

A向B的所有port(0-65535)发包,让路由器知道来自B的所有端口都转发到A
B向A的所有port(0-65535)发包,让路由器知道来自A的所有端口都转发到B

端口预测代价极高,因此许多放弃了此类型的p2p连接。

其余是有概率,完全圆锥形NAT>限制性圆锥形NAT>端口限制性圆锥形NAT

<!-- gh-comment-id:633772690 --> @MindFollowing commented on GitHub (May 26, 2020): > @ QQ2017请问 > 一下端口限制锥型NAT有成功的么? > 上述配置只要把一边换成端口限制锥型就肯定打不通 公司A机器(对称型Symmetric Nat) 家里B机器(端口限制圆锥形 Port restrict NAT)路由器开放了DMZ 指定了电脑的IP 两边互相向服务器S 建立连接后 A访问B正常 B无法访问A 目前Symmetric NAT 是非常难建立P2P,目前查阅的文献、Google都表明,此类型的NAT正常情况下无法建立P2P连接,只有通过端口预测如下: A向B的所有port(0-65535)发包,让路由器知道来自B的所有端口都转发到A B向A的所有port(0-65535)发包,让路由器知道来自A的所有端口都转发到B 端口预测代价极高,因此许多放弃了此类型的p2p连接。 其余是有概率,完全圆锥形NAT>限制性圆锥形NAT>端口限制性圆锥形NAT
Author
Owner

@lunfangyu commented on GitHub (Sep 17, 2020):

@ QQ2017请问
一下端口限制锥型NAT有成功的么?
上述配置只要把一边换成端口限制锥型就肯定打不通

公司A机器(对称型Symmetric Nat)
家里B机器(端口限制圆锥形 Port restrict NAT)路由器开放了DMZ 指定了电脑的IP

两边互相向服务器S 建立连接后
A访问B正常
B无法访问A

目前Symmetric NAT 是非常难建立P2P,目前查阅的文献、Google都表明,此类型的NAT正常情况下无法建立P2P连接,只有通过端口预测如下:

A向B的所有port(0-65535)发包,让路由器知道来自B的所有端口都转发到A
B向A的所有port(0-65535)发包,让路由器知道来自A的所有端口都转发到B

端口预测代价极高,因此许多放弃了此类型的p2p连接。

其余是有概率,完全圆锥形NAT>限制性圆锥形NAT>端口限制性圆锥形NAT

公司A机器
家里B机器
家里和公司的网络都是(端口限制圆锥形 Port restrict NAT);xtcp穿透一直不成功,都是报超时:get sid from client error: read udp i/o timeout;看到你的回复,试着把路由器开放了DMZ 指定了电脑的IP;然后就穿透成功了!很高兴;但却不知道什么原理。
猜测是不是和路由器防火墙或者端口转发有关呢;又试着关闭DMZ和关闭防火墙;但还是失败。
接着我注意到,UDP握手端口在50000-65535之间;
因此我继续尝试,在路由设置里面关闭DMZ;然后设置端口转发,把端口范围50000:65535转发到指定的电脑的IP;结果是打洞成功,成功进行xtcp穿透。 在此记录。
以上都是A访问B;B访问A还没时间测试;后面测试补充

<!-- gh-comment-id:693780716 --> @lunfangyu commented on GitHub (Sep 17, 2020): > > @ QQ2017请问 > > 一下端口限制锥型NAT有成功的么? > > 上述配置只要把一边换成端口限制锥型就肯定打不通 > > 公司A机器(对称型Symmetric Nat) > 家里B机器(端口限制圆锥形 Port restrict NAT)路由器开放了DMZ 指定了电脑的IP > > 两边互相向服务器S 建立连接后 > A访问B正常 > B无法访问A > > 目前Symmetric NAT 是非常难建立P2P,目前查阅的文献、Google都表明,此类型的NAT正常情况下无法建立P2P连接,只有通过端口预测如下: > > A向B的所有port(0-65535)发包,让路由器知道来自B的所有端口都转发到A > B向A的所有port(0-65535)发包,让路由器知道来自A的所有端口都转发到B > > 端口预测代价极高,因此许多放弃了此类型的p2p连接。 > > 其余是有概率,完全圆锥形NAT>限制性圆锥形NAT>端口限制性圆锥形NAT 公司A机器 家里B机器 家里和公司的网络都是(端口限制圆锥形 Port restrict NAT);xtcp穿透一直不成功,都是报超时:get sid from client error: read udp i/o timeout;看到你的回复,试着把路由器开放了DMZ 指定了电脑的IP;然后就穿透成功了!很高兴;但却不知道什么原理。 猜测是不是和路由器防火墙或者端口转发有关呢;又试着关闭DMZ和关闭防火墙;但还是失败。 接着我注意到,UDP握手端口在50000-65535之间; 因此我继续尝试,在路由设置里面关闭DMZ;然后设置端口转发,把端口范围50000:65535转发到指定的电脑的IP;结果是打洞成功,成功进行xtcp穿透。 在此记录。 以上都是A访问B;B访问A还没时间测试;后面测试补充
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: github-starred/frp#1420
No description provided.