AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1068572
Accepted
Landon Miller
Landon Miller
Asked: 2021-07-04 13:15:15 +0800 CST2021-07-04 13:15:15 +0800 CST 2021-07-04 13:15:15 +0800 CST

为什么我的 Linux 内核缺少对 ip_tables 运行至关重要的目录/文件?

  • 772

如标题中所述 - 我的 Linux 内核似乎缺少对 iptables 正常运行至关重要的文件/目录。我可以通过重新安装内核来临时解决这个问题,但这不是永久解决,因为重新启动后我又回到了我开始的地方。

当我运行时,iptables -L我收到一条错误消息,“也许 iptables 或您的内核需要升级。” 我发现我可以通过运行来解决此错误sudo apt-get install --reinstall linux-modules-5.8.0-59-generic。我注意到重新安装后,我的目录中有其他文件和目录/lib/modules/5.8.0-59-generic,这使我相信我的内核默认情况下缺少这些文件和目录,并导致 iptables 无法正常运行。重新启动后,它又会丢失这些文件/目录,并且 iptables 无法正常工作。

是否可以永久重新安装内核模块,所以我不必在每次重新启动后重新安装以使 iptables 工作?

我正在运行 Ubuntu 20.04.2,如上所述,我的内核是 5.8.0-59-generic。我很感激我能得到的任何帮助!

编辑:

我得到的输出ls /boot/vmlinuz*是:[vmlinuz 输出]:https ://i.stack.imgur.com/dDroe.png或者作为文本:

/boot/vmlinuz /boot/vmlinuz-5.4.0-77-generic /boot/vmlinuz-5.8.0-48-generic /boot/vmlinuz-5.8.0-55-generic /boot/vmlinuz-5.8.0-59-generic /boot/vmlinuz.old

我得到的输出apt-cache policy linux-image-generic是: [apt-cache output]: https://isstatic.askoverflow.dev/OY9Cj.png或者作为文本:

linux-image-generic: Installed: 5.4.0.77.80 Candidate: 5.4.0.77.80 Version table: *** 5.4.0.77.80 500 500 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages 500 http://archive.ubuntu.com/ubuntu focal-security/main amd64 Packages 100 /var/lib/dpkg/status 5.4.0.26.32 500 500 http://archive.ubuntu.com/ubuntu focal/main amd64 Packages

正在运行的计算机是戴尔 Optiplex 3020,其规格如下:

  • CPU:四核 Intel(R) Core(TM) i5-4570 CPU @ 3.20 GHz
  • 内存:8Gb 内存

编辑:我不确定这些命令的输出将如何帮助我,我非常感谢进一步的指导,因为我仍然没有接近解决这个问题!

iptables linux-kernel
  • 2 2 个回答
  • 232 Views

2 个回答

  • Voted
  1. Dagelf
    2022-05-28T02:59:44+08:002022-05-28T02:59:44+08:00

    您启动时使用的内核不是您安装的内核。简而言之,您安装的模块适用于另一个 - 可能是较旧或较新的内核,由引导加载程序选择,可能未更新。

    您可以使用 来验证这一点cat /proc/version。这将显示当前运行的内核。apt install --reinstall linux-modules-`cut -d\ -f3 /proc/version` 应该安装正确的版本。

    您可以使用dpkg -l|grep linux-查看已安装的内容。

    至于让引导加载程序停止重新启动到相同的旧版本,sudo update-grub可能会解决这个问题。或者,您可以查看/boot/grub/grub.cfg更多信息,或者在引导时按住Shift或按下ESC并选择适当的内核。(有关更多故障排除,请参阅https://askubuntu.com/questions/281119/how-do-you-run-update-grub)

    尽管 Linux 遵循“单片”设计,其中大多数功能都可以内置到内核本身中,但如今可用的功能如此之多,因此将尽可能多的功能(例如 iptables)移出“可加载内核模块”更有意义”。它有一个很棒的功能,可以根据需要“自动加载”这些模块 - 但这些模块通常非常特定于内核版本 - 它没有找到那些 - 看ls /usr/lib/modules/*- 是什么给了你错误消息。

    您可以查看当前加载了哪些模块lsmod。您还可以insmod使用rmmod. (参见man insmod等等。)

    在过去的 30 年中,计算机发生了很大的变化,不仅将模块存储在主分区上,还需要将它们存储在临时 RAM 磁盘中initrd,因为有时需要这些模块来访问实际的硬盘驱动器或文件系统。update-grub负责将所需模块的副本存储在initrd相关 Linux 内核的相关文件中。

    通常,只要内核可以以某种方式读取您的根文件系统,您就可以使用任何内核启动任何 Linux 根文件系统。因此,您通常可以通过从实时可启动 Linux 启动,然后挂载您的主文件系统来轻松修复或备份您的系统。(要找到它,请参阅lsblk和mount)要在您的实际系统上工作,即使您从另一个系统启动,请参阅chroot。例如,如果您实时启动,并且您的硬盘显示为/dev/sdb1then you canfsck /dev/sdb然后mount /dev/sdb1 /mnt,然后sudo mount -t proc - /mnt/sdb1/proc; sudo mount -o bind /dev /mnt/sdb1/dev; sudo chroot /mnt/sdb1然后您可以运行apt installorupdate-grub和exitand sudo reboot。)

    由于许多因素 - 磁盘空间不足、电缆松动、硬件损坏、断电、EMF、宇宙射线,文件可能会损坏或丢失。现代软件擅长解决大部分问题。与其他系统相比,Linux 的优点在于它为您提供了更多修复它的机会,而不是仅仅重新安装 - 并更多地了解它在此过程中的工作方式。

    • 1
  2. Best Answer
    Landon Miller
    2022-05-27T09:25:53+08:002022-05-27T09:25:53+08:00

    对于@Titou ...我想我是因为内核损坏而出现这个错误??我通过备份和重新安装 Ubuntu 操作系统解决了这个问题。这样做之后,我就再也没有遇到过问题。

    • 0

相关问题

  • OpenVPN 的 Linux IP 转发 - 正确的防火墙设置?

  • iptables 单个规则中的多个源 IP

  • 存储 iptables 规则的规范方法是什么

  • 使用 iptables 和 dhcpd 进行端口转发

  • 根据 Apache 日志数据自动修改 iptables 以阻止行为不良的客户端

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve