完全禁用所有网络驱动程序

完全禁用所有网络驱动程序

在我的 Ubuntu 16.04 服务器上,在升级到 22.04 之前,我需要禁用板载网卡以进行故障排除。重要的是整个 NIC 不再在我的设备中显示为网络控制器。

基本上我想要的是只保留我的本地环回设备用于工作 127.0.0.1 并摆脱所有其他网络控制器。

我尝试过的事情:

  • 我已经尝试过 BIOS,但其中没有可配置的网络控制器(戴尔台式机)。

  • 我尝试将界面设置为“手动”,而不是在 中进行配置/etc/network/interfaces,但它不起作用。

  • 我已经尝试了涉及“udev”和“systemd”的建议解决方案如何永久禁用网络接口?但它总是以某种方式回来。

该死的东西总是回来……

答案1

好吧,我自己找到了一个解决方案,它似乎完全符合我的要求。

我可以确认它可以在带有板载 NIC 和 Wi-Fi 控制器的系统上的 Ubuntu 16.04 上运行,但是我还没有针对其他发行版测试过它,但是快速浏览一下文档表明它也应该适用于其他发行版,但是别相信我的话;您自己在文档中进行研究以进行验证。

我使用此解决方案的原因是,一旦我完成了需要执行的故障排除,它就可以轻松逆转。我基本上只是想摆脱系统上的所有网络控制器,只保留我的环回设备用于工作 127.0.0.1。

完全禁用所有网络驱动程序

要禁用 Ubuntu 16.04 服务器上的网络接口,您可以使用以下 oneliner 将网络模块列入黑名单。这将阻止内核加载模块,从而有效地禁用接口。这是 oneliner 及其步骤的细分:

命令行 oneliner

modules=$(lspci -k | grep -iE 'network|ethernet|wi-fi|bluetooth|wireless|lan|wlan' --after=3 | grep modules | awk '{print $3}'); for module in $(echo "$modules" | tr ' ' '\n'); do if ! grep -q -w "blacklist $module" /etc/modprobe.d/blacklist.conf; then echo "blacklist $module" | tee -a /etc/modprobe.d/blacklist.conf; else echo "Already blacklisted: $module. Skipping."; fi; done; update-initramfs -u && echo Done! Reboot your system to finalize the changes.

分解

oneliner 由使用 shell 结构组合的多个命令组成:

  1. modules=$(lspci -k | grep -iE 'network|ethernet|wi-fi|bluetooth|wireless|lan|wlan' --after=3 | grep modules | awk '{print $3}'):此命令检索相关网络模块的列表并将其保存在modules变量中。

  2. for module in $(echo "$modules" | tr ' ' '\n'); do ...; done:这是一个循环,迭代modules变量中的每个模块。

  3. if ! grep -q -w "blacklist $module" /etc/modprobe.d/blacklist.conf; then ...; else ...; fi:这是一个 if-else 结构,用于检查该模块是否已在配置文件中列入黑名单。

  4. echo "blacklist $module" | tee -a /etc/modprobe.d/blacklist.conf:如果模块未列入黑名单,则此命令会在配置文件中附加一个新的黑名单条目。

  5. echo "Already blacklisted: $module. Skipping.":如果模块已被列入黑名单,则此命令将打印一条消息来指示这一情况。

  6. update-initramfs -u && echo:处理完所有模块后,此命令会更新 initramfs 并显示有关重新启动的消息。

手动替代方案

如果由于某种原因 oneliner 不起作用或者您想密切关注正在发生的情况,您可以按照以下手动步骤操作:

  1. 运行lspci -k以列出所有设备及其各自的内核模块。通过运行以下命令来识别与网络控制器相关的模块:lspci -k | grep -iE 'network|ethernet|wi-fi|bluetooth|wireless|lan|wlan' --after=3 | grep modules | awk '{print $3}'
  2. 使用您最喜欢的文本编辑器打开/etc/modprobe.d/blacklist.conf,例如sudo nano /etc/modprobe.d/blacklist.conf.
  3. 对于要列入黑名单的每个模块,请在文件末尾添加一个新行:blacklist MODULE_NAME,替换MODULE_NAME为实际的模块名称。
  4. 保存并关闭文件。
  5. 通过运行更新 initramfs sudo update-initramfs -u
  6. 重新启动您的系统:sudo reboot.

要恢复此状态,只需注释或删除刚刚创建的新创建的“黑名单”条目,然后运行步骤 5 和 6。

希望这可以帮助任何正在寻找相同解决方案的人。

相关内容