在我的 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 结构组合的多个命令组成:
modules=$(lspci -k | grep -iE 'network|ethernet|wi-fi|bluetooth|wireless|lan|wlan' --after=3 | grep modules | awk '{print $3}')
:此命令检索相关网络模块的列表并将其保存在modules
变量中。for module in $(echo "$modules" | tr ' ' '\n'); do ...; done
:这是一个循环,迭代modules
变量中的每个模块。if ! grep -q -w "blacklist $module" /etc/modprobe.d/blacklist.conf; then ...; else ...; fi
:这是一个 if-else 结构,用于检查该模块是否已在配置文件中列入黑名单。echo "blacklist $module" | tee -a /etc/modprobe.d/blacklist.conf
:如果模块未列入黑名单,则此命令会在配置文件中附加一个新的黑名单条目。echo "Already blacklisted: $module. Skipping."
:如果模块已被列入黑名单,则此命令将打印一条消息来指示这一情况。update-initramfs -u && echo
:处理完所有模块后,此命令会更新 initramfs 并显示有关重新启动的消息。
手动替代方案
如果由于某种原因 oneliner 不起作用或者您想密切关注正在发生的情况,您可以按照以下手动步骤操作:
- 运行
lspci -k
以列出所有设备及其各自的内核模块。通过运行以下命令来识别与网络控制器相关的模块:lspci -k | grep -iE 'network|ethernet|wi-fi|bluetooth|wireless|lan|wlan' --after=3 | grep modules | awk '{print $3}'
。 - 使用您最喜欢的文本编辑器打开
/etc/modprobe.d/blacklist.conf
,例如sudo nano /etc/modprobe.d/blacklist.conf
. - 对于要列入黑名单的每个模块,请在文件末尾添加一个新行:
blacklist MODULE_NAME
,替换MODULE_NAME
为实际的模块名称。 - 保存并关闭文件。
- 通过运行更新 initramfs
sudo update-initramfs -u
。 - 重新启动您的系统:
sudo reboot
.
要恢复此状态,只需注释或删除刚刚创建的新创建的“黑名单”条目,然后运行步骤 5 和 6。
希望这可以帮助任何正在寻找相同解决方案的人。