我有一台带有 2 个以太网卡的机器。一种具有单接口,一种具有 4 个接口。
我打算使用单个接口卡(应该连接到我的 LAN)作为访问(ssh 等)这台机器(主机)的方式。
然后,我打算运行 4 个虚拟机(使用 libvirt),使用 macvtap 在第二张卡上的 4 个端口上各运行一个虚拟机。有些将连接到我的 LAN,有些将连接到我的 DMZ(由旧的 sonicwall 管理)。
例子:
<network>
<name>my-ubuntu-network</name>
<uuid>aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa</uuid>
<forward dev='e1' mode='bridge'>
<interface dev='e1'/>
</forward>
</network>
我已经设置了 2 个虚拟机并且让它们运行良好。我的所有接口都通过 MAC 从 sonicall DHCP 获取正确的 IP。我的两个域中定义的 MAC 也从 sonicwall 获取正确的 IP(两者都位于 DMZ 上)。
然后我创建了第三个虚拟机(同样是为我的 DMZ)。它从 sonicwall 获得了正确的 IP,但是我无法 ping 通它来自主机。
当我连接到它的控制台时,它能ping DMZ 上的其他设备。如果我连接到前 2 位客人中的一位,我能ping 它。如果我尝试从 LAN 上的另一台物理计算机(可以看到 DMZ),我能ping 它。看来我唯一无法 ping 通客人的地方是来自主人。
ip链接显示
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: e4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
link/ether 00:00:00:00:00:05 brd ff:ff:ff:ff:ff:ff
3: e0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
link/ether 00:00:00:00:00:50 brd ff:ff:ff:ff:ff:ff
4: e3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
link/ether 00:00:00:00:00:04 brd ff:ff:ff:ff:ff:ff
5: e2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
link/ether 00:00:00:00:00:07 brd ff:ff:ff:ff:ff:ff
6: e1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
link/ether 00:00:00:00:00:06 brd ff:ff:ff:ff:ff:ff
7: macvtap0@e2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 500
link/ether 00:00:00:00:00:73 brd ff:ff:ff:ff:ff:ff
8: macvtap1@e3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 500
link/ether 00:00:00:00:00:03 brd ff:ff:ff:ff:ff:ff
9: macvtap2@e4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 500
link/ether 00:00:00:00:00:33 brd ff:ff:ff:ff:ff:ff
界面看起来不错(对我来说)。
第一个虚拟机设置为使用 e2。第二个虚拟机设置为使用 e3。第三个虚拟机设置为使用 e4。
如果我在 ping 任何虚拟机之前进行 arp(在主机上),我会得到这个。
arp-a
? (10.0.20.10) at 00:00:00:00:00:a6 [ether] on e4
? (10.0.10.100) at 00:00:00:00:00:cb [ether] on e0
10.0.20.10是DMZ的网关。
10.0.10.100 是我使用 SSH 连接到主机的笔记本电脑的 IP。
路线
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 10.0.20.10 0.0.0.0 UG 202 0 0 e4
default 10.0.10.10 0.0.0.0 UG 203 0 0 e0
default 10.0.20.10 0.0.0.0 UG 204 0 0 e3
default 10.0.20.10 0.0.0.0 UG 205 0 0 e2
default 10.0.10.10 0.0.0.0 UG 206 0 0 e1
10.0.10.0 0.0.0.0 255.255.255.0 U 203 0 0 e0
10.0.10.0 0.0.0.0 255.255.255.0 U 206 0 0 e1
10.0.20.0 0.0.0.0 255.255.255.0 U 202 0 0 e4
10.0.20.0 0.0.0.0 255.255.255.0 U 204 0 0 e3
10.0.20.0 0.0.0.0 255.255.255.0 U 205 0 0 e2
这证明该路线正在使用 e4 而不是 e0 (如我所愿)。
如果我从主机 ping 第一个虚拟机 (10.0.20.71),我会收到响应。
然后我琶音。
arp-a
? (10.0.20.71) at 00:00:00:00:00:73 [ether] on e4
? (10.0.20.10) at 00:00:00:00:00:a6 [ether] on e4
? (10.0.10.100) at 00:00:00:00:00:cb [ether] on e0
值得期待的。
如果我随后 ping VM 3 (10.0.20.72)(我最新的有问题的虚拟机,网络定义为 e4),则会失败。当我运行 arp 时,我得到:
arp-a
? (10.0.20.71) at 00:00:00:00:00:73 [ether] on e4
? (10.0.20.10) at 00:00:00:00:00:a6 [ether] on e4
? (10.0.10.100) at 00:00:00:00:00:cb [ether] on e0
? (10.0.20.72) at <incomplete> on e4
正如您所看到的,它显示不完整。
我在主机上运行 arch linux。
谁能建议我需要做什么来解决这个问题?任何人都可以确认我已正确识别问题(路线“优先”)。
我想我需要更改 e0 的度量,以便它位于列表的顶部。
基本上,任何人都可以给我一些关于正在发生的事情的意见吗?我应该阅读什么/做什么来解决这个问题?
谢谢!