QEMU网络模式(一)——bridge

本文介绍了QEMU-KVM中的四种网络模式,并详细说明了如何配置基于网桥(bridge)的虚拟网卡,包括安装所需软件包、设置权限、创建网桥及配置脚本等步骤。

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

网络配置

QEMU支持的网络模式

qemu-kvm主要向客户机提供了4种不同模式的网络。
  1)基于网桥(bridge)的虚拟网卡;
  2)基于NAT的虚拟网络
  3)QEMU内置的用户模式网络(user mode networking)
  4)直接分配网络设备的网络(包括VT-d和SR-IOV)

一、使用网桥模式
在qemu-kvm命令行中,关于bridge模式的网络参数如下:
-net tap[,vlan=n][,name=str][,fd=h][,ifname=name][,script=file][,downscript=dfile][,sndbuf=nbytes][,vnet_hdr=on|off][,vhost=on|off][,vhostfd=h][,vhostforce=on|off]

1) 安装bridge-utils和tunctl软件包

# yum -y install bridge-utils tunctl

2) 查看tun模块是否被加载

# lsmod | grep tun

如果没有加载,则运行modprobe tun进行加载。如果已经将tun编译到内核(可查看内核config文件中是否有"CONFIG=y"选项),则不需要加载了。如果内核完全没有配置TUN模块,则需要重新编译内核才行。

# grep 'CONFIG_TUN' /boot/config-`uname -r`

3) 检查/dev/net/tun的权限,需要让当前用户拥有读写的权限。

# ls -lh /dev/net/tun

4) 建立一个bridge,将其绑定到一个可正常工作的网络接口上,同时让bridge成为连接本机与外部网络的接口。

# brctl addr br0
# brctl addif br0 eth0
# brctl stp br0 on
# route
# ping 192.168.1.254

或者编辑配置文件建立网桥

# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BRIDGE="br0"
[root@kvm ~]# 
# cat /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE="br0"
ONBOOT="yes"
TYPE="Bridge"
BOOTPROTO="none"
IPADDR="192.168.100.10"
NETMASK="255.255.255.0"
STP="on"
DELAY="0"

# service network restart
# dmesg
…………
device virbr0-nic entered promiscuous mode
br0: port 1(eth0) entering forwarding state 
…………

建立bridge后的状态是让网络接口eth0进入混杂模式(promiscuous mode,接收网络中所有数据包),网桥br0进入转发状态(forwarding state),并且与eth0具有相同的MAC地址,

5)准备qemu-ifup和qemu-ifdown脚本

客户机启动网络前会执行的脚本由"script"选项配置的(默认为/etc/qemu-ifup)。一般在该脚本上创建一个TAP设备并将其中与bridge绑定起来。

#!/bin/bash
#filename: /etc/qemu-ifup
switch=br0

if [ -n "$1" ];then
#tunctl -u $(whoami) -t $1 #一些较旧版本中不会自动创建TAP设备
ifconfig $1 up
sleep 0.5s
brctl addif $switch $1
exit 0
else
echo 'Error: no specifed interface.'
exit 1
fi

由于qemu-kvm工具在客户机关闭时会解除TAP设备的bridge绑定,也会自动删除已不再使用的TAP设备,所有qemu-ifdown这个脚本不是必需的,最好设置为downscript=no(qemu-kvm的script参数是虚拟机启动时执行的脚本,downscript参数是虚拟机关闭时执行的参数)

# cat /etc/qemu-ifdown 
#!/bin/bash

switch=br0

if [ -n $1 ];then
tunctl -d $1
brctl delif ${switch} $1
ip link set $1 down
exit 0
else
echo "Error: no interface specified"
exit 1
fi

6)创建一个虚拟机

创建一个稀梳格式的磁盘

# dd if=/dev/zero of=/root/centos6.img bs=1M oflag=direct seek=4095 count=1

使用镜像安装一个centos6的minimal系统

# qemu-kvm -m 768 \
-smp 2 \
--boot order=cd \
--hda /root/centos6.img \
--cdrom /root/CentOS-6.9-x86_64-minimal.iso

 

7)用qemu-kvm命令启动bridge模式的网络
在宿主机中,用命令行启动客户机并检查bridge的状态,如下:

# qemu-kvm /root/centos6.img \
-smp 2 \
-m 1024 \
-net nic \
-net tap,ifname=tap1,script=/etc/qemu-ifup,downscript=no \
-vnc :0 \
-daemonize

虚拟机启动后,使用下面命令可以看到TAP0被创建了

# brctl show
# ls /sys/devices/virtual/net/
# vcnview :0

关闭虚拟机后,使用下面可以看到TAP0被删除了

# brctl show
# ls /sys/devices/virtual/net/

转载于:https://www.cnblogs.com/fang9045315/p/8964346.html

### QEMU虚拟机中的网络适配器配置 #### 使用桥接网络模式配置QEMU虚拟机的网络适配器 为了使QEMU虚拟机能像物理机器样接入局域网,可以采用桥接网络的方式。这需要宿主机具备相应的网络配置支持[^1]。 对于Linux环境下的操作: 创建个名为`bridge-br0`的网桥设备并启动它: ```bash sudo brctl addbr bridge-br0 sudo ip link set dev bridge-br0 up ``` 将宿主机的真实网口(例如eth0)加入到这个新建立的网桥中去: ```bash sudo brctl addif bridge-br0 eth0 ``` 接着,在启动QEMU的时候指定参数来让其使用此网桥作为网络接口: ```bash qemu-system-x86_64 ... -netdev tap,id=hn0,script=no,downscript=no \ -device virtio-net-pci,netdev=hn0 ... ``` 上述命令里的`...`代表其他必要的QEMU启动选项;而`virtio-net-pci`则是推荐使用的高效网络驱动模型之。 如果是在Windows环境下,则通常会利用TAP-Windows提供者所提供的虚拟以太网端口完成类似的桥接功能[^3]。 #### 处理虚拟机重启后的网络连接丢失问题 有时可能会遇到这样的情况:当关闭再开启台已经正常工作的QEMU虚拟机之后,发现它的网络连接消失了——既不能获得有效的IP地址也不能被外部访问。针对这种情况的个常见修复方法就是确保每次开机时都正确初始化了网络栈,并且尝试手动触发DHCP请求获取新的IP分配[^2]。 在某些情况下,还需要检查并调整防火墙策略以防止它们意外阻挡了必要的通信流量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值