前回の続きです。 ひとまず、webコンソール画面までは拝む事ができるようになったと思いますので、ざくざく設定していきましょう。
今回は前回と違ってボリューム盛りだくさん!編集者泣かせの長文野郎です。覚悟おし。
■基礎の基礎:LAN側からWAN側へNATして出て行く為の設定
なにはともあれ、まずはこの設定から。
WAN側のIPアドレス設定については、スタティックに割り当てる方法の他にも、DHCPでの割当やPPPoE接続で割り当てる方法もあります。また、WAN側MACアドレスを手動で設定したり、MTU値を手動で設定する事もできます。
ご家庭用ブロバンルータと異なるのは、WANリンクにPPTPをサポートしている点。
ここで、
今回のテスト環境ではWAN側に置いたFreeBSDマシンをDNS兼NTPサーバとして動作させ、そのIPアドレスをセットしました。
■LAN側に対してDHCPサービスを提供する
次はLAN側ネットワークに対してDHCPサービスを提供してみます。
DHCPで割り当てるIPアドレスの開始と終了アドレスを入れてあげればひとまずOKです。
■簡易DNSサービスを提供する 簡易DNSサービスって何の事?と思うかも知れません。 市販のブロードバンドルーターでは、「DNSリレー機能」や「DNSフォワード機能」と謳っていたりしますが、動きとしては、m0n0wallのLAN側IPアドレスに対してDNSクエリを投げると、m0n0wallがそのDNSクエリを上位のDNSサーバ(メニューのGeneral Setupで設定したDNSサーバや、DHCP/PPPoE/PPTPで渡されたDNSサーバ)に対して転送してくれる機能です。
上記設定画面で "Enable DNS Forwarder" にチェックボックスを付けて反映してあげれば、DNSフォワード設定は完了です。
例えば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エントリを上書きすることもできます。 WindowsXP等ではデフォルトで time.windows.com と時刻同期をする設定になっていますが、外部へのNTP接続を許していない環境のような場合でも、このように内部NTPサーバのIPアドレスで上書きすることで、クライアント側の設定を変えずに時刻同期をさせることができます。これは地味に便利ですよ。
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
これは、例えば企業などで内部に閉じたドメインやサブドメインを運用していて、既にそのドメインやサブドメインのDNSサーバが存在する場合にとても便利に使えます。
一般のご家庭では、フレッツスクウェアの名前解決がそれに該当しますね。 その場合、DNSクエリに対して後方一致でパターンマッチを掛けて、パターンに合致するクエリについてはこっちのDNSサーバへ転送、それ以外はこっちのDNSサーバへ転送、という機能が必要になります。 この機能、PPPoEマルチセッション対応に対応しているブロードバンドルーターにはちょこちょこ搭載されている場合がありますが、ご家庭での通常使用においてこんな変な事をしなくちゃいけないのはフレッツスクエア対応以外には無いので、マッチパターンがフレッツスクエアの物限定だったり、転送先DNSサーバが手で指定出来なかったりと、フレッツスクエア以外にはなかなか応用が利かないものだったりします。
くどい説明に反して設定はとってもあっさりしたものです。
上記DNS周りの設定を投入した後の設定画面イメージは上記のようになります。 あ、明示的に書きはしませんでしたが、"Enable DNS Forwarder" にチェックを入れてDNSフォワード機能全般を有効にしたうえで、かつ、DNSサーバをm0n0wallのLAN側IPアドレスにセットしないと、この章で説明した全ての機能が利用できません(DNSパケットを透過的に処理してくれる訳ではなく、m0n0wallで終端させる必要がある)。ご注意を。
■WAN側からLAN側へのポートフォワード設定
これもポピュラーな設定ですね。
今はまだ何もエントリが入っていませんが、プラス印のアイコンをクリックして、エントリを追加していきます。
エントリ追加画面。 ポートフォワードを行うプロトコルと、ポート番号、転送先となるIPアドレスとポート番号を入れればOKです。
忘れてはいけないのが、最後にある "Auto-add a firewall rule to permit traffic through this NAT rule" にチェックを入れること。 FireWall(パケットフィルタリング)機能とNAT機能が、それぞれ別に機能していることの片鱗が垣間見えます。
Source:any Port:any で開いちゃってますなあ...
■m0n0wallへのPPTP VPN接続
いよいよ佳境に入ってまいりました。
見ての通り設定項目はそれほど多くはなく、PPTPのコネクションを受け付けるWAN側IPアドレスと、PPTPクライアントに対して渡すIPアドレスブロックを設定するぐらいです。
注意点として、"Remote address range" で設定するIPアドレスは、割当開始IPアドレスを記述するのではなく /28 のネットマスク表記なので、ネットワークアドレスを書いてあげる必要があります。
今はもう少なくなったと思いますが、これらのOSからPPTP接続しようとする場合は、上記チェックはOFFにしておきましょう。
ちなみに、Windows2000については素の状態では最長でも56bitの鍵長にしか対応していませんが、Microsoftのサイトより高度暗号化パックをダウンロードして適用する事で128bit鍵長の暗号化が使用可能になります(恐らくWindowsUpdateやサービスパック等で知らぬ間に適用されているのではないかな?)。
PPTP認証に使うユーザ名とパスワードを追加していきます。
と書いてあるとおり、PPTPクライアントからの接続についてFireWallの穴開けを行う必要があります。
デフォルトではルールは何も入っておらず、PPTPで接続はできても何処にもアクセスできない状態になります。
Sourceは PPTP Clients 、Protocolは今回はとりあえず any とします。
■帯域制限(トラフィックシェーピング)してみる
この機能はブロバンルータには無いでしょう。
ここでSourceやDestination等の縛りを入れる事で、帯域制限の対象とするトラフィックを絞り込む事ができます。
お馴染みのnetperfでLAN→WAN間の通信速度を計測してみます。
なお、この際のCPU使用率は以下のようになっていました。
今回は全てのトラフィックを対象としましたが、対象となるトラフィックを絞り込むことで、特定のIPアドレス間の通信に対する帯域制限や、ポートに対する帯域制限をかけることができます。
もちろん外から中へのトラフィックにも帯域制限を掛けることができます。 この機能はサーバを運用している側にとっては非常に嬉しい機能です。
■LAN側から出て行く際にwebベースの認証を行わせる 次第にマイナーかつディープな世界へ入ってきましたが、いよいよ最終章です。
この機能、Captive portalと言います。
captive = 捕虜にされた; 拘束[束縛]された; 魅惑された. portal = 門, 入口; 出発点;
まだ巧い日本語訳は無いようですね。
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.
とあります。
最初の1回だけ特定の画面を見せる目的としては、ネットワーク利用上の注意や案内をを表示させたり、あるいはその画面でユーザ認証を行わせて、認証通過後に初めて外へのアクセスを許可するという動きです。
あら、ちょっとしたビジネスの香り?学園祭の小銭稼ぎにどうよ?(危なくてやれねーよ)
早速設定してみましょう。
簡単だぜと言っておきながら設定画面がすごーく縦に長いんですが(笑)、とりあえず試しに使ってみるには設定箇所は少ないのでご安心を。
<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>
とはいえ難しいところは何もありません。
ユーザ名とパスワードをセットし、必要に応じてそのアカウントの有効期限をセットします。
さっきアップロードした認証画面が表示されます。
■保守・運用系の機能 以上で一旦FireWallとしての機能についての説明と検証は終わりですが、実際にFireWallを稼働させていく際には、保守・運用系の機能も極めて重要です。
m0n0wallにも一通りの機能は揃ってはいますが、今一歩というのが正直な感想です。
システムの、「今現在」の状況を見るのが "status" セクションで、過去を含めた状況を見るのが "Diagnostics" セクションっぽい感じです。
それはそれでまあいいんですが、厄介なのは、アプリや機能単位で使用しているsyslogファシリティがどこにも記載されていない点。
さらには複数のアプリが同じファシリティで出してたりするので、syslogを外部に転送して取り纏めようとすると、ちょっと面倒です。
先にも述べたとおり、ログは基本的にはsyslog経由で出力されますが、そのログをweb管理画面から見る事も、もちろんできます。
ログに関する設定画面です。
ログと並んで大事な機能はconfigのバックアップ・リストア。
この機能が無いと、設定すっ飛ばしてしまったらゼロからの再設定になってしまいます。
■最後にベンチマーク
お待たせしました。
今回は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を結構食ってる...
Device polling って設定です。 対応NICが限られているとは書いてありますが、FreeBSDとは相性バッチリのfxp。きっと対応しているはず! と思ったら公式サイトにポーリングモード対応NICデバイス一覧がありました。
やった。
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
激減。
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
うーん、やっぱり暗号化通信は結構な負荷になるんですね。 暗号化アクセラレータについては、hifn社の7951(Firebox1000で使用されていたアレ)等、いくつかのアクセラレータカードに対応しているようなので、本格的にVPN接続を使うのであればこれら暗号化カードの導入を検討してみましょう。
■まとめ
1ページで書くには多すぎるほどの分量になってしまいました(特集記事みたいだな)。
したがって、業務で使用する場合等のように「止まるとメチャ困る!」ような場合には、事前に本番構成のハードウェアで入念な稼働テストを行った上で導入することは必須ですし、当然、m0n0wall自体が自己責任での利用が前提なので、何か起きたときに自分で解決することがコイツを導入する際の必須条件です。
また、安定性については、少なくとも私の環境で1ヶ月ちょっと動かしていますが、不安定になることもなく極めて安定して動いてくれています。
|