実家のMurasameの再設定。
無線LANアクセスポイントとして機能しているMurasameだが、有線セグメントと無線セグメントにネットワークを分け、Murasameの内部でNAPTを掛ける、という実際には無線LANルータとして機能させている。
有線セグメントにぶらさがっているデスクトップマシン(kusanagi)に接続してあるUSBプリンタを無線セグメントにぶらさがっているノート(Masamune)からも使えるようにしたい、というのが母親の要望。要はルータ越しにプリンタ共有を掛けたい、ということ。
目的からすればルーティングとファイアウォール設定をきちんとやり切ればいいはずなので、iptablesでプリンタ共有に必要なポートの開放をしてみたのだが……。どうも上手くいかない。多分スタティック(静的)ルーティングを併用しないといけないのだろうが、スキルが至らず設定できない。
仕方が無いのでルーティングとファイアウォール設定で解決するのを諦め、もう一つの方法「ネットワークブリッジの構築」で解決することにした。
ブリッジとは複数の物理ネットワークインターフェースを1つの仮想ネットワークインターフェースで繋ぎ、同一セグメントとしての通信を可能にする機能のこと。Murasameにはeth0とwlan0の2つの物理ネットワークインターフェースがあり、現在はこの2つをNAPTで結び、別セグメントに置いてある。つまり、Murasameをブリッジ化すると、有線/無線セグメントを単一のセグメントとして扱うことができるようになる。いうなればMurasameにスイッチングハブの機能を導入する、ということだ。
1.カーネルの再構築
カーネルコンフィギュレーションで「Networking Options」の「802.1d Ethernet Bridge」を有効にする。モジュール化で良いはずなのだが、上手くモジュールをロードできず。そのためカーネルにビルトインさせることにした。で、カーネルを再構築。そういえばMurasameはLANカードのドライバでも同じこと(=モジュール化不可)があったな。
2.brigde-utilsのインストール
sourceforgeのプロジェクトページからブリッジ化のためのユーティリティをダウンロード。導入は./configure、make、make installとお約束通り。/usr/local/sbin以下にbrctlというプログラムがインストールされる。
3.ブリッジの構築
brctlコマンドでブリッジを構築する。
#/usr/local/sbin/brctl addbr br0
#/usr/local/sbin/brctl addif br0 eth0
#/usr/local/sbin/brctl addif br0 wlan0
#/sbin/ifconfig eth0 0.0.0.0 up
#/sbin/ifconfig wlan0 0.0.0.0 up
#/sbin/ifconfig br0 192.168.2.100 netmask 255.255.255.0 up
#/sbin/route add default gw 192.168.2.1 br0
仮想デバイス「br0」を作成し、そこに物理デバイスeth0とwlan0を割り当てる。IPアドレス、サブネットマスク、デフォルトゲートウェイはeth0とwlan0には割り当てず、br0自体に割り当てる。これを起動時に実行されるよう、/etc/rc.d/rc.localに書き込んでおいた。
以上の作業で、Murasameはブリッジとして動作するようになる。無線LANクライアントからPingが有線セグメントに直接届くようになったのが確認できた。これはブリッジが正常に動作している証拠である。
ただ、問題が1点ある。
有線接続のKusanagiとブリッジ本体のMurasameの共有フォルダや共有プリンタがネットワークコンピュータ上に「見えない」のである。このあたりは改めてiptables関係を設定してみたが、どうも上手くいかない。ただ、ブラウザやエクスプローラ等で共有リソースを持つマシンのIPアドレスを直接指定すると、共有リソースが見え、ネットワークドライブの割り当てや共有プリンタの設定は可能であった。恐らくNetBIOS over TCP/IPで用いられているポートの問題なのだろうが、現状では解決できず。もっともネットワークコンピュータとして直接「見えない」方がセキュリティ上は好ましいのだが。
また、ルータ機能を切った、ということは、無線アクセスで共有リソースにアクセスしやすくなった、というセキュリティレベルの低下も意味している。このあたりはWPAを導入する、MACアドレスフィルタリングを掛ける、等で別途対処することで解決できそう。