brMu

BT 下载疑问,公网可以向我的内网发送 UDP 包?打洞洞加持?

  •  
  •   brMu · May 8, 2019 · 5902 views
    This topic created in 2610 days ago, the information mentioned may be changed or developed.
    qbittorrent 4.1.5,装在软路由上,软路由直接拔号,获取了内网 ipv4 和公网 ipv6,BT 下载时,tcpdump 发现对方是通过公网 IP 发送 UDP 包到我的 ipv4 内网地址的,一般 TCP 通过建立连接后这种现象是正常的,UDP 是无连接的,为什么他可以主动发送到我的内网 ipv4 的 BT 端口的?打洞洞?

    16:41:19.728597 IP 60.109.50.*.47772 > 10.9.168.*.9982: UDP, length 1426
    16:41:19.728601 IP 60.109.50.*.47772 > 10.9.168.*.9982: UDP, length 1426
    16:41:19.728605 IP 60.109.50.*.47772 > 10.9.168.*.9982: UDP, length 1426
    16:41:19.728609 IP 60.109.50.*.47772 > 10.9.168.*.9982: UDP, length 1426
    16:41:19.728613 IP 60.109.50.*.47772 > 10.9.168.*.9982: UDP, length 1426
    16:41:19.733553 IP 60.109.50.*.47772 > 10.9.168.*.9982: UDP, length 1426
    16:41:19.733559 IP 60.109.50.*.47772 > 10.9.168.*.9982: UDP, length 1426
    15 replies    2019-05-09 09:11:15 +08:00
    sean10
        1
    sean10  
       May 8, 2019 via Android
    对,NAT 打洞
    dryadent
        2
    dryadent  
       May 8, 2019
    一般都是 NAT 映射出去的
    ihipop
        3
    ihipop  
       May 8, 2019 via Android   ❤️ 1
    upnp
    OneNian
        4
    OneNian  
       May 8, 2019 via iPhone
    你作为客户端先去请求资源的,并不是公网的用户直接给你发数据。

    运营商的 nat 是无法穿透的,upnp 也不能传递
    brMu
        5
    brMu  
    OP
       May 8, 2019
    @sean10
    感谢,我又搜了下,这篇文章讲的太细了,应该就是通过中间服务器来实现 UDP 打洞的。
    https://blog.csdn.net/ustcgy/article/details/5655050
    cwbsw
        6
    cwbsw  
       May 8, 2019
    @OneNian
    一级运营商都是锥形 NAT,后面的节点之间是可以直连的。
    OneNian
        7
    OneNian  
       May 8, 2019 via iPhone
    @brMu
    BT 的 tracker 不是中间服务器
    catalina
        8
    catalina  
       May 8, 2019
    @brMu bt 的 tracker 只是告诉你这个种子有哪些 ip 在下载、哪些 ip 在上传而已。。。否则怎么能叫 p2p ?
    brMu
        9
    brMu  
    OP
       May 8, 2019
    @OneNian
    @catalina
    我说的中间服务器不是 tracker 服务器喔,是通过一台外网的节点做为桥接,来实现 2 台内网 IP 之间的 UDP 通讯,通讯建立后,这台中间节点就不再需要了,这个可能是µTP 协议的功能,桥接节点也可能是µTP 协议随机找的一台 DHT 外网节点。
    ryd994
        10
    ryd994  
       May 8, 2019 via Android   ❤️ 4
    这不叫打洞,对方有公网 IP。你发起连接,对方回复。nat 规则会留下双向记录,所以返回包也可以正常通过。
    你怎么不想想你怎么上网的?你发起连接,出门的时候被 nat 到公网地址,然后服务器认为是在和这个公网地址会话。返回的包匹配到连接表里的这个条目,执行相反操作。不然你怎么收得到回包?

    打洞是双方都是内网地址,这种情况下是无法由外向内主动发起连接的。只能在打洞服的协调下同时发起连接,这样连接表里各自就有了合法的条目,后续的包就可以通过了。


    你看到的永远是对方公网地址,否则这包来源地址你怎么回复?要检查对方是不是内网很简单,使用另一个公网地址发起连接,用 tcpping 或 udpping,如果这样还会有回复那就是公网。反之则无法判断。你不知道是 nat 无法匹配而 drop 还是对方防火墙 drop。
    liuminghao233
        11
    liuminghao233  
       May 8, 2019 via iPhone
    你先发了包给服务器
    所以它可以 reply
    ryd994
        12
    ryd994  
       May 8, 2019 via Android   ❤️ 4
    UDP nat,因为 UDP 无状态,只能依赖四元组来匹配。通过第三方公网节点中转,双方协商要用的四元组,然后使用同样的参数发起连接。各自的出站包会在连接表里增加条目。然后等对方入站包到的时候,连接表里就可以匹配反方向的四元组了。
    现实中不可能完全同步,所以总有一方先到的会被弃。但是没关系,继续重试即可。

    难点是你不知道出站 nat 会被 nat 成哪个端口,所以需要用 heuristic 猜测。协商只能协商内网端口,但路由器不一定就保持内网端口不变。猜得中就能打动成功。
    brMu
        13
    brMu  
    OP
       May 8, 2019 via Android
    @ryd994 厉害了我的哥,讲的太好了,给你点赞!👍
    OneNian
        14
    OneNian  
       May 8, 2019 via iPhone
    @brMu
    不想想这个打洞的服务器谁提供呢
    上面回复的就是我一开始说的
    shuiyingwuhen
        15
    shuiyingwuhen  
       May 9, 2019
    @ryd994,学习到新姿势
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5270 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 79ms · UTC 05:48 · PVG 13:48 · LAX 22:48 · JFK 01:48
    ♥ Do have faith in what you're doing.