在IPv6中仍然需要UDP打孔,即使没有NAT?

背景(跳过问题)

IPv4需要NAT来保护地址。 NAT的防火墙属性也有利于安全。 除非在最后X秒内发送出局数据包的local-address:port -> remote-address:port remote-address:port -> local-address:port ,否则IPv4 NAT防火墙规则是“阻塞传入数据包的remote-address:port -> local-address:port ”。

对于一个对等的UDP应用程序,这需要一个介绍服务器来进行NAT打孔。 要使Client连接到Server (都位于防火墙NAT, FW ),我们需要执行以下步骤:

  periodic keep-alive Introducer <------> Client FW FW Server ------------------------------------------ request introduction -------> Introducer Client FW FW Server --------------------->X request connection ------------------------------------------ notify introduction [Client address:port] Introducer -------> Client FW FW Server ------------------------------------------ Client FW FW Server <--------------------------- hello ------------------------------------------ Client FW FW Server ---------------------------> request connection ------------------------------------------ Client FW FW Server <--------------------------- accept connection ------------------------------------------ Client FW FW Server <--------------------------> periodic keep-alive 

IPv6不需要NAT,但似乎可能为家庭用户configuration类似的防火墙规则(请参阅下面的参考资料)。

我的问题:

Q1 :如果IPv6防火墙规则就像IPv4 NAT防火墙规则一样(只是没有地址转换位),那么我是否认为点对点应用仍然需要完全相同的UDP打孔过程?

问题2 :大多数家庭IPv6路由器的默认/现成防火墙规则,就像上面总结的IPv4 NAT防火墙规则一样? 如果有什么不同,怎么样? 是否有任何默认的接受所有传入数据包的行为?

参考

这些支持IPv6家庭路由器应该/可能具有类似NAT的防火墙规则的观点:

切换到IPv6意味着丢弃NAT。 那是件好事儿吗?

你使用NAT获得的一个很大的安全性就是强迫你进入默认的拒绝configuration。 为了获得任何服务,你必须明确打孔。 …正确configuration的防火墙提供与NAT网关完全相同的服务。

http://www.brynosaurus.com/pub/net/p2pnat/

默认情况下,IPv6防火墙通常仍会阻止未经请求的传入通信,即使对IPv6应用也是如此。

(以下链接被禁用,因为我只有足够的点数2)
http://tools.ietf.org/html/rfc5128

即使是未来的“纯IPv6世界”,仍可能包括防火墙,它们采用类似的NAT过滤行为,但没有地址转换。 过滤行为会干扰P2P应用程序的function。 因此,使用本文档中描述的技术进行NAT遍历的IPv6应用程序也可能与某些具有类似于NAT的过滤行为的防火墙一起工作。

http://stackoverflow.com/questions/4647633/nat-traversal-and-ipv6

防火墙不会很快消失,请参阅http://tools.ietf.org/html/draft-ietf-v6ops-cpe-simple-security-16 “用于提供住宅IPv6 Internet的客户端设备中的推荐简单安全function服务”。 …您可以预料,无处不在的防火墙将继续干扰应用程序协议,并要求您执行IPv4 / NAT所需的所有基本遍历方法,以便在应用程序path的中间件中维护状态logging。

http://news.ycombinator.com/item?id=8229327

人们总是说,而不是NAT黑客,你应该有本地IPv6与防火墙相同或更好的水平或保护。 但是,有状态的IPv6防火墙不会引入与NAT相同的问题吗? 我是否仍然需要使用Keepalive数据包或PCP协议来实际使用P2P?

我也在急切地等待IPv6的兴起,但我猜测 – 在一个理智的世界里,消费者路由器仍然会默认使用IPv6的状态防火墙,因此需要继续钻孔。 :/

但是,这些似乎表明,不会有任何类似NAT的防火墙规则,或者说打孔过程是不必要的:

http://www.raknet.net/raknet/manual/ipv6support.html

仅当使用IPV6时,NAT穿透不是必需的。 如果您知道系统的IP地址,即使系统位于路由器后面,也可以直接连接到该系统。

http://www.zerotier.com/blog/?p=226

对于一个根本性的限制来说,这是一个丑陋的解决方法,并且越早被IPv6所淘汰,我们就越早开始真正部署全新一代的Internet协议。 …因为NAT几乎总是有状态的,所以需要频繁的keepalive数据包来保持所有连接打开。 …如果你不发送大约每120秒一次的数据包(对于典型的NAT),你的连接将被遗忘,并将被重置。 在使用SSH的NAT后面的用户很可能在尝试让SSH会话保持长时间打开状态时发现这种情况,并且SSH(像大多数协议一样)具有协议keepalive选项作为解决方法。

在回答这些问题之前,我想解决一些假设。

NAT的防火墙属性也有利于安全。

这是经常重复的,但不是真的; 见下文。

除非在最后X秒内发送出局数据包的本地地址:端口 – >远程地址:端口,否则IPv4 NAT防火墙规则是“阻塞传入数据包的远程地址:端口 – >本地地址:端口”。

这些不是NAT规则,而是有状态的规则。 有状态规则比之前的旧式无状态规则更安全,因为它们本质上是适应性的; 也就是说,防火墙对出站stream量的仔细研究使其能够比单纯的基于端口/地址的规则更好地对入站stream量做出判断。

NAT防火墙确实是隐含的有状态的,但重要的是要认识到有状态是你所追求的,而不是NAT,因为NAT在ipv6社区的某些angular落具有非常糟糕的声誉,而且就像你有在ipv6中看到了很大的阻力。

您所描述的UDP“introducer”进程不限于NAT场景,而且在服务不依赖于单个已知端口号时也适用。 RPC是一个经典的例子,服务绑定到一个(半)随机的端口,然后用端口映射器注册这个端口和他们的名字,这个端口映射使用一个众所周知的端口(111 / TCP和111 / UDP)。 希望连接的客户端联系portmapper,找出他们想要的服务在哪个端口上运行,然后启动到该端口的连接。 这正是你的图表所显示的,而且它每天在运行NFS的平面(非NAT)networking上发生数百万次。

至于你的问题,问题(1)的确应该是:“ 如果我的ipv6防火墙被configuration为拒绝入站UDP通信而没有匹配状态,我的UDP客户端是否仍然需要发起所有到外部服务的任意连接 。 不幸的是,答案是“ 取决于 ”。 有状态的扩展,例如iptablesRELATED扩展,允许防火墙允许在没有简单匹配状态的stream量的基础上,在已有连接在应用层要求这一点的情况下 – 活动模式FTP是一个典型的例子 -但是它需要一个能够理解所讨论的协议细节的内核模块,端到端encryption的部署使得这种深度的数据包检测变得越来越困难。 所以,如果没有这样的解决方法,问题1的答案是肯定的 。 顺便说一下,对于没有众所周知的端口号的TCP服务也是如此。

关于问题(2),对SOHO设备的详尽调查可能超出了ServerFault的function和范围,但是我很多时候并没有看到防火墙设备-v4 v6–它们是默认打开的configuration。