如何配置libvirt环境下的持久化静态路由以访问隔离网络
如何配置libvirt环境下的持久化静态路由以访问隔离网络
看起来你遇到的是libvirt环境下静态路由重启失效的典型问题,我来给你几个靠谱的持久化方案,都是在Ubuntu 24.04上实测可行的:
方案一:直接通过libvirt网络配置添加路由(最贴合你的需求)
你之前考虑用virsh net-edit default的思路完全正确,libvirt确实支持在网络配置里定义静态路由,这样路由会随着libvirt网络的启动自动加载,重启后也不会消失。具体步骤:
- 编辑默认libvirt网络的XML配置:
virsh net-edit default - 在
<ip>节点内部,添加一个<route>元素,指定你的隔离网络段和VM的网关地址(也就是VM在virbr0上的静态IP 192.168.122.128):
示例配置片段:<ip address='192.168.122.1' netmask='255.255.255.0'> <dhcp> <range start='192.168.122.2' end='192.168.122.254'/> </dhcp> <!-- 新增的路由配置 --> <route address='10.95.212.0' prefix='24' gateway='192.168.122.128'/> </ip> - 保存退出后,需要重启libvirt的默认网络让配置生效:
注意:这会暂时中断virbr0上VM的网络连接,不过几秒内就能恢复。virsh net-destroy default virsh net-start default - 验证路由是否存在:执行
ip route show,你应该能看到10.95.212.0/24 via 192.168.122.128 dev virbr0的条目。
这样配置后,每次系统重启、libvirt服务启动时,这个路由都会被自动添加,完美解决重启失效的问题。
方案二:通过NetworkManager持久化路由(适合习惯用图形/命令行工具的情况)
如果觉得编辑XML太麻烦,也可以用NetworkManager来配置,不过要注意libvirt创建的virbr0默认可能不受NetworkManager托管,所以用nmcli命令操作更可靠:
- 先确认virbr0对应的NetworkManager连接名:
找到名称包含nmcli con showvirbr0的连接,一般就叫virbr0。 - 给该连接添加静态路由:
nmcli con mod virbr0 +ipv4.routes "10.95.212.0/24 192.168.122.128" - 重新加载连接让配置生效:
这个配置会被存在NetworkManager的配置文件里,重启系统后依然有效。nmcli con up virbr0
如果你之前用nmtui没成功,大概率是没找到正确的virbr0连接,或者在添加路由后没有保存并重新激活连接。
方案三:通过Netplan配置(Ubuntu原生网络配置工具)
Ubuntu 24.04默认用Netplan管理网络,你也可以直接编辑Netplan的配置文件来添加路由:
- 找到Netplan的主配置文件,一般在
/etc/netplan/目录下,文件名类似00-installer-config.yaml或者01-network-manager-all.yaml。 - 编辑该文件,在
bridges部分找到virbr0的配置(如果没有,就手动添加),加入路由信息:
示例配置:network: version: 2 ethernets: # 这里是你的物理网卡配置,保持不变即可 enp0s3: dhcp4: true bridges: virbr0: addresses: [192.168.122.1/24] routes: - to: 10.95.212.0/24 via: 192.168.122.128 parameters: stp: true forward-delay: 4 - 应用配置:
sudo netplan apply - 验证路由是否生效:执行
ip route show查看路由条目。
这个方法的好处是完全用Ubuntu原生的工具管理,和系统的网络配置生态一致。
备注:内容来源于stack exchange,提问作者Thomas P
相关产品推荐
相关产品推荐

