qemu使用brige模式
- 创建tap和bridge设备
tunctl -t tap1 #创建tap网卡
brctl addbr br0
brctl addif br0 tap1
brctl addif br0 enp0s3f0 #将tap和物理网卡全都挂接在bridge上
ip addr add 192.168.0.10/24 dev br0
ip link set tap1 up
ip link set enp0s3f0 up
ip link set br0 up
route add default gw 192.168.0.1
- qemu使用tap1
./qemu-system-x86_64 -m 1024 -boot c -smp 4 -drive file=./rootfs.qcow2,if=virtio -machine q35 -cpu host --enable-kvm \
-nographic -serial stdio -monitor tcp::4444,server,nowait \
-net nic,model=virtio,macaddr=00:23:9e:03:c7:3b -net tap,ifname=tap1,script=no,downscript=no -no-reboot
使用NAT模式
- 创建虚拟网桥
brctl addbr br0
- 创建虚拟tap设备
ip tuntap add mode tap tap0
- 将tap设备介入网桥
brctl addif br0 tap0
- 配置网桥ip
ip addr add 192.168.0.1/24 dev br0 ip route add 192.168.0.0/24 dev br0 //一般当设置ip时系统会为其自动添加默认路由,这一不就不用了
- 启动桥设备和虚拟网卡设备
ip link set br0 up ip link set tap1 up
- 准备dnsmasq配置文件,启动dnsmasq服务,这样就能为虚拟机自动分配IP了
strict-order
pid-file=/var/run/libvirt/network/default.pid
except-interface=lo
bind-interfaces
listen-address=192.168.0.1
dhcp-range=192.168.0.2,192.168.0.254
dhcp-no-override
dhcp-leasefile=/var/lib/libvirt/dnsmasq/default.leases
dhcp-lease-max=253
dhcp-hostsfile=/var/lib/libvirt/dnsmasq/default.hostsfile
addn-hosts=/var/lib/libvirt/dnsmasq/default.addnhosts
/usr/sbin/dnsmasq --conf-file=./dnsmasq.conf
-
配置iptables forward转发规则
在基本环境搭建这一节中,设置了一个本地网络,虚机只能访问host,无法访问外网,如果需要访问外网需要设置SNAT
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 ! -d 192.168.0.0/24 -j MASQUERADE
-
开启物理网卡的转发功能:
sysctl -w net.ipv4.ip_forward=1
-
如果有防火墙的,特别是centos系统中,记得放开防火墙
iptables -A FORWARD -s 192.168.0.0/24 -j ACCEPT
-
启动qemu
qemu-system-x86_64 -m 1024 -boot c -smp 4 -machine q35 -cpu host --enable-kvm -nographic -no-reboot -kernel vmlinuz
-append "root=/dev/vda1 console=ttyS0" -drive file=./root.qcow2,if=virtio -nographic
-net nic,model=virtio,macaddr=4a:07:0f:b4:d3:98 -net tap,ifname=tap0,script=no,downscript=no