連載 / F 「 eeBSD のフートプロセスをみる一② アドレスは 008BAH です。一方、上記のように書くと ーフ 最後に、 336 ~ 338 行目でドライプからセクタを読み込 しているかをチェックします。 ライプが Disk Address Packet による言もムみをサポート 326 ~ 335 行目では、表 5 のサービスを呼び出して、ド く動くように 324 行目のような言当になっているのです。 07D7AH と 0087AH で実行されます ) 、どちらでも正し されるため ( たとえば、 324 行目の TEST 命令は EIP が かもしれません。つまり、 xread は 2 つのアドレスで実行 とき、 07D7AH の内容は別のデータで上書きされている れる」と書きました。 boot2 から xread か呼び出された さきほど、「コヒー先の xread は boot2 から呼び出さ 07D7AH を指してしまいます。 サプルーチン seta20 では、キーポード・コントロ A20 の有効化 みます。 から A20 を有効にする処理をおこないます。 0203 : 0204 : 0205 : 0206 : 0207 : 0208 : 0209 : 0210 : 0211 : 0212 : 0213 : 0214 : 0215 : seta20 : cli seta20 ・ 1 : inb $ 0X64 , %al testb $ 0X2 , %al jnz seta20.1 movb $Oxd1 , %al outb %al , $ 0X64 seta20 ・ 2 : inb $ 0X64 , %al testb $ 0X2 , %al Jnz seta20.2 movb $Oxdf , %al outb %al , $ 0X60 retW sti # 割込み禁止 # 割込み許可 ます、 204 ~ 206 行目でキーポード・コントローラのバ ッフアカ啌になるのを待ちます。 207 行目の、、 DIH " は、 キーポード・コントローラの出力ポート 2 ヘデータを書き 出すことを指示する命令で、 212 行目の、、 DFH " がその データです。 A20 のマスク回路は、この出力ポート 2 の bitl ( 下から 2 番目 ) に接続さその値をセットすると A20 か有効に、つまりマスクされなくなります。 Linux のセットアッフ・ルーチン (setup. S) では、 213 行目の OUT 命令を実行しても即座に A20 か有効になる とはかぎらないことを想定し、 204 ~ 213 行目の処理を最 大で 65 , 535 回ループして A20 か有効になるのを待ちま す。さらに、キーポード・コントローラだけでなく、 1. BIOS サービス 2. キーポード・コントローラ 3. システムのコントロール・ホート A の順番で 3 種類の方法を試みます。それにくらべると、 FreeBSD のガ去はいたってあっさりしています。 実際のところ、 L ⅲ ux のようにいろいろなカ 1 去を ( しか もループして何回も ) 試みなくても、 204 ~ 213 行目の処 ( しらさき・ひろお 次回は、 BTX の init() を読んでいきましよう。 ついて解説しました。 今回は、 FreeBSD のプートローダ b00t1 のコードに ☆ 理を 1 回実行するだけで一ト分なようです。 IIJ) アセンプリ命令一覧 ( 既出のものは除く ) cli in[bwl] 佖 d 市・ , 0 〃 Ja 0 〃 JCXZ 0 〃 lea 0 〃ノ , 0 〃 2 les 0 ノ , 0 2 lret movz[bwl] 0 〃ノ , 0 〃 2 out[bwl] 。胚佖 d み ror[bwl] 0 〃 . / , 叩 2 st i stosb 外部割込みを無視する状態にする 叩ノカ甘旨すアドレスから 1 タブルワードを叩 2 ロ褓内し、彳第売の 1 ワードを ES レジスタに十タ 叩ノのアドレスを叩 2 へ f 内 CX レジスタが 0 の場合、叩カ甘旨すアドレスにジャンプ EFLAGS レジスタが CF=O かっ ZF=O の場合、 0 〃カ甘す - アドレスにジャンプ I/O アドレス。 d 市・からデータを読み出して。に↑褓内 AL レジスタの内容を ES:(E)DI カ甘アドレスロ翻生 DF フラグの内容により、 (E)DI をインク 外部割込みを受け付ける状態にする 叩 2 の内容を叩ノビット右回転 叩の内容を I/O アドレス祠市・に書き出す 叩 7 の内容をゼロ孑劇長して叩 2 ロ褓内 セグメント間を越えるサプルーチン呼出しから復帰 リメントまたはデクリメントする UNIX MAGAZINE 2003.11 191
新・倉敷芸術科学大学のネットワーク構築・・・ 26 ID は 1 ~ 4095 の任意の番号て指定します。 きるだけⅵ an コマンドで定義するはうがよいでしよう。 ん。 ROUTE-OS で VLAN の終端をおこなう場合は、で は、 vlan コマンドによる VLAN の定義はおこなえませ すでに IP アドレスが設定されているラインに関して する必要があります。 名 ) アドレスの設定と同様に、 ip-address コマンドを利用 なお、 2 つ目以降の VLAN 設定では、工イリアス ( 別 クに VLAN タグ 120 を設定しています。 タグ 110 を、そして 202.244.163.129 / 26 のネットワー 100 を、 202.244.163.65 / 26 のネットワークに VLAN いて、 202.244.163.1 / 26 のネットワークに VLAN タグ 図 5 では、物理インターフェイス ethernet 2 / 1 にお になっています ( ただし IPv4 のみ ) 。 めに、 ip コマンドの引数で VLAN-ID が設定できるよう ROUTE-OS では、旧バージョンとの互換性を保った アドレスを指定します ( 図 4 ー b ) 。 delete ip コマンドに続けて VLAN 名、削除対象の IP VLAN 内で設定した IP アドレスを削除する場合には、 ンドの引数に VLAN 名を指定します ( 図 4-a)0 同様に、 作成した VLAN を削除するには、 delete vlan コマ を設定します ( 図 3 ) 。 IPv6 の場合も、 IPv4 と同様に ip コマンドでアドレス マンドて参照できます。 設定した VLAN の状態は、、、 show ip VLAN 名 " コ 名 ( ライン名ではありません ) 、アドレスをします。 します。 ip に続けて、 vlan コマンドで定義した VLAN 次に、 VLAN に対して ip コマンドでアドレスを指定 旧 v4 / 旧 v6 のトンネリング処理 70 る他サイトのどこかで IPv6 が使えるのなら、トンネルを ら直接 IPv6 で通信できなくても、 IPv4 で接続されてい で直接通信できるとはかぎりません。しかし、自サイトか 上流の ISP や研究ネットワークが、かならずしも IPv6 ワークとして構築されています。自サイトか接続している 現在のインターネットの大部分は、 IPv4 のみのネット クを構築する場合、トンネリングの設定をおこないます。 既設の IPv4 ネットワークを経由して IPv6 ネットワー 図 3 VLAN への IPv6 アドレスの言聢 gr2000ー2b + /config> ip V1an100 3ffe : 516 : 5000 : 5010 : : 1 / 64 gr2000ー2b + /config> shOW ip vlan 100 ip vla 100 { 3ffe : 516 : 5000 : 5010 : : 1 / 64 ; 192.168.100.1 / 24 ; UNIX MAGAZINE 2003.11 リングの設定をおこなえば実現できます ( 図 7 ) 。 nel コマンドを使い、通信可能な IPv6 ルータ間でトンネ 通信したいことがあるかもしれません。その場合も、 tun- 上記とは逆に、 IPv6 ネットワークを経由して IPv4 で IPv4 over IPv6 設定が必要です。 レスをもつレータ ) でも、トンネル・インターフェイスの もちろん、相手側 ( この例では 202.244.160.9 のアド として設疋しています。 と fe80 : : 2 のアドレスをトンネルの両端の IPv6 アドレス に公開する必要はありません。そこで図 6 では、 fe80 : : 1 トンネル部分の IPv6 インターフェイスは、とくに外部 しています。 ルータのトンネル・インターフェイスに、、 fe80 : : 2 " を指定 トンネル・インターフェイスに、、 fe80 : : 1 / 64 " を、相手側 ドレスを両端に設定します。図 6 の例では、自ルータの トンネル・インターフェイスを作成したら、 IPv6 のア う名前のトンネル・インターフェイスを設定しています。 ンターフェイスか殳定できます。図 6 では、、、 keke" とい て、 IPv4 ネットワークを経由した仮想的な IPv6 用のイ アドレスを tunnel コマンドて指定します。これによっ IP アドレスと IPv6 の出口にあたる相手側ルータの IPv4 きることか前提条件てす。この状態で、自ルータのソース IPv4 のネットワークが正しく定され、相互に通イ言で ングの設定ガ去について説明します。 による通信をおこなうための IPv6 over IPv4 トンネリ 既設の IPv4 ネットワークを経由し、その両端で IPv6 IPv6 over IPv4 トンネリンク 可が必要です ) 。 作ることで IPv6 が使えます ( もちろん、相手サイトの許 ( 誌面の都合ーヒ、て折り返しています ) gr2000ー2b + /config>
連載 / 旧 v6 の実装ーの 図 1 動的ホーム・エージェント探索要求の形式 Type ldentifier COde 図 2 動的ホーム・エージェント探索石語の形式 Type Type ldentifier Code Home Agent Addresses 図 3 モバイル・プレフィックス要求の形式 Code ldentifier Checksum Reserved Checksum Reserved Reserved Checksum Code は未使用です。送イ訓芋に 0 を設疋し、受イ訓に無 視します。 ldentifier は、探索要求バケットの ldentifier の値がコピーされます。 Home Agent Addresses には、ホーム・ネットワー クに接続されているホーム・エージェントのアドレスか列 挙されます。ホーム・エージェントには優先度をつけるこ とができ、優先度の高いホーム・エージェントがリストの 前方に配置されます。 前回解説したとおり、重加勺ホーム・エージェント探索要 求はホームエージェント・ェニーキャストアドレスに送信 されます。複数のホーム・エージェントが運用されている 場合、どれに要求が届くかは分からないため、各ホーム・ 工ージェントは他のホーム・エージェントのアドレスを知 る必要があります。ホーム・エージェントのリスト構築は、 近ド蝌架索のルータ通知 (Router Advertisement) とプレ フィックス情報オプションを孑長することで実現されてい ます。これらの拡張については彳あします。 モ / ヾイノレ・プレフィックス IPv6 ではプラグ & プレイの一環として、 IP アドレス の自動設正カ鰾準日に含まれています。 IPv6 で標 ~ 勺 UNIX MAGAZINE 2003 ユ 1 に用いられるアドレス自動設定方式は、 RFC2462 [ 1 ] で規 定されているステートレス・アドレス自動設正です。 IPv6 ノードは、ルータが送信するルータ通知に含まれるネット ワーク・プレフィックスを受信し、その値とインターフェ イス識別子を組み合わせることで一意に識別できる IPv6 アドレスを生成します。 MobiIe IPv6 を利用しているノードも、基本的には同 じ考え方でアドレスを設定することができます。しかし、 移動ノードカ咄先ネットワークに接続している場合はホー ム・ネットワークのルータ通知を受信できないため、プレ フィックス情報の更新がおこなえません。モバイル・プレ フィックス要求とモバイル・プレフィックス応答は、移 動ノードが出先ネットワークでプレフィックス情報を更新 するためのイ督はみです。モバイル・プレフィックス要求 / 応答は ICMPv6 の一重として実現されます。 モバイル・プレフィックス要求 モバイル・プレフィックス要求は図 3 のような形式と なっており、ホーム・エージェント探索要求とまったく 同一です。 Type 番号は、暫定的に 152 カリり当てられています。 重加勺ホーム・エージェント探索と同様、 IANA による正式 75
連載 / IPv6 の実装ーの 図 17 対応イ寸け工ラーの作成と週言 (void)mobi1ity6-send—be(&ip6a->ip6a—dst , &src_sa, 259 IP6ME_STATUS_UNRECOGNIZED_TYPE , &home_sa) ; 260 261 Ⅱ = 1p6—findaux (m) ; 224 224 行目の ip6-findaux() で、 IP ノヾケット m に↓里 bzero(&home—sa, sizeof (home—sa) ) ; 254 home—sa. sin6—famiIy = AF—INET6; づけられている ip6aux 構造体を取得します。この構造体 255 home_sa. sin6_Ien 256 には、ホームアドレス・オプションの処理て埆早説したとお sizeof (home—sa) ; home—sa. sin6—addr = in6addr—any ; 257 り、ホームアドレスの情幸材褓内されています。 258 225 if ( Ⅱ ) { 248 ~ 258 行目は、ホームアドレス・オプションが含 struct ip6aux *ip6a; 226 struct sockaddr_in6 src_sa, 227 まれていないときの処理てす。この場合、対応付け工ラー home_sa; のホームアドレス・フィールドに未定義アドレスを設定し ip6a = (struct ip6aux * ) ( Ⅱ + 1 ) ; ます。 src—sa = ip6a—>ip6a_src ; 図 17 の 259 ~ 260 行目で対応付け工ラーを作成し、送 if ( (ip6a->ip6a-f1ags & IP6A_HASEEN) ! = 0 ) { 信します。 mobiIity6-send-be() は、第 1 引数を始点ア バケットにホームアドレス・オフションか含まれていた ドレス、第 2 引数を終点アドレスとし、第 3 引数のエラー 場合は、処理の過程で ip6a-flags に IP6A-HASEEN フ コードと第 4 引数のホームアドレスをもっ対応付け工ラー ラグか設定されます。 を送信します。 232 home_sa = ip6a—>ip6a_src ; m—freem(m) ; 262 if ( (ip6a->ip6a-f1ags & IP6A_SWAP) ! = 0 ) { 233 return (IPPROTO_DONE) ; 264 src_sa. sin6_addr ip6a—>ip6a—coa; 240 break; 265 266 } さらに、ホームアドレス・オプションに含まれているア 対応付け工ラーの送信カ鮗ったら、バケットを破棄して ドレスと IP バケットの始点アドレスが交換されている場 処理を終了します ( 262 ~ 264 行目 ) 。 合、 ip6a-flags に IP6A-SWAP フラグか叡疋されます。 KAME の Mobile IPv6 実装では、一日立層 (TCP/UDP *offp = off; 268 など ) に MobiIe IPv6 の処理を意識させないようにする return (mh6—>ip6m—pproto) ; 270 ため、ホームアドレスと IP?S ケットの始点アドレスを上 271 } 位層に渡す前に交換します。そうすることで、上位層はつ 最後に、 268 行目でオフセット値がモビリテイへッダ ねにホームアドレスを始点アドレスとして処理できるよう の直後を指すよう更新し、呼出し元の ip6-input() に続 になります。 くへッダのプロトコル番号を返します。現在の f 士様では、 アドレスが交換されている場合、 240 行目で src-sa に ip6m-pproto には IPPROTO-NONE か第殳定されてい 気付アドレス (ip6a-coa) を設定します。 るので、 ip6-input() に処理が戻ったあとにバケットの処 241 } else { 理も終了します。 対応イ寸け工ラーの送イ アドレスがまだ交換されていなければ ( 241 ~ 247 行 対応付け工ラーは、 MobiIe IPv6 の制御信号のやりと 目 ) 、ホームアドレスは ip6a-coa に定されたままです。 りに不備がみられるときに生成されます。具ー勺には、以 この値を home-sa に設定します。 下の 2 つの場合です。 } else { 248 229 230 231 home_sa. sin6_addr ip6a—> ip6a-coa; 246 247 } 85 UNIX MAGAZINE 2003 ユ 1
連載 / IPv6 の実装ーの 図 9 ホームアドレスの正当性確認 181 182 183 184 185 187 188 189 190 142 144 145 147 148 if (IN6_IS_ADDR MULTICAST(&home_sa. sin6_addr) Ⅱ IN6_IS_ADDR_LINKLOCAL(&home-sa. sin6_addr) Ⅱ IN6_IS_ADDR_V4MAPPED(&home-sa. sin6_addr) IN6_IS_ADDR_UNSPECIFIED (&home_sa. sin6_addr) Ⅱ IN6_ 工 S_ADDR_LOOPBACK (&home_sa. sin6_addr) ) { mobi1ity6—send—be (&ip6a—>ip6a—dst , &ip6a->ip6a—src , IP6ME_STATUS_UNKNOWN_BINDING , &home_sa) ; goto bad ; IP60PT_HOME_ADDRESS : n = xp6-addaux (m) ; goto bad; ら、オプション長は ip6-opt-home-address 構造体と等 しくなけれはなりません。 ip6-addaux() は、 m て示されるバケットに ip6aux 構 造体を追加します。すでに ip6aux 構造体が存在する場合 は、そのポインタを返します。 ip6aux 構造体にはホーム アドレスの値や処伏況を言当求する必要があるため、 構造体力蔀何呆できなければ処理を中断します。 149 ip6a = (struct ip6aux * ) ( Ⅱ + 1 ) ; 150 if ( (ip6a->ip6a-f1ags & IP6A_HASEEN) この 165 166 167 168 169 170 171 172 173 174 175 176 if (ip6—getpktaddrs(m, &src—sa, NULL) ) { / * must not happen. * / goto bad ; bzero(&home—sa, sizeof (home—sa)) ; sizeof(home—sa) ; home_sa. Sin6_len home—sa. sin6—famiIy = AF—INET6; bcopy (haopt->ip60h—addr , &home_sa. sin6_addr , sizeof (struct in6—addr) ) ; if (scope6—check—id(&home—sa, ip6—use—defzone) goto bad; 152 153 } の { goto bad ; IP6A-HASEEN は、ホームアドレス・オプションを 処理したバケットに設定されるフラグです。ホームアドレ ス・オフションは 1 つのバケットに 1 回しか利用できま せん。 (struct ip6—opt—home—address 155 haopt *)opt, 155 行目で haopt にホームアドレス・オプションの先 頭アドレスを設定し、 haopt ホインタ経由でオフションの 情報にアクセスします。 156 160 161 158 optlen = haopt->ip60h-1en + 2 ; if (optlen ! = sizeof (*haopt)) got0 bad; 165 ~ 176 行目で、気付アドレスとホームアドレスをパ ケットから取り出します。 KAME では、すべての IP ア ドレスをスコープ情報付きて取り扱います。しかし、ホー ムアドレス・オプションにはスコープ清報をオ褓内する仕組 みがないので、 scope6-check-id() を使ってスコーフ情報 を設定します。 181 ~ 190 行目 ( 図 9 ) はホームアドレスの正当性の確 です。マルチキャスト / リンクローカル / IPv4 身彡 / 未 山い 定義 / ルーフ。バック・アドレスは、ホームアドレスとして 使用できません。これらのアドレスがホームアドレスとし て指定されていた場合、 mobiIity6send-be() で対応付 け工ラーを返します。 mobility6-send-be() については 彳幻します。 192 bcopy(&home—sa. sin6—addr, tip6a—>ip6a_coa, 193 sizeof (ip6a—>ip6a—coa) ) ; 156 ~ 161 行目はオフションの長さの石忍てす。ホーム アドレス・オフションはサブオフションをもちませんか UNIX MAGAZINE 2003 ユ 1 ip6a->ip6a—f1ags ー = IP6A-HASEEN ; 194 192 ~ 194 行目で、ホームアドレスを ip6aux 構造体の 気付アドレス・フィールドに内します。ここで設疋した ホームアドレスは、あとの処理でバケットの始点アドレス 79
連載 / IPv6 の実装ーの 対応イ寸け工ラーの作成 2390 mip6—ip6me—create(pktopt—mobi1ity, src, 2389 int 粋です。 作成関数です。以下、コードは mip6-cncore. c からの抜 した対応付けェラーの場合は、 mip6-ip6me-create() が フ。番号に応して専用の作成関数をもっています。今回角見 モビリテイへッダの各メッセージは、それぞれのタイ 2419 2418 ip6me—>ip6me—cksum = mip6_cksum(src , dst , ip6me_size, IPPROTO_MOBIL 工 TY , (char * ) ip6me) ; 2 , 418 ~ 2 , 419 行目でチェックサムを言 1 算します。モビ リテイへッダのチェックサム計算には、 TCP や UDP 、 ICMPv6 と同様、 IP ヘッダの情報の一部 ( 始点アドレス、 終点アドレス、次へッダ値 ) が必要になります。 mip6_ cksum() でチェックサムを計算し、 ip6me-cksum に設 2392 2393 2394 2395 2396 { 2391 struct struct struct u_int8 struct dst , status , addr) ip6—mobiIity **pktopt—mobility; sockaddr in6 *src; sockaddr—in6 *dst ; t status ; sockaddr—in6 *addr ; 定します。 2421 2423 2424 } *pktopt—mobility = (struct ip6—mobi1ity * ) ip6me, return ( 0 ) ; mip6-ip6me-create() は 5 つの引数をもちます。 pkt- opt-mobility は ip6-pktopts 構造体でモヒ、リテイへッ ダを示すポインタです。 mip6_ip6me-create() でモビリ テイへッダを作成し、そのメモリアドレスを設定して呼出 し側に返します。 src 、 dst は対応付け工ラーバケットの 始点アドレスと終点アドレスです。これらのアドレスは、 モビリテイへッダのチェックサムを計算するときに必要 になります。 status 、 addr は、それそれ対応付け工ラー のステータスコードとホームアドレス刎直です。 2404 2405 2406 2407 2402 sizeof (struct ip6me_size ip6m—binding—error) ; MALLOC ( ip6me , struct ip6m_binding_error * , ip6me-size, M—IP60PT, M_NOWAIT) ; if (ip6me = = NULL) return (ENOMEM) ; 対応付け工ラーは固定長ですから、 2 , 402 行目で必要な サイズを構造体から計算し、 2 , 404 ~ 2 , 405 行目でメモリ を石呆します。 2409 2410 2411 2412 2413 2414 2415 bzero(ip6me , ip6me_size) ; ip6me—>ip6me—pprot0 IPPROTO_NONE ; ip6me->ip6me—1en = (ip6me_size > > 3 ) in6—c1earscope(&ip6me->ip6me—addr) ; ip6me—>ip6me—addr = addr—>sin6_addr ; status; ip6me—>ip6me—status IP6M_BINDING_ERROR; ip6me->ip6me—type ヘッダの冓造に従い、 2 , 409 ~ 2 , 415 行目で各フィ ドに値を設定します。 UNIX MAGAZINE 2003.11 ーノレ 次回は固定ノードのコードを中心に、引き続き IP モピ リティの実装をみていきます。 [ 文献 ] [ 1 ] Susan Thomson and Thomas Narten, / P 6 State- less 員a市℃ ss A 社 co れ五 9 0 れ , RFC2462 , December 1998 [ 2 ] Thomas Narten, Erik Nordmark and WilIiam AIIen Simpson, Ⅳ e 朝んわ 07 、 D な co ゼ e ル IP レ、 s れ 6 (IP- の , RFC2461 , December 1998 取陵に、 mip6-ip6me-create() の第 1 引数でされた ポインタに、いま作成したモビリテイへッダのポインタを 設疋します。 ☆ ( しま・けいいち IIJ) 87
旧 v6 の実装 旧 v6 モビリティ ( 2 ) 匠の IPv6 アドレス割当てに関する興架いデータが あります。日本の糸目系勧ゞ先進的に IPv6 に取り組んでいる ことはご存じだと思いますが、米対の糸目織も日本と同程度 の空間の割当てを受けているのです。最新のアドレス割当 て状兄は、各 RIR は或インターネット・レジストリ ) の 割当て情報から計算できます。また、最新ではありません が、 8 月に韓国で開催された APNIC ミーティングで簡 単な糸兤 1 報告がおこなわれているので、その資料からも概 要カ甘当屋できるでしよう 1 もちろん、アドレスか割り当てられているからといっ て、それが直接 IPv6 の利用に結びつくわけではありま せん。米国の組織の行動は、おそらくさきごろ発表された 米国国防総省の IPv6 対応に向けた事前準備的な要素もあ ると思われます。しかし理由はなんであれ、これまでどち らかといえは遅れがちだった米国の IPv6 への耳はみか加 速されることは間違いないでしよう。アドレス割当ての状 況の変化は、その表れの 1 つだと思います。 米国国塀省の決定は、米国の企業のみならず、とくに IPv6 で先行している日本の企業にとっても大きなビジネ スチャンスだと思われます。この動きが、 IPv6 普及へ向 けた好循環につながることを期待します。 今月は、ます前回に引き続き MobiIe IPv6 用の制御 メッセージを紹介したあと、 KAME の Mobile IPv6 実 装のコードについて解説します。 動的ホーム・エージェント探索 重加勺ホーム・エージェント探索は、移動ノードが出先 1 http://www.apnic ・ net/meetings/ 16/programme/sigs/ ipv6. html 74 ネットワークで起動されたときに、ホーム・ネットワーク 上のホーム・エージェントの IP アドレスを発見するため の手続きです。重加勺ホーム・エージェント探索は ICMPv6 の一一種として実現されます。 動的ホーム・エージェント探索要求 重加勺ホーム・エージェント探索要求 (Dynamic Home Agent Address Discovery Request) の形式は、図 1 の ようになっています。 ICMPv6 の Type 番号として、則寺点では暫定的に 150 か割り当てられています。、、暫定的 " である理由は、 MobiIe IPv6 がまだ RFC として発行されていないから です。現在、イ」嘛は RFC の発行を担当する RFC 編集 者の手に渡っており、手続きか終りしだい RFC として公 開される予定です。この値は、 IANA によって正式に割 り当てられる際に変更されるかもしれません。 Code は未 使用です。送イに 0 で匆硼化さ受イ訓に無視されま す。 Checksum は他の ICMPv6 バケットと同様の手順 て計算されます。 ldentifier は、探索要求に対して返され る探索応答との組合を石俿忍するための乱直です。 動的ホーム・エージェント探索応答 重加勺ホーム・エージェント探索応答 (Dynamic Home Agent Address Discovery Reply) は図 2 のような形式 です。 重加勺ホーム・エージェント探索応答は、重加勺ホーム・エー ジェント探索要求を受信したホーム・エージェントが、そ 窈区事として送信します。 Type 番号は暫定的に 151 カ瞎リ り当てられています。探索要求と同様、最終的に IANA から正式割当てされる際に変更される可能性があります。 UNIX MAGAZINE 2003.11
新・倉敷芸術科学大学のネットワーク構築・・・ 26 図 9 1 2 3 4 6 7 8 9 10 11 12 13 14 15 16 18 DHCP サーノく一の言 gr2000ー2b + /config> dhcp interface nif2_fe2 gr2000 ー 2b + / conf ig> option routers 192.168.0.1 ; range 192 . 168.0.10 subnet 192 .168 . 0.0 / 24 { interface nif2_fe2; gr2000ー2b + /config> show dhcp gr2000ー2b + /config> dhcp subnet 192 gr2000ー2b + /config> dhcp subnet 192. gr2000ー2b + /config> dhcp subnet 192. gr2000ー2b + /config> dhcp subnet 192. interface nif2_fe2; gr2000ー2b + /config> show dhcp dhcp { dhcp { 168.0.0 / 24 0.0 / 24 range 192.168.0.10 192 . 168.0.20 0.0 / 24 option routers 192.168.0.1 0.0 / 24 option subnet—mask 255 . 255.255.0 . 168. 168. 168. 192.168.0.20 ; 図 10 DHCP によるアドレス割当てた兄の gr2000ー2b + /admin : dhcp show binding く IP address> 192. 168.0. 10 く MAC address> 00 : 09 : 6b : 82 : 5c : 23 く Lease expiration> 03 / 08 / 30 08 : 42 : 14 く Type> Automatic gr2000ー2b + /admin : を中継する という 2 つのパターンか叡疋できます。 72 的には表示されないようです ) 。 DHCP によるクライア す ( / 24 と一致するマスクの配布を設定した場合、明示 設定した内容は、 show dhcp コマンドで参照できま 続いて指定していきます ( 8 ~ 9 行目 ) 。 さらに、 DHCP で配布するパラメータを "option" に 配布範囲の終了アドレスです。 目 ) 。 range" の次か配布範囲の開始アドレス、その次が 192.168.0.10 192.168.0.20 " のように孑旨定します ( 7 行 さらに、 DHCP でアドレスを配布する範囲を、、、 range を提供するように指定しています。 192.168.0.0 / 24 のサプネットに対して DHCP サーヒ、ス subnet コマンドてオ旨定します。図 9 では、 6 行目で、 次に、 DHCP サービスをおこなうサプネットを dhcp スを dhcp interface コマンドてオ旨定します。 には、まず、 DHCP サービスを提イるインターフェイ ROUTE-OS で DHCP サーバーの機能を有効にする DHCP サーパーの設定 ガ去について簡単に説明します。 しか有効にできないという制約がありますが、両方の設定 現在の ROUTE-OS には、上記のどちらか一方の設定 図 11 relay-list の作成 gr2000ー2b + /config> relay—list 1 192.168.10.1 gr2000—2b + /config> relay—list 16 192.168.1.1 gr2000ー2b + /config> show relay—list relay—list 1 192 .168.10.1 ; relay—list 16 192.168.1.1 ; gr2000ー2b + /config> 図 12 relay-group の言聢 gr2000ー2b + /config> relay-group hoge 1 gr2000ー2b + /config> relay-group hoge 16 gr2000ー2b + /config> show relay—group relay-group hoge { relay—list 1 ; relay—list 16 ; gr2000ー2b + /config> ントへのアドレス割当て状況は、 admin モードで dhcp show binding を実行すれは忍できます ( 図 10 ) 。 DHCP/BOOTP の中継 クライアントからの検索用プロードキャスト・バケット ROUTE-OS でもこの機能を利用できます。以ード、順 BOOTP リレー・エージェントと呼びます。 を DHCP サーバーにルータが中継する設定を、 DHCP/ 手順 1 を追って説明します。 UNIX MAGAZINE 2003.11 まず、 DHCP サーバーのリストを作成します ( 図 11 ) 。
ー② 連載 /FreeBSD のフートプロセスをみる %bx # 転送先 (bootl と boot2 の読込み ) で呼び出されるサプルーチ 以下では、 144 行目 (MBR の読込み ) と 185 行目 ドライプからの読込み します ( 次回に説明します ) 。 後に BTX のエントリアドレスである 9010H へジャンフ そして、 198 行目で A20 を有効にし ( 後します ) 、最 し、セットされている場合はデクリメントします。 ラグがクリアされている場合は (E)DI をインクリメント ン nread について解説します。 み込み、以下のレジスタで引数を受け取ります。 このサプルーチンは、ドライプから連続するセクタを読 レジスタ意味 表 2 Disk Address Packet の卞告 パイト数 オフセット ()OH 01H 02H 03H 04H 06H 08H 0105 : 0106 : 0107 : 0108 : 1 1 1 2 2 8 1 内容 この構造体のバイト数 ( 10H を設定する ) 予約領域 (()()H を設定する ) 中幻セクタ数 予糸 ( 頽域 ( 00H を設定する ) 中幻アドレスのオフセット 中幻アドレスのセグメント セクタ番号 (LBA) mov %sp , %bp callw read lea 0x10(%bp) , %sp # SP を戻す 1ret SI DH DL ノ、一ティション・エントリのアドレス 言もムみセクタ数 ドライプ番号 nread は、言ムみう頁セクタ番号をパーティション・エ ントリの LBA から読み取ります。データをロードするア ドレスは、 08CECH に固定されています。 0219 : nread : mov $MEM—BUF , 0220 : 0221 : 0222 : 0223 : 0224 : mov Ox8(%si) , mov Oxa(%si) , %cx # 読取り push %cs ca11w xread . 1 」れ C % ax # LBA # 成功した 96 ~ 105 行目では、 Disk Address Packet ( 表 2 ) をス タック上に作り、サプルーチン read を呼び出しています。 108 行目で実行している LRET は、 LCALL 命令 ( セグメント間を越えるサプルーチン呼出し ) で呼び出さ れたところに ( セグメントを越えて ) 戻る命令です。通常、 LCALL と LRET はセットで使われますが、 xread. 1 を呼び出した 223 行目は LCALL 命令ではありません。 また、 bootl のコードのなかで xread. 1 を呼び出すのは 223 行目だけなので、 222 行目の PUSH 命令を削って 108 行目を RET 命令に変更してもよさそうです。 この部分は無駄にみえますが、 LRET 命令を使ってい るのは、 boot2 から xread がセグメント間を越えてサプ ルーチン呼出しされるからです ( 次回以降に説明します ) 。 222 行目で CS レジスタの内容をフッシュしているの は、 xread. 1 の最後で LRET 命令を実行しているためで そして、 LBA をレジスタ AX す (LRET については後します ) 。 xread. 1 を呼び出します。 と CX に格納して # b00t2 から呼び出 される # LBA ( 上位 4 バイト ) # LBA # LBA # 転送先セグメント # 転送先アドレス # $ 0X0010 # 読込みセクタ数 0267 : read: 0268 : 0269 : 0270 : 0271 : 0272 : 0273 : 0274 : push %dx movb $ 0X8 , %ah int $ 0X13 movb %dh, %ch pop %dx JC return andb $Ox3f, %cl # シリンダ数をマスク JZ ereturn 0090 : 0091 : 0095 : 0096 : 0097 : 0098 : 0099 : 0100 : 0101 : 0102 : 0103 : 0104 : 188 push %ss pop %ds . 1 : pushl $ 0X0 push %cx push %ax push %es push %bx xre ad xread : push $ 0X10 push %ax movb %dh , %al xor %ax, %ax 269 行目では、表 3 のサービスを呼び出してドライプの パラメータを取得します。 CL レジスタの上位 2 ビットは シリンダ数を表しているため、 273 行目は上位 2 ビット をマスクして、セクタ数だけを取り出しています。 0275 : 0276 : 0277 : 0278 : cli # 割込み禁止 mov 0X8 (%bp) , %eax push %dx movzbl %cl , %ebx UNIX MAGAZINE 2003.11
連載 . / UN Ⅸ Communication Notes クはしつくり処理するものだ。私は、ときどきこれを、、検 トラフィック・マーキング 疫構造をもつファイアウォール " と呼んだりしている。 ところで、トラフィック・マーキングを実施して高速に にアクセスするトラフィックのうち、その素姓か明らかな 1 つは、外部のインターネットから組織内ネットワーク 通過させるべきトラフィックとは、どのようなものであろ ものである。 うか。 52 フィックの分劼ゞできる。とくに、 IP データグラムの ・ハードウェア機能により、高速かつ小さな負荷でトラ ントは次の 2 点に集約される。 が、トラフィック・マーキングで考えるべき重要なポイ これ以外にも、いろいろな条件を考えることができる 流入させても大丈夫だと判断している。 の意味で、まとめて設置してあるのなら、茁妾トラフィックを 能であり、かっ - ト分にテストされたものといえるであろう。そ て挙げた IP 電話機の場合、パッケージ化されたものなら単機 こなわれていることが大前提である。たとえは、上記て例とし フィックを受信するシステムは、十分なセキュリティ管理がお 検詞する必要がある。外部から無条件で流入させてもよいトラ ただし、その他の P2P 型サーピスについては、慎重に 注意 1 るだけでトラフィックを流入させてもよいだろう。 ネットワーク本に対しては、終点 IP アドレスを言叫面す しよう。その場合、 IP 電話機カ材妾続されているレイヤ 3 トワークに VLAN 機能を使ってうまく設置されていたと IP 電話機があったとする。それらは、同一のレイヤ 3 ネッ あるいは、糸目織内ネットワークに分散配置されている 実現でき、高速で遅延も小さい。 かどうかは、ハードウェア・フィルタリングの処理として となる。流入してくるトラフィックがこの牛を満足する いる VPN ルータ ・各トラフィックの始点 IP アドレスが、支に設置して ・ VPN トラフィック よう。この場合には、 VPN (VirtuaI Private Network) で実現しているとし たとえは、本支店間の通信をインターネットを経由する ペイロードの部分をみすに処理できるマーキング去が よい。 ・セキュリティ管理面から考えて、通過させても十分安全 だと判断できるトラフィックである。、、ちょっと危険か もしれない " と思われるトラフィックでも、転送先でな UNIX MAGAZINE 2003.11 ことは現実にはほとんどない。 ネットワーク内のネットワーク機器で書換えが発生するような ある。もちろん、 ISP の内部のシステム、さらには自分たちの らの清報を偽造し、 IP データグラムのヘッダに埋め込めるので ダはイされているわけではない。悪意あるユーサーは、これ きない。これまでに何回も説明したが、 IP データグラムのヘッ トラフィックか安全かどうかを判断するのは、あまりお勧めで 始点 IP アドレス、終点 IP アドレス、ポート番号だけで 意 2 半から今年にかけて数多く出てきている。 6 月に開催され 、、 SSL VPN" という名称を冠した製品が、 2002 年後 最近になって、 SSL/TLS を用いたシステムが登場し 1 つになるだろう。 ションしか使わないのであれば、 SSH の利用し尺肢の のように扱うことができる。少数の限定されたアプリケー のサービスについては、あたかも VPN を使っているか (port forwarding) という機能ももっているため、特定 って保護するために作られた。さらに、ポート転送機能 いて交換されるパスワードや処理結果などを暗号化によ SHell) が示すとおり、もともとはリモートアクセスにお も頻繁に使うツールである。 SSH はその名称 (Secure SSH は多くのシステムて力しており、我々がもっと 扱うこともできる。 や SSL/TLS などを紹介したが、これらは VPN として さきほど、トラフィック・マーキングの一例として SSH VPN ているといえるだろう。 きほど述べたファイアウォールの 4 番目の題も解決し ガ去で内部にアクセスできるようになるという意味で、さ を別途用意しなけれはならない。しかし、外部から適切な れらのガ去では、かならす内部ネットワーク側にサーバー 手法としては、 SSH 、 SSL/TLS 、 VPN などがある。 これらの条件から考えられるトラフィック・マーキング なっていれば大きな間題はない。 んらかの処理をおこない、再度謌・ヾられるような構造に