我是网络新手,掌握了很多基础知识,但我不明白互联网如何无法与局域网上的设备直接联系。
我知道路由器和 NAT 允许您的所有设备在您的网络中拥有相同的 IP,并且它将请求路由到 Web 并返回到请求它的客户端,但我的问题是:
假设我想入侵某人的计算机,并且我知道他的家庭网络(路由器)IP。难道我不能直接将数据发送到该 IP,并将数据编码为一些最常见的私有地址(例如 192.168.1.1-80),然后实际将数据发送到“私有”设备吗?
IP 通常直接从发出请求的设备接收数据,因此,如果我知道路由器 IP 并正确猜出私有 IP,那么如何阻止我入侵该设备呢?
我假设在路由器/NAT 中还有另一种方法可以将数据路由到正确的客户端,而不仅仅是 IP,但我不确定这是如何做到的。
或者只是您可以通过这种方式发送恶意数据,但如果所有软件都不对数据执行任何操作(没有发送请求),那就没有任何好处。
我发现的任何信息通常都只是谈论私有 IP 如何允许整体使用更少的公共 IP,而从未真正提及什么会切断您的私有 IP 客户端对外界的访问。
谁可以给我解释一下这个?
答案1
我不明白互联网为什么无法与您局域网上的设备直接联系。
IP 通常直接向发出请求的设备传送数据
请记住,互联网最初的设计就是事物应该这样运作的 - 互联网应该是“端到端”的,IP 地址应该是全球性的 - 无论给定的 IP 地址位于世界上的哪个地方,我都可以与它对话,它也可以与我对话。
问题是我们用完了 IPv4 地址,因此必须使用 NAT 之类的方案。
NAT 并不是事物应有的工作方式,尽管它具有安全方面的好处,但它破坏了互联网的端到端原则,并鼓励只充当中间人的服务 - 这对安全/收租有好处,对自由/穷人不利。
我知道路由器和 NAT 允许所有设备在网络上使用相同的 IP
它仅在您的网络之外以这种方式出现。
在您的网络后面,每个系统都有一个唯一的 IP - 来自其中一个私有 IP 范围。
NAT 在您的路由器上管理这种错觉,以便路由器后面的系统可以访问其他 IP,并且如果端口转发正确,IP 可以与路由器后面的系统通信。
我不能直接将数据发送到该 IP,并将数据编码到一些最常见的私有地址(例如 192.168.1.1-80),然后实际将数据发送到“私有”设备吗?
没有。
192.168.1.80 在互联网上不存在。它只存在于 NAT 路由器后面。您必须先进入 NAT 路由器后面。唯一的方法是先与 NAT 路由器的公共 IP 通信。
事实上 - 如果该 IP 192.168.1.80 和您自己的 IP 位于同一子网,那么将会发生的情况是流量甚至不会离开您的网络 - 您的系统将尝试从本地 NIC 到达 192.168.1.80,甚至不会到达您的路由器。
因此,如果我知道路由器 IP 并正确猜出私有 IP,那么如何阻止我入侵该设备?
NAT 路由器监控并跟踪传入的连接。
如果新的 TCP 连接尝试连接到转发端口,那么他们才会将数据转发到路由器后面的系统。
UDP 是无连接的,因此如果 NAT 路由器正常工作,它不会将一段时间未见的 UDP 流量转发到其后面的系统。由于 UDP 的无连接特性,可以使用 NAT 路由器欺骗它,但前提是您可以先让后面的系统在该端口上发送某些内容,并让 NAT 路由器相信传入流量可能会回来。有一些协议依赖于类似的东西,例如 STUN。
答案2
仅仅因为您知道路由器的公共 IP 地址以及内部地址,并不会自动使内部地址可公开寻址。
IP 允许您连接到公共地址,但它并不自动暗示该公共地址后面有地址,或者即使有也不提供任何转发数据的方法。
该地址是“转到这台机器和这个端口”,而不是“转到这台机器和端口,然后转发到另一台机器和端口,然后从那里其他地址和端口”
想象一下有人给你寄信。邮局不关心WHO是地址,只是他们把邮件放在正确的位置。如果邮件通过了位置,那么地址上的某个人必须查看这封信,并确定这封信需要寄给谁。
网络中也会出现同样的情况,但 NAT 不允许“Jim”作为永久内部地址,当网络内部的某些东西向互联网请求连接时,就会发生内部到外部的映射。此时,它会有效地创建一个邮箱“jimTmp12345@PublicIP”,该邮箱将一直使用到连接关闭,此时该地址无效,并且任何发往该地址的邮件都会被丢弃到本地垃圾填埋场。
答案3
大多数 NATing 路由器也将配置为充当防火墙,而不仅仅是路由器。
考虑以下网络:
如果没有 NAT,设备必须直接通信:
192.168.1.2
想谈谈192.168.0.2
- 其默认路由是
192.168.1.1
(路由器 A) - 路由器 A 知道
192.168.0.0/24
可以通过198.51.100.2
(路由器 B)到达 - 路由器 B 直接连接
192.168.0.0/24
并传送数据包
- 其默认路由是
192.168.0.2
想要回复192.168.1.2
- 其默认路由是
192.168.0.1
(路由器 B) - 路由器 B 知道
192.168.1.0/24
可以通过198.51.100.1
- 路由器 A 直接连接
192.168.1.0/24
并传送数据包
- 其默认路由是
路由器 A 上有 NAT,但是不是路由器B,情况略有变化:
192.168.1.2
想谈谈192.168.0.2
- 其默认路由是
192.168.1.1
(路由器 A) - 路由器 A 配置为“IP伪装“,因此将源地址重写为
192.51.100.1
(它的外部接口) - 路由器 A 知道
192.168.0.0/24
可以通过198.51.100.2
(路由器 B)到达 - 路由器 B 直接连接
192.168.0.0/24
并传送数据包
- 其默认路由是
192.168.0.1
想要回复198.51.100.1
- 其默认路由是
192.168.0.1
(路由器 B) - 路由器 B 直接连接
198.51.100.0/24
并传送数据包 - 路由器 A 检查其转换表,并将目的地重写为
192.168.1.1
- 路由器 A 直接连接
192.168.1.0/24
并传送数据包
- 其默认路由是
此时,没有什么阻止主机192.51.100.1
用作路由器,并要求其将数据包转发至192.168.1.2
...没有什么。回复可能会被伪装,因此沟通可能会有点“具有挑战性的”,但沟通就是沟通。
将其扩展为“互联网“可能会改变我的”没有什么可以阻止...“声明有点。我没有支持材料,但如果互联网路由器实际上配置为转发针对私有网络地址的流量,我会感到非常惊讶。相反,他们可能会丢弃此类数据包。结果是,即使路由器配置不当,在互联网上尝试此操作也不太可能奏效。
除此之外,由于路由的工作方式(即:如果主机不在本地网络上,则 MAC 地址以路由器为目标,而 IP 地址以最终主机为目标),除非192.51.100.1
A)您连接到它;或 B)现有路由会将您的流量推向它的方向,否则无法将其用作路由器。
为了防止其他主机简单地用作198.51.100.1
简单的路由器,需要防火墙规则。
一种方法是拒绝(或丢弃)路由器 A 的外部接口(198.51.100.1
)上没有明确针对其地址的传入数据包。
这也将解决弱宿主模型Linux 实现的(例如:路由器 B 可以通过其外部的接口,使用分配给内部的界面)。
答案4
[NAT] 将请求路由到 Web 并返回到发出请求的客户端
没错,但需要澄清一下其工作原理:NAT 会使您的私有 IP 地址看起来像公共 IP 地址,通常是在流量离开您的网络之前。因此,网络不会将流量路由回您的私有 IP 地址。网络会将流量返回到您可见的公共 IP 地址。
问题 1:
我认为,如果您详细了解 NAT 的工作原理,这将有助于回答您的一些问题。我见过的最典型的实现是 NAPT(“基于网络地址端口”的转换)。当您从私有地址发送数据时,路由器会获取该私有地址并将该信息添加到路由器内存中的图表/表中。路由器还会选择 TCP 或 UDP 端口号(可能相当随机地选择),并在同一图表/表中跟踪该端口号。然后,路由器使用公共 IP 地址将信息发送到 Internet,并将“源端口”号标识为其选择的号码。(TCP 和 UDP 都使用两个端口号:“源”号和“目标”号。)当目标(例如,侦听 TCP 端口 443 的 Web 服务器)注意到去往 TCP 端口 443 并来自不同 TCP 端口(例如,TCP 端口 53874)的流量时,该服务器可能会通过将流量发送回同一 TCP 端口(例如,TCP 端口 53874)上的原始路由器的公共 IP 地址来回复。然后,路由器在其表/图表中查找信息,并知道将信息发送到哪个私有 IP 地址。
如果您只是随机选择了一个私有 IP 地址,则路由器不应该在其表/图表中有该私有 IP 地址,因此这将不起作用。
我假设在路由器/NAT 中还有另一种方法可以将数据路由到正确的客户端,而不仅仅是 IP,但我不确定这是如何做到的。
不。
我的意思是,嗯,是的。还可能出现其他一些路由,所以我会很快承认这一点。802.1q“VLAN”标记和其他技术可用于某些数据/信令云,并可能影响流量最终通过网络的方式。但是,这些额外的路由方法通常是为了速度、安全性或兼容性而部署的(主要是与非 IP 网络,例如电话公司内部的一些较旧的网络)。您真的不需要认为这些高级专业级网络技术将引入理解基本路由工作原理的新的和必要的部分,因为基本的简单 IP 路由可用于解释您所问的问题。
问题 2:路由器的内部防御
现在,我们假设路由器没有执行 NAPT,所以我们将忽略将公共 TCP/UDP 端口号与私有地址匹配的整个表格/图表。我们假设您坐在客户的 ISP 处,并想恶意地通过路由器将数据包发送到客户的私有 IP 地址。
大多数路由器在执行一些非常基本的防火墙操作时,都会注意到传入流量到达标有“WAN”(代表“广域网”)的端口。为了提供一些保护,路由器会意识到该网络端口上的传入流量应该使用路由器的公共 IP 地址,而肯定不是任何常见的“私有”IP 地址范围。
因此,路由器将通过丢弃数据包来保护网络。
问题 3:ISP 更好地保护我们
任何 ISP 的标准都是不允许任何流量进入或来自私有 IP 地址范围(即在IETF RFC 1918 第 3 部分对于 IPv4,或对于 IPv6,地址以“fd”开头)。
因此,如果您尝试从家中发送流量,通过 ISP,然后通过 ISP 的其余主要互联网骨干网,然后通过受害者的 ISP,然后通过受害者的路由器,最后到达您选择的“私有 IP”地址,那么您应该会失败。这是因为 ISP 通常遵循阻止涉及私有 IP 地址的流量的惯例。(ISP 不这样做会很疯狂。)
在上述情况下,目标受害者的 ISP 不提供保护。当然,目标受害者的 ISP 可能会设置为丢弃数据包,从而保护目标受害者的路由器。但是,您的 ISP 也可能会丢弃数据包,因此数据包甚至不会到达目标受害者的 ISP。
问题 4:ISP 动机
为什么 ISP 会疯狂允许涉及私有 IP 的流量?
请记住,所有组织都可以将私有 IP 地址用于自己的内部网络。这包括 ISP。您的 ISP 可能正在为 ISP 的一些本地设备使用私有地址。您不应该能够注意到/检测到他们是否正在这样做。
ISP 路由流量的方式是依靠“路由表”来确定流量的下一个目的地。这些“路由表”不会指定哪个其他 ISP 愿意接收以私有地址为目的地的流量。ISP 将无处可发送流量,只能发送到自己的一些内部设备。由于涉及私有 IP 地址的大量流量可能是恶意的或其他有问题的(可能涉及来自设置不正确的设备的流量),ISP 当然不希望将此类流量发送到自己的内部设备(并可能给 ISP 带来问题)。因此,ISP 将希望阻止发往私有地址的数据包立即地,然后才允许流量进一步通过 ISP 的网络。
如果 ISP 违反了这些规则,则 ISP 可能会引入恶意流量,这些流量可能没有任何影响(除了使用带宽),但如果有任何影响,那可能对 ISP 不利。
问题 5:到底会发生什么
到目前为止,我已经解释了为什么互联网会封锁流量。但让我们看看到底会发生什么。
如果您坐在电脑前,并决定向私有 IP 地址发送恶意数据包,会发生什么?
如果流量到达您的本地 ISP,则该本地 ISP 将立即阻止该流量,正如前面所解释的那样。
然而,真正可能发生的情况是,流量不会到达您当地的 ISP。相反,您的本地路由器会决定如何处理该流量。
如果您自己没有使用相同的“私有”IP 地址,那么您自己的路由器可能不知道如何处理流量,因此流量将被丢弃。
否则,如果您自己使用相同的“私有 IP”地址,那么您很可能会攻击您所在网络上的设备。如果您是该网络的管理员,那么您将攻击自己的网络!
无论如何,您的路由器不太可能(使用常见的默认配置时)通过互联网传递流量。
审查:
所有这些问题都与互联网为何不允许你对私有 IP 地址发起攻击有关。如果你实际上与目标位于同一个本地网络上,你甚至可能不需要通过路由器,因此这些防御措施都不会妨碍你。但是,如果你位于互联网的其他地方,这些防御措施可能会阻碍你发起此类攻击。
虽然您可以使用您可能能够控制的路由器(至少某些类型的路由器)违反某些标准规则,但其他组织也可能阻止私有 IP 地址,从而有效地防止对远程系统的攻击。