qemu虚拟机上网

本文围绕CentOS环境下宿主机桥接配置展开,介绍了一次性和永久性两种配置方式。一次性配置可通过脚本实现,系统重启后桥接消失;永久性配置需修改网络脚本并重启网络。还提及bond0配置桥接的方法,最后针对添加桥出现的错误给出解决办法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

配置宿主机桥接

centos环境,管理口enp6s0f0

一、一次性的

可以写一个脚本add_brige.sh,运行脚本前试下brctl addbr br0是否可行!否则可能出现断网现象。

#!/bin/bash
brctl addbr br0
brctl addif br0 enp6s0f0
sleep 1
ifconfig enp6s0f0 0.0.0.0
ifconfig enp6s0f0 up
sleep 1
ifconfig br0 10.66.244.215/20
sleep 1
ip route add default via 10.66.250.254

这种方式不用重启网络,也不断网。但是一次性的系统重启后br0会消失

二、永久性的

cd /etc/sysconfig/network-scripts

cp ifcfg-enp6s0f0 ifcfg-br0

  vi ifcfg-enp6s0f0

TYPE=Ethernet
BOOTPROTO=none
#BROADCAST=10.65.255.255
#IPADDR=10.65.155.33
#NETMASK=255.255.0.0
#NETWORK=10.65.255.254
#DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp6s0f0
UUID=737a82c1-6c01-46c5-9297-68f2fcfd8a62
DEVICE=enp6s0f0
ONBOOT=yes
BRIDGE=br0

   vi ifcfg-br0

DEVICE=br0
TYPE=Bridge
BOOTPROTO=static
BROADCAST=10.65.255.255
IPADDR=10.65.155.33
NETMASK=255.255.0.0
GATEWAY=10.65.255.254
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
DNS1=114.114.114.114
NAME=br0
UUID=737a82c1-6c01-46c5-9297-68f2fcfd8a62
ONBOOT=yes

重启网络

systemctl restart network

三、bond0配置桥接br0

添加br0

见上一步添加的ifcfg-br0,IP改成ifcfg-bond0里面的。

vi ifcfg-bond0 去掉IP添加BRIDGE=br0

DEVICE=bond0
BONDING_OPTS=mode=active-backup
TYPE=Bond
BONDING_MASTER=yes
BOOTPROTO=none
#IPADDR=10.65.185.17
#PREFIX=16
#GATEWAY=10.65.255.254
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=bond0
UUID=60b47acb-57b9-4634-8b2a-eeca57e107f8
ONBOOT=yes
BRIDGE=br0

重启网络

systemctl restart network

问题

添加桥出现错误

[root@centos7 ~]# brctl addbr br0
add bridge failed: Package not installed

没有加载bridge.ko

modprobe bridge.ko(modprobe可以添加依赖的ko)

[root@centos7 peixiaoxia]# ip tuntap add peixiaoxia mode tap
open: No such device

加载tun

modprobe tun

 

 

 

 

<think>我们正在讨论如何使用NetworkManager和nmcli为KVM/QEMU虚拟机配置桥接网络,并且特别关注通过无线WiFi连接创建网桥。 桥接网络允许虚拟机直接连接到外部网络,就像它们是物理机一样。但是,无线网卡(WiFi)通常不支持桥接模式,因为无线标准(如802.11)的限制。 然而,我们可以尝试使用一些变通方法,比如使用NAT或者使用支持无线桥接的特殊驱动(如mac80211_hwsim),但这些并不常见。在Linux中,无线接口通常不能直接添加到网桥中。 但是,有一种替代方案:我们可以创建一个桥接网络,然后通过一个支持WDS(无线分布式系统)的无线接入点(AP)来扩展网络。但这需要无线AP的支持。 然而,用户的问题明确要求通过无线WiFi创建网桥,因此我们将尝试提供一种在无线接口上创建桥接的方法。注意:这种方法可能不稳定或不被所有无线驱动支持。 步骤概述: 1. 确保系统安装了必要的软件包(NetworkManager, nmcli, bridge-utils等)。 2. 创建一个桥接接口(例如br0)。 3. 将无线接口(如wlp3s0)添加到桥接中。注意:无线接口不能像有线接口那样直接桥接,但我们可以尝试将其以“连接”的方式加入。 4. 配置桥接接口的IP地址(如果使用DHCP则自动获取,或者静态配置)。 5. 配置QEMU/KVM使用这个桥接接口。 但是,由于无线接口的特性,我们通常不能将无线接口作为桥接端口。因此,更常见的做法是使用NAT(用户模式网络)或者使用一个支持AP模式的无线网卡,然后通过路由方式。 然而,我们也可以尝试使用“macvtap”设备,但macvtap并不等同于桥接。 考虑到这些限制,我们提供一种替代方案:创建一个桥接网络,但桥接到一个虚拟以太网接口(veth pair),然后通过NAT将虚拟以太网接口连接到无线接口。但这并不是真正的桥接。 但是,根据参考引用[1]中提到的,qemu支持的后端网络技术中,我们可以使用tap设备,然后通过一个桥接设备(br0)将tap设备和无线接口连接起来。然而,无线接口不能直接加入网桥,所以我们需要一个中间设备,比如使用一个以太网接口(有线)作为桥接,然后通过路由将无线网络和桥接网络连接起来?这显然不满足要求。 因此,我们可能需要使用一种叫做“Proxy ARP”或者“ebtables”的方法,但这些方法复杂且不稳定。 鉴于无线桥接的复杂性,我们建议如果可能,使用有线连接进行桥接。如果必须使用无线,则考虑使用NAT模式(user mode)或者使用支持WDS的无线网卡和路由器。 但是,用户明确要求通过无线WiFi创建网桥,因此我们将尝试使用nmcli创建一个桥接,并将无线接口加入桥接。注意:这可能在很多无线驱动上失败。 步骤: 1. 创建桥接接口: sudo nmcli con add type bridge ifname br0 con-name bridge-br0 2. 配置桥接的IP地址(如果使用DHCP): sudo nmcli con modify bridge-br0 ipv4.method auto 3. 将无线接口(假设为wlp3s0)加入桥接: sudo nmcli con add type bridge-slave ifname wlp3s0 master br0 4. 激活连接: sudo nmcli con up bridge-br0 5. 检查桥接状态: sudo nmcli con show brctl show 但是,由于无线接口的特性,加入桥接后可能会导致无线连接中断。因此,我们需要确保无线接口已经连接到无线网络(即已经有一个活动的无线连接),然后我们将这个无线连接从原来的接口转移到桥接上?实际上,我们需要先断开无线连接,然后将无线接口作为桥接的从属设备,然后重新激活无线连接(通过桥接)?这通常是不支持的。 另一种方法是:我们创建一个新的桥接,然后将无线接口加入桥接,然后让桥接接口来连接无线网络(即让桥接接口作为无线客户端)。但是,这需要无线网卡支持在桥接模式下运行,并且无线接入点允许桥接模式。 由于无线接口的限制,我们可能无法成功。因此,我们可能需要使用一个支持4地址模式(即WDS)的无线网卡和无线接入点。在4地址模式下,无线接口可以同时关联多个MAC地址,从而支持桥接。但是,这需要驱动和AP的支持。 如果无线驱动支持,我们可以尝试以下步骤: 1. 将无线接口设置为4地址模式(如果支持): sudo iw dev wlp3s0 set 4addr on 2. 然后按照上述步骤创建桥接并添加无线接口。 但是,请注意,开启4地址模式后,无线接口将无法直接连接到普通的AP,因为AP必须也支持4地址模式(即WDS)。所以,这通常只适用于点对点桥接。 因此,在大多数情况下,我们不推荐在无线接口上配置桥接。如果必须使用无线,我们建议使用NAT模式(user mode)或者使用路由方式(例如,创建一个tap设备,然后通过NAT和路由将tap设备的数据转发到无线接口)。 然而,用户要求的是桥接网络,所以我们提供一种在无线接口上创建桥接的方法(尽管可能失败): 步骤详细说明: 1. 确保无线接口已连接并正常工作。 2. 创建桥接: nmcli connection add type bridge con-name br0 ifname br0 3. 将无线接口加入桥接(作为从属设备): nmcli connection add type bridge-slave con-name br0-slave-wifi ifname wlp3s0 master br0 4. 配置桥接的IP地址获取方式(通常和无线接口之前一样,比如DHCP): nmcli connection modify br0 ipv4.method auto 5. 停用原来的无线连接(假设原来的无线连接叫做“MyWiFi”): nmcli connection down "MyWiFi" 6. 启动桥接和从属连接: nmcli connection up br0 nmcli connection up br0-slave-wifi 7. 检查桥接是否获取到了IP地址(类似于原来无线接口的IP地址?) 但是,这样操作后,桥接接口br0应该会尝试通过无线接口wlp3s0来获取IP地址。然而,由于无线接口已经不再使用原来的连接(MyWiFi),而是作为桥接的从属,所以我们需要让桥接接口来连接无线网络?这实际上是不可行的,因为连接无线网络需要认证和关联,而桥接接口本身并不处理这些。 因此,我们需要在桥接上配置一个无线连接?这通常是不可能的。所以,我们可能需要将无线接口的配置迁移到桥接上,即让桥接接口来作为无线客户端。但是,NetworkManager不支持将无线连接配置在桥接接口上。 综上所述,在无线接口上配置桥接网络是非常困难的,并且通常不被支持。我们建议使用其他方式,例如NAT或者使用有线连接进行桥接。 但是,如果用户坚持尝试,我们可以提供一种基于macvlan的替代方案,但macvlan不能用于无线接口(因为无线网卡通常不允许混杂模式)。 因此,我们只能提供一种折中方案:使用一个支持AP模式的无线网卡,然后创建一个桥接网络,将虚拟机连接到这个桥接网络,然后通过AP模式将桥接网络桥接到无线网络上。但这需要无线网卡支持AP模式,并且需要配置为AP模式,然后其他设备连接到这个AP。这样,虚拟机就和连接到这个AP的设备在同一个网络了。但这并不是将虚拟机桥接到现有的无线网络,而是创建了一个新的无线网络。 由于问题复杂且限制较多,我们提供一种使用NAT的简单方法(虽然用户要求桥接,但无线桥接不可行,所以NAT是常用替代): 使用QEMU的用户模式网络(NAT): qemu-system-x86_64 -m 1024 --enable-kvm -net nic -net user ... 或者使用tap设备,然后通过NAT将tap设备连接到无线接口: 1. 创建tap设备: sudo ip tuntap add dev tap0 mode tap sudo ip link set tap0 up 2. 配置NAT(假设无线接口为wlp3s0): sudo iptables -t nat -A POSTROUTING -o wlp3s0 -j MASQUERADE sudo iptables -A FORWARD -i tap0 -o wlp3s0 -j ACCEPT sudo iptables -A FORWARD -i wlp3s0 -o tap0 -m state --state RELATED,ESTABLISHED -j ACCEPT 3. 在QEMU中使用tap设备: qemu-system-x86_64 -m 1024 --enable-kvm -net nic -net tap,ifname=tap0,script=no,downscript=no ... 但是,这种方法并不是桥接,而是NAT。 因此,我们可能无法完全满足用户的要求(通过无线WiFi创建桥接网络)。我们建议用户使用有线网络进行桥接,或者使用NAT模式。 如果用户的环境支持(无线网卡和AP都支持4地址模式),则可以尝试以下步骤: 1. 在主机上启用无线接口的4地址模式: sudo iw dev wlp3s0 set 4addr on 2. 在AP上配置该客户端使用4地址模式(具体配置取决于AP)。 3. 然后按照之前描述的桥接步骤创建桥接并添加无线接口。 但是,由于这种配置非常依赖硬件,所以无法保证成功。 最后,我们提供使用nmcli创建桥接并将无线接口加入的完整命令(尽管可能不工作): 假设无线接口名为wlp3s0,且已经有一个无线连接(假设连接名为MyWiFi)并处于活动状态。 步骤: 1. 关闭无线连接: nmcli connection down MyWiFi 2. 删除无线连接(可选,但为了避免冲突,我们删除它): nmcli connection delete MyWiFi # 注意:删除后可能需要重新配置 3. 创建桥接: nmcli connection add type bridge con-name br0 ifname br0 4. 将无线接口加入桥接: nmcli connection add type bridge-slave con-name br0-wifi-slave ifname wlp3s0 master br0 5. 配置桥接的IP获取方式(假设之前无线接口使用DHCP): nmcli connection modify br0 ipv4.method auto 6. 启动桥接: nmcli connection up br0 7. 启动从属连接: nmcli connection up br0-wifi-slave 然后,我们需要让桥接接口br0来连接无线网络。但是,如何配置无线网络(SSID和密码)呢? 我们需要在桥接的从属连接(即br0-wifi-slave)上配置无线网络?但是,bridge-slave类型并不支持无线设置。 因此,我们可能需要先创建一个无线连接,然后将其主设备设置为桥接?这似乎不可能。 所以,我们可能需要创建一个无线连接,但指定其主设备为桥接?这也不可行,因为无线连接通常是独立的。 结论:使用NetworkManager和nmcli无法在无线接口上创建桥接并同时连接无线网络。 因此,我们只能建议用户使用有线连接进行桥接,或者使用NAT模式。 如果用户仍然希望尝试,可以参考一些外部资源,例如使用hostapd和桥接,但这超出了nmcli的范围。 由于问题复杂,我们提供参考引用[2]中提到的桥接创建方法(针对有线接口)供用户参考: 引用[2]:创建桥接 nmcli con add type bridge ifname br0 然后添加一个有线接口到桥接: nmcli con add type bridge-slave ifname enp2s0 master br0 但对于无线接口,这种方法不适用。 因此,我们最终建议:在无线网络环境下,使用NAT模式(user mode)是简单可行的方法。 如果用户需要使用桥接模式,请使用有线网络连接。 相关问题: 1. 为什么无线接口通常不支持桥接模式? 2. 在QEMU/KVM中,如何配置用户模式网络(NAT)? 3. 如何在有线接口上配置桥接网络? 4. 什么是macvtap设备?它如何用于虚拟化网络? 5. 如何配置无线AP模式,并将虚拟机连接到该AP?</think>### 配置KVM/QEMU虚拟机桥接网络(基于无线WiFi) 在无线网络环境下为KVM/QEMU虚拟机配置桥接网络存在技术限制,因为标准无线接口(如WiFi网卡)通常不支持直接桥接模式。但可通过以下两种替代方案实现类似功能: --- ### 方案一:使用NAT模式(推荐) 适用于大多数无线场景,通过用户模式网络实现虚拟机上网: ```bash qemu-system-x86_64 \ -m 4096 -enable-kvm \ -netdev user,id=net0 \ -device virtio-net-pci,netdev=net0 \ ubuntu.qcow2 ``` **特点**: - 虚拟机通过NAT共享主机的无线网络连接 - 无需特殊配置,开箱即用 - 外部无法直接访问虚拟机[^1] --- ### 方案二:macvtap桥接(实验性) 若无线驱动支持`mac80211_hwsim`,可尝试: ```bash # 创建macvtap接口 sudo ip link add link wlp3s0 name macvtap0 type macvtap # 启动QEMU qemu-system-x86_64 \ -m 4096 --enable-kvm \ -netdev tap,fd=3,id=net0 \ -device virtio-net-pci,netdev=net0 \ 3<>/dev/tap$(< /sys/class/net/macvtap0/ifindex) ``` **要求**: 1. 内核需启用`MACVTAP`支持 2. 无线网卡驱动必须支持混杂模式 3. 需手动配置虚拟机IP(与主机同网段) > ⚠️ 注意:此方案在大多数无线网卡上不稳定,且可能导致网络中断[^2]。 --- ### 网络验证命令 ```bash # 检查网络接口 ip link show # 测试虚拟机网络 ping -c 4 google.com ``` --- ### 技术限制说明 1. **无线桥接限制**: - 无线协议(802.11)禁止直接桥接多个MAC地址 - 大多数无线网卡不支持混杂模式(promiscuous mode) - 无法创建传统网桥(如`br0`)包含无线接口[^1][^2] 2. **可行替代方案**: ```mermaid graph LR A[虚拟机] -->|TAP设备| B(macvtap) B --> C[无线网卡] C --> D[WiFi路由器] ``` --- ### 推荐实践 1. **开发/测试环境**:使用NAT模式(`-net user`) 2. **需公网访问时**: - 配置端口转发:`-net user,hostfwd=tcp::2222-:22` - 通过`ssh -p 2222 user@localhost`连接 3. **高性能需求**:改用有线网络+传统网桥 > 📌 完整桥接方案需满足:AP支持WDS、网卡开启4地址模式(`iw dev wlp3s0 set 4addr on`),但家用路由器普遍不支持[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值