当前位置:   article > 正文

RHEL9 下使用nmcli无法正确将tap接到虚拟网桥,导致qemu无法通过tap+网桥与主机通信的解决办法_-net nic -net tap,ifname=tap0 启动不起来

-net nic -net tap,ifname=tap0 启动不起来

1、使用nmcli con add type bridge-slave命令并不能将tap0接到br0上。

如下,可以看到执行“nmcli con add type bridge-slave ifname tap0 master br0”后,虽然生成了bridge-slave-tap0这个网络连接,但是使用brctl show可以看到interfaces下面并没有出现tap0.

  1. [root@rhel9 cat]# nmcli connection add type tun ifname tap0 con-name tap0 mode tap owner 0 ip4 192.168.1.1/24
  2. 连接 "tap0" (dddfc629-1792-4549-a386-4388af9a88e8) 已成功添加。
  3. [root@rhel9 cat]# nmcli con add type bridge-slave ifname tap0 master br0
  4. 连接 "bridge-slave-tap0" (6eda7a90-204d-4393-b867-7aead5e58983) 已成功添加。
  5. [root@rhel9 cat]# nmcli c
  6. NAME UUID TYPE DEVICE
  7. ens160 d33b89a2-a119-34ba-adfd-9a4ddc13af27 ethernet ens160
  8. tap0 dddfc629-1792-4549-a386-4388af9a88e8 tun tap0
  9. br0 f4392fcc-80da-47e5-bb9b-b365ba3e15b4 bridge br0
  10. bridge-slave-tap0 6eda7a90-204d-4393-b867-7aead5e58983 ethernet --
  11. [root@rhel9 cat]# brctl show
  12. bridge name bridge id STP enabled interfaces
  13. br0 8000.000000000000 yes

同样使用nmcli con add type bridge-slave命令却能成功将物理网卡ens224接到br0上,interfaces下面出现了ens224。

  1. [root@rhel9 cat]# nmcli con add type bridge-slave ifname ens224 master br0
  2. 连接 "bridge-slave-ens224" (a80bf967-79d6-4506-985f-6531a0c55f7a) 已成功添加。
  3. [root@rhel9 cat]# nmcli c
  4. NAME UUID TYPE DEVICE
  5. ens160 d33b89a2-a119-34ba-adfd-9a4ddc13af27 ethernet ens160
  6. tap0 dddfc629-1792-4549-a386-4388af9a88e8 tun tap0
  7. br0 f4392fcc-80da-47e5-bb9b-b365ba3e15b4 bridge br0
  8. bridge-slave-ens224 a80bf967-79d6-4506-985f-6531a0c55f7a ethernet ens224
  9. bridge-slave-tap0 6eda7a90-204d-4393-b867-7aead5e58983 ethernet --
  10. [root@rhel9 cat]# brctl show
  11. bridge name bridge id STP enabled interfaces
  12. br0 8000.000c2962f72f yes ens224

2、因为nmcli con add type bridge-slave并不能将tap成功接到网桥上,为了使qemu正确与主机进行通信,因此使用qemu-ifup/qemu-down脚本来解决这个问题。

qemu-ifup内容如下:

  1. #!/bin/sh
  2. sudo nmcli con add type tun ifname $1 con-name $1 mode tap ip4 0.0.0.0/24
  3. #sudo nmcli con up $1
  4. ifconfig $1 up
  5. sudo brctl addif br0 $1

其中$1为qemu启动时传入的网络设备,可以是tap0,tap1...,因为实测nmcli con up $1命令无法使能$1,换用ifconfig $1 up 。

使用brctl addif br0 $1,可以成功将$1接到br0上,所以这里使用brctl addif br0 $1。

qemu-down内容如下

  1. #!/bin/sh
  2. brctl delif br0 $1
  3. ifconfig $1 down
  4. nmcli con del $1

3、因为要使用qemu-ifup/qemu-down脚本,所以qemu启动命令也需要改变,需要指定qemu-ifup/qemu-down脚本的路径。本例中qemu-ifup/qemu-down脚本都存放在/etc目录下,请根据实际存放路径进行对应修改。

qemu-system-arm -M vexpress-a9 -m 512M  -kernel u-boot  -nographic -net nic -net tap,script=/etc/qemu-ifup,downscript=/etc/qemu-ifdown

4、可以通过tftp从主机加载内容,实现qemu通过tap+网桥与主机网络正通信。

  1. => tftp 0x60003000 uImage
  2. smc911x: detected LAN9118 controller
  3. smc911x: phy initialized
  4. smc911x: MAC 52:54:00:12:34:56
  5. Using ethernet@3,02000000 device
  6. TFTP from server 192.168.1.100; our IP address is 192.168.1.200
  7. Filename 'uImage'.
  8. Load address: 0x60003000
  9. Loading: #################################################################
  10. #################################################################
  11. #################################################################
  12. #################################################################
  13. #################################################################
  14. ####################
  15. 3.3 MiB/s
  16. done
  17. Bytes transferred = 5058336 (4d2f20 hex)
  18. smc911x: MAC 52:54:00:12:34:56

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/293630
推荐阅读
相关标签
  

闽ICP备14008679号