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 netdev
nhó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.
tunctl
khô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
.
strace
và xem chính xác những gì ioctl đang thất bại.