我的 kali-linux 虚拟机上的互联网无法正常工作

我的 kali-linux 虚拟机上的互联网无法正常工作

我正在使用 Kali-linux 作为操作系统在 Oracle VM 上设置一些虚拟机。当我创建第一个 NAT 网络时,互联网通常可以正常工作,但一旦我执行了诸如更改 MAC 地址之类的操作,互联网连接就会停止工作,即使机器说wired connectionconnected.

如果我希望连接正常工作,我必须每次创建一个新的 NAT 网络,但一段时间后它将停止工作,我相信这与我更改我的 mac 地址有关,我的操作如下:

ifconfig eth0 down
ifconfig eth0 hw ether 'new mac address'
ifconfig eth0 up

有谁知道这个过程中可能会出现什么问题?

这些是我的当前结果ifconfig

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.2.4  netmask 255.255.255.0  broadcast 10.0.2.255
        inet6 fe80::a00:27ff:fe82:e693  prefixlen 64  scopeid 0x20<link>
        inet6 fd17:625c:f037:2:a00:27ff:fe82:e693  prefixlen 64  scopeid 0x0<global>
        inet6 fd17:625c:f037:2:8c24:fafd:c5e0:725c  prefixlen 64  scopeid 0x0<global>
        ether 08:00:27:82:e6:93  txqueuelen 1000  (Ethernet)
        RX packets 44  bytes 11250 (10.9 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 423  bytes 38119 (37.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 24  bytes 1356 (1.3 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 24  bytes 1356 (1.3 KiB)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

答案1

您在这里观察到的是当您从 TCP/IP 堆栈下拉出地毯时发生的现象:D

请注意,这里实际上有两个现象......

1. 缺少默认网关的陷阱

这个很简单:

跑步ifconfig eth0 down 删除您的默认网关配置来自虚拟机的路由表;因为与该网关关联的网络已被删除。

跑步ifconfig eth0 up意志不是恢复您的默认网关;它将仅保留旧的 IP 地址和子网掩码。如果您尝试运行route -n,您将不会G在“标志”列下看到任何带有 的行。

一旦发生这种情况,虚拟机中尝试访问 Internet 的任何程序都将收到“主机未找到“, 或者 ”网络不可达“ 错误。

您必须route add default gw GATEWAYIP手动运行才能恢复默认网关。

  • 不要忘记替换GATEWAYIP为您的实际默认网关地址。在执行此肮脏行为之前,请检查您的/etc/network/interfaces或运行route -n命令(并在“标志”列下查找该行的“网关”列);G但无论如何它可能10.0.2.2在 VirtualBox 下。

但即使恢复默认网关后,你会发现你的虚拟机仍然无法连接互联网;或者更准确地说,互联网无法回复它。那是因为...

2. 延迟 ARP 缓存的影响

您知道以太网上的 TCP/IP 使用ARP找到与IP匹配的MAC地址才能真正通信,对吗?

据我所知,这是 VirtualBox 实例内部发生的事情的时间线:

  1. 当你的虚拟机刚刚启动后,它使用原始的MAC地址来请求互联网上的东西。
  2. VirtualBox 的 NAT 引擎还需要虚拟机的 MAC 地址1才能将 Internet 上的数据传回虚拟机。
  3. VirtualBox 的 NAT 引擎最初并不知道您的虚拟机有哪个 MAC 地址;所以它发出 ARP 请求,你的机器用它的原来的MAC地址。
  4. VirtualBox 的 NAT 引擎将虚拟机的 MAC 地址(和关联的 IP 地址)存储在其 ARP 缓存中;这是很正常的事情。
  5. 您更改了虚拟机的 MAC 地址对于刚化妆的人来说,不改变其IP地址
  6. 当您再次从虚拟机发出 Internet 请求时,它会使用新的 MAC 地址来请求。1
  7. VirtualBox 的 NAT 引擎收到您的请求(但只关心你的IP,而不关心MAC)并正常转发到互联网。
  8. 当互联网响应时,VirtualBox 的 NAT 引擎需要您的虚拟机的 MAC 地址来将此响应传递回您的虚拟机。
  9. VirtualBox 的 NAT 引擎在其自己的 ARP 缓存中查找虚拟机的 IP 地址,并发现MAC地址未过期的记录,因此不会再次发出ARP请求。 (尽管,VirtualBox 未知- 发现的 MAC 地址是旧的、过时的地址)。
  10. VirtualBox 的 NAT 引擎将 Internet 响应发送到您的虚拟机老的MAC 地址,而不是新的地址
  11. 您的虚拟机(正在使用新的 MAC 地址)没有收到响应,并且超时;因此 ”我的 kali-linux 虚拟机上的互联网无法正常工作”。

即使默认网关配置得到修复后,虚拟机中的 Internet 访问仍将继续中断,直到所述 ARP 缓存条目过期,或者您更改了虚拟机的 IP 地址。

底线

我不知道VirtualBox的NAT引擎在内部缓存ARP响应多久;所以我建议解决方法更改IP地址更改虚拟机的 MAC 地址后,防止二次效应。另外,在更改 IP 地址并启动接口后,确保你也重新添加默认网关以防止第一个陷阱。 (用于route -n | grep UG验证)


1有人可能认为 VirtualBox 的 NAT 引擎应该从每个请求数据包本身中获知虚拟机的 MAC 地址,这不是做事的方式;因为它允许大量随意的 IP/MAC 地址欺骗。因此,仅使用/缓存显式 ARP 请求请求的 MAC 地址进行路由;不是从随机数据包中学到的。

相关内容