【问题标题】:WSL Kernel Netfilter hooks for Pre/Post Routing not available用于前/后路由的 WSL 内核 Netfilter 钩子不可用
【发布时间】:2021-10-14 15:55:56
【问题描述】:

我使用的是 Windows 11,WSL2,内核 5.10.60.1-microsoft-standard-WSL2。

我正在使用 RHEL 发行版,并且正在尝试启用 netfilter NAT 规则。问题是如果我尝试将规则添加到 Pre 或 PostRouting 的 NAT 表中,我会收到此错误:

[root@rhel8 nftables]# nft add chain nat prerouting { type nat hook prerouting priority 0 \; }
Error: No such file or directory
add chain nat prerouting { type nat hook prerouting priority 0 ; }
          ^^^

我的谷歌搜索让我相信我需要添加一些内核配置才能使其正常工作,但从微软默认设置来看,一切似乎都已开启。如果有内核大师可以给我一个提示,我将不胜感激!

【问题讨论】:

  • 猜测你的问题背后有一个编程/开发原因,但那里并没​​有真正说明,所以它与更多的 Linux/内核/网络相关。我是否可以建议您确保我们其他人清楚它是经过编辑的主题?谢谢!
  • 内核配置是在重新编译内核之前必须设置的。我需要熟悉 Netfilter 的内核开发人员的帮助。

标签: linux-kernel windows-subsystem-for-linux netfilter nftables


【解决方案1】:

为了任何遇到此错误的人的繁荣:

我提取了 microsoft WSL 内核 (https://github.com/microsoft/WSL2-Linux-Kernel.git),然后将 ./Microsoft/config-wsl 复制到 .config 以作为内核编译的种子。

make config 逐个回答,直到编译的 netfilter 部分,然后对 netfilter 的整个部分回答是,包括 NAT 等。

make -j $(nproc)

内核编译后,我将 x86(不是 x86_64)./arch/x86/boot/bzImage 复制到 Windows 文件系统 (/mnt/c/users/me/xxxx) 上可访问的位置。

然后进行备份,然后编辑您的c:\users\me\.wslconfig 并将内核更新为新内核(记住您必须在内核路径中使用\\,例如c:\\users\\me\\bzimage_custom。最后重新启动WSL 以启动新内核内核:

wsl --shutdown
wsl -d mydistro

那么您将拥有可用的 NAT :)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-06
    相关资源
    最近更新 更多