WSL2でコンテナが起動できない


WSL2のAlmaLinux 8.6のpodmanが動作しない

```bash
# podman run -itd --rm localhost/mydev:latest /bin/bash
WARN[0000] Failed to load cached network config: network podman not found in CNI cache, falling back to loading network podman from disk
WARN[0000] 1 error occurred:
        * plugin type="bridge" failed (delete): cni plugin bridge failed: running [/sbin/iptables -t nat -D POSTROUTING -s 10.88.0.14 -j CNI-62c4fb3fb4d2d3a7ca7dcc0d -m comment --comment name: "podman" id: "459c03b71a7d442f9bf4b542a2a7cc437080d09ef3492fdfaeda4412e7058d9c" --wait]: exit status 2: iptables v1.8.4 (nf_tables): Couldn't load match `comment':No such file or directory

Try `iptables -h' or 'iptables --help' for more information.


Error: plugin type="bridge" failed (add): cni plugin bridge failed: failed to list chains: running [/sbin/iptables -t nat -S --wait]: exit status 4: # Warning: iptables-legacy tables present, use iptables-legacy to see them
iptables v1.8.4 (nf_tables):  CHAIN_ADD failed (No such file or directory): chain PREROUTING
```

WSL2でAlmaLinux8.6なのは数台あって一部がこのエラーがでる

動いてるのと動いていないのstraceで比較をとると

```
recvmsg(4, {msg_name={sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, msg_namelen=12, msg_iov=[{iov_base=[{nlmsg_len=68, nlmsg_type=NLMSG_ERROR, nlmsg_flags=0, nlmsg_seq=1662265743, nlmsg_pid=-1424106977}, {error=-EINVAL, msg=[{nlmsg_len=48, nlmsg_type=NFNL_SUBSYS_NFT_COMPAT<<8|NFNL_MSG_COMPAT_GET, nlmsg_flags=NLM_F_REQUEST|NLM_F_ACK, nlmsg_seq=1662265743, nlmsg_pid=0}, {nfgen_family=AF_INET, version=NFNETLINK_V0, res_id=htons(0)}, [[{nla_len=12, nla_type=0x1}, "\x63\x6f\x6d\x6d\x65\x6e\x74\x00"], [{nla_len=8, nla_type=0x2}, "\x00\x00\x00\x00"], [{nla_len=8, nla_type=0x3}, "\x00\x00\x00\x00"]]]}], iov_len=16536}], msg_iovlen=1, msg_controllen=0, msg_flags=0}, 0) = 68
```

socketしてbindしてどこかにsendtoしてるんだけどその戻りのrecvmsgでcommentなんてモジュールはないとエラーになる

Windows側のファイヤーウォールに引っかかってるのかな、

数日かけて切り分けたこと

* 別名でAlmaLinux入れてもダメなPCは再現した
* ウイルス対策ソフトは止めてみても再現したので関係なかったです
* iptable-legacyなんたらは関係ない
* commentの拡張モジュールは`/usr/lib64/xtables/libxt_comment.so` であって `iptables-1.8.4-22.el8.x86_64` に含まれている（＝動くのにも動かないのも正常に存在する）
* `/sbin/iptables -m comment` は正常に動く方でも非rootならモジュールがないとなるけど通信結果でみてるから、root非rootも関係ない
* AlmaLinux側のフィルターに変なのいる？そういえば `iptables --list` すると

```
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
# Warning: iptables-legacy tables present, use iptables-legacy to see them
```
この `# Warning:`行がエラーがでる側だけ表示される。
rhelにはiptables-legacyなんてないのに、、、
てかnftオンリーのがiptablesで見れないんじゃなかったのか、、、

iptablesパッケージでも中身はnftなの？、nft？はゴミと認識しましたエラーちゃんと表示しろ！エラー内容が`No such file or directory`ではないことは確か
iptables-legacy使えとかミスリードしまくり！

```
# 動く環境
Windows 11のインサイダー


$ wsl.exe --version
WSL バージョン: 0.66.2.0
カーネル バージョン: 5.15.57.1
WSLg バージョン: 1.0.42
MSRDC バージョン: 1.2.3401
Direct3D バージョン: 1.606.4
DXCore バージョン: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windowsバージョン: 10.0.25188.1000

# 動かない環境
Windows 10 21H2
# uname -r
5.10.102.1-microsoft-standard-WSL2

```

=====================================
追加情報

```
socket(AF_NETLINK, SOCK_RAW, NETLINK_NETFILTER)
sendto(4, [{nlmsg_len=48, nlmsg_type=NFNL_SUBSYS_NFT_COMPAT<<8|NFNL_MSG_COMPAT_GET, nlmsg_flags=NLM_F_REQUEST|NLM_F_ACK, nlmsg_seq=1662292185, nlmsg_pid=0}, {nfgen_family=AF_INET, version=NFNETLINK_V0, res_id=htons(0)}, [[{nla_len=12, nla_type=0x1}, "\x63\x6f\x6d\x6d\x65\x6e\x74\x00"], [{nla_len=8, nla_type=0x2}, "\x00\x00\x00\x00"], [{nla_len=8, nla_type=0x3}, "\x00\x00\x00\x00"]]], 48, 0, {sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, 12)

```

カーネルが古いからエラーになる？どうやって確認するか
`libnfnetlink.x86_64`は同じバージョンみたいだが

ちなみに直接入れてるrhel8やalmalinuxはカーネルが古くてもコンテナ動いてる！
```
$ uname -r
4.18.0-372.9.1.el8.x86_64
```
カーネルが新しすぎる？？なぜwindows11のが動くのか

```
https://linuxjm.osdn.jp/html/LDP_man-pages/man2/recv.2.html

recvmsg の EINVAL エラーは次なのか？

EINVAL
    不正な引数が渡された。 
```

AF_NETLINKの動作チェックするのしかないのか
めんどくさいな python3ならさらっとできそうだが

========================
2022/9/7 追記
以下のカーネルパラメータはwindows11でもwindows10でも同じ

```
# zcat /proc/config.gz | grep _COMMENT
CONFIG_NETFILTER_XT_MATCH_COMMENT=y
```

NETLINK系もNETFILTER系も大きく違いは無いようだけど、、、

カーネルを差し替えて、カーネル起因と確定させるかな

========================
2022/11/15 追記
8.7になったタイミングで直りました
```
  iptables-1.8.4-23.el8.x86_64
  iptables-libs-1.8.4-23.el8.x86_64
```
あたりだと思う、AlmalinuxというよりRHELが良くないのね
組み合わせが複雑とはいえRHELの動き悪い