我想要实现的只是在位于 NAT 后面的计算机上建立与我的简单服务器(使用 TcpListener 类用 C# 编写,如果有区别的话)的连接。它在 Teredo 接口上有一些 IPv6 地址(它是公共 IP,以 2001:0 开头)。但是,我甚至无法从我的网络外部 ping 它,例如,我正尝试从这个网站 ping 这个地址http://mebsd.com/ipv6-ping-and-traceroute,结果 - 100% 数据包丢失。据我了解,从 Teredo 的阅读中,不需要进行端口转发?那么问题可能出在哪里?
好吧,现在我很困惑。那么 NAT Traversal 和 Teredo 接口的用途到底是什么?我以为我可以使用 Teredo,例如在 NAT 后面的两台计算机之间建立 Tcp 连接,而无需任何端口转发。
维基百科说:
“[...]Teredo 通过将 IPv6 数据包封装在 UDP/IPv4 数据报中来缓解此问题,大多数 NAT 都可以正确转发。因此,即使没有专用的公共 IPv4 地址,NAT 后面的支持 IPv6 的主机也可以用作 Teredo 隧道端点。实际上,实施 Teredo 的主机无需本地网络环境的配合即可获得 IPv6 连接。”
@Serge 从你的回答中我得出结论,没有端口转发就无法做到这一点,那么点对点应用程序如何工作?例如 BitTorrent 客户端?这对我来说是个好问题(而且不只是对我而言),需要解释 ;)
PS 这是我读过的一篇有关.NET 中的 NAT Traversal 和 Teredo 的文章: http://blogs.msdn.com/b/ncl/archive/2009/07/27/end-to-end-connectivity-with-nat-traversal-.aspx
答案1
您的跟踪路由显示您的流量在 Hurricane Electric 的网络上被丢弃。很可能他们正在操作您的计算机所连接的 Teredo 中继。
数据包无法继续传输表明您的 PC 和 Teredo 中继之间的通信出现故障。最可能的原因是那是因为您的 NAT 设备由于不活动超时而断开了 Teredo UDP 流量的连接状态。在这种情况下,除非您的 PC 通过隧道发送更多流量,否则连接不会再次恢复,从而导致 NAT 设备再次开始跟踪连接。
这就是 Teredo 在实践中极不可靠的原因之一,尽管它在理论上承诺可以穿透 NAT 设备。如果您在这种情况下需要更可靠的隧道,请尝试使用六XS它有自己的隧道协议,可以穿越 NAT 并保持连接(即使连接空闲,也会偶尔发送流量)。您也可以直接使用 proto-41 隧道,例如飓风电气,但在这种情况下,如果您的 IPv4 地址发生变化,您必须手动干预。