路由添加对 NAT 接口无效

路由添加对 NAT 接口无效

我有网络:

计算机 A (MacOS) (192.168.0.10) <-(Wi-Fi)--> 计算机 B (Ubuntu) (192.168.0.15)。

计算机 A 有虚拟机(Kali),NAT接口连接(172.16.219.128)。

我想要 ping172.16.219.128(A 的 VM)来自192.168.0.15(B)。

我添加了路线192.168.0.15(二):

# route add -net 172.16.219.0 netmask 255.255.255.0 gw 192.168.0.10
# route
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.0.1     0.0.0.0         UG    600    0        0 wlp7s0
link-local      *               255.255.0.0     U     1000   0        0 wlp7s0
172.16.219.0    192.168.0.10    255.255.255.0   UG    0      0        0 wlp7s0
192.168.0.0     *               255.255.255.0   U     600    0        0 wlp7s0

# traceroute 172.16.219.128
traceroute to 172.16.219.128 (172.16.219.128), 30 hops max, 60 byte packets
 1  * * *
 2  * * *
 3  * * *
 4  * * *
 5  * * *
 6  * * *
 7  * * *
 8  * * *
 9  * * *
10  * * *
11  * *^C

当然ping也收不到包,我觉得B电脑甚至通过网关发包...为什么?

如果我做 ”ping 172.16.219.128“从计算机 A 来看,它运行得非常好。

PS:当我将VM接口更改为桥接适配器然后计算机 B 就可以 ping 通它(当然,使用新的 IP192.168.0.20) 而不添加路线。

答案1

运行 OSX 的 A 是 VM 和 B 之间的路由器,它为 VM 执行 NAT:这意味着 VM 的 IP 永远不应该在 A 和 B 之间的有线(无线网络)上看到。因此,在这种设置下,B 根本不应该知道 172.16.219.128。

任何一个:

  • 在 A 上添加端口转发 nat 规则(使用 MacOS 特定的 NAT 命令,如果 A 运行的是 Linux,则主要是使用 iptables 的 DNAT 规则),以便将 B 到 A 的所有或部分连接端口转发到 VM,并且忘记在 B 上使用 VM 的 IP。B 将简单地连接到 A(或甚至连接到为 VM 预留的其他 IP,这完全取决于 A 的 NAT 设置)。以下是讨论 MacOS 上的端口转发的页面:https://www.cyberciti.biz/faq/howto-configure-macosx-as-nat-router/。我没有测试它,因为我没有任何 MacOS。似乎上一个版本也切换了工具(不再有 natd):https://apple.stackexchange.com/questions/192089/how-can-i-setup-my-mac-os-x-yosemite-as-an-internet-gateway

  • 或者将虚拟机设置更改为根本不使用 NAT,而是使用基本路由:路由器 A 知道到虚拟机和 B 的路由,并且您明确告诉 B 到虚拟机的路由。因此,如果只涉及这三个系统(而不是整个互联网),则 B 无需 NAT 即可访问虚拟机。我不知道 A 上的 Wifi 设置(而不是真正的以太网)是否会出现问题。

实际上,两者结合是最好的:一些规则(仍然在 A 上)为 NAT 添加例外,仅在 VM 和 B 之间不使用 NAT,因为我认为 VM 仍然需要互联网。你必须弄清楚这些。我想说,使用上面 apple.stackexchange 中的示例,你将在名为“nat-rules”的文件中将“to any”替换为“to ! 192.168.0.15”

相关内容