假设我们有两个客户端A和B希望彼此连接,分别位于对称NAT的NA和NB后面。此外,还有一个会合服务器S存在,以协助客户A和B的孔打孔过程。文献指出,由于NA和NB在任何时候随机分配外部端口,它们各自的客户端启动一个新的连接(即使目标地址相同),因此在连接客户端之间交换的外部端口信息是无效的。我想知道的是,为什么客户端A和B不可能先尝试S提供的外部端口信息,然后,如果失败,尝试反复猜测/蛮横--强迫外部端口。
我的猜测是,尝试所有的2^16端口会花费太长时间,或者有些东西会完全超出我的头,而蛮力搜索需要(2^16)^2猜测,这是完全不可行的。
发布于 2014-12-30 01:10:49
为什么客户A和B不能尝试S提供的外部端口信息?
因为用于与S交谈的端口永远不会是用于与任何一个端点对话的端口。S将是一个港口;A->B将是另一个港口.如果NAT操作正确,则两个端口都不可猜测。NAT条目将Src(ip:port)/Dst(ip:port)内部映射为Src(ip:port)/Dst(ip:port)外部 --这是NAT可以更改的8个数字。当A从S变成B,这是一种全新的连接,与全新的,未知的,外部的价值。STUN/ICE/等都指望src内外的端口关联对于多个目的地保持不变。
A和B无法知道NAT选择了哪个端口,即使它是“粘滞的”(只要使用相同的内部src端口,NAT使用相同的外部src端口),除非同一个端口(S)用于多个dst IP。S只知道和它交谈的是什么;如果NAT使用不同的外部src端口,S和A都不会知道那个端口是什么。
发布于 2015-06-15 17:06:56
文献指出,由于NA和NB在各自的客户端启动新连接(即使目标地址相同)时随机分配外部端口,因此在连接客户端之间交换的外部端口信息是无效的。
“我想知道的是,为什么客户端A和B不可能先尝试S提供的外部端口信息,然后如果失败,就反复猜测/蛮横--强迫外部端口。”
“有可能吗”
发布于 2014-12-30 01:07:59
仅仅猜测源端口是不够的。你还需要知道S的端口,当A连接S时,NA正在期待流量将以S.的源IP返回,所以B还必须伪造S.的端口和IP。如果NA是“真正的”防火墙,您还必须猜测TCP序列号,否则防火墙将拒绝您。
https://networkengineering.stackexchange.com/questions/14876
复制相似问题