![NAT/PAT 理论问题](https://linux22.com/image/795030/NAT%2FPAT%20%E7%90%86%E8%AE%BA%E9%97%AE%E9%A2%98.png)
给出以下简单的网络
网络 http://www.vbforums.com/picture.php?albumid=18&pictureid=47
[图片]http://www.vbforums.com/picture.php?albumid=18&pictureid=47[/IMG]
是否可以构建 NAT / PAT 池,以便可以通过端口号识别连接到网络的 PC。我知道如果我为每个用户分配一个公共 IP,我就可以识别他们。我试图做的是保留公共 IP,但保持从公共网络识别用户的能力。如果您的答案是特定于供应商的,那我没问题。提前谢谢。
答案1
在 Cisco 路由器上,您可以执行以下操作:
ip nat 日志翻译 syslog
日志记录 <系统日志服务器 IP>
这将导致每个翻译都发送到系统日志服务器。条目将如下所示:
4月29日 21:25:06 rgw-01 233:000238:4月29日 21:25:05.858 EDT:%IPNAT-6-CREATED:tcp 192.168.0.254:56334 68.175.123.94:56334 1.1.1.1:80 1.1.1.1:80
它与路由器上“show ip nat Translation”的输出相同。当转换被创建和删除时,您应该会收到日志消息。
答案2
您所要做的就是查看 nat 设备上的当前 nat 转换表,以查看 IP 映射到哪个端口。例如,在 Cisco 路由器 192.168.1.82 上,通过 pat 连接到 google 的公共 IP 12.12.12.12:
router1#show ip nat trans
tcp 12.12.12.12:33949 192.168.1.82:33949 66.249.80.104:80 66.249.80.104:80
更新:
我想我现在明白了。我不知道这方面的任何实现,但我不明白为什么它不起作用。理论上,您可以将每个内部 IP 映射到不同的端口范围。由于过载将内部 ip/tcp 源端口组合转换为外部 ip/tcp 源端口,因此您可以为每个内部 IP 分配某些外部源端口范围(先前的端口也可以是 udp 端口)。例如:
32000-33999 public ip's tcp/udp src ports on ip 12.12.12.12. will be used for 192.168.1.2
34000-35999 public tcp/udp ports on ip 12.12.12.12. will be used for 192.168.1.3
过载的问题在于您开始限制可能的连接,因为您将其限制为 3 个,而不是使用正常的 4 个项目组合来标识会话(源 IP、源端口、目标 IP、目标端口)。因此,当您通过限制端口范围进一步限制其中一个时,您就限制了会话数。所以在我上面的例子中,您的 IP 192.168.1.2 最多只能与任何特定的公共 IP 建立 2000 个连接。我也不知道过载代码是否像这样工作,因为它可能只使用源端口进行转换,而不是使用源端口/源 IP(这里讨论的是返回数据包)来加快速度。
也许你可以用序列号技巧来解决这个问题,但我认为这需要大量 tcp 重做,并打开安全漏洞。如果已经实施了这一点,我会有点惊讶。我认为 NAT 是一种黑客手段,可以帮助解决 ip 短缺问题。PAT/Overload 是这种黑客手段的进一步黑客手段,使其成为黑客手段中的黑客手段。开始通过序列号识别会话将是黑客手段中的黑客手段中的黑客手段。在这一点上,它是真的IPv6 时代已经来临 :-)
答案3
好的,如果这只是为了从您的网络进行常规出站访问,那么您真正需要的只是一个标准的 NAT-T + DHCP 盒。使用 DHCP,您可以执行静态 DHCP,也可以设置较长的租约时间,以便内部的机器保持相同的地址。然后您就可以始终知道谁是谁。
当您仅进行一般出站访问时,使用公共端的端口来识别内部机器的问题在于,返回端口将在用户连接的服务器上随机生成。因此无法真正跟踪或猜测返回端口是什么。
如果您正在进行入站连接,那么您只需设置 PAT/端口转发到所选的内部地址,但这里的情况并非如此。
至于解决方案,市场上几乎任何产品都可以做到这一点,您还可以在 Linux 上设置 IPtables + dhcpd,或者在 BSD 机器上设置 PF + dhcpd 解决方案。