QEMU 桥接问题 [关闭]

问题描述 投票:0回答:1

我正在尝试在我的 QEMU 机器中创建默认 NAT and 桥接接口。自然地,我在单独的文件中创建了桥接口

/etc/network/intefaces.d/virbr2
。这是 virbr2 文件配置:

# Configuring network virtual interface
# to be a virt switch
auto virbr2
iface virbr2 inet static
    bridge_ports enp1s0
        address 192.168.1.3
        netmask 255.255.255.0
        broadcast 192.168.1.255
        up ip route add 192.168.1.2 via 192.168.1.1 via enp1s0
    brdige_stp off
    bridge_waitport 0
    bridge_fd 0

我的通用接口配置文件很简单

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# auto launch enp1s0 interface after the host os is booted
# since we want create a bridge interface, let's attach
# it to bridge interface br0

auto enp1s0
iface enp1s0 inet manual

source /etc/network/interfaces.d/*

# The loopback network interface

auto lo
iface lo inet loopback

因此,使用正确的 IP 地址创建了接口 virbr2

$ ip a | grep -A 5 virbr2
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master virbr2 state UP group default qlen 1000
    link/ether e8:d8:d1:51:15:c2 brd ff:ff:ff:ff:ff:ff
3: wlp0s20f3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 04:ea:56:59:cf:a4 brd ff:ff:ff:ff:ff:ff
    inet 192.168.31.69/24 brd 192.168.31.255 scope global dynamic noprefixroute wlp0s20f3
       valid_lft 41947sec preferred_lft 41947sec
--
4: virbr2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether d6:71:34:e1:fa:9b brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.3/24 brd 192.168.1.255 scope global virbr2
       valid_lft forever preferred_lft forever
    inet6 fdf7:2246:8eb:0:d471:34ff:fee1:fa9b/64 scope global dynamic mngtmpaddr
       valid_lft forever preferred_lft forever
    inet6 fe80::d471:34ff:fee1:fa9b/64 scope link
       valid_lft forever preferred_lft forever
$ brctl show
bridge name bridge id       STP enabled interfaces
docker0     8000.0242daa58f02   no
virbr0      8000.525400d87725   yes
virbr2      8000.d67134e1fa9b   no      enp1s0

创建桥接口后,我尝试使用下一个命令启动我的虚拟机:

qemu-system-x86_64 \
    -m 4096 \
    -smp 4 \
    -drive 'file=debian-opkg-server.qcow2,if=virtio,format=qcow2' \
    -net 'user,hostfwd=tcp::2200-:22' \
    -net nic \
    -netdev 'tap,id=br1,ifname=virbr2,script=no,downscript=no' \
    -device 'virtio-net-pci,netdev=br1'

脚本启动后,我收到下一条错误消息

Unable to init server: Could not connect: Connection refused
qemu-system-x86_64: could not configure /dev/net/tun (virbr2): Invalid argument

论证无效怎么可能?接口名称是正确的,所以我不知道它不起作用的原因。

networking qemu
1个回答
0
投票

在回答问题时,参数无效,因为 virbr2 是一个bridge,而-netdev 的“tap”方法需要一个tuntap 设备。

你可以这样做来设置你的桥梁:

auto br0
iface br0 inet static
        address         192.168.100.254/24
        # Create the bridge interface:
        pre-up          ip link add dev br0 type bridge
        # This is because I have dnsmasq listing on the bridge:
        post-up         resolvectl dns br0 192.168.100.254
        # Delete the link when done, returning true regardless if success
        post-down       ip link del dev br0 type bridge || true

auto virif0
iface virif0 inet manual
        # Create a TAP interface named virif0
        pre-up          ip tuntap add mode tap name virif0
        # Attach the the TAP interface to the bridge
        pre-up          ip link set master br0 virif0
        # Delete link when done, returning true regardless of success
        post-down       ip link del dev virtif1 || true

像这样设置 NAT:

UPSTREAM=eth0
iptables -t nat -A POSTROUTING -o $UPSTREAM -j MASQUERADE
sysctl net.ipv4.ip_forward=1

然后,在您的 qemu 调用中,将 ifname=virbr0 更改为 ifname=virif0。您将为要同时运行的每个虚拟机创建一个 tuntap 接口,例如 virif1、virtif2 等。此外,请务必为网桥上的每个接口指定不同的 MAC 地址,否则你会遇到困难。

© www.soinside.com 2019 - 2024. All rights reserved.