Tôi đã tạo một thiết bị nhấn ( tap0) mà tôi muốn cung cấp dưới dạng giao diện mạng cho qemu. Tôi đã tạo thiết bị bằng lệnh sau và gắn nó vào cầu nối mạng mà tôi đã thiết lập:
tunctl -t tap0
ifconfig tap0 up
brctl addif virbr0 tap0
Sau đó tôi đã chạy các lệnh được đề xuất trong câu trả lời này :
chgrp netdev /dev/net/tun
chmod 660 /dev/net/tun
Cả hai lệnh đã hoàn thành thành công và tôi xác nhận rằng chúng có hiệu lực:
nathan@nathan-desktop:~$ stat /dev/net/tun
  File: ‘/dev/net/tun’
  Size: 0           Blocks: 0          IO Block: 4096   character special file
Device: 6h/6d   Inode: 1224        Links: 1     Device type: a,c8
Access: (0660/crw-rw----)  Uid: (    0/    root)   Gid: (  108/  netdev)
Access: 2015-11-16 10:16:35.127338320 -0800
Modify: 2015-11-16 10:16:35.127338320 -0800
Change: 2015-11-16 10:37:18.338948110 -0800
 Birth: -
Tôi cũng xác nhận rằng tôi thuộc netdevnhóm:
nathan@nathan-desktop:~$ groups
[...] netdev [...]
Tuy nhiên, khi tôi cố gắng khởi động máy ảo qemu với giao diện, tôi đã gặp phải lỗi sau:
nathan@nathan-desktop:~$ qemu-system-arm [...] -net tap,ifname=tap0
qemu-system-arm: -net tap,ifname=tap0: could not configure /dev/net/tun (tap0): Operation not permitted
qemu-system-arm: -net tap,ifname=tap0: Device 'tap' could not be initialized
bước đi
Các đầu ra có liên quan từ straceđược trình bày dưới đây:
open("/dev/net/tun", O_RDWR)            = 7
ioctl(7, TUNGETFEATURES, 0x7ffcc532ab2c) = 0
ioctl(7, TUNSETVNETHDRSZ, 0x7ffcc532ab28) = -1 EBADFD (File descriptor in bad state)
ioctl(7, TUNSETIFF, 0x7ffcc532ab30)     = -1 EPERM (Operation not permitted)
write(2, "qemu-system-arm:", 16qemu-system-arm:)        = 16
write(2, " -net", 5 -net)                    = 5
write(2, " tap,ifname=tap0", 16 tap,ifname=tap0)        = 16
write(2, ": ", 2: )                       = 2
write(2, "could not configure /dev/net/tun"..., 64could not configure /dev/net/tun (tap0): Operation not permitted) = 64
write(2, "\n", 1
)                       = 1
close(7)                                = 0
write(2, "qemu-system-arm:", 16qemu-system-arm:)        = 16
write(2, " -net", 5 -net)                    = 5
write(2, " tap,ifname=tap0", 16 tap,ifname=tap0)        = 16
write(2, ": ", 2: )                       = 2
write(2, "Device 'tap' could not be initia"..., 37Device 'tap' could not be initialized) = 37
write(2, "\n", 1
)
straceđầu ra được thêm vào.
                tunctlkhông có sẵn trên hệ thống (ArchLinux 2018 tại đây)? Tôi đang cố gắng để đạt được điều tương tự như bạn đã cố gắng, nhưng tôi thất bại ở bước này tunctl.
                
stracevà xem chính xác những gì ioctl đang thất bại.