我的问题基本上是,当尝试在 vlan 接口上使用网桥时,我的 VM 没有网络,而且我不确定我遗漏了什么。
我已经尝试了例子。以及许多其他指南。这是我当前的网络计划.yaml
(尽管我尝试过为 vlan 或网桥定义 、 和 的各种组合,但没有成功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
在我启动虚拟机之前,它没有关联)
和
~$ virsh net-list --all
Name State Autostart Persistent
--------------------------------------------
br0 active yes yes
default active yes yes
ip a
显示两者br0
并vlan15
链接到的 MAC eno1
。在虚拟机 () 的 .xml 文件中/etc/libvirt/qemu/hassos.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 之前我执行了,以防万一。但每次我执行时我都会重新启动 VM sudo netplan apply
。
我能得到的最接近的结果(其实不是很接近,只是发生了一些事情)是,当我addresses: 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 分配。
答案1
我想我(几乎)重复了你的情况。
我的服务器的两个网络接口都连接到路由器。我的工作站也连接到同一个路由器。
配置:
服务器(Ubuntu Server 20.04 LTS):
- 接口:192.168.0.240
- 接口:192.168.0.241
VLAN 1 上的桥 (br0)。接口:192.168.100.1
服务器上的 Netplan 文件:
network:
version: 2
renderer: networkd
ethernets:
enp3s0f0:
addresses: [ 192.168.0.240/24 ]
gateway4: 192.168.0.1
nameservers:
addresses: [ 8.8.8.8,8.8.4.4 ]
enx00e04c534458:
addresses: [192.168.0.241/24]
gateway4: 192.168.0.1
nameservers:
addresses: [8.8.8.8,4.4.4.4]
bridges:
br0:
addresses: [ 192.168.100.1/24 ]
interfaces: [ vlan100 ]
vlans:
vlan100:
accept-ra: no
id: 100
link: enp3s0f0
我不确定这是否真的有必要,但为了让服务器在其接口之间进行路由(记住我之前连接到两个不同的网络),我进行了以下配置。
在 /etc/sysctl.conf 中添加以下行
net.ipv4.ip_forward = 1
跑步:
sudo sysctl -p
虚拟机(Ubuntu Server 20.04 LTS):
使用 virt-install 安装虚拟机时,无法自动获取 IP 地址,因此我手动输入:
子网:192.168.100.0/24 IP:192.168.100.101 网关:192.168.100.1
VM 无法连接到互联网,但安装成功。
生成的虚拟机的netplan文件:
network:
ethernets:
enp1s0:
addresses:
- 192.168.100.101/24
gateway4: 192.168.100.1
nameservers:
addresses:
- 8.8.8.8
version: 2
安装后,我能够访问服务器上的虚拟机,但无法从工作站访问它。这看起来像是路由问题。所以我添加了一条路由。
工作站(Ubuntu 20.04 LTS):
具有 2 个 IP 的单一接口。192.168.0.242 和 192.168.0.243
工作站上的 Netplan 文件:
network:
version: 2
renderer: networkd
ethernets:
enp3s0:
dhcp4: no
addresses: [192.168.0.242/24,192.168.0.243/24]
gateway4: 192.168.0.1
nameservers:
addresses: [46.197.15.60,178.233.140.110,176.240.150.250]
routes:
- to: 192.168.100.0/24
via: 192.168.0.240
最后三行通过服务器的接口添加了到 192.168.100.0 网络的路由。
完成所有这些配置后,我就可以从我的工作站连接到虚拟机了。如果我需要从网络中的任何其他计算机连接到虚拟机,我也需要向它们添加该路由信息。
旧答案,稍后删除
我没有 2 张以太网卡,因此无法测试,但我相信这种方法可能会成功。我相信您可以在不使用 VLAN 的情况下做到这一点。至少这是值得尝试的。
将您的 netplan 文件设置为将一个 nic 配置为标准,将另一个 nic 配置为网桥(为确保万无一失,不使用 DHCP),您可以随意更改 IP 和名称服务器:
network:
version: 2
ethernets:
eno1:
dhcp4: no
eno2:
dhcp4: no
addresses: [ 192.168.0.100/24 ]
gateway4: 192.168.0.1
nameservers:
addresses: [ 8.8.8.8,8.8.4.4 ]
bridges:
br0:
dhcp4: no
interfaces: [ en01 ]
addresses: [ 192.168.0.101/24 ]
gateway4: 192.168.0.1
mtu: 1500
nameservers:
addresses: [ 8.8.8.8,8.8.4.4 ]
parameters:
forward-delay: 4
stp: true
禁用 netfilter,将桥接器添加到 KVM(我相信你已经这样做了)
正如评论中所说,具有 vlan 的工作 netplan 配置:
network:
ethernets:
enp3s0f0:
addresses: [192.168.0.240/24]
gateway4: 192.168.0.1
nameservers:
addresses: [8.8.8.8,8.8.4.4]
dhcp4: false
dhcp6: false
enx00e04c534458:
addresses: [10.1.1.1/24]
gateway4: 10.1.1.1
nameservers:
addresses: [8.8.8.8,4.4.4.4]
vlans:
vlan10:
id: 10
link: enp3s0f0
bridges:
br0:
interfaces: [ vlan10 ]
addresses: [192.168.1.240/24]
version: 2
renderer: networkd