当使用DMZ和NAT时,路由器如何避免端口冲突?


0

消费者路由器中的NAT使路由器将来自私有IP(例如dev0)上的内部设备和特定源端口X的请求转换为来自其自己的公共IP的请求,该请求来自不同的源端口Y.然后,它保留一个表,列出转换,因此它知道到达端口Y上的公共接口的数据包必须被发送到端口X上的dev0。这也称为端口地址转换。

现在,据我所知,端口Y将是路由器上随机的未使用端口。假设您在消费者路由器上运行DMZ,指向另一个设备dev1。假设dev1在端口Z上运行应用程序。

当路由器中的NAT将来自dev0的请求转换为来自端口Z上的公共IP的请求时会发生什么?我会假设来自端口Z的公共网络的传入请求将被路由到dev0,从而有效地禁用DMZ的效果?如何避免这种情况?

Answers:


0

("1-NAT")当收到传入流量时,NAT只会在传入流量来自NAT地址提供的IP地址时转发流量。因此,端口Y上的本地公共接口的IP地址W必须在端口X上发送到dev0,但仅当流量来自远程公共接口IP T端口U.IP T端口U被放置在NAPT中(网络地址端口转换)第一个传出TCP连接时,表,即PAT或NAT)表。

我的答案很大程度上只是劫持了丹尼尔在他的回答中所说的内容,并且(我希望)为了清晰起见略微更具体。但是,这种解释仍然存在端口冲突的可能性,因为从IP地址T到公共接口W端口Y的流量似乎没有办法使其进入DMZ。

那么,除了这种方法("1-NAT"),我在此添加其他两种方法,("2-LSTN")并且("3-EPH"),可以有助于防止这个问题,你说的。

在我的最后一段中,您可以快速总结一下您可能会发现的这个潜在问题。(大多数出售给家庭的路由器将是那些不运行自己的服务器的人。)运行重要服务器的人通常不仅仅转发所有TCP端口,因此他们也不会遇到问题。在确实有可能受到影响的人数较少的情况下,对于那些非常关心调整配置选项的人来说,技术上可以选择。

("2-LSTN")首先,如果路由器设置了具有公共IP地址W端口Y的端口转发规则,则TCP正在使用该地址。可能没有“ESTABLISHED”连接,但它将在端口上“LISTENING”。为了比较,尝试在Unix或Microsoft Windows上运行“netstat -na”,你可以看到流量是“LISTENING” *.*.*.*:#(例如,*.*.*.*:443如果正在收听HTTPS端口)。因此,如果路由器具有DMZ的端口转发规则,则路由器可能会避免从端口Y发送流量。

这个答案有点假设您只是将选择端口发送到网络中被视为DMZ的部分,并通过端口转发执行此操作。如果您只是将所有TCP端口转发到DMZ,这是某些路由器配置屏幕中“DMZ”选项使用的技术,那么这显然不起作用,因为路由器不知道可能的特定服务由DMZ服务器提供。幸运的是,我们还有一个潜在的伎俩。

("3-EPH")另一件事是,这有助于通常从可能的临时端口列表中选择传出端口Y(也许也称为“动态端口”)。传出流量通常使用短暂端口号范围内的随机数。短暂端口的范围可以变化:IANA建议TCP端口49152或更高(通过TCP的最大值65535),这是由Microsoft Windows Vista和更新版本以及FreeBSD 4.6和更新版本使用。根据临时端口上的维基百科页面, XP使用和BSD系统可以使用1025到5000,根据临时端口上的NcFTP页面(Microsoft Windows部分),可以使用1024到4999 。Linux可以使用32768到61000.这些值是可自定义的,如我在超链接的NcFTP页面上更详细的描述。

只要设备选择的短暂端口范围与DMZ提供的服务不冲突,您就不会发生端口冲突。

现在,由于大多数人都没有修补路由器的短暂端口范围,那么绝对可以防止发生冲突的可能性呢?

我认为,答案是“没有”。但是,从业务角度来看,风险似乎是可以接受的(比如制造路由器的业务)。让我们快速回顾一下。您最关键的服务(如HTTP(S)和SSH)可能在“众所周知的”端口范围(0-1023)中有端口号,因此路由器的临时端口可能不会发生冲突("1-NAT")。对于其他服务,是的,存在潜在的问题,即来自DMZ的传出流量可能导致NAT使用您希望DMZ能够收听的端口。它只会影响连接到(通过NAT)的传出流量的系统,如果路由器使用IANA推荐的临时端口范围,则您的机率大约为16,384("3-EPH")。对于在众所周知的(0-1023)端口范围之外的端口使用DMZ的统计数量较少的人来说,这可能只是被视为可接受的赌博,其中许多人可能将其用于个人游戏会话(可能确实如此)没有值得起诉的重大财务后果)。如果游戏玩家受到影响,那么伏都教魔法(尝试随机的东西,比如重新启动设备)可能会导致1/16384机会没有发生。对于这些东西很重要的专业连接,它们有一些选项,比如修补(也就是定制)用于短暂端口范围的值,或者更常见的是,使用更严格的防火墙规则,只转发所需的特定端口,这可能会导致路由器知道不使用该端口号("2-LSTN")


1

您对该场景的描述几乎没有任何责备。但是你忽略了一个关键的一点。

当路由器通过面向公共端口(WAN)接收数据包时,它不仅基于源端口进行转换,而且基于源IP /端口组合进行转换,这是一个套接字

公平地说,有各种各样的NAT,我建议你彻底阅读NAT


例外情况是除了DMZ功能之外还使用端口转发,而外部人员希望在转发规则指示的同一端口上使用DMZ主机。实施将是模型/品牌特色,但我很确定大多数制造商会将其作为前锋处理,而不是将其发送到DMZ。此外,请注意,如果NAT是相同TCP连接的一部分,并且具有预期的SYN / ACK值,则NAT会传入响应入站,以防止注入和劫持。UDP只使用源和时序特性,使UDP端口转发有点危险。
弗兰克托马斯

1
不止于此 - 它使用源地址+端口和目标(地址+)端口。
grawity 2015年

@Frank Thomas:很好地想到了SYN / ACK位,但我并不完全同意。如果它们在整个连接中匹配,则具有相同端口号但具有不同当前SYN / ACK值的2个同时TCP连接似乎是潜在的冲突危险,如果一个连接传输的数据包多于另一个连接,则可能发生这种情况。实际上,现实情况更糟:来自第二次会话的数据包可能被视为来自第一次会话的无序/丢失数据包,从而导致某些冲突。因此,这个细节对减轻混淆的可能性并没有太大作用。
TOOGAM 2015年

SYN值是种子伪随机数,因此您描述的情况的可能性基本上为空(1个连接大约21.4亿,因为SYN是32位数)。现代TCP \ IP堆栈旨在使初始SYN值几乎无法预测,以阻止连接劫持攻击。实际上,当您在选项卡中打开两个超级用户页面时,NAT DOES实际上使用SYN值来识别连接中的数据包,就像您的PC一样。NAT实现使用几个表来处理连接建立期间TCP握手的来回,
Frank Thomas

@FrankThomas所以​​基本上,这是我怀疑和TOOGAM回答:总是有可能发生端口冲突,虽然是一个小的(?)
Simon
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.