我的问题基本上是,当尝试在 vlan 接口上使用网桥时,我的虚拟机没有网络,我不确定我错过了什么。
我已经尝试了示例中详述的设置。以及许多其他指南。这是我目前的网络计划.yaml
(尽管我尝试了各种定义addresses
、、gateway4
和nameservers
的组合,但没有成功):
network:
version: 2
renderer: networkd
ethernets:
eno1:
dhcp4: true
eno2:
dhcp4: true
bridges:
br0:
dhcp4: true
interfaces: [ vlan15 ]
parameters:
forward-delay: 0
stp: true
vlans:
vlan15:
id: 15
link: eno1
我想保持eno2
不变,所以我总是有一个后备(没有连接显示器)。在我的 DHCP 服务器中,我设置了 eno1 = 192.168.0.100 和 eno2 = 192.168.0.101。
我在路由器中的 LAN 设置为 192.180.0.0/22(我试图通过 192.168.1.x 范围内的虚拟机,但不是必需的)。
我已经建立了网桥,并激活了它:
~$ brctl show
bridge name bridge id STP enabled interfaces
br0 8000.00215ec64304 yes vlan15
vnet0
(我几乎可以肯定在vnet0
我启动 VM 之前没有关联)
和
~$ virsh net-list --all
Name State Autostart Persistent
--------------------------------------------
br0 active yes yes
default active yes yes
ip a
显示两者br0
并vlan15
链接到 的 MAC eno1
。在 VM ( /etc/libvirt/qemu/hassos.xml
) 的 .xml 文件中,它显示在“接口”下:
<interface type='bridge'>
<mac address='52:54:00:26:69:40'/>
<source bridge='br0'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
</interface>
我最初设置它br0
直接链接到eno1
,所以我virt-install
在开始创建 vlan 之前做了,以防万一。但是每当我这样做时,我都会重新启动虚拟机sudo netplan apply
。
我能得到的最接近(不是很接近,只是发生了一些事情)是当我在 上定义 aaddresses: 192.168.1.115
时br0
,我可以使用这个地址和相应的端口访问服务器上的某些东西。只是不是虚拟机(而是直接在服务器上运行在 docker 中的“克隆”)。在那种情况下,它似乎br0
被用于服务器上的任何东西?
我正在使用 Ubuntu Server LTS 20.04。
万一这很重要,我(根据其他建议)禁用了网桥的 netfilter,如此处所述。
编辑:我通过创建一个 br0.xml 文件为 libvirt 设置了桥:
<network>
<name>br0</name>
<forward mode="bridge"/>
<bridge name="br0"/>
</network>
并添加:
virsh net-define br0.xml
virsh net-start br0
virst net-autostart br0
我还尝试过更复杂的 .xml 文件,例如
<network>
<name>br1</name>
<forward mode='nat'>
<nat>
<port start='1024' end='65535'/>
</nat>
</forward>
<bridge name='br1' stp='on' delay='0'/>
<ip address='192.168.1.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.1.101' end='192.168.1.150'/>
</dhcp>
</ip>
</network>
并使用 192.168。1个.X地址,我可以从libvirt中分配IP,但我无法从外部访问。如果我改为使用 192.168。0 .X 地址,尝试启动时出错:
error: Failed to start network br1
error: internal error: Network is already in use by interface eno2
这与设置 192.168 无关。0 .X IP 在 DHCP 池内或外,与设置 192.168 无关。1 .X IP 作为 DHCP 分配与否。
我想我(几乎)复制了你的情况。
我的服务器的两个网络接口都连接到我的路由器。我的工作站连接到同一个路由器。
配置:
服务器(Ubuntu 服务器 20.04 LTS):
位于 1 上的 VLAN 上的网桥 (br0)。接口:192.168.100.1
服务器上的 Netplan 文件:
我不确定是否真的有必要,但为了让服务器在其接口之间路由(记得我之前连接到 2 个不同的网络),我进行了以下配置。
将以下行添加到 /etc/sysctl.conf
跑:
虚拟机(Ubuntu 服务器 20.04 LTS):
使用 virt-install 安装虚拟机时,无法自动获取 IP 地址,所以我手动输入:
子网:192.168.100.0/24 ip:192.168.100.101 网关:192.168.100.1
VM 无法连接到 Internet,但已成功安装。
生成的 VM 的 netplan 文件:
安装后,我可以访问服务器上的虚拟机,但我无法从我的工作站访问它。它看起来像一个路由问题。所以我添加了一条路线。
工作站(Ubuntu 20.04 LTS):
具有 2 个 IP 的单接口。192.168.0.242 和 192.168.0.243
工作站上的 Netplan 文件:
最后 3 行通过服务器接口添加了到 192.168.100.0 网络的路由。
完成所有这些配置后,我就可以从我的工作站连接到 VM。如果我需要从网络中的任何其他计算机连接到虚拟机,我也需要向它们添加路由信息。
旧答案,稍后删除
我没有 2 个以太网卡,所以我无法对其进行测试,但我相信这种方法可能会运行。我相信您可以在不使用 VLAN 的情况下做到这一点。至少这是可以尝试的。
将您的 netplan 文件设置为一个配置为标准的网卡,另一个配置为网桥(为了确保没有 DHCP),随意更改 IP 和名称服务器:
禁用 netfilter,将桥添加到 KVM(我相信你已经这样做了)
正如评论中所说,一个带有 vlan 的工作 netplan 配置: