LS−GLのiptablesによるルーター化 我が家にはインターネット回線が2回線入っており、一つはSTNetのFTTHでもう一つはYahooのADSLである。 この回線に対するルーターは、FTTHの方はメルコ製を使用しているが、Yahooに対しては、直接Linuxを入れたパソコンを繋いでおり、iptablesによるファイアウォールでガードしている。 したがって、今回のYahooに繋いでいるノートPCの老朽化からLS−GLに置き換えることを試みているが当然このLS−GLでもiptablesを動かす必要があることから挑戦してみた。 当初この試みについては、これまでTurbopascalで苦労なく動かせていたので簡単に動くのではと思っていた。 ところが # apt-get install iptables でインストールし、 # iptables -L で状態を確認しようとしたところ FATAL: Module ip_tables not found. iptables v1.3.6: can't initialize iptables table `filter': iptables who? (do you need to insmod?) Perhaps iptables or your kernel needs to be upgraded. なるメッセージが出て動かない。 モジュールip_tablesを組み込めといっているようである。しかし、カーネルの状態を確認してみるとiptables関係のモジュールには全くチェックが入っていない。 これでは動かないのは当然と納得し、設定の変更に取り掛かったが、何を組み込めばよいのか見当がつかない。ネットを見ている内にその類の記述を発見し、それに倣って設定した。 今回の設定は 1.カーネルへのiptables関係のモジュール組込み 2.zd1211bのドライバー再コンパイル 3.カーネルモジュールの読み込み 4.iptablesのセットアップスクリプト作成 5.ネットワーク起動スクリプト/etc/network/interfaceの修正 1.カーネルの再構築 iptablesが使えるようにカーネルを再構築する。 # cd /usr/src/linux/linux-2.6.16_lsp.1.7.8 でカーネルのソースディレクトリーに移動して # make menuconfig でカーネル設定画面を呼出し、 Networking ---> [*] Networking support Networking options ---> [*] Network packet filtering (replaces ipchains) --->チェック後Enterで下に移動 [*] Network packet filtering debugging 関係ないかもしれないが念のためチェック Core Netfilter Configration ---> ここの下にある全てにチェック IP: Netfilter Configration ---> ここの下にある全てにチェック なお、IP: Netfilter Configrationの下をチェックすることで上の Core Netfilter Configrationの下の設定が一部変わるので再度 Core Netfilter Configrationに戻り再チェック。 で修正して # make uImage # mkimage arch/arm/boot/uImage # make modules # make modules_install # cp arch/arm/boot/uImage /boot/uImage.buffalo 必要により旧カーネルをuImage.buffalo.oldなどの名前 で保存 こ こで # make modules_install を実行した時に、module-init-toolsが無いとのメッセージが出た。module-init-toolsは インストールしているのでのでインストールの必要は無いのであるが、もしかしてMakefilesの記述に問題があるのではと思い見てみると /kernel26なるディレクトリーにあるdepmodを指定しているやの記述を発見、おかしいのでディレクトリー指定を削除してdepmodのみとした。結果メッ セージはでなくなった。 INSTALL net/netfilter/xt_limit.ko INSTALL net/netfilter/xt_mac.ko INSTALL net/netfilter/xt_mark.ko INSTALL net/netfilter/xt_pkttype.ko INSTALL net/netfilter/xt_realm.ko INSTALL net/netfilter/xt_sctp.ko INSTALL net/netfilter/xt_state.ko if [ -r System.map -a -x depmod ]; then depmod -ae -F System.map -b binaries -r 2.6.16.16-arm1; fi しかし、最後にスクリプトのような物が表示されているが、これについては私の知識では意味が分らなかった。 いずれにせよ、エラー表示はあったがこれはあまり関係なかったようであり、Makefilesを修正する前からモジュールはインストールされていたようである。 2.zd1211bの再コンパイル LS−GLをルーターとして使う場合2つのネットワークインタフェースが必要となるが、一つは内蔵LANであり、これはYahooのADSLモデムに接続 する。もう一つはUSB端子に接続する無線LANのUSBタイプのアダプターでメルコのWLI−U2−KG54Lを使ってホームネットワーク に接続する。 このためWLI−U2−KG54Lを動かす必要があるが、ドライバーはLS−GLを無線LANのアクセスポイント化した時に組み込んでいたので挿せば動く のではと思っていたが、何故か動かない。iwconfigでパラメータの設定は出来るが動いていないようである。iwlistなど色々いじくっているとメ モリー関係共有違反のようなエラーメッセージが出る。どうも上手く動いていないようである。理由はよくわからないが再コンパイルしてみることにした。 # cd /usr/src/zd1211-driver-r85 でソースのあるディレクトリーに移動し、 # make # make install で再コンパイルが出来た。insmodで再度組込み、WLI−U2−KG54Lを挿入してみると上手く動いているようである。 カーネルソースに無いドライバーを持ってきた時は、カーネルの再構築に併せて再コンパイルが必要なのかもしれない。経験の少ない私には不可解な事ばかりである。 3.カーネルモジュールの読み込み iptablesの説明を見ていると必要なモジュールは自動で読み込むとの事であるが、今回のケースではいくらiptablesを起動してもモジュールを読み込む気配が無い。 同じモジュールでも無線LANのドライバーはアダプターを挿す事で上手く読み込まれている。 カーネルのモジュールだけが上手く動いていないのは make modules_install が上手く動いていないのだろうか。だとするとMakefilesの設定がまずいのかもしれないが、それを追求する時間も知識も有そうに無い。 仕方が無いので手動でinsmodを使って読み込ます事とするが、沢山あるのでどれを読み込ませば良いか分らない。 しかたがないので、現在ルーターとして使っているノートが組込んでいるモジュールを見てみたり、ネットを見たりでこれはと思われるものを組み込んでいくが、時々知らないシンボルがあるなどといってエラーとなる。 # insmod ip_tables.ko Unknown symbol in module その場合は、dmesgでメッセージを見ると具体的なシンボル名があるのでそれからモジュールを推定して組み込んでみる。上手く当たればエラーは出なくなる。 # dmesg ip_tables: Unknown symbol xt_free_table_info ip_tables: Unknown symbol xt_register_match ip_tables: Unknown symbol xt_find_match ip_tables: Unknown symbol xt_alloc_table_info ip_tables: Unknown symbol xt_unregister_match ip_tables: Unknown symbol xt_register_target ip_tables: Unknown symbol xt_register_table ip_tables: Unknown symbol xt_proto_init ip_tables: Unknown symbol xt_replace_table ip_tables: Unknown symbol xt_find_table_lock ip_tables: Unknown symbol xt_table_unlock ip_tables: Unknown symbol xt_proto_fini ip_tables: Unknown symbol xt_find_revision ip_tables: Unknown symbol xt_unregister_table ip_tables: Unknown symbol xt_find_target ip_tables: Unknown symbol xt_unregister_target このケースではxt_tablesを先に組み込むとOKとなった。 この作業の繰り返しで何とか動く状態になった時の組込みモジュールは以下の通りである。 # lsmod Module Size Used by xt_tcpudp 3104 2 xt_state 1728 2 ipt_MASQUERADE 3040 1 iptable_nat 7044 1 iptable_filter 2304 1 ip_nat 15186 2 ipt_MASQUERADE,iptable_nat ip_conntrack 51032 4 xt_state,ipt_MASQUERADE,iptable_nat,ip_nat ip_tables 11528 2 iptable_nat,iptable_filter nfnetlink 5432 2 ip_nat,ip_conntrack x_tables 10852 5 xt_tcpudp,xt_state,ipt_MASQUERADE,iptable_nat,ip_tables zd1211b 298048 0 これを起動時に組み込む必要があるが、Debian推奨の方法が分らないので、次に示すiptablesの設定ファイルの最初のところに記述することとした。 4.iptablesのセットアップスクリプト作成 今回必要なFirewallの機能は、
スクリプトの記述方法をネットで調べてみた結果、以下の設定で取り敢えず動いている。 セキュリティ面からは、もっと細かく設定すべきであるがそれはこれから少しずつ追加していくこととする。ここで最初にある# set modulesのところが前で述べたカーネルモジュールの組込み部分である。 setiptable.sh
このスクリプト実行方法であるが、旧サーバーのTurboでは/etcにrc.localなるファイルがあり、DOS時代のautoexec.batファ イルのように起動時実行したい物があればここに書けばいいというような仕組があったが、Debianの場合は良く分らないので調べてみると幾つかあるよう であった。
組込みが終わった後は、以下のコマンドでIPマスカレードが設定できたかどうか確認できる。また、現実のネットワークを使ってdefault gatewayをルーターのIPアドレスとして外部のネットワークにpingを打つことでも確認できる。 ybb:/home/anabuki# iptables -t nat -L Chain PREROUTING (policy ACCEPT) target prot opt source destination Chain POSTROUTING (policy ACCEPT) target prot opt source destination MASQUERADE 0 -- 192.168.0.0/24 anywhere Chain OUTPUT (policy ACCEPT) target prot opt source destination フィルターの確認は、 ybb:/home/anabuki# iptables -L である。 5.ネットワーク起動スクリプト/etc/network/interfaceの修正 今回のケースで心配だったのは、USBタイプの無線LANアダプターの起動方法であった。方法はこれも二つほど考えられ、
ファイルの内容は以下の通りで、Yahooに対してはLAN端子(ここではeth0)を使いDHCPでアドレスを取得し、ホームネットワークに対しては無 線LAN(ここではwlan0)に固定のIPアドレスを付けている。最適な記述方法は分らないが取り敢えずこれで動いている。
なお、無線LANの設定項目は適当であるが、動いているのでこの程度にしている。iwconfigでチェックの上、必要であれば指定項目を追加すべきであろう。 これによるルーティングテーブルはこんな感じである。 ybb:/home/anabuki# route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.0.0 * 255.255.255.0 U 0 0 0 wlan0 220.45.72.0 * 255.255.252.0 U 0 0 0 eth0 default softbank2200450 0.0.0.0 UG 0 0 0 eth0 ホームページトップ LinkStationトップ |