![无法让 Chain“MASQUERADE” 在 WSL2 内核上运行](https://linux22.com/image/948226/%E6%97%A0%E6%B3%95%E8%AE%A9%20Chain%E2%80%9CMASQUERADE%E2%80%9D%20%E5%9C%A8%20WSL2%20%E5%86%85%E6%A0%B8%E4%B8%8A%E8%BF%90%E8%A1%8C.png)
我正在尝试根据我的特定需求构建自定义内核,我需要该链MASQUERADE
可用。我正在使用https://github.com/microsoft/WSL2-Linux-Kernel来构建我的内核。
我已将我能找到的所有配置设置MASQ
为。MASQUERADE
y
无论我如何构建内核,每次运行时iptables -t nat -C POSTROUTING -s 10.33.33.1 -j MASQUERADE --wait
都会得到iptables v1.8.7 (nf_tables): Chain 'MASQUERADE' does not exist
。 同样的情况也发生iptables-legacy
。
我无法使用insmod
或加载任何定制的内核模块modprobe
。
有人让它工作或知道如何让它工作吗?我尝试从 kernel.org 构建 Linux 内核,但结果发现它无法与 WSL 一起使用。
答案1
这里的核心问题是 Ubuntu 22.04 现在默认使用nf_tables
而不是旧版iptables
。语法和默认规则完全不同。
虽然我鼓励您研究新的语法nf_tables
(因为我们最终需要了解它),但您可以通过以下方式在短期内解决这个问题iptables-legacy
:
sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
请注意,您的规则所依赖的其他规则可能缺失nf_tables
,因此可能需要额外的配置。
更新说明:我刚刚注意到,nftables
目前尚未启用发布WSL2 内核。它已在新预览版本 5.15.57.1 中提供(与0.65.3iptables
昨天发布了旧版内核(预览版)。因此,目前,除了升级或编译自定义内核之外,恢复到旧版内核可能是唯一的解决方案。