所以我之前问过如何制定 udev 规则来阻止某些 USB 设备。但是,我需要使用无线 USB 适配器来实现类似的功能。
我有一个 EDIMAX 的无线 USB 适配器,它是 Realtek 芯片组。我的系统中有它,用于在 VMware Workstation 内运行的 Kali VM,但我想让它只对 VM 可用。话虽如此,它一直都在我的电脑上,我希望 Ubuntu 不能将它“用作”网卡,只希望它由 VM 使用它。
棘手的部分:我需要专门隔离此 wifi 适配器,以防止使用,而其他所有适配器都由系统/网络管理器使用。此适配器专用于虚拟机,而不是主机操作系统 Ubuntu 14.04。
我认为使用 udev 规则来阻止 Ubuntu 将其用作网络适配器是可行的方法,但我不确定如何做到这一点或这是否是可行的方法。关于如何实现这一点的想法?
我尝试实现这一点的系统是 Ubuntu 14.04。
所需信息
相关lsusb
行:
Bus 001 Device 003: ID 7392:7811 Edimax Technology Co., Ltd EW-7811Un 802.11n Wireless Adapter [Realtek RTL8188CUS]
答案1
讽刺的是,解决这个问题最简单的方法恰好是我已经知道如何实施的解决方案之一。我现在觉得一开始问这个问题很愚蠢……
我采用了老派高级用户的方法来解决此问题。众所周知,/etc/network/interfaces
NetworkManager 将认为在 中定义的任何接口“不受管理” - 因此我的笔记本电脑上的以太网卡和连接的外部 USB 以太网适配器就是这种情况。
基本上,我制定了一条udev
规则,为适配器分配一个特定的名称,vm_wlan0
如下所示/etc/udev/rules.d/70-persistent-net.rules
:
# USB device 0x:0x (rtl8192cu)
# EDIMAX EDIMAX EW-7811Un N150 USB 2.0 Wireless nano Adapter
# Typically used for Kali VM
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="XX:XX:XX:XX:XX:XX", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="wlan*", NAME="vm_wlan0"
现在接口名称在系统上是“静态的”,/etc/network/interfaces
文件更改随之而来。我基本上从 Debian wiki 上借用了这些网络配置它利用该/etc/network/interfaces
文件来启动设备而不提供任何真实 IP,然后我对其进行了调整:
allow-hotplug vm_wlan0
iface vm_wlan0 inet manual
pre-up ifconfig vm_wlan0 up
post-up ifconfig vm_wlan0 down
这样计算机就可以启动而不会无法配置网络接口;同时,它会将无线适配器“启动”然后再“关闭”,因此设备仍然存在于主机上,但从网络角度来看它并未“开启”,也不受 NetworkManager 管理。
答案2
SYSFSdrive/unbind
是你的方法。我找不到authorized
& remove
,看来网络设备与存储设备相比比较特殊。
我在插入/拔出 USB 无线密钥时运行这些程序来寻找差异。
lsusb
lsusb -t
udevadm monitor -u
udevadm monitor --env
我注意到:
VirtualBox 不会转到 USB 设备以外的父设备:
/sys/devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0/
1-1:1.0
VirtualBox 为(USB 设备)绑定新驱动程序:usbfs
插入时绑定,rt2800usb
拔出时绑定常规驱动程序。(我有一台 D-Link DWA-123 V.B1)由于没有发送任何事件:
/sys/devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0/
所以我寻找持久子节点:
/sys/devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0/net/wlan1 /sys/devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0/net/wlx9094e4008e2c
(
wlan1
创建然后移动/重命名为wlx9094e4008e2c
,我不知道为什么!)
反正
- 创建我的规则文件
/etc/udev/rules.d/99-my-vbox-filter.rules
添加了规则
ACTION=="add", ENV{DEVTYPE}=="wlan", ENV{SUBSYSTEM}=="net", ENV{ID_VENDOR_ID}=="2001", ENV{ID_MODEL_ID}=="3c1d", RUN="/bin/sh -c 'echo -n $(basename $(cd /sys%p/../..; pwd)) >/sys%p/../../driver/unbind'"
2001:3c1d
从前面提到的命令中得到重新加载规则
sudo udevadm control --reload
注意:我之前没有使用过 EDIMAX,如果您发现情况不同,请发布收集到的信息,以便我可以提供帮助。