我有网络:
计算机 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”