imai98
2024年3月11日 16時23分
お世話になっております。
OP-TEEを利用するにあたって、Armadillo-IoT ゲートウェイ G4 セキュリティガイドの6.4.8「OP-TEEを組み込む」を参照し、podmanコンテナを起動することで利用しておりました。先週ごろまでは問題なくコンテナを起動し、利用できていたのですが先日起動を試みたところ以下のようなエラーが生じました。
Error: netavark: unable to append rule '-d 10.88.0.0/16 -j ACCEPT' to table 'nat': code: 4, msg: iptables v1.8.10 (nf_tables): RULE_APPEND failed (No such file or directory): rule in chain NETAVARK-1D8721804F16F
原因の確認のため、
iptables -t nat -L -v
でchainが存在することを確認し、その上で改めてiptablesのコマンドで直接
iptables -t nat -A NETAVARK-1D8721804F16F -d 10.88.0.0/16 -j ACCEPT
を実行しましたが、全く同様のエラーが出たという状況です。
Alpine Linuxのバージョンを確認したところAlpine Linux v3.19.1へアップデートされていたのでそれがなにか関係しているのかと考えていますがもし何かご存知でしたら教えていただけますと幸いです。
よろしくお願いいたします。
コメント
imai98
早急なご対応ありがとうございます。
> そのモジュールがない場合に上記のエラーが発生しますが、いかがでしょうか。
確認してみたところ、以下のようであり、
/etc/containers # zcat /proc/config.gz | grep NFT_NAT CONFIG_NFT_NAT=m /etc/containers # modinfo nft_chain_nat modinfo: can't open '/lib/modules/5.10.185/modules.dep': No such file or directory
確かにモジュールが存在しないようでした。
> おそらく自分のカーネルをビルドして使用していると思いますが、そのカーネルをビルドした時にオプションを変更しましたか? Armadillo IoT G4 向けの「x2_defconfig」では nft モードに必要な CONFIG_NFT_NAT 等の設定は最初から入ってますのでデフォルトのコンフィグどおりにモジュールもインストールされている場合にコマンドを問題なく利用できると思いますが、設定を無効にした場合には使用できなくなってしまいました。
こちら確かに自身でビルドしたカーネルを利用しているのですが、カーネルのビルドオプションで私が変更した箇所は主にkprobeに関するところであったはずであり、NAT周りのオプションに変更を加えた記憶がないという次第です。x2_defconfigを確認したところ、確かにこちらでもCONFIG_NAT_NFT=mとなっていることを確認したのですが、モジュールがインストールされないのは私がどこに変更を加えてしまったからでしょうか。できれば、自分でカーネルをビルドしつつnftのiptableを利用したいと考えていますので教えていただけると幸いです。参考のため、x2_defconfigを添付させていただきます。
>
> 残念ですが、alpine では簡単に切り替える方法はありませんが、カーネルの変更が難しい場合は iptables-legacy パッケージをインストールして iptables と ip6tables のリンクを無理やりに変更すれば再び使用可能になると思います。
> Armadillo Base OS を更新する度に再び行う必要がありますのであまりおすすめできませんが、どうしてもの場合は以下のコマンドを参考にしてください。
>
> armadillo:~# persist_file -a add iptables-legacy > fetch https://download.atmark-techno.com/alpine/v3.19/atmark/aarch64/APKINDEX.tar.gz > fetch https://dl-cdn.alpinelinux.org/alpine/v3.19/main/aarch64/APKINDEX.tar.gz > fetch https://dl-cdn.alpinelinux.org/alpine/v3.19/community/aarch64/APKINDEX.tar.gz > (1/3) Installing libip4tc (1.8.10-r3) > (2/3) Installing libip6tc (1.8.10-r3) > (3/3) Installing iptables-legacy (1.8.10-r3) > Executing busybox-1.36.1-r15.trigger > OK: 222 MiB in 202 packages > Install succeeded, but might not work in the running system > Please reboot if installed program does not work > armadillo:~# ln -sf xtables-legacy-multi /sbin/iptables > armadillo:~# ln -sf xtables-legacy-multi /sbin/ip6tables > armadillo:~# persist_file -v /sbin/iptables /sbin/ip6tables > '/mnt/sbin/iptables' -> '/target/sbin/iptables' > '/mnt/sbin/ip6tables' -> '/target/sbin/ip6tables' >
こちらの方法でのpodmanコンテナの起動を確認しました。ありがとうございます。
ファイル | ファイルの説明 |
---|---|
x2_defconfig.txt | 拡張子に制限があるようでしたので.txtの拡張子にいたしました。 |
at_dominique.m…
マルティネです。
> /etc/containers # zcat /proc/config.gz | grep NFT_NAT > CONFIG_NFT_NAT=m > /etc/containers # modinfo nft_chain_nat > modinfo: can't open '/lib/modules/5.10.185/modules.dep': No such file or directory
> 確かにモジュールが存在しないようでした。
確認ありがとうございます。
defconfig に問題はないようですが、インストールした際に Image ファイルだけをコピーした形でインストールされてますね。
モジュールのインストール手順は初期のころにはっきりされてませんでしたが、よろしければ最新のマニュアルの「Linux カーネルをビルドする」からの「インストール」(6.) を参照ください:
https://manual.atmark-techno.com/armadillo-iot-g4/armadillo-iotg-g4_pro…
また、インストールの際にモジュールがコピーされてもアップデートで失った可能性もありますので、「grep /lib/modules /etc/swupdate_preserve_files
」などで永続化の確認もお願いします(マニュアルの swupdate 方法で自動的に行われますが、この点も分かりにくいと思います)
> 参考のため、x2_defconfigを添付させていただきます。
ファイルありがとうございます。このままで問題ないと思います。
最新のバージョンと比べて見たところ、いくつかの USB デバイスが有効にされましたが、使用されてない分に影響ありません。
また、関心の nft のモジュールを細かい最適化のために最新のカーネルに有効にして、もう使われない legacy のモジュールをモジュールに戻しましたが、それも得に影響ありません(強いて言えば、legacyのモジュールが =y のままでは iptablesコマンドを手動に実行すると「Warning: iptables-legacy tables present, use iptables-legacy to see them」の警告が表示されますが、動作自体に影響ありません)
> kprobeに関するところであったはずであり
ちなみに kprobe関連のオプションだけでしたら、マニュアルに説明してないのでとても恥ずかしいですが「linux-at-x2-debug」のパッケージを使用できます。
デフォルトの状態に比べたら以下の設定が有効になっています:
CONFIG_AUDIT=y CONFIG_BLK_DEBUG_FS=y CONFIG_BPF_SYSCALL=y CONFIG_CGROUP_PERF=y CONFIG_DEBUG_FS=y CONFIG_DEBUG_INFO=y CONFIG_DEBUG_INFO_BTF=y CONFIG_DYNAMIC_DEBUG=y CONFIG_DYNAMIC_FTRACE=y CONFIG_FTRACE=y CONFIG_FTRACE_SYSCALLS=y CONFIG_FUNCTION_TRACER=y CONFIG_HIST_TRIGGERS=y CONFIG_IKHEADERS=m CONFIG_KPROBES=y CONFIG_KRETPROBES=y CONFIG_PERF_EVENTS=y CONFIG_SOFTLOCKUP_DETECTOR=y CONFIG_TRACEPOINTS=y CONFIG_TRACING=y CONFIG_UPROBES=y CONFIG_WQ_WATCHDOG=y
使用方法としては以下のとおりです(実行中に再起動すると起動できなくなる恐れもありますので、運用に向いてない方法です):
persist_file -rd /lib/modules persist_file -a add linux-at-x2-debug
このパッケージでも swupdate_preserve_files にカーネルの保存が設定されたら更新でも残ります( https://manual.atmark-techno.com/armadillo-iot-g4/armadillo-iotg-g4_pro… )
こちらに関しては私の余計なお世話なだけですので、無視して構いません!(こちらでも kprobe をよく使ってますので…)
よろしくお願いします
at_dominique.m…
2024年3月11日 16時54分
imai98さん
お世話になっています、
マルティネです。
大変お手数をおかけしています。
alpine 3.19 アップストリームでは iptables コマンドを iptables-legacy の実装から iptables-nft という実装に切り替えましたので、おそらくその影響だと考えています。
お手数ですが、まずは一点を確認させてください。
おそらく自分のカーネルをビルドして使用していると思いますが、そのカーネルをビルドした時にオプションを変更しましたか? Armadillo IoT G4 向けの「x2_defconfig」では nft モードに必要な CONFIG_NFT_NAT 等の設定は最初から入ってますのでデフォルトのコンフィグどおりにモジュールもインストールされている場合にコマンドを問題なく利用できると思いますが、設定を無効にした場合には使用できなくなってしまいました。
以下のコマンドでは、モジュールがちゃんと有効になっている例です(バージョンによって2パターン):
そのモジュールがない場合に上記のエラーが発生しますが、いかがでしょうか。
残念ですが、alpine では簡単に切り替える方法はありませんが、カーネルの変更が難しい場合は iptables-legacy パッケージをインストールして iptables と ip6tables のリンクを無理やりに変更すれば再び使用可能になると思います。
Armadillo Base OS を更新する度に再び行う必要がありますのであまりおすすめできませんが、どうしてもの場合は以下のコマンドを参考にしてください。
(戻りたい場合はリンクを xtables-nft-multi に戻してください)
よろしくお願いします