BT 软件是支持打洞的,而且打洞方式已经被协议化了,详见:
https://www.bittorrent.org/beps/bep_0055.html 。
如果用的软件不是太旧的版本的话,想必都已经实现了此功能。
协议中:只支持 UDP 打洞,并通过 uTP 传输( TCP 打洞不支持,我认为是因为 TCP 打洞只支持完全锥形 NAT ,打洞成功率较低)。
STUN 也和大家想的不一样,他是通过把有公网 IP 的下载/做种用户当作 STUN 进行搭桥。
至于 Tracker 部分,上传给 Tracker 的仍然是不可用的内网端口号。Tracker 在此环境下只提供“得到活动的公网 IP 用户”的功能。