![如果 Hyper-V Ubuntu 还具有内部网络适配器,则无法通过外部网络适配器连接到互联网](https://linux22.com/image/1489523/%E5%A6%82%E6%9E%9C%20Hyper-V%20Ubuntu%20%E8%BF%98%E5%85%B7%E6%9C%89%E5%86%85%E9%83%A8%E7%BD%91%E7%BB%9C%E9%80%82%E9%85%8D%E5%99%A8%EF%BC%8C%E5%88%99%E6%97%A0%E6%B3%95%E9%80%9A%E8%BF%87%E5%A4%96%E9%83%A8%E7%BD%91%E7%BB%9C%E9%80%82%E9%85%8D%E5%99%A8%E8%BF%9E%E6%8E%A5%E5%88%B0%E4%BA%92%E8%81%94%E7%BD%91.png)
我有一台作为 Hyper-V VM 运行的 Ubuntu 14.04 Server。它有一个外部虚拟适配器和一个与之连接的内部虚拟适配器。
外部适配器 eth0 从 192.168.1.x 获取动态分配的 IP,而其内部适配器 eth1 获取分配的静态 IP 192.168.1.109。
eth0 Link encap:Ethernet HWaddr 00:15:5d:01:17:30
inet addr:192.168.1.254 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::215:5dff:fe01:1730/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:31 errors:0 dropped:0 overruns:0 frame:0
TX packets:10 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:11926 (11.9 KB) TX bytes:1332 (1.3 KB)
eth1 Link encap:Ethernet HWaddr 00:15:5d:01:17:29
inet addr:192.168.1.109 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::215:5dff:fe01:1729/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:14 errors:0 dropped:0 overruns:0 frame:0
TX packets:47 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1359 (1.3 KB) TX bytes:2286 (2.8 KB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:33 errors:0 dropped:0 overruns:0 frame:0
TX packets:33 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2888 (2.8 KB) TX bytes:2888 (2.8 KB)
因为这是一台笔记本电脑,所以我经常把它带到没有路由器可以连接的地方。没有路由器,外部适配器就无法工作。内部适配器的目的是让我可以在主机文件中将一致的 IP(192.168.1.109)映射到 Ubuntu VM 上存在的域(ubuntu.local)。这样,无论我是否有路由器可以连接,我都可以通过相同的 IP 连接到 ubuntu.local。
内部适配器解决方案效果很好。问题(我认为)是,当 Ubuntu VM 连接了内部适配器时,它会尝试使用它来连接互联网,而不是外部适配器。附注:我只真的需要互联网访问来更新 ubuntu 和添加软件包。
sudo apt-get update 失败,我无法 ping google.com 或任何其他网站:
ping google.com
ping: unknown host google.com
我尝试过将外部虚拟适配器连接与内部虚拟适配器共享,但没有成功。我尝试在 /etc/network/interfaces 中将内部适配器更改为 eth0,将外部适配器更改为 eth1,但没有成功。我尝试了一个错误的解决方案,涉及 192.168.2.1 上的 Hyper-V 虚拟化路由器(基于 DD-WRT),该路由器为 Ubuntu VM 分配了静态 IP 192.168.2.109。所有方法都有效,但仍然没有解决这个特定问题 - 无法 ping 任何地址并且无法更新。
我认为需要发生的是,我需要切换 Ubuntu VM 使用其网络适配器的优先级,但我似乎无法弄清楚如何做到这一点。
有人对这个问题有任何见解吗?我至少想知道我在调试这个问题时是否朝着正确的方向前进。
答案1
这应该可以在 Windows 上运行,但不知道 Ubuntu 是否适用。
只需从内部网卡中删除默认网关 IP 地址,这将使操作系统知道该网卡不可路由。
答案2
问题是你为外部网络和内部网络使用了同一个子网。然后机器可以正确地假设这两个适配器实际上连接到相同网络,并使用其中一个来到达网关。
由于事实并非如此,并且网络不同,因此它们必须使用不同子网中的 IP 地址。
解决方案是对一个或两个虚拟网络重新编号。