2007年7月


前回の続きです。

ひとまず、webコンソール画面までは拝む事ができるようになったと思いますので、ざくざく設定していきましょう。


と、言っても何やるか明確になっていないと説明もしづらいですし見る方も分かりづらいでしょうから、やることを事前に明確にしておきます。


まずは基礎となるネットワーク構成。
今回は、以下のようなネットワーク構成で組んでみました。



この構成で、

  • LAN側からWAN側へNATで出て行く事ができる
  • LAN側に対してDHCPサービスを提供する
  • 簡易DNSサービスを提供する
  • WAN側からLAN側に対してポートフォワード設定を行う
  • m0n0Wallに対してPPTPでVPN接続し、LAN側ネットワークへ乗り込む
  • 帯域制限してみる
  • LAN側からWAN側へNATで出て行く際にwebベースの認証を行わせる
ということを試してみようと思います。
今回は前回と違ってボリューム盛りだくさん!編集者泣かせの長文野郎です。覚悟おし。


■基礎の基礎:LAN側からWAN側へNATして出て行く為の設定

なにはともあれ、まずはこの設定から。
いわゆるブロードバンドルーター状態です。


ここでNATで行うべき設定は、

  • LAN側のIPアドレス変更
  • WAN側のIPアドレス設定
  • WAN側デフォルトゲートウェイ設定
です。


つまり、IPアドレスさえ振ってしまえば、LAN→WANへのNAT設定は暗黙のうちに行われます。


LAN側・WAN側のIPアドレス設定については、webコンソールのメニューにそのものズバリの項目があるので迷う事は無いでしょう。


WAN側のIPアドレス設定については、スタティックに割り当てる方法の他にも、DHCPでの割当やPPPoE接続で割り当てる方法もあります。また、WAN側MACアドレスを手動で設定したり、MTU値を手動で設定する事もできます。
この辺はご家庭用ブロードバンドルーターと変わりないですね。

ご家庭用ブロバンルータと異なるのは、WANリンクにPPTPをサポートしている点。
拠点間をPPTP接続させることで、インターネットVPNを簡単に構築する事ができます。


また、BigPondという見慣れない物がありますが、これはオーストラリアのTelstra社という通信事業者が運営しているBigPondブロードバンドサービスを使用している場合に使う設定のようです。
PPPoEではない別の接続方式らしく、それ用の設定項目が用意されています。
が、少なくとも日本国内で使用する分には意識する必要はないでしょう。



設定が終わったら、IPアドレス設定を反映させるために再起動します。
再起動後にLAN側からWAN側へアクセスしてみて、無事アクセスが出来る事が確認できれば、ひとまず最低限の設定は完了です。


題目的にはこれで完了ですが、外と繋がるようになったところで、後々の設定でも使用する事になる基礎項目について、ついでに設定してしまいましょう。


メニューの General Setup で設定する項目類がそうです。

ここで、

  • m0n0wallのホスト名、ドメイン名
  • DNSサーバのIPアドレス
  • NTPサーバのIPアドレス
  • タイムゾーン
  • web管理コンソールにログインするユーザ名とパスワード
をセットします。
今回のテスト環境ではWAN側に置いたFreeBSDマシンをDNS兼NTPサーバとして動作させ、そのIPアドレスをセットしました。


DNSについては、WAN側の接続をDHCPやPPP(PPPoE/PPTP)接続にした場合に、DHCPやPPPサーバから渡されたDNS情報で上書きするかどうかのチェックボックスがあります。上書きを許可する場合はチェックを付けておきます。


ここまで設定したら、次へ進みます。


■LAN側に対してDHCPサービスを提供する

次はLAN側ネットワークに対してDHCPサービスを提供してみます。
これもメニューから選んで項目を入れていくだけなので全く問題ないでしょう。

DHCPで割り当てるIPアドレスの開始と終了アドレスを入れてあげればひとまずOKです。
MACアドレス毎に毎回決まったIPアドレスを割り当てることも当然できます。
普通に使う分には、設定自体は特に変なところは無いので、迷う事はないでしょう。


今回は、192.168.0.201〜205の範囲をDHCP割り当て用として設定しました。
設定反映後、LAN側にパソコンを繋げ、DHCPでIPアドレス等が設定されている事を確認できれば設定は完了です。


■簡易DNSサービスを提供する

簡易DNSサービスって何の事?と思うかも知れません。

市販のブロードバンドルーターでは、「DNSリレー機能」や「DNSフォワード機能」と謳っていたりしますが、動きとしては、m0n0wallのLAN側IPアドレスに対してDNSクエリを投げると、m0n0wallがそのDNSクエリを上位のDNSサーバ(メニューのGeneral Setupで設定したDNSサーバや、DHCP/PPPoE/PPTPで渡されたDNSサーバ)に対して転送してくれる機能です。


WAN側の接続方法や接続先が比較的頻繁に変わる場合には、各クライアントのDNS設定をその度毎にいちいち変えなくてもいいので重宝される機能です。


設定自体はとても簡単。

上記設定画面で "Enable DNS Forwarder" にチェックボックスを付けて反映してあげれば、DNSフォワード設定は完了です。


このDNS Forwarderを有効にすると、DHCPやPPTPクライアントに対して渡されるDNSサーバのIPアドレスはm0n0WallのLAN側IPアドレスになります。



さて、「簡易DNSサービス」と言っておきながらこれだけだと、簡易ってレベルじゃねーぞと文句を言われそうです。
もちろん、これだけでは終わりません。


「簡易DNS」の名の通り、m0n0wall内部に閉じたDNSエントリをweb画面から設定する事ができます。

例えばLAN側のマシン192.168.0.31を "thinkpad.example.jp" という名前で内部的に名前解決させたければ、以下のように設定します。


設定が変更されたら、試しに名前を引いてみましょう。

C:\>nslookup thinkpad.example.jp
Server:  m0n0wall.example.jp
Address:  192.168.0.1

Name:    thinkpad.example.jp
Address:  192.168.0.31


良さそうですね。

この機能、既存のDNSエントリを上書きすることもできます。
例えば、自前でNTPサーバを立てている場合は、time.windows.com をそのNTPサーバのIPアドレスにセットすることもできます。

WindowsXP等ではデフォルトで time.windows.com と時刻同期をする設定になっていますが、外部へのNTP接続を許していない環境のような場合でも、このように内部NTPサーバのIPアドレスで上書きすることで、クライアント側の設定を変えずに時刻同期をさせることができます。これは地味に便利ですよ。


また、"Register DHCP leases in DNS forwarder" にチェックを付けておくと、DHCPでアドレスを配ったマシンの名前をこの簡易DNSへ自動的に登録してくれます。

C:\>ipconfig /renew

Windows 2000 IP Configuration

Ethernet adapter Linksys11b:

        Connection-specific DNS Suffix  . : example.jp
        IP Address. . . . . . . . . . . . : 192.168.0.205
        Subnet Mask . . . . . . . . . . . : 255.255.255.0
        Default Gateway . . . . . . . . . : 192.168.0.1

C:\>nslookup 192.168.0.205
Server:  m0n0wall.example.jp
Address:  192.168.0.1

Name:    LibrettoSS1000.example.jp
Address:  192.168.0.205


こうしておくと、DHCPで割り当てられるIPアドレスが変わったとしても名前でDHCPクライアントへ接続できます。


個人的には具体的な利用シーンがあんまり思いつきませんが、うーん、VNCやリモートデスクトップで接続するときには便利かなー。あとはP2Pスタイルのチャットアプリとか?



さらにDNS周りの機能として、ドメイン単位で参照するDNSサーバを変える事ができる機能があります。

これは、例えば企業などで内部に閉じたドメインやサブドメインを運用していて、既にそのドメインやサブドメインのDNSサーバが存在する場合にとても便利に使えます。

一般のご家庭では、フレッツスクウェアの名前解決がそれに該当しますね。
少なくともNTT東日本エリアの場合、フレッツスクウェア内の名前空間は ***.flets という名前空間になっていて、かつ、その名前解決をさせるためにはフレッツ網内部の専用DNSを参照する必要があります(2007.07現在)。

その場合、DNSクエリに対して後方一致でパターンマッチを掛けて、パターンに合致するクエリについてはこっちのDNSサーバへ転送、それ以外はこっちのDNSサーバへ転送、という機能が必要になります。

この機能、PPPoEマルチセッション対応に対応しているブロードバンドルーターにはちょこちょこ搭載されている場合がありますが、ご家庭での通常使用においてこんな変な事をしなくちゃいけないのはフレッツスクエア対応以外には無いので、マッチパターンがフレッツスクエアの物限定だったり、転送先DNSサーバが手で指定出来なかったりと、フレッツスクエア以外にはなかなか応用が利かないものだったりします。



と、くどい講釈をたっぷり堪能して戴いたところで、実際の設定です。
どうも話が長くなっていけませんね。


くどい説明に反して設定はとってもあっさりしたものです。
対象のドメインと、転送先DNSサーバのIPアドレスを入れるだけ。
IPアドレスは、LAN側でもWAN側でも構いません。


今回の例では、"internal.example.jp" というサブドメインへのDNSクエリについては 192.168.0.11 へ転送するという設定にしてみました。


設定が完了したら、試しに引いてみましょう。
うまくいきました?



上記DNS周りの設定を投入した後の設定画面イメージは上記のようになります。

あ、明示的に書きはしませんでしたが、"Enable DNS Forwarder" にチェックを入れてDNSフォワード機能全般を有効にしたうえで、かつ、DNSサーバをm0n0wallのLAN側IPアドレスにセットしないと、この章で説明した全ての機能が利用できません(DNSパケットを透過的に処理してくれる訳ではなく、m0n0wallで終端させる必要がある)。ご注意を。



■WAN側からLAN側へのポートフォワード設定

これもポピュラーな設定ですね。
自宅サーバを公開している人や、ネットゲームを利用する際には必須とも言える設定になります。


m0n0wallの場合、細かい設定が出来る分だけ設定は市販のブロードバンドルーターに比べると若干面倒です。
設定自体は、Firewall→NATからInboundタブを選択した画面で行います。

今はまだ何もエントリが入っていませんが、プラス印のアイコンをクリックして、エントリを追加していきます。
今回はLAN側のマシンに対して外からVNCで接続できるような設定を入れてみました。


エントリ追加画面。
特に難しいところは無いと思います。

ポートフォワードを行うプロトコルと、ポート番号、転送先となるIPアドレスとポート番号を入れればOKです。

忘れてはいけないのが、最後にある "Auto-add a firewall rule to permit traffic through this NAT rule" にチェックを入れること。
チェックを入れておくと、このこのポートフォワード設定に対応したFireWallのルールが同時に作成・適用されます。

FireWall(パケットフィルタリング)機能とNAT機能が、それぞれ別に機能していることの片鱗が垣間見えます。


ちなみに今回の設定で自動的に追加されたFireWallルールはこんな感じです。

Source:any Port:any で開いちゃってますなあ...
Portは必要なものだけ空けるように、ちょっとルールをいじって締めたほうがよいですね。


NAT設定と一緒に自動生成されるFireWallルールはあくまで雛形程度に考えておいて、最終的には手でカチっと固めた方が良いようです。



■m0n0wallへのPPTP VPN接続

いよいよ佳境に入ってまいりました。
m0n0wallをPPTP VPNサーバへ仕立て上げ、外からLAN側ネットワークへ乗り込んでみます。


なんだか大仰そうですが、実は意外と簡単です。
設定は、VPN→PPTP から行います。


見ての通り設定項目はそれほど多くはなく、PPTPのコネクションを受け付けるWAN側IPアドレスと、PPTPクライアントに対して渡すIPアドレスブロックを設定するぐらいです。

注意点として、"Remote address range" で設定するIPアドレスは、割当開始IPアドレスを記述するのではなく /28 のネットマスク表記なので、ネットワークアドレスを書いてあげる必要があります。
ですが、厳密に /28 のネットワークアドレスを入れなくても、近いIPアドレスへ自動的に寄せてくれます。


ユーザ認証にRADIUSを使うような場合はそのRADIUSサーバの情報を入れる必要がありますが、今回はm0n0wall自身にユーザID・パスワードを持たせてそいつで行わせるつもりなので特にいじる必要はありません。


なお、設定の最後にある、"Require 128-bit encryption" にチェックを入れておくと、128bitの暗号化鍵長に対応していないクライアントからの接続要求を拒否しします。
具体的には、Windows98やWindowsMEがそれに該当します(それぞれ40bitの鍵長しか対応していない)。

今はもう少なくなったと思いますが、これらのOSからPPTP接続しようとする場合は、上記チェックはOFFにしておきましょう。

ちなみに、Windows2000については素の状態では最長でも56bitの鍵長にしか対応していませんが、Microsoftのサイトより高度暗号化パックをダウンロードして適用する事で128bit鍵長の暗号化が使用可能になります(恐らくWindowsUpdateやサービスパック等で知らぬ間に適用されているのではないかな?)。
WindowsXP以降は最初から128bit鍵長に対応しています。




さてPPTPサーバ側の設定ができたら、次はPPTPの認証に使うユーザの作成を行いましょう。

PPTP認証に使うユーザ名とパスワードを追加していきます。
ちなみに、このVPN設定以外にもユーザ名とパスワードを設定する項目はいくつかありますが、お互いに連携している訳ではなく、それぞれ個別管理になっています。


ユーザの作成ができたら、PPTPサーバ側の準備は整いました。
次はFireWallの設定です。


PPTPサーバの設定画面の一番下に

と書いてあるとおり、PPTPクライアントからの接続についてFireWallの穴開けを行う必要があります。


設定場所は Firewall→Rules→PPTP VPN になります。

デフォルトではルールは何も入っておらず、PPTPで接続はできても何処にもアクセスできない状態になります。


とりあえず動作確認レベルなので、PPTPリンクからの接続は全スルーという設定を入れてみます。


Sourceは PPTP Clients 、Protocolは今回はとりあえず any とします。
ルールを保存、反映させたら準備は完了です!
(WAN側NICに対するPPTPセッション用の穴開けルールは不要のようです)


お待たせしました。実際に繋げてみましょう。
PPTPクライアント側で、PPTP接続のための設定を行います。


以下はWindowsXPから接続する場合の接続設定例です。

「スタート→設定→ネットワーク接続→新しい接続ウィザード」で、接続設定ウィザードを開始。
接続種類。
「職場のネットワークへ接続する」を選択。
ネットワーク接続。
「仮想プライベートネットワーク接続」を選択。
名称を設定。
お好きな名前を。
PPTPによるコネクションを張る前にダイヤルアップ接続するかの設定。
今回は「ダイヤルしない」を選択。
PPTPで接続する接続先を指定。
PPTPサーバのIPアドレスかFQDNを入力。
作成したPPTP接続設定をこのマシンの全ユーザで利用可能にするか。
お好きにどうぞ。
設定完了。
いよいよ接続です。
設定したユーザIDとパスワードを入力して「接続」をクリック!
接続に成功するとこのように接続アイコンが出てくると思います。


接続に成功したら、PING等でLAN側の機器へ疎通確認を行ってみましょう。
うまくいきましたか?


この機能と、今回は説明はしませんが WOL 機能を併用する事で、外出先から自宅LANへ乗り込んで、WOL対応の機器の電源を投入した上でリモートコントロールを行う事ができるようになります。


例えば、WOLに対応し、LAN経由での操作ができるHDDビデオレコーダーを持ってる場合は、出先から電源ONして予約録画できたり、モノによっては貯め撮りしたコンテンツをストリーミング視聴できたりできます。便利ですよ。



■帯域制限(トラフィックシェーピング)してみる

この機能はブロバンルータには無いでしょう。
帯域制限(トラフィックシェーピング)です。


設定の流れとしては、まず帯域制限自体のルール(帯域幅や、制限方法など)を作り、それをどのトラフィックに適用するかのルールを設定します。


設定画面はFireWall→Traffic Shaperにあります。


まずは帯域制限方法についてのルールを作っていきましょう。
「pipes」タブをクリックし、設定を入れていきます。


今回は小難しい事を考えず、単純に10Mbpsの帯域制限を行うことにします。
Bandwidthを10000Kbpsとして帯域制限ルールを作成します。


次に、その帯域制限ルールを適用するトラフィックについてのルールを設定していきます。



これも特にいじらず、全ての通信に対して先程作った10Mbpsの帯域制限ルールを適用することにします。

ここでSourceやDestination等の縛りを入れる事で、帯域制限の対象とするトラフィックを絞り込む事ができます。




設定が済んだら、その効果の程を試してみましょう。

お馴染みのnetperfでLAN→WAN間の通信速度を計測してみます。


すると...



ご覧の通り、ガッチリ10Mbpsで頭打ちになっています。

なお、この際のCPU使用率は以下のようになっていました。



m0n0wallを動かしているマシンはCeleron366MHzのメモリが128MBという質素な構成ですが、それでも帯域制限を掛けた際に消費するCPUリソースについて、それほど神経質になる必要はなさそうです。

今回は全てのトラフィックを対象としましたが、対象となるトラフィックを絞り込むことで、特定のIPアドレス間の通信に対する帯域制限や、ポートに対する帯域制限をかけることができます。
後者の場合は、例えばtcpの80番ポートに対する通信に対して帯域制限をかけておくと、webアクセスによる回線帯域の圧迫を防ぐことができます。

もちろん外から中へのトラフィックにも帯域制限を掛けることができます。
例えばwebサーバを立てている場合、事前にそこへの帯域制限を掛けておけば、アクセス集中等でそいつに帯域をガッツリ持って行かれそうになったとしても、それ以外のトラフィック用の帯域を確保することができます。

この機能はサーバを運用している側にとっては非常に嬉しい機能です。



■LAN側から出て行く際にwebベースの認証を行わせる

次第にマイナーかつディープな世界へ入ってきましたが、いよいよ最終章です。

この機能、Captive portalと言います。

    captive = 捕虜にされた; 拘束[束縛]された; 魅惑された.
    portal = 門, 入口; 出発点;

まだ巧い日本語訳は無いようですね。
「ブラウザ認証」と一部では呼ばれているようです。


Wikipediaによる説明(英語)には、

    The captive portal technique forces an HTTP client on a network to see a special web page (usually for authentication purposes) before surfing the Internet normally.

とあります。
何となく分かりました?


LANへの接続は許すけど、外へ出るには最初に特定の画面を見せてからでないと外へは出さないという挙動になります。
個人的な経験では、ホテル等の公衆無線・有線LAN環境でこの機能を使っている所をチラホラ見かけます。

最初の1回だけ特定の画面を見せる目的としては、ネットワーク利用上の注意や案内をを表示させたり、あるいはその画面でユーザ認証を行わせて、認証通過後に初めて外へのアクセスを許可するという動きです。


認証通過後○分間だけ外部への接続を許すという設定にすることもできるので、例えば100円でインターネット回線○分使えるよ、なーんて公衆電話チックなこともできます。

あら、ちょっとしたビジネスの香り?学園祭の小銭稼ぎにどうよ?(危なくてやれねーよ)


これも設定はそれほど難しくはありません。
ユーザ認証を行う場合でも、機能をONにして、認証画面のHTMLを作り、ユーザを作ればおしまいです。

早速設定してみましょう。


簡単だぜと言っておきながら設定画面がすごーく縦に長いんですが(笑)、とりあえず試しに使ってみるには設定箇所は少ないのでご安心を。


まずは最初の "Enable captive portal" にチェックを入れます。
そしてAuthenticationセクションは「Local」を選択し、最後に "Portal page contents" セクションでユーザ認証を行う際に表示させるHTMLファイルをアップロードすれば完了です。


ユーザ認証を行う際のHTMLファイルは、雛形が設定画面に書いてありますのでそれをベースにチャチャっと作ってみましょう。
今回はこんな感じの簡単なHTMLフォーム画面にしました(ほぼ雛形そのまんま)。

<html><head><title>認証</title></head>
<body>
<h3>認証が必要です</h3>
<form method="post" action="$PORTAL_ACTION$">
   <input name="auth_user" type="text">
   <input name="auth_pass" type="password">
   <input name="redirurl" type="hidden" value="$PORTAL_REDIRURL$">
   <input name="accept" type="submit" value="Continue">
</form>
</body>
</html>


次はユーザの作成です。

とはいえ難しいところは何もありません。


ユーザ名とパスワードをセットし、必要に応じてそのアカウントの有効期限をセットします。


ここまでできたら設定は完了です。
実際にLAN側からどこか外部のサイトへwebでアクセスしてみると...


さっきアップロードした認証画面が表示されます。
認証を通過しないと、webはおろかPINGも通りません。


IDとパスワードを入れて認証を通過すると、はじめて外部への通信ができるようになります。


Captive portalをONにすると、webコンソールのStatusメニューに「Captive portal」の項目が増え、そこで現在どのユーザが接続しているかを見る事ができます。



このCaptive portal機能、設定画面が異様に縦長だった事からも分かるとおり、ユーザ毎の帯域やセッション数を制限したり、RADIUSによるユーザ認証が使えたりと、機能は豊富です。


今回はLAN側から外に出て行く全てのトラフィックに対してルールを適用しましたが、特定のMACアドレスやIPアドレスについては規制の対象外とすることもできます。
ですがやっぱり推奨されるのは、NICを1個追加して、そのNIC以下まるごと規制対象セグメントとする使い方をする方が良いでしょうね。FireWallルールや帯域制限のルール設定がNIC単位なので、設定する上でも管理の上でもその方が楽です。


設定や使い方、アイデア次第でかなり使える機能だと思います。



■保守・運用系の機能

以上で一旦FireWallとしての機能についての説明と検証は終わりですが、実際にFireWallを稼働させていく際には、保守・運用系の機能も極めて重要です。

m0n0wallにも一通りの機能は揃ってはいますが、今一歩というのが正直な感想です。
そうは言っても、市販のブロバンルータよりは格段に情報を取る事が出来ますよ。


メニューのこの辺が該当する項目になります。
システムの、「今現在」の状況を見るのが "status" セクションで、過去を含めた状況を見るのが "Diagnostics" セクションっぽい感じです。


FireWallで重要なのは各種のログ情報になりますが、基本的には各種機能を担当しているアプリがそれぞれsyslog経由でログをぼんぼん投げているという形になります。

それはそれでまあいいんですが、厄介なのは、アプリや機能単位で使用しているsyslogファシリティがどこにも記載されていない点。
local7だったりdaemonだったり、モノによってまちまちです。

さらには複数のアプリが同じファシリティで出してたりするので、syslogを外部に転送して取り纏めようとすると、ちょっと面倒です。
各機能・アプリ毎にsyslogファシリティを設定できるか、さもなくば全部同じファシリティに統一して、その統一されたファシリティを設定変更できるようになってくれればいいのになあ、と思いました。


ログ周りまで気に掛けてくれるFireWallアプライアンス製品は、実はなかなか無いんですよねぇ。


あ、m0n0wallのFirewallログはipmon形式になります。


先にも述べたとおり、ログは基本的にはsyslog経由で出力されますが、そのログをweb管理画面から見る事も、もちろんできます。
参照可能なログ種別は上記スクリーンショットを参照あれ。


ログに関する設定画面です。
ログの転送先設定や転送対象などをここで指定する事ができます。
syslogによるロギングなので、転送先はsyslogdが動作し、かつ、他のサーバからのsyslog転送を受け付ける設定にしておかないとダメです。


ここで、ログの種類毎にどのファシリティで出すか、なんて設定ができれば良いんですけどねえー。惜しい。



ログと並んで大事な機能はconfigのバックアップ・リストア。
これもweb管理画面から実施する事が出来ます。

この機能が無いと、設定すっ飛ばしてしまったらゼロからの再設定になってしまいます。
比較的大きな設定変更の前後は、きちんと設定のバックアップを取っておきましょう。


■最後にベンチマーク

お待たせしました。
最後はやっぱりこれです。


とはいえ、他のFireWallアプライアンスと異なり、m0n0wallは稼働するハードウェアがまちまちになるのであんまり意味は無いかも知れませんが...


まずはお馴染みの、LAN→WANへのnetperfによるベンチマーク結果です。
稼働母体となるハードウェアは、先にも書きましたがCeleron366MHzにメモリ128MBという質素な構成です。

今回はm0n0wallのweb管理画面にトラフィックのグラフを表示する機能があるので、その画面も一緒に乗っけておきます。


c:\>netperf-2.1pl1.exe -H 10.0.0.10
TCP STREAM TEST to 10.0.0.10
Recv   Send    Send
Socket Socket  Message  Elapsed
Size   Size    Size     Time     Throughput
bytes  bytes   bytes    secs.    10^6bits/sec

 65536   8192   8192    10.00      50.71

c:\>netperf-2.1pl1.exe -H 10.0.0.10
TCP STREAM TEST to 10.0.0.10
Recv   Send    Send
Socket Socket  Message  Elapsed
Size   Size    Size     Time     Throughput
bytes  bytes   bytes    secs.    10^6bits/sec

 65536   8192   8192    10.00      50.57

c:\>netperf-2.1pl1.exe -H 10.0.0.10
TCP STREAM TEST to 10.0.0.10
Recv   Send    Send
Socket Socket  Message  Elapsed
Size   Size    Size     Time     Throughput
bytes  bytes   bytes    secs.    10^6bits/sec

 65536   8192   8192    10.00      51.23

c:\>netperf-2.1pl1.exe -H 10.0.0.10
TCP STREAM TEST to 10.0.0.10
Recv   Send    Send
Socket Socket  Message  Elapsed
Size   Size    Size     Time     Throughput
bytes  bytes   bytes    secs.    10^6bits/sec

 65536   8192   8192    10.00      50.78

50Mbps前後をウロウロって感じですね。
思ったより速度が出てない...

しかも、

CPUを結構食ってる...


こんなもんなの?何かおかしくないか?


と思って色々見てみたところ、web管理メニューの「System: Advanced setup」の下の方に、NICの制御方法を変える設定があるのを見つけ、早速チェックを入れてみました。

Device polling って設定です。
通常はLANカードからの割り込みを受けて処理を行うところを、この機能を使うと1秒間に1000回のタイミングでLANカードに対してポーリングを行うことで処理速度の向上を図るというものです。

対応NICが限られているとは書いてありますが、FreeBSDとは相性バッチリのfxp。きっと対応しているはず!

と思ったら公式サイトにポーリングモード対応NICデバイス一覧がありました。

やった。
容易に入手できるNICにはおおむね対応していますね。
通称カニチップでお馴染みのRealtek8139シリーズ使用の爆安LANカードも対応されています(デバイス名rl)。


そしてpollingモードに変更した後の結果はコチラ。


c:\>netperf-2.1pl1.exe -H 10.0.0.10
TCP STREAM TEST to 10.0.0.10
Recv   Send    Send
Socket Socket  Message  Elapsed
Size   Size    Size     Time     Throughput
bytes  bytes   bytes    secs.    10^6bits/sec

 65536   8192   8192    10.00      72.14

c:\>netperf-2.1pl1.exe -H 10.0.0.10
TCP STREAM TEST to 10.0.0.10
Recv   Send    Send
Socket Socket  Message  Elapsed
Size   Size    Size     Time     Throughput
bytes  bytes   bytes    secs.    10^6bits/sec

 65536   8192   8192    10.00      75.24

c:\>netperf-2.1pl1.exe -H 10.0.0.10
TCP STREAM TEST to 10.0.0.10
Recv   Send    Send
Socket Socket  Message  Elapsed
Size   Size    Size     Time     Throughput
bytes  bytes   bytes    secs.    10^6bits/sec

 65536   8192   8192    10.00      74.53


おおっ、素晴らしい。


しかもCPU負荷も

激減。


やっぱりこうでなくちゃね!



また、今回はPPTP接続によるVPNトンネルでのスループットを測定してみました。
LAN側ネットワークにnetperfサーバを置き、PPTPトンネル経由でnetperfによるトラフィック測定を行ってみます。


結果はこちら!


c:\>netperf-2.1pl1.exe -H 192.168.0.11
TCP STREAM TEST to 192.168.0.11
Recv   Send    Send
Socket Socket  Message  Elapsed
Size   Size    Size     Time     Throughput
bytes  bytes   bytes    secs.    10^6bits/sec

 65536   8192   8192    10.00       7.73

c:\>netperf-2.1pl1.exe -H 192.168.0.11
TCP STREAM TEST to 192.168.0.11
Recv   Send    Send
Socket Socket  Message  Elapsed
Size   Size    Size     Time     Throughput
bytes  bytes   bytes    secs.    10^6bits/sec

 65536   8192   8192    10.00       7.88

c:\>netperf-2.1pl1.exe -H 192.168.0.11
TCP STREAM TEST to 192.168.0.11
Recv   Send    Send
Socket Socket  Message  Elapsed
Size   Size    Size     Time     Throughput
bytes  bytes   bytes    secs.    10^6bits/sec

 65536   8192   8192    10.00       7.79


そしてその時のCPU負荷はこんな感じ。

うーん、やっぱり暗号化通信は結構な負荷になるんですね。

暗号化アクセラレータについては、hifn社の7951(Firebox1000で使用されていたアレ)等、いくつかのアクセラレータカードに対応しているようなので、本格的にVPN接続を使うのであればこれら暗号化カードの導入を検討してみましょう。



■まとめ

1ページで書くには多すぎるほどの分量になってしまいました(特集記事みたいだな)。
ちょっと見づらいですね。少し落ち着いたらページを分割する等して構成を整理しようと思います。


さてm0n0wallですが、専用ハードウェアに専用ソフトという組み合わせではない分、Firewallシステムで最重要とされる「落ちない」という安定性・信頼性については評価のしようがないという宿命があります(ソフトの問題かハードの問題かという話になるので)。

したがって、業務で使用する場合等のように「止まるとメチャ困る!」ような場合には、事前に本番構成のハードウェアで入念な稼働テストを行った上で導入することは必須ですし、当然、m0n0wall自体が自己責任での利用が前提なので、何か起きたときに自分で解決することがコイツを導入する際の必須条件です。
それができないような場合は素直に保守契約付きの普通のFireWallアプライアンスを購入・使用した方が良いと個人的には思います。


が、それらを踏まえた上での利用ということであれば、見ての通り設定も容易で機能も豊富なので、これはかなりオススメです。
とりわけ、ちょっと自宅で凝ったことをやってみたいハイアマチュア向けには最適ではないでしょうか。
市販のブロバンルータでは物足りない、かといってFireWallアプライアンス製品を買うまでのお金もない、でも、多少の知識と時間と機材はあるぜ、という層ですね。

また、安定性については、少なくとも私の環境で1ヶ月ちょっと動かしていますが、不安定になることもなく極めて安定して動いてくれています。
断言はできませんが、変なハードウェア使わなければ安定性については心配ないんじゃないかなと思います。
それこそヤフオク等でPentiumIIIクラスの型落ちサーバー機を1万円以下で買ってきて、こいつを突っ込んでしまえばハード面での心配は無くなるかなと思います。サーバ機なら民生品に比べて多少はしっかり設計してあると思うので。
ラックマウントタイプなら見た目もFireWallアプライアンスとしては満点ですしね(笑)


夏休み中の学生さん、今年の夏はこいつと戯れてみるってのはいかがですか?
社会人になると、こんなことやって遊んでられる時間はなかなか無いですぜ。



なうなう一覧へ