使用 macvtap 网桥的优先路由

使用 macvtap 网桥的优先路由

我有一台带有 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 的度量,以便它位于列表的顶部。

基本上,任何人都可以给我一些关于正在发生的事情的意见吗?我应该阅读什么/做什么来解决这个问题?

谢谢!

相关内容