モジュールのロードで問題にぶつかることがあるかもしれない。例えば、そのような名前のモジュールはないという旨のエラーなどだ。このエラーは下記のような表示となるだろう:
insmod: iptable_filter: no module by that name found
だが、そんなに心配することはない。そのモジュールはカーネルにスタティックにコンパイルされているのかもしれない。この問題を解決しようとする時に真っ先に検討すべきはこの点だ。そのモジュールが既にロード済みかどうか、あるいはカーネルにスタティックにコンパイルされているかどうかは、そのモジュールの機能を使用するようなコマンドを発行してみれば一目瞭然だ。上記の例ならば、filter テーブルをロードしようとしてもできないはずだ。当該の機能が存在しなければ、filter テーブルは、はなから使えないはずである。filter テーブルが存在するかどうか調べるには以下のようにする:
iptables -t filter -L
結果は、filter テーブル内のすべてのチェーンが出力されるか、もしくはエラーになるかのどちらかだ。もし問題がなければ、既にルールを入れてあるかどうかにもよるが、出力は下記のようなものになるはずだ:
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
一方、filter テーブルがロードできていない場合には下記の ようなエラーとなる:
iptables v1.2.5: can't initialize iptables table `filter': Table \ does not exist (do you need to insmod?) Perhaps iptables or your kernel needs to be upgraded.
こうなると事態は少々深刻だ。第一の可能性としては、その機能がカーネルにコンパイルされていない、第二に、そのモジュールが通常のパス上に見つからない、ということを示しているからだ。こうなる原因として考えられるのは、モジュールをインストールするのを忘れたか、モジュールデータベースを更新する depmod -a をやり忘れたか、その機能がスタティックにもモジュールとしてもコンパイルされていないかだ。モジュールがロードされない原因はもちろんこの他にも考えられるが、主なものはこれらだ。これらの問題は簡単に解決できる。最初の原因なら、カーネルのソースディレクトリで make modules_install を実行すればよい (ただしソースがコンパイル済みでモジュールがビルド済みの場合)。 2番目である場合は、depmod -a を 1回実行してから、動くかどうか確かめてみることだ。3番目の問題はここで扱うには少々手に余るので、自分で頭をひねっていただくしかなさそうだ。この件についての詳しい情報は、Linux Documentation Project で見つかるだろう。
iptables 実行時に遭遇するかもしれないもうひとつのエラーは下記 のものだ。
iptables: No chain/target/match by that name
このエラーは、そのようなチェーンはない、あるいは、ターゲットまたはマッチがない と告げている。これには膨大な数のファクターが絡んでくるが、一番ありがちなのは、チェーン、ターゲット、マッチのスペルを打ち間違えていることだ。また、利用不可能なマッチを使用しようとした場合にも、このエラーが出る。適切なモジュールがロードされていないか、カーネルにコンパイルされていない、あるいは、iptables がモジュールの自動ロードに失敗したかのいずれかが原因だろう。おしなべて言えば上記の解決策を全部検討してみるべきだが、ルールの中に某かの誤字がないかも見直してみたほうがいい。