利用 - みる会図書館


検索対象: BSD magazine No.11 BSDでルータを作ろう! ; システムコールプログラミング入門
140件見つかりました。

1. BSD magazine No.11 BSDでルータを作ろう! ; システムコールプログラミング入門

フロジェクト短信 PA 〇 Report 先日 BSD な友人たちと宴会をしました。やつばり宴会っ ていいものですね。 : - ) 今月は 4.5 ー RELESE 情報に加えて NEWCARD 情報もお伝えします。 FreeBSD 4.5-RELASE FreeBSD 4.5-RELASE がリリースされました。ノート PC に関して言えば、 4.4-RELEASE から 4.5-RELEASE への変 更点にあまり大きなものはありません。対応する PCIC が増 加していますが、あまり日本では見かけないもののようで す。 認識機構に関する更新 ・東芝の T 。 P ℃に関する修正 ToPIC PC カードコントローラに関するコードにいくつ かの改良が加えられ、より適切な方法で pc カードを認 識し取り扱うことができるようになりました。これに より、いくつかの T 。 PCI 使用ノート PC において使い勝 手が向上すると予想されます。 ・ CirrusLogic の CL-PD67[12]x に関する修正 CL-PD67[12]x PC カードコントローラに関してもいく つかの改良が加えられ、 3.3V カード対応の修正などが 行われました。また、 CL - PD6729 を搭載したノート pc では、 2 つ目の pc カードスロットが利用できなくなっ てしまっていましたが、これが正しく利用できるよう になっています。もちろん、 2 つめのスロットで 3.3V pc カードを利用することも可能です。 ・ Omega 82C094 チップ対応 Omega82C094PC カードコントローラに対応しました。 ・ ncv 、 nsp 、 stg のモシュールイヒ ドライバに関する更新 注 1 http ://www.j p. FreeB SD. org/cgi/cvsweb.cgi/src/etc/defaults/pccard.conf an ドライバが monitor m 。 de に対応しました。詳細は ・ an の monitor mode 対応 分 (scsi-low) がモジュール化されました。 ライバと、これらが共通して使用する下位レイヤー部 PC カード SCSI ドライバである、 ncv 、 nsp 、 stg の各ド のだまさひで / M 勧 / NODA mac@clave.gr.jp mac@jp.FreeBSD.org ancontrol ( 8 ) を参照してください。 対応する PC カード 最近の F A Q に「 p c カードの動作確認リスト (SUPPORTERD CARDS) はありませんか」というものがあ ります。残念ながら、 4. x に対応した s UPPO RTERD CARDS はありませんが、それに近いものはみなさんの pc の中にも存在しています。そう、 pccard. conf です。 cvsweb. cgi 注 1 などを利用することで、 WEB 経由でも pccard. conf を見ることができますので、 pc カードの購入の 際はぜひ参考に注 2 してみてください。 NEWCARD on 5-CURRENT NEWCARD の PCMCIA カード対応は、ここ数か月のあ いだに an 、 awi 、 ata などのドライバの対応が完了し、執 筆時点 ( 2002 年 2 月 ) 現在では、リスト 1 のドライバが NEWCARD 対応になっています。 OLDCARD ( 現在の pc カ ード認識機構 ) で利用可能なカードの多くが、 NEWCARD でも問題なく利用可能です。 また、これに加えて CardBus カードの利用ももちろん可 能です。筆者は dc ドライバで利用可能なネットワークカー ドを所有していますが、問題なく利用できています。 リスト 1 NEWCARD で利用可能な PCMCIA カード 無線 LAN カードドライバ LAN カードドライバ scs 工カードドライバ ATA カードドライバ モデムカードドライバ an 、 aWI 、 1 cs 、 ed 、 ep 、 fe 、 sn aIC at a S10 ジョイスティックカードドライバ 」 OY とはいえ、完成度という意味ではまだまだ十分ではなく、 今後も開発を進めていかなければならないでしよう。 5-CURRENT のリリースは 1 年延びましたが、その 1 年を 貴重なものにしていきたいですね。 注 2 参考にして動作するものを買うのもよいですが、動作しないものを敢えて買うのもおすすめです 198 BSD magazine 2002 No. 1 1

2. BSD magazine No.11 BSDでルータを作ろう! ; システムコールプログラミング入門

B 5 0 でルータを作ろう ! らアクセスするのは性能的にも安全 SeriaI ConsoIe を利用し、ディスプレ 性からいっても好ましくないので、 イなどは接続しないようにしよう。 運用に使うための Netw 。ⅸをここに なお、今回のように近隣でシリアル 設置する。 コンソールを利用する場合、図 2 のよ うにシリアルを接続して運用すること なお、 TerminaI Server とは、シリア ルを介して他の機器に接続するため も考えられるが、今回は Router2 がシ のものと考えてほしい。 terminal リアルポートを使用するので、この構 server から各機器の se ⅱ al に無手順で 成は採用できない。 接続し、 serial console から制御する などしておくと便利である。 本稿では、詳しい説明は割愛する。 折角なのでちょっとだけ複雑な Network を定義してみることにする。 今回の Network では ・ IPv4 address として xxx. xxx. xxx. 0/28 が割り当てられている (xxx には適 当なアドレスを入れてほしい ) ・ IPv6 address として foobar: : / 48 が割り 当てられている (foobar には適当な IPv6prefix を入れてほしい ) ものとする。 NetBSD-1.5.2 を stall する 複雑に見えるトボロジーだが、実は 今回の構成では、すべてのルータは これは 3 つの部分に分割できる。 NetBSD を使用する。今回採用するの 本稿では、サーバーの作り方などを扱 は NetBSD-1.5.2 Release である。 OS の lnstall のしかたは割愛するので、 わないのでゾ Router1 、 Router2 、 1. BackBone Network 今回は、 IPv4 アドレスに xxx. xxx. xxx. Router3 の構成のみを挙げることにする。 過去の記事を参照していただきたい。 表 1 のような構成を仮定する。 注意する点としては、 0 / 29 、 IPv6 アドレスに BackBone::/64 を 割り当てた。 さて、 Router とはいえ、今回作成する インターネットとは R 。 uterl を介して ・インストールするアプリケーション のは Unix による PC / AT でのルータで 。ここで、各ルータに Display とキ 接続されており、各サーバーなどの は最小で良い。その代わりに I 。 g を貯 ある 収容を行う。 ーポードをつけつばなしで動かすとす めるべき / var ディレクトリを大きく確 保するべきである。 ると、そのためにディスプレイなどが 2. Home Network 自宅である。 128Kbps の専用線を介 必要になる。今回は 3 台なので、ディ ・電源断などのトラブルからできるだ して接続されている。 スプレイを 3 台、キーボード 3 台という け早く復旧するため、あまり書き換 ーこに、監視運用に使う host を設置 大きな構成になり、設置場所によって える必要のないパーティションは はスペースが無駄になってしまうこと するものとする。 ReadOnly で mount するべきである。 も考えられる。 ・したがって、 1 パーティションで運用 3. Operation Network 今回は、 TerminaI Server を設置し するようなことはせす、 / 、 /var 、 /usr 、 運用用のネットワークである。サー バーの面倒を見るのに BackB 。 ne 側か てあるので、コンソールにはすべて / h 。 me 辺りは分離すべきであろう。 なお、 /tmp は、 MFS にするか、別 part ⅲ。 n を利用するのが良いだろう。 ・ R 。 uter 上でしばしば利用するアプリ ケーションとしては、 ntp 、 syslog 、 ipf 、 ssh 、 (dhcpd) 、 rtadvd 、 snmpd 、 経路制御ェンジン ( ルーティングエ ンジン ) がある。また、ルータは攻 撃対象になりやすいので、 accounting 機構を利用したり、 Kernel の security Level を上げておくことが望ましい。 ・逆にルータ上では、 MTA (sendmail や p 0 s t fi x など ) 、 N F S 、 N I S 、 NetBSD の install 各機器の構成 1 : coml 2 : com2 すべて RS -232C Cross Cable Router1 Router2 2 1 図 2 日 outer 間のシリアルコンソール接続の例 表 1 各機器窈冓成 機器 Arch NIC lntel EtherExpressPRO x2 t EtherExpressPRO, NE2000 DEC DE500AD Router1 日 oute 「 2 Router3 i386 i386 i386 2002 No. 1 1 BSD magazine 023

3. BSD magazine No.11 BSDでルータを作ろう! ; システムコールプログラミング入門

国際化 / フォント関連 ・ CTEXT とマルチバイト文字の処理に関する XIib の問 ・ bcftpcf に起因するフォントの重なり問題が解消されました。 ・ X11R6.6 の 118N サポートが XIib に追加されました。 ・多くの locale / 国際化キーボードが追加サポートされました。 されました。 ・ Luxi スケーラブルフォント (TrueType 、 Typel) が追加 題が解消されました。 トールされるようになりました。他のアプリケーショ ・ fontenc レイヤが更新され、 fontenc ライプラリがインス OS 固有 タが追加されました ( 実験的 ) 。 ・ Unicode 端末に IS02022 や locale を提供する "luit" フィル が変更されました。 ・ UTF-8 locale 用に Xlib の入力メソッドフレームワーク ンからの利用も可能です。 ・ XDarwin で Xinerama に対応しました。 されました。 ・ rootless モード (Aqua 上に x client を表示する ) が追加 の修正が行われました。 ・ Mac OS x 対応のために以下に代表されるような多く ポートがなくなりました。 ・すでに動作できなくなっていた Am 。 eba と Min ⅸへのサ ・ Linux/mps サポートが更新されました。 ・ Linux / m68k でも x サーバーカ u ⅱ d できるようになりました。 側がサポートされました。 ・ Sparc64 用の NetBSD や OpenBSD についてクライアント ・ OpenBSD/powerpc をサポートしました。 ・ cygwin サポートが大幅に修正されています。 うになりました。 ・ Linux/arm32 や IBM S / 390 用の Linux でも build できるよ るようになりました。 ・リアルタイム OS QNX(QNX4 、 QNX6) でも build でき い問題を解消しました。 ・ gcc のバージョンによって mod ⅲ e をコンパイルできな 仮想コンソール切り替えできるようになりました。 ・ FreeBSD で i810 ドライバを使用したときにも間題なく フロジェクト短信 ・ XDarwin のフルスクリーンモードでは色数 / サイズ / リフレッシュレートを Aqua 上の設定とは独立に設 定できるようになりました。 ・ GLX サポートが追加されました。 ・ XDarwin のキーマップ設定が改良されました ( 特に 国際化キーボード等 ) 。 ・英語 / 日本語に加えて、オランダ語 / フランス語 / ドイ ツ語 / スペイン語 / 韓国語の UI が追加されました。 モジュールについて すでに大分前の話になりますが、 Trident 社がポリシーを 変更して新しいチップ (BIadeXP 以降 ) に関しては技術資料 を外部に提供しないようにするという話が出ていました。 そのため BladeXP に関しては他のチップと共通のコードで 動作する部分のみで、 ( 既存のチップと制御が異なるため ) アクセラレーションが効かない ( つまり遅い ) 状態になり、 将来のチップが従来のものと互換性が低下していくにつれ てサポートできなくなってしまうというわけです。 4. x 系の モジュール形式で Trindet からドライバを提供することで Linux でも利用できるとのことだったようです。確かに Linux 用のドライバとして提供されたものを FreeBSD で使用 することはできます。しかしモジュールが OS には依存しな くても CPU には依存するため、たとえば Linux / i386 用のド ライバを Linux/Alpha では使用できません。恐らくべンダが 提供するのは intel 系のみの可能性が高いでしようから、そ れ以外では使えなくなってしまうということになりかねま せん。各べンダが自社の製品の性能を最大限利用できる ドライバを提供してくれることはありがたいことですが、 情報を隠蔽されると不幸になるユーザーも多少は発生する でしよう。またサーバーとのバージョンの違い等による問 題が発生したりしても調査も対策もできなくなる可能性が 高くなるはずです。べンダの意向次第でサポートを打ち切 られることもあるでしよう。 結局今回の Trident の件に関しては、方針転換が XFree86 にはあまり影響のない範囲に落ち着いたように ( 筆者の乏 しい英語力では ) みえたのですが、今後の各ビデオチップ べンダの動向次第によってそういう製品を避けるというこ とも必要になるかもしれません。 2002 No. 1 1 BSD magazine 217

4. BSD magazine No.11 BSDでルータを作ろう! ; システムコールプログラミング入門

3 5 0 でルータを作ろう ! ルータにおける フィルタリングについて 近年では、インターネットへの接続がかなり常識となってき ており、誰もがインターネットに接続されているようになった。 インターネットとは社会の基盤の「 1 つ」となり得るものだ と筆者は信じているが、それは道路と同様モラルが守られて いるべきだ思う。 しかしながら、現実のインターネットでは、モラルの低い ( ない ) 一部のユーザーによるクラッキング行為が日常と化し、 ウイルスや DoS / DDOS などが横行する状態になっているのも 否定し難い状況である。個人的にはこのようなモラルのない ユーザーには死刑や追放を宣告したいところだが、現在のと ころ有効にそのような馬鹿者を追い出す方法はない。 もちろん、 CERT なども努力されているし、さまざまな開発 者達もできるだけ攻撃に強いシステムを作り、運用者達も攻 撃を防ごうと日夜努力をしているが、基本的には、とにかく 自衛あるのみという状態である。 本誌のセキュリティ特集の号汨にも記載されているし、さ まざまなセキュリティ関係の書籍などにも記載されていること ・セキュリティを厳しくすると利便性か下がる login 画面が出て、ユーザー名とパスワードの入力を行うよ うにするだけでも「不便だ ! 」と苦情が来るようになる。 また、強制的にパスワードを変えなければならないように システムを設定すると、「面倒だ冂と苦情が来る。 ・セキュリティを緩くすると攻撃される smtp のリレーを許すと UCE の踏台にされるし、 telnet を許 すとパスワードを奪われてしまう場合がある。しかも、 root を乗っ取られてデータも壊されてしまうというような状態 が発生する。 セキュリティの世界には、「まさか家の子だけは」という論 理はまったく通用しないし、しかもその攻撃されている事実 を掴めない場合もしばしは有在するのである。 さて、ルータにおけるフィルタリングだが、ルータでフィル タリングを行わなければならないのは、以下の理由による。 1. 端末が安全であることを仮定できない Windows は、案外開いているポートが多く、またその閉じ もちろん、ルータでフィルタリングを行ってもすべての攻撃 に対する影響は最小限にとどめられる。 ルータで可能な限り攻撃を止めておけば、内部ネットワーク 3. 一般的な攻撃による内部ネットワークの混乱を防止する ーはネットワークの専門家ではないからである。 うなるのかわからないで行う場合が多い。なぜなら、ユーザ されてしまうことがある。しかし、ユーザーは、「なぜ」そ の利用ができるように設定されたがゆえに外部からアクセス 新しいアプリケーションが提供された際にネットワークから 2. ユーザーが何を行うか予想できない ポートあったり、そこにセキュリティホールがある場合もあ 方がわからない。 BSD や Linux などでも、標準で開いている いかを冷静に考えていただき、必要に応じて道具として利用 えている方はぜひ考えを改め、 NAT で何ができて何ができな 場合もあるので一概にはいえないが、 NAT があれば安全と考 NAT は万能ではない。もちろん、 NAT である程度楽ができる は結局 NAT の内側にまで影響を与えてしまうことを考えると、 また、 NAT があっても Mail Virus や CodeRED のような攻撃 半は、バケットフィルタでも防ぐことができる。 があるようだが、 NAT を利用することで保護できる攻撃の大 なお、 NAT を利用すればセキュリティが保てるという議論 ると良いだろう。 を行えるので、本誌のバックナンバー注 2 を参照の上設定され 利用してフィルタリングを行えば十分バケットフィルタリング BSD システムでルータを作成した場合、 ipfilter や ipf などを きるので、ぜひ活用してほしい。 p 「 otoc 引に応じた制御などは、 ALTQ などで処理することがで 被害を与えないようにすることは可能である。このような はルータで止めることができれば、少なくとも LAN の内側に 析を行わなければならない ) が、℃ MP を利用した DDoS など されるようなウイルスなどはルータでは止め難い ( データの解 が止められるわけではない。たとえばメールに添付されて配送 していただきたいと思う。 注 1 BSDmagazine2000No.6 、特集「セキュリティと暗号技術を考える」 注 2 BSD magazine 2000 No. 5 、特集「 BSD で My Se Ⅳ e 「を作ろう ! 」 BSDmagazine2001 NO. 7 、特集「ファイアウォールを考える」 BSD magazine 2001 No. 10 、特集「ネットワーク管理者虎の巻」 2002 No. 1 1 BSD magazine 021

5. BSD magazine No.11 BSDでルータを作ろう! ; システムコールプログラミング入門

FreeBSD(98) プロジェクト 4.5R-RevO 1 フロジェク短信 下保敏和 / K 。加 kaho@elam.kais.kyoto-u.ac. JP 4.5R ー Rev01 が 2002 年 2 月 15 日にリリースされています。 アナウンスは以下の URL で参照することができます。 http ://home.jp.FreeBSD.org/cgi-bin/showmail/ announce-jp/93 kern の変更点 新たに pmc ドライバが追加されました。これは、以前 unoff. patch として提供されていたもので、本家のソースツ リーにマージされました。したがって、 cvsup 等で 4.5-stabeI にアップデートした場合も利用可能です。機能としては、 APM をサポートしていないような古い 98note で shutdown -p で電源を切れるようにします。 画面表示用のドライバ sysc 。 ns が高速化されました。漢 字対応化により描画座標の計算量が多くなっていたところ を、 ASC Ⅱの場合は計算を簡略化することにより計算量を 減らしています。 CPU が高速な場合はあまり体感できない かもしれません。 fe ドライバに C-NET(98)P2 の pnp ID が登録されました。 4. OR から、 ISAPnP が自動的に使われるようになって、 c- NET ( 98 ) P2 が利用できなくなっていたようです。 pnp—般 に言えることですが、 kernel に fe ドライバが組み込まれてい れば、 p 。 rt や irq を指定しなくても自動的に認識します。 sysres ドライバが 4.4R ー Rev01 でエラーを出していたのが 修正されました。 sysres は、ドライバによってリソースの 確保がされていないが、実際には未使用ではない領域のリ ソースの確保を行います。たとえば、 DMA コントローラ の利用している IO 空間は、リソースの利用を宣言せずに使 用されています。 sysres を組み込まずに、 pnp で空いている 領域を検索すると、本来使えない領域を使えると認識し、 pnp カードに利用してはいけない領域を割り当ててしまう ことになります。 pnp を使わない場合は、 sysres を組み込ま なくても、特に問題は発生しません。 unoffical patch FreeBSD ( 98 ) の配布物中の tooIs98/unoff. patch-4.5 以下 に、非公式パッチという形でいくつかのファイルが含まれ ています。新たに増加したパッチはありません。変更点は 以下の通りです。 canBe シリーズを shutdown ー p により電源を切れるように する canbepm で、利用する IRQ を検索する方法に問題があ り、 IRQ がコンフリクトしてしまう可能性がありました。 この点が修正されています。 c 。 I の日本語化パッチが、べースシステムの変更に追い 付いてなく、 4.4R ー Rev01 でコンパイルできなくなっていま した。また、 blue. console パッチも 4.4R - Rev01 では 4.3R - RevO 1 用になっていました。これらのパッチが、 4.5R - Rev01 用に更新されています。 /boot/loader が bzip2 で圧縮された kernel をロードできるよ うになったのを受けて、 PicoBSD(98) の kernel も bzip2 で圧 縮できるようになっています。 AT 互換機用の PicoBSD は b00t2 から kernel をロードするので、 /boot/loader から kernel をロードする Pic 。 BSD ( 98 ) 固有の変更点となっています。 ドキュメントの整備 FreeBSD ( 98 ) 用のドキュメントは、 FreeBSD98-doc ML 注 1 にてメンテナンスされています。最近話題がなく淋しい ML 注 2 となっていましたが、そこそこの人手が必要になり そうな作業が始まりそうになっています。現在のリリース に含まれているドキュメントには、 98readme と handbook98 と FAQ. 98 があります。 98readme はテキスト形式で、あと の 2 つは sgml でメンテナンスされており、 html とテキスト形 式に変換したものをリリースに含めています。この 98readme を sgml 化しようという話が出ています。半機械的 にタグを追加していくことになると思われますが、あまり に作業する人が少ないと計画倒れになりかねません。 FreeB SD ( 9 8 ) を使ってなくてもかまいませんので、 FreeBSD98-doc に参加してみませんか。 注 1 メールアドレスは FreeBSD98-doc@jp.freebsd.org/ どこからのメールでも受け付けます。 http://home.jp.FreeBSD.org/mail-list/FreeBSD98-doc/ でアーカイ プが参照できます。 注 2 281 年 12 月は 2 通、 2g2 年 1 月は 1 通のみ。 2002 No. 1 1 BSD magazine 197

6. BSD magazine No.11 BSDでルータを作ろう! ; システムコールプログラミング入門

ロ 0 3 5 0 でルータを作ろう ! として ppp を設定する必要がある。 己載すれば OK である。 で pppoe の設定方法を説明したので、 IPfilter や NAT 、 IPsec などは、まず 筆者が昔利用していたシリアルポー 簡単に触れるにとどめる。 最小限の設定を行った後に順番に設定 ドは RISCOM 社のもので、このカード し、問題の切りわけを楽に行えるよう を利用していたときには ppp を利用せ 128k 回線に ppp を仕掛ける にするべきであろう。 ずとも HDLC で通信できたわけだが、 ppp での接続には、今回認証を行わ 今 RISCOM のカードはほとんど入手で ないものとする。これは、 128k 専用線 uses /var/account/acct きない ( 高価ということもあるが ) の を仮定しているためである。 NetBSD で、いわゆる com port ( シリアルポー では標準で pppd が含まれているので、 ト ) から TA を利用して相互接続し、 これを利用する。 pppd をシリアルポー DataLink Layer では ppp を用いること トに用いる場合、そのシリアルポート ppp の設定を行おう。今回のネット にする。 は getty が起動されていてはならない。 ワークでは、自宅とバックポーンの接 また、対外回線は今しばしは利用さ したがって、 /etc/ttys で status を OFF 続には専用線を利用して ppp で接続す れている ADSL や FIet's を利用すると仮 にしておく必要がある。また、通信速 るようになっている。その両端の 定して、 ppp 。 e を利用する場合を考え 度の設定もあるので、 /etc/ttys の利用 ることにする。ただし、 pppoe は前号 する port の設定を書き換えておく必要 Router2 、 Router3 に DataLink Layer がある。書き換えたら、 kill -HUP 1 (init プロセスに HangUp 信号を送る ) を実行しておこう。 pppd の設定は、認証を行わなければ 非常に簡単で、 /etc/ppp/peers/ router2 や /etc/ppp/peers/router3 を作 成し、 rc. conf で ppp_peers を呼ぶように するだけである。記載すべきは、 /etC/PPP/Peers/ 下にあるファイル名で ある ( リスト 4 ) 。 あとは ppp lnterface に ifconfig コマ ンドを利用して IP アドレスを割り当て れば OK である。起動時にこの処理を 行う場合、 ifconfig. ppp0 に IP アドレス を記載しておけば良い。 1.5M 回線に pppoe を仕掛ける pppoe としては、 NetBSD の pkgsrc/ net に rp-pppoe がある。筆者は、これ を利用しているが、とりあえす問題は 出ていない。なお、 Ne tBS D の pkgsrc / Ⅱ et には他にもいくつかの pppoe のツールがあるので、好みに応 じて利用していただきたい。 このパッケージを Router1 にインス トールする。インストール方法に関し てはここで詳しく述べないので、 一三ロ pppd and PPPOe まを マリスト 2 /etc/rc. conf の内容 if [ ーて /etc/defaults/rc . conf then /etc/defaults/rc . conf fi rc— c onf igured=YES ac c ount ing=YES newsys10g=YES ip6mode=router inetd=NO ntpd=YES s shd=YES "Router2" PPP-Peers= rt advd=YES rtadvd—flags= マリスト 3 / etc / ℃ . conf に必要に応じて記載する内容 # /etc/ipf . conf を利用する # /etc/ipnat. conf を利用する # /etc/ipsec. conf を利用する # IKE daemon # ipfilter の出力を syslog に # /etc/altq. conf を参照する ipfiIter=NO ipnat=NO ipsec=NO racoon=NO i pmon=NO a1tqd=NO -flags= xpmon altqd-flags= マリスト 4 ppp に関する設定 /etc/ttys の設定 %grep tty01 /etc/ttys "/usr/libexec/getty std tty00 . 115200 " unknown off Router2 の pppd 設定 # cat /etc/ppp/peers/router3 /dev/tty01 115200 passive Router3 の pppd 設定 # cat /etc/ppp/peers/router2 /dev/tty01 115200 2002 No. 1 1 BSD magazine 027

7. BSD magazine No.11 BSDでルータを作ろう! ; システムコールプログラミング入門

0 2 蚯 136.204.21 を A Q ー BSD ルータによる 十ラフィック制御 株式会社ソニーンとユーダサネ工ンス研究所 長健ニ朗 / Cho Kenjiro kjc@csl.sony.co.jp ドロッパーは、 TCP 等の上位層と連 廃棄される。しかし、キュー構造、パ 動して輻輳回避を行う目的で、選択的 ケットスケジューリング、バケット廃 にバケットを廃棄する。通常の FIFO 棄方法を工夫することによって、帯域 キューではキューが溢れて初めてバケ 割り当て、遅延制御、輻輳回避などが ALTQ (Alternate Queueing) 卩 可能となる。これらの仕組みは総称し ットを廃棄するが、輻輳の始まりを検 は BSD プラットフォームで利用できる 出して限界に達する前に能動的にバケ てキューイング方式 ( q u e u e i n g トラフィック制御機構である。 ALTQ ットを廃棄することで、 TCP がより効 は、もともと QoS (Quality of Service) discipline) と呼ばれる。 図 1 は一般的なキューイング方式の構 率的に利用可能な帯域を検出できる。 研究の実験プラットフォームとして開 キューイングの機構は処理能力の低 成を示す。キュー制御は出力インター 発され、その後も多くの機能追加と改 いルータへの実装や高速ルータでのハ 良が加えられている。現在は、運用ネ フェイスで行われ、一クラシファイア、キ ードウェア化を考慮した簡単な構造が ットワークでもトラフィック制御に広 ュー構造、スケジューラ、ドロッパー などから構成される。クラシファイアは、 望ましい。しかし、その設計は処理の く利用されるようになってきた。 バケットヘッダ内のアドレスやポート番 負荷、メモリ消費、制御の精度等のト レードオフとなるため、さまざまなキ 号などの情報をもとに到着バケットを 事前に定義されたクラスにマップする。 ューイング方式が提案されてきている。 また、 QoS の考え方自体も、回線の キュー構造は、キューイング方式に依 インターネットで使われているバケッ 広帯域化と価格下落に伴い、狭帯域で 存した内部構造で、通常クラスに対応 ト交換の基本は、回線で繋がれたルー のタイトな制御から広帯域でのラフな した内部キューの組み合わせで構成さ タ群がバケットをバケツリレーすること 制御へと変化してきた。高速なアクセ である。各ルータは、入ってきたバケ れる。 ス回線の普及によって、定常状態では スケジューラは次にバケットを送出 ットの宛先アドレスから経路表を引き、 回線容量に余裕があり、優先制御の必 次のルータを決定してバケットを渡す。 すべきクラスを選ぶ。バケットスケジ ューリングによって、各クラスの使用 要がないとしても、トラフィックが集 バケットは非同期に入ってくるので、 中すれば容易に輻輳が発生する環境に 帯域を保証したり、優先クラスバケッ 送出すべき回線に対してその容量を越 トのキュー内での待ち時間を制御する なっている。 QoS 技術を使うことによ えたバケットが入ってきた場合、バケ って、たとえ DoS 攻撃を受けていても ことが可能である。 ットはキューに貯められる。バケット ロスは、ポトルネックとなる部分でキ ューが溢れてバケットが捨てられるた めに起こる。また、通信遅延のゆらぎ は、キューの待ち時間に起因する部分 が大きい。 通常使用されるキューは FI F O (First-In First-Out) キューである。 バケットは到着順に送出され、キュー 長が制限値を越えると到着バケットが はじめに キューイング 〇 packet device driver packet scheduler queuemg discipline classifier 図 1 キューイング構成 038 BSD magazine 2002 NO. 1 1

8. BSD magazine No.11 BSDでルータを作ろう! ; システムコールプログラミング入門

フロジェクト短信 日本 FreeBSD Java プロジェクト 日本 FreeBSD Ja a プロジェクト発足 2001 年 11 月半ば、 FreeBSD 友の会運営委員会から「日本 FreeBSD Java プロジェクト」が公認プロジェクトとして認 定されました ( 参考文献 [ 1 ] ) 。 これまで FreeBSD Java に関する情報はjava@freebsd.org で広く議論されてきました ( 参考文献 [ 2 ] ) 。しかし、日本 語に関する問題をこのメーリングリストで行うことは少々 問題がありました。英語のメーリングリストとあって、日 本の方の積極的な参加が見込めない点と、場的な問題か らそこからの積極的な情報交換が難しかった点を挙げるこ とができます。メーリングリストで同じ状況を知った方が、 個人々々でメールのやり取りを行うという状況に陥りがち でした。 そこで、 FreeBSD Java 日本人開発者およびユーザーの情 報交換や、日本語問題に関する開発の場および問題の解 決と検討・報告をより円滑に行うため日本 FreeBSD Java プ ロジェクトを発足しました。日本 FreeBSD Java プロジェク トでは FreeBSD Java 日本人開発者およびユーザーの情報交 換、問題の解決と検討、報告などを行います。 日本 FreeBSD Java プロジェクトメーリングリストへの参 java@jp.freebsd. org 加は 換試験を通過した FreeBSD JDK および JRE を packages に凸 これにより、次期 FreeBSD メジャーリリース以降から互 表しました ( 参考文献 [ 4 ] ) 。 Java 実行環境の FreeBSD における使用許諾を得たことを発 [ 3 ] ) は sun Microsystems 社との間で Java 開発環境および 日本時間で 2001 年 12 月 22 日、 FreeBSD 財団汨( 参考文献 FreeBSD Java ライセンス ザーの参加をお待ちしております。 情報交換を行いたいと思います。多くの FreeBSDJava ユー ールや利用方法に関するエンドユーザーの議論まで、広く FreeBSD Java に関する技術的な議論から、 JDK インスト をご覧ください。 http://www.jp.freebsd.org/ml.html むことができるようになります。 Java2 以降変更されたライセンスの影響を受けて、これ までコンパイルされた package の状態で Java2 以降の JDK お よび JRE を提供することができませんでした。このため、 FreeBSD および Java を用いてサーバーサイドシステムの開 発を行っている場合でも、納品する段階で他の OS に載せ 変える作業を行う必要がありました。 こうした間題を受け、これまで Nate WiIIiams 氏が sun Microsystems 社との間で交渉に力を注いできましたが、長 い間資金の問題や法的な問題などを解決することができま せんでした。 FreeBSD プロジェクトは法人格を持ちません。 これまで法人と契約を結ぶことが FreeBSD プロジェクトで は困難でした。今回 Nate Williams 氏の努力もあり、 FreeBSD プロジェクトを支援することを目的とする非営利 社団法人「 F r e e B s D 財団」が、 2 0 0 1 年 8 月に s u n Microsystems 社との間で JDK および JRE の FreeBSD における 使用に関する交渉を始め、同年 12 月に使用許諾を得まし た。これにより、今後 FreeBSD に package 状態の JDK および JRE を含めることができ、 FreeBSD を利用した Java サーバ ーシステムの開発販売を行うことができるようになりま 後藤大地 / G 。仇 / daichi@jp.FreeBSD.org を考慮し、 FreeBSD はこれまで利用してきた商用 UN Ⅸや ステムの実効性能にそのまま影響します。予算および性能 能性があります。カーネルスレッドの有効な稼働は Java シ 機能は、これまでのこうした間題を解決する糸口になる可 存になっているため、 FreeBSD5.0 で提供されるこれらの ながります。現段階ではスレッドの優先度や動作が実装依 ネルスレッド関連機能が Java の性能を引き上げることにつ これに加え、 FreeBSD 5.0 から提供が予定されているカー Java の重要度は高まり、提供する機能は増え続けています。 つあります。特に近年サーバーサイドシステムにおける サイドシステムに至るまで開発に欠かせない環境になりつ Java はハイエンドデスクトップから組み込み、サーバー トです。 くありません。特に中小企業にとってこれは大きなメリッ イドシステムを FreeBSD と Java で開発している企業は少な なったということは大きなアドバンテージです。サーバサ す。 FreeBSD に JDK を搭載して製品の開発 / 販売が可能に 注 1 FreeBSD プロジェクトを支援する非営利社団法人「 FreeBSD Foundation 」 ( 参考文献 [3]) をここでは foundation の翻訳の慣例に従い「 FreeBSD 財団」と呼び こで「 FreeBSD 財団」は「 FreeBSD Foundation 」を示す単語であって、「 FreeBSD Foundation 」の正式な日本語名ではありません。 ます。しかし、 204 BSD magazine 2002 NO. 1 1

9. BSD magazine No.11 BSDでルータを作ろう! ; システムコールプログラミング入門

3 5 0 でルータを作ろう ! なおしてみると、リスト 2 のようになる。 これで準備は整ったので、 altqd 用の 設定ファイルを記述することにしよう。 ま $man altq してみる。すると、 こには設定ファイルに関する記述がな いことがわかる (NetBSD current の 場合。 NetBSD ならすべて同じであろ うと思われる ) 。しかし、設定ファイル として、標準では、 /etc/altq. conf が参 照されるとある。また、末尾の SEE ALSO を見ると、 altq. conf ( 5 ) を参照の こととあるので man 5 altq. conf してみ よう。すると、 altq. conf に関する説明 が記載されている ( 手元で試していた だきたい ) 。 今回のポリシーを元に、 man page を参照しながら、 CBQ/RED で制御を 行うための設定を記載してみると、リ a q. conf の命令 スト 3 、 4 、 5 のようになる。 定ファイルでしばしば用いられるよう ます、他の UNIX 系のコマンドの設 リスト中の命令の説明をしよう。 マリスト 2 ALTQ のホリシー に # の後ろはコメントとして扱われる。 最初はⅲ terface 命令である。 CBQ におけるⅲ terface 命令の構文はリスト 6 のようになっている。 bandwidth で指定するのは、指定イ ンターフェイスにおいて ALTQ で制御 する帯域である。したがって、 fxp0 が 100Mbps で通信できる場ム bandwidth で指定する値は Obps から 100Mbps までの間の値となる。本設定 例では、 ALTQ ですべてのトラフィッ クを制御することを基に考えているの で、最大帯域を指定している。 tbrsize (Token Bucket Regurator size) は今回は指定していない。これ は、指定しなければシステム側で帰納 本的なクラス分けを行い、必要に応じ 今回の設定は基本的に CBQ によって基 キュー制御方式は、今回 CBQ とした。 ていない理由の 1 つである。 ータのように見えるというのも指定し 実装を理解した上で設定すべきパラメ の例でこの値は設定されていないので、 altq. conf の man page を見てもすべて 的に決定してくれるからである。また、 て RED を利用する方式を採用した。し たがって、キュー制御方式はすべて CBQ となっている。なお、 CBQ による キュー制御には CBQ-WRR と CBQ- PRR があるが、 こでは、 CBQ-WRR ・ Router1 hostl To The lnternet Server1 The lnternet Router1 The 工 nternet http I CMP The lnternet The I nt ernet The lnternet ・ Router2 The lnternet hostl hostl Operation ・ Router3 hostl hostl The 工 nternet Operation Rout er 1 hostl hostl Operation The lnternet To hostl Operation The lnternet hostl To Server1 MyNetworks Prot ssh I CMP 64kbps 50 % of ssh ssh ssh ssh Proto s sh ssh ssh ssh Pr Ot 0 http I CMP Bandwidth 64kbp s 工 nterface speed 64kbp s 64kbps 50% of 工 nterface Bandwidth 64kbp s 64kbp s 64kbp s 64kbp s Bandwidth 64kbps speed 64kbps (Host1->Internet の設定と共有 ) 64kbp s 64kbps ( 工 nternet->HostI の設定と共有 ) (CBQ と指定するとこちらが選択され る ) を利用している。 今回は efficient モードは利用しない。 このモードの詳しい説明は、マニュア ルを参照するか、ソースコードを参照 してほしい。 次に class 命令を説明しよう。 class 命令も interface 命令と同じくキュー制 御方式によって変化するが、こでは CBQ の場合を考える。 class 命令の構文はリスト 7 のように なっている。 このうち今回使用したもののみで構 文を表現するとリスト 8 のようになる。 それぞれの内容を説明する。 スケジューリングタイプは CBQ の場 合、 cbq となる。インターフェイス名 は、その名の通り、そのクラスで利用 するインターフェイス名を記載する。 クラス名は、定義したクラスの名前で あり、親クラス名は、そのクラスが所 属している親クラスの名前である。も し親クラスが存在しないならば、 NULL と明示的に記載する必要がある。 borrow キーワードを設定すると、そ のクラスは、もし自身の利用している 帯域が足りなくなった場合に、自身の 所属する親クラスから余っている帯域 を借り受ける。逆に指定しない場合、 指定帯域をこえたバケットはキューに 溜って処理を先伸ばしされるか、もし くは捨てられることになる。 今回の設定では、 ICMP による DoS 攻撃を軽減するために、 ICMP の帯域 を 64kbps に制限するため、 RouterI の icmp—class では borrow を指定しない。 これで、 ICMP バケットは「最大で」 2002 NO. 1 1 BSD magazine 045

10. BSD magazine No.11 BSDでルータを作ろう! ; システムコールプログラミング入門

ー。、 BSD で使える ルーティングエンジン ( 株 ) インターネッ下総合研究所主任研究員 Japan NetBSD UsersI G 「 oup 事務局長 許先明 / Heo SeonMeyong seirios@jp.netbsd.0「g 。巫 136.204.21 この動 せるための ) 一連の手続きのことをル 本特集で宮川氏がルータに関する概 ルーティングエンジンとは、 ーティングプロトコルと呼ぶのである。 的経路制御を行う経路制御用の一連の 念やルーティングプロトコルの基礎を 現在一般に利用されているルーティ プログラムのことを言う。 説明してくださっている。そこで本稿 ングプロトコルを表 1 に挙げる。 では BSD ( に限らないが ) で利用でき EIGRP は CISCO 社製ルータで実装 るルーティングエンジンに関して URL されているプロトコルだが、現状 などを示しながら解説してみることに CISCO 社製ルータでしか利用できない する。 のでそれほど広まっているとは言えな いかもしれない。 IS-IS は、近年米国などで利用されて protocol. - 名詞 - いるリンクステート型経路制御プロトコ 3 実験 [ 剖検などの ] 計画案 [ 記録 ] ; lnternet への接続性が一般に手の届 【電算】ブロトコル《対話に必要な ルである。まだ日本ではそれほど利用さ く形で提供され始めて以来、 lnternet の れているとは言えないが、 ISP の内側で 通信規約 ; メッセージの頭か末尾に ユーザーは普段から Network を利用で つける》 ; 利用されている例もあると聞いている。 きるようになった。インターネットに接 本稿では、経路制御プロトコルの詳 続する上で重要なのは、目的地までパ 細には触れない。宮川氏がディスタン とあるが、これに従うと、ルーティン ケットを到達させるための情報と、目的 グプロトコルとは、経路制御 ( ルーテ スペクタやリンクステートに関する説 地からバケットカ唳ってくるための情報 明をされているのでそちらを参照いた イング ) のために必要な経路情報をや だが、この情報を経路情報と呼ぶ。 り取りする際に必要となる通信規約と だきたい。 ダイアルアップ ppp や PPPoE 、 DHCP いうことになる。 などを利用している場合、経路情報は これでは何が何だかわからないと思 ユーザーから隠蔽されている ( アプリケ うので簡単に説明すると、ある機器が ーションが勝手に設定する ) が、ちょっ 表 2 に各ルーティングエンジンと、そ 保持して、いる経路情報を他のルータ としたネットワークを作ろうとしたとき ( 経路制御を行う機械 ) に通知し、他 の対応している経路制御プロトコル に「必ず」問題になるのがその経路制 のルータからの経路情報を受け取るた (Routing Protocol) の対応を記載する。 御である。 表 2 を見るとわかる通り、現在フリ 経路制御には sta ⅱ c な ( 静的に設定す めの ( そして自身の経路情報に反映さ る ) ものと dynamic な ( 動的に設定す る ) ものがあるが、ネットワークのトボ ロジーが変化したり少し複雑なトボロジ RIP ーだったりした場合、人が手動でネット RlPng ワークの変化状態を認知して設定して OSPF BGP 回るのは、管理の上からも非常にコス トのかかる不便な作業である。そこで、 動的経路制御が活躍するのである。 ルーティンクプロトコル 研究社発行のリーダーズ + プラスに よると、 ルーティングエンシンとは ? 各ルーティングエンシン 表 1 現在良く利用されているルーティングプロトコル アルゴリズム P 「 0t0C6 備考 v6 〇 X 〇〇〇〇 1 ワ」 X 〇※※ X 〇 DistanceVentor DistanceVentor LinkState PathBector 旧 v6 対応は OSPFv3 から 旧 v6 対応は MultiprotOCOI Extension によって追加された CISCO 社の提案したプロトコル OSI で規定されているプロトコル DistanceVentor Li n kState EIGRP IS-IS 2002 No. 1 1 BSD magazine 019