diff options
Diffstat (limited to 'ja_JP.eucJP/books/handbook/advanced-networking/chapter.xml')
-rw-r--r-- | ja_JP.eucJP/books/handbook/advanced-networking/chapter.xml | 8737 |
1 files changed, 6722 insertions, 2015 deletions
diff --git a/ja_JP.eucJP/books/handbook/advanced-networking/chapter.xml b/ja_JP.eucJP/books/handbook/advanced-networking/chapter.xml index c723da61ec..0ec99700ba 100644 --- a/ja_JP.eucJP/books/handbook/advanced-networking/chapter.xml +++ b/ja_JP.eucJP/books/handbook/advanced-networking/chapter.xml @@ -3,145 +3,225 @@ The FreeBSD Documentation Project The FreeBSD Japanese Documentation Project - Original revision: 1.36 + Original revision: r19116 $FreeBSD$ --> <chapter id="advanced-networking"> <title>高度なネットワーク</title> - <sect1> + <sect1 id="advanced-networking-synopsis"> <title>この章では</title> - <para>以下の章では、 UNIX - システム上で良く利用されるネットワークサービスについて書かれています。 - これはもちろん、 あなたの FreeBSD - システムでの、 そのようなサービスの設定に関する内容です。</para> - </sect1> + <para>この章では &unix; + システム上で良く利用されるネットワークサービスについて説明します。 + FreeBSD が利用するすべてのネットワークサービスをどのように定義し、 + 設定し、テストし、そして保守するのかを扱います。さらに、 + 本章を通してあなたの役に立つ設定例が載っています。</para> + + <para>この章を読めば以下のことが分かります。</para> + + <itemizedlist> + <listitem> + <para>ゲートウェイと経路の基本</para> + </listitem> + + <listitem> + <para>FreeBSD をブリッジとして動作させる方法</para> + </listitem> + + <listitem> + <para>ネットワークファイルシステム (NFS) の設定方法</para> + </listitem> + + <listitem> + <para>ディスクレスマシンのネットワークブートの設定方法</para> + </listitem> + + <listitem> + <para>ユーザアカウントを共有するためのネットワークインフォメーションサーバ (NIS) の設定方法</para> + </listitem> - <sect1 id="routing"> - <title>ゲートウェイとルート</title> + <listitem> + <para>DHCP を用いて自動的にネットワーク設定を行う方法</para> + </listitem> + + <listitem> + <para>ドメインネームサーバ (DNS) の設定方法</para> + </listitem> + + <listitem> + <para>NTP プロトコルを用いて日時を同期してタイムサーバを設定する方法</para> + </listitem> - <para><emphasis>原作: &a.gryphon;. - 1995 年 10 月 6 日.</emphasis></para> + <listitem> + <para>ネットワークアドレス変換 (NAT) の設定方法</para> + </listitem> + + <listitem> + <para><command>inetd</command> デーモンの管理方法</para> + </listitem> + + <listitem> + <para>PLIP 経由で二台のコンピュータを接続する方法</para> + </listitem> + <listitem> + <para>FreeBSD で IPv6 を設定する方法</para> + </listitem> + </itemizedlist> + + <para>この章を読む前に、以下のことを行っておくべきです。</para> + + <itemizedlist> + <listitem> + <para><filename>/etc/rc</filename> スクリプトの基本を理解していること</para> + </listitem> + + <listitem> + <para>基礎的なネットワーク用語に精通していること</para> + </listitem> + </itemizedlist> + </sect1> + + <sect1 id="network-routing"> + <sect1info> + <authorgroup> + <author> + <firstname>Coranth</firstname> + <surname>Gryphon</surname> + <contrib>寄稿: </contrib> + </author> + </authorgroup> + </sect1info> + <title>ゲートウェイと経路</title> + + <!-- <para><emphasis>訳: &a.jp.yuki;. - 1996 年 9 月 6 日.</emphasis></para> - - <para>あるマシンが他のマシンをみつけることができるようにするには、 - あるマシンから他のマシンへ、 - どのようにたどり着くかを適切に記述するための仕組みが必要です。 - この仕組みをルーティングと呼びます。 <quote>ルート(経路)</quote>は - <quote>destination (目的地)</quote> と <quote>gateway - (ゲートウェイ)</quote> の 2 つのアドレスの組で定義します。 あなたが - <emphasis>destination</emphasis> へアクセスしようとした場合、 - <emphasis>gateway</emphasis> - を通って送られることをこのペアは示しています。 destination - には個々のホスト、 サブネット、 <quote>デフォルト</quote> の 3つの - タイプがあります。 - <quote>デフォルトルート</quote> は他への経路が適用できない - 場合に使われます。 のちほどデフォルトルートについて少し述べることに - するとして、 ここでは、 個々のホスト、 インタフェース + 1996 年 9 月 6 日.</emphasis></para> + --> + + <indexterm><primary>ルーティング</primary></indexterm> + <indexterm><primary>ゲートウェイ</primary></indexterm> + <indexterm><primary>サブネット</primary></indexterm> + <para>あるマシンがネットワーク上で他のマシンをみつけることができるようにするには、 + あるマシンから他のマシンへどのようにたどり着くかを記述する適切な仕組みが必要です。 + この仕組みを<firstterm>ルーティング</firstterm>と呼びます。 + <quote>経路</quote> (route) は <quote>送信先</quote> + (destination) と <quote>ゲートウェイ</quote> の + 2 つのアドレスの組で定義します。この組合せは、この + <emphasis>送信先</emphasis> へたどり着こうとする場合は、その + <emphasis>ゲートウェイ</emphasis> + を通じて通信することを示しています。 + 送信先には個々のホスト、サブネット、<quote>デフォルト</quote> + の 3 つの型があります。 + <quote>デフォルトルート</quote> + は他のどの経路も適用できない場合に使われます。 + デフォルトルートについてはのちほどもう少し詳しく述べます。 + また、ゲートウェイには、個々のホスト、インタフェース (<quote>リンク</quote> とも呼ばれます)、 - イーサネットハードウェアアドレスという 3つのタイ - プのゲートウェイについて説明します。</para> + イーサネットハードウェアアドレス (MAC アドレス) + の 3 つの型があります。</para> <sect2> <title>例</title> - <para>以下に示す <command>netstat -r</command> - の出力の例を使って、 ルーティン - グがいろいろと異なっている様子を説明することにします。</para> + <para>以下に示す <command>netstat</command> + の例を使って、ルーティングのさまざまな状態を説明します。</para> + + <screen>&prompt.user; <userinput>netstat -r</userinput> +Routing tables - <screen>Destination Gateway Flags Refs Use Netif Expire +Destination Gateway Flags Refs Use Netif Expire default outside-gw UGSc 37 418 ppp0 localhost localhost UH 0 181 lo0 test0 0:e0:b5:36:cf:4f UHLW 5 63288 ed0 77 10.20.30.255 link#1 UHLW 1 2421 -foobar.com link#1 UC 0 0 +example.com link#1 UC 0 0 host1 0:e0:a8:37:8:1e UHLW 3 4601 lo0 -host2 0:e0:a8:37:8:1e UHLW 0 5 lo0 => -host2.foobar.com link#1 UC 0 0 -224 link#1 UC 0 0</screen> - - <para>最初の2行はデフォルトルート(次の節で詳しく説明します)と、 - <hostid>localhost</hostid>への経路を示しています。</para> - - <para><literal>localhost</literal>のためのインタフェース - (<literal>Netif</literal>の欄) - は<devicename>lo0</devicename>で、 - これはループバックデバイスとして知られています。 - 結局のところ戻るだけなので、 この - destinationへのすべてのトラフィックが - 内部的に処理されるのであって、 LAN - を経由して送られるのではありません。</para> - +host2 0:e0:a8:37:8:1e UHLW 0 5 lo0 => +host2.example.com link#1 UC 0 0 +224 link#1 UC 0 0</screen> + + <indexterm><primary>デフォルトルート (default route)</primary></indexterm> + <para>最初の 2 行はデフォルトルート + (<link linkend="network-routing-default">次節</link>で扱います) と、 + <hostid>localhost</hostid> への経路を示しています。</para> + + <indexterm><primary>ループバックデバイス (loopback device)</primary></indexterm> + <para><literal>localhost</literal> に割り当てるインタフェース + (<literal>Netif</literal> 欄) + としてこのルーティングテーブルが指定しているのは + <devicename>lo0</devicename> + で、これはループバックデバイスともいいます。 + これは結局のところ出たところに戻るだけなので、 + この送信先あてのトラフィックは、LAN + に送られずに、すべて内部的に処理されます。</para> + + <indexterm> + <primary>イーサネット</primary> + <secondary>MAC アドレス</secondary> + </indexterm> <para>次の行では - <hostid role="mac">0:e0:...</hostid> - というアドレスに注目しましょう。 - これはイーサネットハードウェアアドレスです。 FreeBSDは自動的に - ローカルなイーサネット上の任意のホスト - (この例では<hostid>test0</hostid>) を見つけ、 + <hostid role="mac">0:e0:</hostid> から始まるアドレスに注目しましょう。 + これはイーサネットハードウェアアドレスで、MAC アドレスともいいます。 + FreeBSD はローカルなイーサネット上の任意のホスト + (この例では <hostid>test0</hostid>) を自動的に認識し、 イーサネットインタフェース <devicename>ed0</devicename> - の所にそのホストへの経路を直接つけ加えます。 タイムアウト時間 - (<literal>Expire</literal>の 欄) - も経路のタイプと結びついており、 指定された時間が経過しても応 - 答がないときに使用します。 この場合、 - 経路情報は自動的に削除されま す。 これらのホストは、 RIP(Routing - Information Protocol) という、 - 最短パスの判定に基づいてローカルホストへの経路を - 決定する仕組みを利用することで認識されます。</para> - - <para>更に、 FreeBSDではローカルサブネット + にそのホストへの直接の経路をつけ加えます。 + この種の経路には、タイムアウト時間 (<literal>Expire</literal> 欄) + も結びつけられており、 + 指定された時間内にホストからの応答がないことを判断するのに用いられます。 + その場合、そのホストへの経路情報は自動的に削除されます。 + これらのホストは + RIP (Routing Information Protocol) という、 + 最短パス判定に基づいてローカルなホストへの経路を決定する仕組みを利用して認識されます。</para> + + <indexterm><primary>サブネット</primary></indexterm> + <para>さらに FreeBSD + ではローカルサブネットへの経路情報も加えることができます (<hostid role="ipaddr">10.20.30.255</hostid> は <hostid role="ipaddr">10.20.30</hostid> というサブネットに対するブロードキャストアドレスで、 - <hostid role="domainname">foobar.com</hostid> - はこのサブネットに結びつけられているドメイン名) - への経路情報も加えることができます。 - <literal>link#1</literal>というのは、 - このマシンの最初のイーサネットカードのことをさします。 これら - については、 - 何も追加インタフェースが指定されていないことに気づく - でしょう。</para> - - <para>これらの2つのグループ(ローカルネットワークホストと - ローカルサブネット) の両方とも、 <command>routed</command> - と呼ばれるデーモンによって自動的に経路が設定されます。 - <command>routed</command> を動かさなければ、 - 静的に定義した (つまり具体的に設定した) - 経路のみ存在することになります。</para> + <hostid role="domainname">example.com</hostid> + はこのサブネットに結びつけられているドメイン名)。 + <literal>link#1</literal> という名称は、 + このマシンの一つ目のイーサネットカードのことをさします。 + これらについては、 + 何も追加インタフェースが指定されていないことがわかります。</para> + + <para>これら 2 つのグループ + (ローカルネットワークホストとローカルサブネット) + は、両方とも <application>routed</application> + というデーモンによって自動的に経路が設定されます。 + <application>routed</application> を動かさなければ、静的に定義した + (つまり明示的に設定した) 経路のみが存在することになります。</para> <para><literal>host1</literal> の行は私たちのホストのことで、 - イーサネットアドレスで示されています。 送信側のホストの場合、 + イーサネットアドレスで示されています。送信側のホストの場合、 FreeBSDはイーサネットインタフェースへ送るのではなく、 - ループバックインタフェース - (<devicename>lo0</devicename>)を使います。</para> - - <para>2つある<literal>host2</literal>の行は、 - ifconfigのエイリアス (このようなことをする理由については - ethernetの章を参照してください) を使ったとき - にどのようになるかを示す例です。 - <devicename>lo0</devicename>の後にある<literal>=></literal> - は、 インタフェースが - (このアドレスがローカルなホストを参照しているので) + ループバックインタフェース (<devicename>lo0</devicename>) + を使います。</para> + + <para>2 つある <literal>host2</literal> の行は、 + &man.ifconfig.8; のエイリアスを使ったときにどのようになるかを示す例です + (このようなことをする理由については + Ethernet の節を参照してください)。 + <devicename>lo0</devicename> の後にある <literal>=></literal> は、 + インタフェースが (このアドレスがローカルなホストを参照しているので) ループバックを使っているというだけでなく、 エイリアスになっていることも示しています。 - このような経路はエイリアスをサポートしている - ホストにのみ現れます。 - ローカルネットワーク上の他のすべてのホストでは - 単に<literal>link#1</literal>となります。</para> - - <para>最後の行 (destinationが<literal>224</literal>のサブネット) - はマルチキャストで扱うものですが、 - これは他の章で説明します。</para> - - <para>他の欄については <literal>Flags</literal> - について説明する必要があります。 - それぞれの経路は欄に示されているように違った属性を - もっています。 - 以下にいくつかのフラグとこれらが何を意味しているかを示します。 + このような経路はエイリアスに対応しているホストにのみ現れます。 + ローカルネットワーク上の他のすべてのホストでは、 + それぞれの経路に対して単に<literal>link#1</literal> となります。</para> + + <para>最後の行 (送信先サブネット <literal>224</literal>) + はマルチキャストで扱うものですが、これは他の節で説明します。</para> + + <para>最後に <literal>Flags</literal> (フラグ) + 欄にそれぞれの経路のさまざまな属性が表示されます。 + 以下にフラグの一部と、それが何を意味しているかを示します。 </para> <informaltable frame="none"> @@ -154,96 +234,93 @@ host2.foobar.com link#1 UC 0 0 <row> <entry>H</entry> - <entry>Host: 経路の destinationが単一のホストです。</entry> + <entry>Host: 経路の送信先が単一のホストです。</entry> </row> <row> <entry>G</entry> - <entry>Gateway: この destinationへ送られると、 どこへ送れ - ばよいかを明らかにして、 + <entry>Gateway: この送信先へ送られると、 + どこへ送ればよいかを明らかにして、 そのリモートシステムへ送られます。</entry> </row> <row> <entry>S</entry> - <entry>Static: この経路はシステムによって自動的に生成 - されたのではなく、 手動で作成されました。</entry> + <entry>Static: + この経路はシステムによって自動的に生成されたのではなく、 + 手動で作成されました。</entry> </row> <row> <entry>C</entry> - <entry>Clone: マシンに接続したときにこの経路に基づく - 新しい経路が作られます。 このタイプの経路は通常は - ローカルネットワークで使われます。</entry> + <entry>Clone: + マシンに接続したときにこの経路に基づく新しい経路が作られます。 + この型の経路は通常はローカルネットワークで使われます。</entry> </row> <row> <entry>W</entry> - <entry>WasCloned: ローカルエリアネットワーク(Clone) - の経路に基づいて - 自動的に生成された経路であることを示します。</entry> + <entry>WasCloned: + ローカルエリアネットワーク (LAN) の + (Clone) 経路に基づいて自動的に生成された経路であることを示します。</entry> </row> <row> <entry>L</entry> - <entry>Link: イーサネットハードウェアへの参照を含む - 経路です。</entry> + <entry>Link: + イーサネットハードウェアへの参照を含む経路です。</entry> </row> </tbody> </tgroup> </informaltable> </sect2> - <sect2> + <sect2 id="network-routing-default"> <title>デフォルトルート</title> - <para>ローカルシステムからリモートホストにコネクションを張る - 必要がある場合、 既知のパスが存在するかどうかを確認するためにル - ーティングテーブルをチェックします。 - 到達するためのパスを知っているサブネットの内部に - リモートホストがある場合 (Cloned routes)、 システムはインタフェース - から接続できるかどうかをチェックします。</para> - - <para>知っているパスがすべて駄目だった場合でも、 システムには - 最後の切り札の <quote>デフォルト</quote> ルートがあります。 - このルートは ゲートウェイルート (普通はシステムに - 1つしかありません) の特別なものです。 そして、 - フラグフィールドは必ず <literal>c</literal> - がマークされています。 このゲートウェイは、 LAN 内のホストにとっ - て、 外部 (PPPのリンクを経由する場合や、 - データラインに接続するハードウェアデバイスなど) - へ直接接続するマシンすべてのためのものです。</para> - - <para>外部に対するゲートウェイとして機能するマシンで - デフォルトルートを設定する場合、 + <indexterm><primary>デフォルトルート</primary></indexterm> + <para>ローカルシステムからリモートホストにコネクションを張る必要がある場合、 + 既知の経路が存在するかどうかを確認するためにルーティングテーブルをチェックします。 + 到達するための経路を知っているサブネットの内部にリモートホストがある場合 + (Cloned routes)、 + システムはそのインタフェースから接続できるかどうか確認します。</para> + + <para>知っているパスがすべて駄目だった場合でも、 + システムには最後の手段として <quote>デフォルト</quote> + ルートがあります。このルートはゲートウェイルート + (普通はシステムに 1 つしかありません) の特別なものです。そして、 + フラグ欄には必ず <literal>c</literal> + が表示されています。このゲートウェイは、LAN + 内のホストにとって、どのマシンでも外部へ + (PPP リンク、DSL、ケーブルモデム、T1、 + またはその他のネットワークインタフェースのいずれかを経由して) + 直接接続するために設定されるものです。</para> + + <para>外部に対するゲートウェイとして機能するマシンでデフォルトルートを設定する場合、 デフォルトルートはインターネットサービスプロバイダ (ISP) のサイトのゲートウェイマシンになるでしょう。</para> <para>それではデフォルトルートの一例を見てみましょう。 - 一般的な構成を示します。 </para> + 一般的な構成を示します。</para> -<literallayout> -[Local2] <--ether--> [Local1] <--PPP--> [ISP-Serv] <--ether--> [T1-GW] - </literallayout> +<literallayout>[Local2] <--ether--> [Local1] <--PPP--> [ISP-Serv] <--ether--> [T1-GW]</literallayout> <para>ホスト <hostid>Local1</hostid> とホスト <hostid>Local2</hostid> - を PPP で ISP のターミナルサーバと接続されているあなたの - サイトだとします。 - ISP はサイト内にロー カルなネットワークを持っていて、 - そこにはさまざまなものがあり、 - あなたの接続するサーバや ISP のインターネットへの - 接続点であるハードウェアデバイス (T1-GW) などがあります。</para> + はあなたのサイト内にあります。<hostid>Local1</hostid> + はダイアルアップ PPP 接続経由で ISP に接続されています。 + この PPP サーバコンピュータは、その ISP + のインターネットへの接続点に向けた外部インタフェースを備えた他のゲートウェイコンピュータへ + LAN を通じて接続しています。</para> - <para>あなたのマシンのデフォルトルートは - それぞれ次のようになります。</para> + <para>あなたのマシンのデフォルトルートはそれぞれ次のようになります。</para> <informaltable frame="none"> <tgroup cols="3"> <thead> <row> - <entry>host</entry> - <entry>default gateway</entry> - <entry>interface</entry> + <entry>ホスト</entry> + <entry>デフォルトゲートウェイ</entry> + <entry>インタフェース</entry> </row> </thead> @@ -251,7 +328,7 @@ host2.foobar.com link#1 UC 0 0 <row> <entry>Local2</entry> <entry>Local1</entry> - <entry>ethernet</entry> + <entry>Ethernet</entry> </row> <row> @@ -263,195 +340,1335 @@ host2.foobar.com link#1 UC 0 0 </tgroup> </informaltable> - <para><quote>なぜ (あるいは、 どうやって) Local1 の - デフォルトゲートウェイをISPのサーバでなく - T1-GWにセットするのか</quote> という質問がよくあります。</para> - - <para>コネクションのローカルの側については、 - PPPのインタフェースは - ISPのローカルネットワーク上のアドレスを用いているため、 - ISPのローカルネットワーク上のすべてのマシンへの経路は - 自動的に生成されています。 つまり、 あなたのマシンは、 - どのようにT1-GW - まで届くかという経路を既に知っていることになりますから、 - ISPサーバに媒介的なトラフィックをかける必要はありません。</para> - - <para>最後になりましたが、 一般的にローカルネットワークでは - <hostid role="ipaddr">...1</hostid> - というアドレスをゲートウェイアドレスとして使います。 ですから - (同じ例を用います)、 あなたのclass-Cのアドレス空間が - <hostid role="ipaddr">10.20.30</hostid>で ISPが - <hostid role="ipaddr">10.9.9</hostid>を用いている場合、 + <para><quote>なぜ (あるいは、どうやって) + デフォルトゲートウェイを、<hostid>Local1</hostid> が接続されている + ISP のサーバではなく、<hostid>T1-GW</hostid> に設定するのか</quote> + という質問がよくあります。</para> + + <para>PPP 接続で、あなたのサイト側の PPP インタフェースは、 + ISP のローカルネットワーク上のアドレスを用いているため、 + ISP のローカルネットワーク上のすべてのマシンへの経路は + 自動的に生成されています。 + つまりあなたのマシンは、どのようにして + <hostid>T1-GW</hostid> に到達するかという経路を既に知っていることになりますから、 + ISP サーバにトラフィックを送るのに、中間的な段階を踏む必要はありません。</para> + + <para>最後になりましたが、一般的にローカルネットワークでは + <hostid role="ipaddr">X.X.X.1</hostid> + というアドレスをゲートウェイアドレスとして使います。ですから + (同じ例を用います)、あなたの class-C のアドレス空間が + <hostid role="ipaddr">10.20.30</hostid> で ISP が + <hostid role="ipaddr">10.9.9</hostid> を用いている場合、 デフォルトルートは次のようになります。</para> - <literallayout> -Local2 (10.20.30.2) --> Local1 (10.20.30.1) -Local1 (10.20.30.1, 10.9.9.30) --> T1-GW (10.9.9.1) - </literallayout> + <informaltable frame="none"> + <tgroup cols="2"> + <thead> + <row> + <entry>ホスト</entry> + <entry>デフォルトルート</entry> + </row> + </thead> + <tbody> + <row> + <entry>Local2 (10.20.30.2)</entry> + <entry>Local1 (10.20.30.1)</entry> + </row> + <row> + <entry>Local1 (10.20.30.1, 10.9.9.30)</entry> + <entry>T1-GW (10.9.9.1)</entry> + </row> + </tbody> + </tgroup> + </informaltable> </sect2> <sect2> - <title>マルチホームホスト</title> - - <para>ここで扱うべき他のタイプの設定があります。 - それは2つの異なるネットワークにまたがるホストです。 - 技術的にはゲートウェイとして機能するマシン (上 の例では - PPPコネクションを用いています) はマルチホームホストで す。 - しかし実際にはこの言葉は、 - 2つのローカルエリアネットワーク上のサ - イトであるマシンを指す言葉としてのみ使われます。</para> - - <para>2枚のイーサネットカードを持つマシンが、 別のサブネット - 上にそれぞれアドレスを持っている場合があります。 あるいは、 - イーサネットカードを1枚持っているマシンで、 - ifconfigのエイリアスを使っているかもしれません。 - 物理的に分かれている2つのイーサネットのネットワークが使われて - いるならば前者が用いられます。 後者は、 物理的には1つのネットワ - ークセグメントで、 論理的には分かれている 2つのサブネットとする - 場合に用いられます。</para> + <title>デュアルホームホスト</title> + <indexterm><primary>デュアルホームホスト</primary></indexterm> + + <para>ここで扱うべき種類の設定がもう一つあります。 + それは 2 つの異なるネットワークにまたがるホストです。 + 技術的にはゲートウェイとして機能するマシン (上の例では + PPP コネクションを用いています) はすべてデュアルホームホストです。 + しかし実際にはこの言葉は、2 つの + LAN 上のサイトであるマシンを指す言葉としてのみ使われます。</para> + + <para>2 枚のイーサネットカードを持つマシンが、 + 別のサブネット上にそれぞれアドレスを持っている場合があります。 + あるいは、イーサネットカードが 1 枚しかないマシンで、 + &man.ifconfig.8; のエイリアスを使っているかもしれません。 + 物理的に分かれている 2 つのイーサネットのネットワークが使われているならば前者が用いられます。 + 後者は、物理的には 1 つのネットワークセグメントで、 + 論理的には 2 つのサブネットに分かれている場合に用いられます。</para> <para>どちらにしても、 - このマシンがお互いのサブネットへのゲートウェイ (inbound - route) として定義されていることが分かるように、 おのお - ののサブネットでルーティングテーブルを設定します。 このマシンが - 2 つのサブネットの間のブリッジとして動作するという構成は、 パケ - ットのフィルタリングを実装する必要がある場合や、 一方向または双 - 方向のファイアウォールを利用したセキュリティを構築する場合によ - く用いられます。</para> + このマシンがお互いのサブネットへのゲートウェイ (inbound route) + として定義されていることが分かるように、 + おのおののサブネットでルーティングテーブルを設定します。このマシンが + 2 つのサブネットの間のルータとして動作するという構成は、 + パケットのフィルタリングを実装する必要がある場合や、 + 一方向または双方向のファイアウォールを利用したセキュリティを構築する場合によく用いられます。</para> + + <para>このマシンが二つのインタフェース間で実際にパケットを受け渡すようにしたい場合は、 + FreeBSD でこの機能を有効にしないといけません。</para> + </sect2> + + <sect2 id="network-dedicated-router"> + <title>ルータの構築</title> + + <indexterm><primary>ルータ</primary></indexterm> + + <para>ネットワークルータは単にあるインタフェースから別のインタフェースへパケットを転送するシステムです。 + インターネット標準およびすぐれた技術的な慣習から、 + FreeBSD プロジェクトは + FreeBSD においてこの機能をデフォルトでは有効にしていません。 + &man.rc.conf.5; 内で次の変数を <literal>YES</literal> + に変更することでこの機能を有効にできます:</para> + + <programlisting>gateway_enable=YES # Set to YES if this host will be a gateway</programlisting> + + <para>このオプションは &man.sysctl.8; 変数の + <varname>net.inet.ip.forwarding</varname> を + <literal>1</literal> に設定します。 + 一時的にルーティングを停止する必要があるときには、 + この変数を一時的に <literal>0</literal> に設定しなおせます。</para> + + <para>次に、トラフィックの宛先を決めるために、 + そのルータには経路情報が必要になります。 + ネットワークが十分簡素なら、静的経路が利用できます。 + また、FreeBSD は BSD の標準ルーティングデーモンである + &man.routed.8; を備えています。これは RIP + (バージョン 1 および 2) および IRDP を扱えます。 + BGP バージョン 4、OSPF バージョン2、 + その他洗練されたルーティングプロトコルは + <filename role="package">net/zebra</filename> + package を用いれば対応できます。 + また、より複雑なネットワークルーティングソリューションには、 + gated のような商用製品も利用可能です。</para> + + <indexterm><primary>BGP</primary></indexterm> + <indexterm><primary>RIP</primary></indexterm> + <indexterm><primary>OSPF</primary></indexterm> + + <para>このように FreeBSD を設定したとしても、 + ルータに対するインターネット標準要求を完全に満たすわけではありません。 + しかし、通常利用に関しては十分といえます。</para> </sect2> <sect2> - <title>ルーティングの伝播</title> + <title>ルーティングの伝搬</title> + <indexterm><primary>ルーティングの伝搬</primary></indexterm> - <para>すでに外部との経路をどのように定義したらよいかは - 説明しました。 - しかし外部から私たちのマシンをどのようにして - 見つけるのかについては説明していません。</para> + <para>外部との経路をどのように定義したらよいかはすでに説明しました。 + しかし外部から私たちのマシンをどのようにして見つけるのかについては説明していません。</para> <para>ある特定のアドレス空間 (この例では class-C のサブネット) におけるすべてのトラフィックが、 - 到着したパケットを内部で転送するネ - ットワーク上の特定のホストに送られるようにルーティングテーブル - を設定することができるのは分かっています。</para> + 到着したパケットを内部で転送するネットワーク上の特定のホストに送られるようにルーティングテーブルを設定することができるのは分かっています。</para> <para>あなたのサイトにアドレス空間を割り当てる場合、 あなたのサブネットへのすべてのトラフィックがすべて - PPPリンクを通じてサイトに送 - ってくるようにサービスプロバイダはルーティングテーブルを設定し - ます。 しかし、 国境の向こう側のサイトはどのようにしてあなたの - ISPへ送ることを知るのでしょうか?</para> + PPP リンクを通じてサイトに送ってくるようにサービスプロバイダはルーティングテーブルを設定します。 + しかし、国境の向こう側のサイトはどのようにしてあなたの + ISP へ送ることを知るのでしょうか?</para> <para>割り当てられているすべてのアドレス空間の経路を維持する (分散している DNS 情報とよく似た) システムがあり、 - そのインターネット バックボーンへの接続点を定義しています。 + そのインターネットバックボーンへの接続点を定義しています。 <quote>バックボーン</quote> とは国を越え、 - 世界中のインターネットのトラフィックを運ぶ主要 - な信用できる幹線のことです。 どのバックボーンマシンも、 - あるネットワークから特定のバックボーンのマシンへ - 向かうトラフィックと、 - そのバックボーンのマシンからあなたのネットワークに届くサービス - プロバイダまでのチェーンのマスタテーブルのコピーを持っていま - す。</para> - - <para>あなたのサイトが接続(プロバイダからみて内側にある - ことになります) したということを、 プロバイダからバックボー - ンサイトへ通知することはプロバイダの仕事です。 これが経 - 路の伝搬です。</para> + 世界中のインターネットのトラフィックを運ぶ主要な信用できる幹線のことです。 + どのバックボーンマシンも、 + あるネットワークから特定のバックボーンのマシンへ向かうトラフィックと、 + そのバックボーンのマシンからあなたのネットワークに届くサービスプロバイダまでのチェーンのマスタテーブルのコピーを持っています。</para> + + <para>あなたのサイトが接続 + (プロバイダからみて内側にあることになります) したということを、 + プロバイダからバックボーンサイトへ通知することはプロバイダの仕事です。 + これが経路の伝搬です。</para> </sect2> <sect2> <title>トラブルシューティング</title> - - <para>ルーティングの伝搬に問題が生じて、 いくつかのサイトが - 接続をおこなうことができなくなることがあります。 - ルーティングがどこでおかしくなっているかを明らかにするのに - 最も有効なコマンドはおそらく &man.traceroute.8; コマンドでしょ - う。 このコマンドは、 - あなたがリモートマシンに対して接続をおこなう - ことができない(例えば &man.ping.8; に失敗するような場合) - 場合も、 同じように有効です。</para> - - <para> &man.traceroute.8; コマンドは、 + <indexterm> + <primary><command>traceroute</command></primary> + </indexterm> + <para>経路の伝搬に問題が生じて、 + いくつかのサイトが接続をおこなうことができなくなることがあります。 + ルーティングがどこでおかしくなっているかを明らかにするのに最も有効なコマンドはおそらく + &man.traceroute.8; コマンドでしょう。 + このコマンドは、あなたがリモートマシンに対して接続をおこなうことができない + (たとえば &man.ping.8; に失敗するような) + 場合も、同じように有効です。</para> + + <para>&man.traceroute.8; コマンドは、 接続を試みているリモートホストを引数にして実行します。 - 試みているパスの経由するゲートウェイホストを表示し、 + 試みている経路が経由するゲートウェイホストを表示し、 最終的には目的のホストにたどり着くか、 - コネクションの欠如によって終ってしまうかのどちら - かになります。</para> + コネクションの欠如によって終ってしまうかのどちらかになります。</para> - <para>より詳しい情報は、 &man.traceroute.8; + <para>より詳しい情報は、&man.traceroute.8; のマニュアルページをみてください。</para> </sect2> + + <sect2> + <title>マルチキャストルーティング</title> + <indexterm> + <primary>マルチキャスト</primary> + <secondary>options MROUTING</secondary> + </indexterm> + <para>FreeBSD はマルチキャストアプリケーションとマルチキャストルーティングの両方にネイティブ対応しています。 + マルチキャストアプリケーションを動かすのに FreeBSD + で特別な設定をする必要は一切ありません。 + アプリケーションは普通はそのままで動くでしょう。 + マルチキャストルーティングに対応するには、 + 下のオプションを追加してカーネルをコンパイルする必要があります。</para> + + <programlisting>options MROUTING</programlisting> + + <para>さらに、<filename>/etc/mrouted.conf</filename> + を編集してルーティングデーモン &man.mrouted.8; + を設定し、トンネルと DVMRP を設置する必要があります。 + マルチキャスト設定についての詳細は mrouted + のマニュアルを参照してください。</para> + </sect2> </sect1> - <sect1 id="bridging"> - <title>Bridging</title> + <sect1 id="network-wireless"> + <sect1info> + <authorgroup> + <author> + <firstname>Eric</firstname> + <surname>Anderson</surname> + <contrib>原作: </contrib> + </author> + </authorgroup> + </sect1info> + <title>無線ネットワーク</title> + + <indexterm><primary>無線ネットワーク</primary></indexterm> + <indexterm> + <primary>802.11</primary> + <see>無線ネットワーク</see> + </indexterm> + + <sect2> + <title>はじめに</title> + <para>常にネットワークケーブルをつないでいるという面倒なことをせずに、 + コンピュータを使用できることは、とても有用でしょう。 + FreeBSD は無線のクライアントとして、 + さらに<quote>アクセスポイント</quote>としても使えます。</para> + </sect2> + + <sect2> + <title>無線の動作モード</title> + <para>802.11 無線デバイスの設定には、BSS と IBSS + の二つの方法があります。</para> + + <sect3> + <title>BSS モード</title> + <para>BSS モードは一般的に使われているモードです。 + BSS モードはインフラストラクチャモードとも呼ばれています。 + このモードでは、 + 多くの無線アクセスポイントが + 1 つの有線ネットワークに接続されます。 + それぞれのワイヤレスネットワークは固有の名称を持っています。 + その名称はネットワークの SSID と呼ばれます。</para> + + <para>無線クライアントはこれらの無線アクセスポイントに接続します。 + IEEE 802.11 標準は無線ネットワークが接続するのに使用するプロトコルを規定しています。 + SSID が設定されているときは、 + 無線クライアントを特定のネットワークに結びつけることができます。 + SSID を明示的に指定しないことにより、 + 無線クライアントを任意のネットワークに接続することもできます。</para> + </sect3> + + <sect3> + <title>IBSS モード</title> + <para>アドホックモードとも呼ばれる IBSS モードは、 + 一対一通信のために設計された通信方式です。 + 実際には二種類のアドホックモードがあります。 + 一つは IBSS モードで、アドホックモード、または + IEEE アドホックモードとも呼ばれます。 + このモードは IEEE 802.11 標準に規定されています。 + もう一つはデモアドホックモードもしくは Lucent アドホックモード + (そして時々、紛らわしいことに、アドホックモード) + と呼ばれるモードです。 + このモードは古く、802.11 が標準化する以前のアドホックモードで、 + これは古い設備でのみ使用されるべきでしょう。 + ここでは、どちらのアドホックモードについてもこれ以上言及しません。</para> + </sect3> + </sect2> + + <sect2> + <title>インフラストラクチャーモード</title> + <sect3> + <title>アクセスポイント</title> + + <para>アクセスポイントは一つ以上の無線クライアントが、 + そのデバイスをセントラルハブとして利用できるようにする無線ネットワークデバイスです。 + アクセスポイントを使用している間、 + すべてのクライアントはアクセスポイントを介して通信します。 + 家屋や職場、または公園などの空間を無線ネットワークで完全にカバーするために、 + 複数のアクセスポイントがよく使われます。</para> + + <para>アクセスポイントは一般的に複数のネットワーク接続 + (無線カードと、 + その他のネットワークに接続するための一つ以上の有線イーサネットアダプタ) + を持っています。</para> + + <para>アクセスポイントは、出来合いのものを購入することもできますし、 + FreeBSD と対応している無線カードを組み合わせて、 + 自分で構築することもできます。 + いくつものメーカが、 + さまざまな機能をもった無線アクセスポイントおよび無線カードを製造しています。</para> + </sect3> + + <sect3> + <title>FreeBSD のアクセスポイントの構築</title> + <indexterm><primary>無線ネットワーク</primary> + <secondary>アクセスポイント</secondary> + </indexterm> + + <sect4><title>要件</title> + + <para>FreeBSD で無線アクセスポイントを設定するためには、 + 互換性のある無線カードが必要です。 + 現状では Prism チップセットのカードのみに対応しています。 + また FreeBSD + に対応している有線ネットワークカードも必要になるでしょう + (これを見つけるのは難しくないでしょう。 + FreeBSD は多くの異なるデバイスに対応しているからです) 。 + この手引きでは、 + 無線デバイスと有線ネットワークカードに接続しているネットワーク間のトラフィックを + &man.bridge.4; したいと仮定します。</para> + + <para>FreeBSD がアクセスポイントを実装するのに使用する hostap + 機能はファームウェアの特定のバージョンで一番よく性能を発揮します。 + Prism 2 カードは、 + 1.3.4 以降のバージョンのファームウェアで使用すべきです。 + Prism 2.5 および Prism 3 カードでは、バージョン 1.4.9 + のバージョンのファームウェアで使用すべきです。 + それより古いバージョンのファームウェアは、 + 正常に動くかもしれませんし、動かないかもしれません。 + 現時点では、カードのファームウェアを更新する唯一の方法は、 + カードの製造元から入手できる &windows; + 用ファームウェアアップデートユーティリティを使うものです。</para> + </sect4> + + <sect4> + <title>設定</title> + <para>はじめにシステムが無線カードを認識していることを確認してください。</para> + <screen>&prompt.root; <userinput>ifconfig -a</userinput> +wi0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 + inet6 fe80::202:2dff:fe2d:c938%wi0 prefixlen 64 scopeid 0x7 + inet 0.0.0.0 netmask 0xff000000 broadcast 255.255.255.255 + ether 00:09:2d:2d:c9:50 + media: IEEE 802.11 Wireless Ethernet autoselect (DS/2Mbps) + status: no carrier + ssid "" + stationname "FreeBSD Wireless node" + channel 10 authmode OPEN powersavemode OFF powersavesleep 100 + wepmode OFF weptxkey 1</screen> + + <para>細かいことは気にせず、 + 無線カードがインストールされていることを示す何かが表示されていることを確かめてください。 + PC カードを使用していて、無線インタフェースを認識できない場合、 + 詳しい情報を得るために &man.pccardc.8; と &man.pccardd.8; + のマニュアルページを調べてみてください。</para> + + <para>次に、アクセスポイント用に + FreeBSD のブリッジ機能を担う部分を有効にするために、 + モジュールを読み込む必要があるでしょう。 + &man.bridge.4; モジュールを読み込むには、 + 次のコマンドをそのまま実行します。</para> + + <screen>&prompt.root; <userinput>kldload bridge</userinput></screen> + + <para>モジュールを読み込む時には、何もエラーはでないはずです。 + もしもエラーがでたら、カーネルに &man.bridge.4; + のコードを入れてコンパイルする必要があるかもしれません。 + ハンドブックの<link + linkend="network-bridging">ブリッジ</link>の節が、 + この課題を成し遂げる手助けをになるかもしれません。</para> + + <para>ブリッジ部分が準備できたので、 + どのインタフェース間をブリッジするのかを + FreeBSD カーネルに指定する必要があります。 + これは、&man.sysctl.8; を使って行います。</para> + + <screen>&prompt.root; <userinput>sysctl net.link.ether.bridge=1</userinput> +&prompt.root; <userinput>sysctl net.link.ether.bridge_cfg="wi0 xl0"</userinput> +&prompt.root; <userinput>sysctl net.inet.ip.forwarding=1</userinput></screen> + + <para>さて、無線カードを設定するときです。</para> + <para>次のコマンドはカードをアクセスポイントとして設定します。</para> + + <screen> +&prompt.root; <userinput>ifconfig wi0 ssid my_net channel 11 media DS/11Mbps mediaopt hostap up stationname "FreeBSD AP"</userinput></screen> + + <para>この &man.ifconfig.8; コマンド行は + <devicename>wi0</devicename> インタフェースを up + 状態にし、SSID を <literal>my_net</literal> に設定し、 + ステーション名を <literal>FreeBSD AP</literal> に設定します。 + <option>media DS/11Mbps</option> オプションはカードを 11Mbps + モードに設定し、また <option>mediaopt</option> + を実際に有効にするのに必要です。 + <option>mediaopt hostap</option> + オプションはインタフェースをアクセスポイントモードにします。 + <option>channel 11</option> オプションは使用するチャネルを + 802.11b に設定します。 + 各規制地域 (regulatory domain) で有効なチャネル番号は + &man.wicontrol.8; マニュアルに載っています。</para> + + <para>さて、 + これで完全に機能するアクセスポイントが立ち上がり、動作しています。 + より詳しい情報については、&man.wicontrol.8;, &man.ifconfig.8; + および &man.wi.4; のマニュアルを読むとよいでしょう。 + </para> + + <para>また、下記の暗号化に関する節を読むこともおすすめします。</para> + </sect4> + + <sect4> + <title>ステータス情報</title> + <para>一度アクセスポイントが設定されて稼働すると、 + 管理者はアクセスポイントを利用しているクライアントを見たいと思うでしょう。 + いつでも管理者は以下のコマンドを実行できます。</para> + + <screen>&prompt.root; <userinput>wicontrol -l</userinput> +1 station: +00:09:b7:7b:9d:16 asid=04c0, flags=3<ASSOC,AUTH>, caps=1<ESS>, rates=f<1M,2M,5.5M,11M>, sig=38/15</screen> + + <para>これは一つの局が、 + 表示されているパラメータで接続していることを示します。 + 表示された信号は、 + 相対的な強さを表示しているだけのものとして扱われるべきです。 + dBm やその他の単位への変換結果は、 + 異なるファームウェアバージョン間で異なります。</para> + </sect4> + </sect3> + + <sect3> + <title>クライアント</title> + + <para>無線クライアントはアクセスポイント、 + または他のクライアントに直接アクセスするシステムです。</para> + + <para>典型的には、 + 無線クライアントが有しているネットワークデバイスは、 + 無線ネットワークカード 1 枚だけです。</para> + + <para>無線クライアントを設定するにはいくつか方法があります。 + それぞれは異なる無線モードに依存していますが、 + 一般的には BSS + (アクセスポイントを必要とするインフラストラクチャーモード) か、 + IBSS (アドホック、またはピアツーピアモード) のどちらかです。 + ここでは、アクセスポイントと通信をするのに、 + 両者のうちで最も広まっている BSS モードを使用します。</para> + + <sect4> + <title>要件</title> + <para>FreeBSD を無線クライアントとして設定するのに、 + 本当に必要なものはたった 1 つだけです。 + FreeBSD が対応している無線カードが必要です。</para> + </sect4> + + <sect4> + <title>無線 FreeBSD クライアントの設定</title> + + <para>設定をはじめる前に、 + あなたが接続しようとする無線ネットワークについていくつか知っておかなければなりません。 + この例では、<literal>my_net</literal> + という名前で暗号化は無効になっているネットワークに接続しようとしています。</para> + + <para>Note: この例では暗号化を行っていないのですが、 + これは危険な状況です。次の節で、暗号化を有効にする方法と、 + なぜそれが重要で、 + 暗号技術によっては完全にはあなたを保護することができないのはなぜか、 + ということを学ぶでしょう。</para> + + <para>カードが FreeBSD に認識されていることを確認してください。</para> + + <screen>&prompt.root; <userinput>ifconfig -a</userinput> +wi0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 + inet6 fe80::202:2dff:fe2d:c938%wi0 prefixlen 64 scopeid 0x7 + inet 0.0.0.0 netmask 0xff000000 broadcast 255.255.255.255 + ether 00:09:2d:2d:c9:50 + media: IEEE 802.11 Wireless Ethernet autoselect (DS/2Mbps) + status: no carrier + ssid "" + stationname "FreeBSD Wireless node" + channel 10 authmode OPEN powersavemode OFF powersavesleep 100 + wepmode OFF weptxkey 1</screen> + + <para>それでは、このカードをネットワークに合わせて設定しましょう。</para> + + <screen>&prompt.root; <userinput>ifconfig wi0 inet 192.168.0.20 netmask 255.255.255.0 ssid my_net</userinput></screen> + + <para><hostid role="ipaddr">192.168.0.20</hostid> と + <hostid role="netmask">255.255.255.0</hostid> + を有線ネットワークで有効な + IP アドレスとネットマスクに置き換えてください。 + アクセスポイントは無線ネットワークと有線ネットワークの間でデータをブリッジしているため、 + ネットワーク上の他のデバイスには、このデバイスが、他と同様に、 + 有線ネットワーク上にあるかのように見えることに注意してください。</para> + + <para>これを終えると、 + あなたは標準的な有線接続を使用しているかのように、 + 有線ネットワーク上のホストに ping を送ることができるでしょう。</para> + + <para>無線接続に関する問題がある場合は、 + アクセスポイントに接続されていることを確認してください。</para> + + <screen>&prompt.root; <userinput>ifconfig wi0</userinput></screen> + + <para>いくらか情報が表示されるはずです。 + その中に以下の表示があるはずです。</para> + <screen>status: associated</screen> + + <para>もしこのように接続されていると表示されなければ、 + アクセスポイントの範囲外かもしれないし、 + 暗号化が有効になっていないのかもしれないし、 + または設定の問題を抱えているのかもしれません。</para> + </sect4> + </sect3> + + <sect3> + <title>暗号化</title> + <indexterm> + <primary>無線ネットワーク</primary> + <secondary>暗号化</secondary> + </indexterm> + + <para>無線ネットワークを暗号化することが重要なのは、 + 十分保護された領域にネットワークを留める能力がもはやないからです。 + 無線データはその周辺全体にわたって放送されるので、 + それを読みたいと思う人はだれでも読むことができます。 + そこで暗号化が役に立ちます。 + 電波に載せて送られるデータを暗号化することによって、 + 興味を抱いた者が空中からデータを取得することをずっと難しくします。</para> + + <para>クライアントとアクセスポイント間のデータを暗号化するもっとも一般的な方法には、 + WEP と &man.ipsec.4; の二種類があります。</para> + + <sect4> + <title>WEP</title> + <indexterm><primary>WEP</primary></indexterm> + + <para>WEP は Wired Equivalency Protocol + (訳注: 直訳すると、有線等価プロトコル) の略語です。WEP + は無線ネットワークを有線ネットワークと同程度に安全で確実なものにしようとする試みです。 + 残念ながら、これはすでに破られており、 + 破るのはそれほど苦労しません。 + これは、機密データを暗号化するという場合に、 + これに頼るものではないということも意味します。</para> + + <para>なにも無いよりはましなので、 + 次のコマンドを使って、あなたの新しい FreeBSD アクセスポイント上で + WEP を有効にしてください。</para> + + <screen>&prompt.root; <userinput>ifconfig wi0 inet up ssid my_net wepmode on wepkey 0x1234567890 media DS/11Mbps mediaopt hostap</userinput></screen> + + <para>クライアントについては次のコマンドで WEP を有効にできます。</para> + + <screen>&prompt.root; <userinput>ifconfig wi0 inet 192.168.0.20 netmask 255.255.255.0 ssid my_net wepmode on wepkey 0x1234567890</userinput></screen> + + <para><literal>0x1234567890</literal> + をより特異なキーに変更すべきであることに注意してください。</para> + </sect4> + + <sect4> + <title>IPsec</title> + + <para>&man.ipsec.4; + はネットワーク上で交わされるデータを暗号化するための、 + はるかに頑健で強力なツールです。 + これはネットワーク上の無線データを暗号化する明らかに好ましい方法です。 + ハンドブック内の <link linkend="ipsec">IPsec</link> 節で + &man.ipsec.4; セキュリティ、 + およびその実装方法の詳細を読むことができます。</para> + </sect4> + </sect3> + + <sect3> + <title>ツール</title> + + <para>無線ネットワークをデバッグしたり設定するのに使うツールがわずかばかりあります。 + ここでその一部と、それらが何をしているか説明します。</para> - <para><emphasis>Written by Steve Peterson - <email>steve@zpfe.com</email></emphasis>.</para> + <sect4> + <title><application>bsd-airtools</application> パッケージ</title> + + <para><application>bsd-airtools</application> パッケージは、 + WEP キークラッキング、 + アクセスポイント検知などの無線通信を監査するツールを含む完備されたツール集です。</para> + + <para><application>bsd-airtools</application> ユーティリティは + <filename role="package">net/bsd-airtools</filename> port + からインストールできます。 + ports のインストールに関する情報はハンドブックの + <xref linkend="ports"/> を参照してください。</para> + + <para><command>dstumbler</command> プログラムは、 + アクセスポイントの発見および + S/N 比のグラフ化をできるようにするパッケージツールです。 + アクセスポイントを立ち上げて動かすのに苦労しているなら、 + <command>dstumbler</command> + はうまく行く手助けになるかもしれません。</para> + + <para>無線ネットワークの安全性をテストするのに、 + <quote>dweputils</quote> (<command>dwepcrack</command>, + <command>dwepdump</command> および <command>dwepkeygen</command>) + を使用することで、 + WEP があなたの無線安全性への要求に対する正しい解決策かどうか判断するのを助けられるかもしれません。</para> + </sect4> + + <sect4> + <title><application>wicontrol</application>, <application>ancontrol</application> および <application>raycontrol</application> ユーティリティ</title> + + <para>これらは、無線ネットワーク上で無線カードがどのように動作するかを制御するツールです。 + 上記の例では、無線カードが <devicename>wi0</devicename> + インタフェースであるので、&man.wicontrol.8; + を使用することに決めました。 + もし Cisco の無線デバイスを持っている場合は、それは + <devicename>an0</devicename> として動作するでしょうから、 + &man.ancontrol.8; を使うことになるでしょう。</para> + </sect4> + + <sect4> + <title><application>ifconfig</application> コマンド</title> + <indexterm><primary>ifconfig</primary></indexterm> + + <para>&man.ifconfig.8; は &man.wicontrol.8; + と同じオプションの多くを処理できますが、 + いくつかのオプションを欠いています。 + コマンドライン引数とオプションについて + &man.ifconfig.8; を参照してください。</para> + </sect4> + </sect3> + + <sect3> + <title>対応しているカード</title> + <sect4> + <title>アクセスポイント</title> + + <para>現在のところ (アクセスポイントとして) + BSS モードに対応した唯一のカードは Prism 2, 2.5 + または 3 チップセットを利用したデバイスです。 + &man.wi.4; に完全な一覧があります。</para> + </sect4> + + <sect4> + <title>クライアント</title> + + <para>現在、FreeBSD では、ほとんどすべての 802.11b + 無線カードに対応しています。 + Prism, Spectrum24, Hermes, Aironet または Raylink + のチップセットを利用したほとんどのカードは、 + (アドホック、ピアツーピア、そして BSS の) + IBSS モードで無線ネットワークカードとして動作するでしょう。</para> + </sect4> + </sect3> + </sect2> + </sect1> + <sect1 id="network-bluetooth"> + <sect1info> + <authorgroup> + <author> + <firstname>Pav</firstname> + <surname>Lucistnik</surname> + <contrib>原作: </contrib> + <affiliation> + <address><email>pav@oook.cz</email></address> + </affiliation> + </author> + </authorgroup> + </sect1info> + <title>Bluetooth</title> + + <indexterm><primary>Bluetooth</primary></indexterm> <sect2> <title>はじめに</title> + <para>Bluetooth は免許のいらない 2.4 GHz の帯域を利用して、 + 10 m 程度のパーソナルネットワークを作る無線技術です。 + ネットワークはたいていの場合、その場その場で、携帯電話や + PDA やノートパソコンなどの携帯デバイスから形成されます。 + Wi-Fi などの他の有名な無線技術とは違い、 + Bluetooth はより高いレベルのサービスを提供します。 + たとえば、FTP のようなファイルサーバ、ファイルのプッシュ、 + 音声伝送、シリアル線のエミュレーションなどのサービスです。</para> + + <para>&os; 内での Bluetooth スタックは Netgraph フレームワーク + (&man.netgraph.4; 参照) を使って実現されています。 + &man.ng.ubt.4; ドライバは、 + 多種多様な Bluetooth USB ドングルに対応しています。 + Broadcom BCM2033 チップを搭載した Bluetooth デバイスは &man.ubtbcmfw.4; + および &man.ng.ubt.4; ドライバによって対応されています。 + 3Com Bluetooth PC カード 3CRWB60-A は &man.ng.bt3c.4; + ドライバによって対応されています。 + シリアルおよび UART を搭載した Bluetooth デバイスは &man.sio.4;, + &man.ng.h4.4; および &man.hcseriald.8; ドライバによって対応されています。 + この節では USB Bluetooth ドングルの使用法について説明します。 + Bluetooth に対応しているのは &os; 5.0 以降のシステムです。</para> + + <note> + <title>訳注</title> + <para>5.0, 5.1 Release ではカーネルモジュールは利用可能ですが、 + 種々のユーティリティとマニュアルは標準でコンパイルされていません。 + </para> + </note> + </sect2> + + <sect2> + <title>デバイスの挿入</title> + <para>デフォルトでは Bluetooth + デバイスドライバはカーネルモジュールとして利用できます。 + デバイスを接続する前に、 + カーネルにドライバを読み込む必要があります。</para> + + <screen>&prompt.root; <userinput>kldload ng_ubt</userinput></screen> + + <para>Bluetooth デバイスがシステム起動時に存在している場合、 + <filename>/boot/loader.conf</filename> + からモジュールを読み込んでください。</para> + + <programlisting>ng_ubt_load="YES"</programlisting> + + <para>USB ドングルを挿してください。コンソールに (または syslog に) + 下記のような表示が現れるでしょう。</para> + + <screen>ubt0: vendor 0x0a12 product 0x0001, rev 1.10/5.25, addr 2 +ubt0: Interface 0 endpoints: interrupt=0x81, bulk-in=0x82, bulk-out=0x2 +ubt0: Interface 1 (alt.config 5) endpoints: isoc-in=0x83, isoc-out=0x3, + wMaxPacketSize=49, nframes=6, buffer size=294</screen> + + <para><filename>/usr/share/examples/netgraph/bluetooth/rc.bluetooth</filename> + を <filename>/etc/rc.bluetooth</filename> + のようなどこか便利な場所にコピーしてください。 + このスクリプトは Bluetooth + スタックを開始および終了させるのに使われます。 + デバイスを抜く前にスタックを終了するのはよい考えですが、 + (たいていの場合) しなくても致命的ではありません。 + スタックを開始するときに、下記のような出力がされます。</para> + + <screen>&prompt.root; <userinput>/etc/rc.bluetooth start ubt0</userinput> +BD_ADDR: 00:02:72:00:d4:1a +Features: 0xff 0xff 0xf 00 00 00 00 00 +<3-Slot> <5-Slot> <Encryption> <Slot offset> +<Timing accuracy> <Switch> <Hold mode> <Sniff mode> +<Park mode> <RSSI> <Channel quality> <SCO link> +<HV2 packets> <HV3 packets> <u-law log> <A-law log> <CVSD> +<Paging scheme> <Power control> <Transparent SCO data> +Max. ACL packet size: 192 bytes +Number of ACL packets: 8 +Max. SCO packet size: 64 bytes +Number of SCO packets: 8</screen> + </sect2> + + <sect2> + <title>ホストコントローラインタフェース (HCI)</title> + <indexterm><primary>HCI</primary></indexterm> + + <para>ホストコントローラインタフェース (HCI) は、 + ベースバンドコントローラおよびリンクマネージャへのコマンドインタフェースを提供し、 + ハードウェアステータスおよびコントロールレジスタへアクセスします。 + このインタフェースは + Bluetooth ベースバンド機能へアクセスする画一的な方法を提供します。 + ホストの HCI 層は Bluetooth ハードウェア上の HCI ファームウェアと、 + データとコマンドをやり取りします。 + ホストコントローラトランスポート層 (つまり物理的なバス) のドライバは、 + 両方の HCI 層に相互に情報を交換する能力を与えます。</para> + + <para>一つの Bluetooth デバイスにつき、<emphasis>hci</emphasis> + タイプの Netgraph ノードが一つ作成されます。 + HCI ノードは通常 Bluetooth デバイスドライバノード (下流) と + L2CAP ノード (上流) に接続されます。 + すべての HCI 動作はデバイスドライバノード上ではなく、 + HCI ノード上で行われなくてはいけません。 + HCI ノードのデフォルト名は <quote>devicehci</quote>です。 + 詳細については &man.ng.hci.4; マニュアルを参照してください。</para> + + <para>最も一般的なタスクの一つに、無線通信的に近傍にある Bluetooth + デバイスの発見があります。 + この動作は <emphasis>inquiry (問い合わせ)</emphasis> と呼ばれています。 + Inquiry や他の HCI に関連した動作は &man.hccontrol.8; + ユーティリティによってなされます。 + 下記の例は、どの + Bluetooth デバイスが通信圏内にあるかを知る方法を示しています。 + デバイスのリストが表示されるには数秒かかります。 + リモートデバイスは <emphasis>discoverable (発見可能な)</emphasis> + モードにある場合にのみ + inquiry に返答するということに注意してください。</para> + + <screen>&prompt.user; <userinput>hccontrol -n ubt0hci inquiry</userinput> +Inquiry result, num_responses=1 +Inquiry result #0 + BD_ADDR: 00:80:37:29:19:a4 + Page Scan Rep. Mode: 0x1 + Page Scan Period Mode: 00 + Page Scan Mode: 00 + Class: 52:02:04 + Clock offset: 0x78ef +Inquiry complete. Status: No error [00]</screen> + + <para><literal>BD_ADDR</literal> は + Bluetooth デバイスに固有のアドレスです。 + これはネットワークカードの MAC アドレスに似ています。 + このアドレスはデバイスとの通信を続けるのに必要となります。 + BD_ADDR に人間が判読しやすい名前を割り当てることもできます。 + <filename>/etc/bluetooth/hosts</filename> ファイルには、 + 既知の Bluetooth ホストに関する情報が含まれています。 + 次の例はリモートデバイスに割り当てられている、 + 人間が判読しやすい名前を得る方法を示しています。</para> + + <screen>&prompt.user; <userinput>hccontrol -n ubt0hci remote_name_request 00:80:37:29:19:a4</userinput> +BD_ADDR: 00:80:37:29:19:a4 +Name: Pav's T39</screen> + + <para>リモートの Bluetooth デバイス上で inquiry を実行すると、 + あなたのコンピュータは <quote>your.host.name (ubt0)</quote> + と認識されます。 + ローカルデバイスに割り当てられた名前はいつでも変更できます。</para> + + <para>Bluetooth システムは一対一接続 (二つの + Bluetooth ユニットだけが関係します) または一対多接続を提供します。 + 一対多接続では、接続はいくつかの Bluetooth デバイス間で共有されます。 + 次の例は、ローカルデバイスに対するアクティブなベースバンド接続のリストを得る方法を示しています。</para> + + <screen>&prompt.user; <userinput>hccontrol -n ubt0hci read_connection_list</userinput> +Remote BD_ADDR Handle Type Mode Role Encrypt Pending Queue State +00:80:37:29:19:a4 41 ACL 0 MAST NONE 0 0 OPEN</screen> + + <para><emphasis>connection handle</emphasis> + はベースバンド接続の終了が必要とされるときに便利です。 + もっとも、通常はこれを手動で行う必要はありません。 + Bluetooth スタックはアクティブでないベースバンド接続を自動的に終了します。</para> + + <screen>&prompt.root; <userinput>hccontrol -n ubt0hci disconnect 41</userinput> +Connection handle: 41 +Reason: Connection terminated by local host [0x16]</screen> + + <para>利用可能な HCI コマンドの完全な一覧を得るには、 + <command>hccontrol help</command> を参照してください。 + HCI コマンドのほとんどはスーパユーザ権限を必要としません。</para> + </sect2> + + <sect2> + <title>ロジカルリンクコントロールおよびアダプテーションプロトコル (L2CAP)</title> + <indexterm><primary>L2CAP</primary></indexterm> + + <para>ロジカルリンクコントロールおよびアダプテーションプロトコル + (L2CAP) は、プロトコル多重化ケーパビリティおよび分割・再編成動作を備えた、 + 上位層プロトコルへのコネクション指向およびコネクションレスデータサービスを提供します。 + L2CAP は上位層プロトコルおよびアプリケーションが + 64 KB までの長さの + L2CAP データパケットを送受信することを可能にします。</para> + + <para>L2CAP は <emphasis>チャネル</emphasis> の概念に基づいています。 + チャネルはベースバンド接続の上位に位置する論理的な接続です。 + それぞれのチャネルは多対一の方法で一つのプロトコルに結びつけられます。 + 複数のチャネルを同じプロトコルに結びつけることは可能ですが、 + 一つのチャネルを複数のプロトコルに結びつけることはできません。 + チャネル上で受け取られたそれぞれの L2CAP パケットは、 + 適切なより上位のプロトコルに渡されます。 + 複数のチャネルは同じベースバンド接続を共有できます。</para> + + <para>一つの Bluetooth デバイスに対して、<emphasis>l2cap</emphasis> + タイプの Netgraph ノードが一つ作成されます。 + L2CAP ノードは通常 Bluetooth HCI ノード (下流) と + Bluetooth ソケットノード (上流) に接続されます。 + L2CAP ノードのデフォルト名は <quote>devicel2cap</quote> です。 + 詳細については &man.ng.l2cap.4; マニュアルを参照してください。</para> + + <para>便利なコマンドに、他のデバイスに ping を送ることができる + &man.l2ping.8; があります。Bluetooth 実装によっては、 + 送られたデータすべては返さないことがあります。 + したがって次の例で <emphasis>0 バイト</emphasis> は正常です。</para> + + <screen>&prompt.root; <userinput>l2ping -a 00:80:37:29:19:a4</userinput> +0 bytes from 0:80:37:29:19:a4 seq_no=0 time=48.633 ms result=0 +0 bytes from 0:80:37:29:19:a4 seq_no=1 time=37.551 ms result=0 +0 bytes from 0:80:37:29:19:a4 seq_no=2 time=28.324 ms result=0 +0 bytes from 0:80:37:29:19:a4 seq_no=3 time=46.150 ms result=0</screen> + + <para>&man.l2control.8; ユーティリティは + L2CAP ノード上でさまざまな操作を行うのに使われます。 + この例は、ローカルデバイスに対する論理的な接続 (チャネル) + およびベースバンド接続の一覧を得る方法を示しています。</para> + + <screen>&prompt.user; <userinput>l2control -a 00:02:72:00:d4:1a read_channel_list</userinput> +L2CAP channels: +Remote BD_ADDR SCID/ DCID PSM IMTU/ OMTU State +00:07:e0:00:0b:ca 66/ 64 3 132/ 672 OPEN +&prompt.user; <userinput>l2control -a 00:02:72:00:d4:1a read_connection_list</userinput> +L2CAP connections: +Remote BD_ADDR Handle Flags Pending State +00:07:e0:00:0b:ca 41 O 0 OPEN</screen> + + <para>別の診断ツールが &man.btsockstat.1; です。 + これは &man.netstat.1; と同様の作業を、Bluetooth + ネットワークに関するデータ構造についての行います。 + 下記の例は上の &man.l2control.8; と同じ論理的な接続を示します。</para> + + <screen>&prompt.user; <userinput>btsockstat</userinput> +Active L2CAP sockets +PCB Recv-Q Send-Q Local address/PSM Foreign address CID State +c2afe900 0 0 00:02:72:00:d4:1a/3 00:07:e0:00:0b:ca 66 OPEN +Active RFCOMM sessions +L2PCB PCB Flag MTU Out-Q DLCs State +c2afe900 c2b53380 1 127 0 Yes OPEN +Active RFCOMM sockets +PCB Recv-Q Send-Q Local address Foreign address Chan DLCI State +c2e8bc80 0 250 00:02:72:00:d4:1a 00:07:e0:00:0b:ca 3 6 OPEN</screen> + </sect2> + + <sect2> + <title>RFCOMM プロトコル</title> + <indexterm><primary>RFCOMM</primary></indexterm> + + <para>RFCOMM プロトコルは L2CAP + プロトコルを介してシリアルポートのエミュレーションを提供します。 + このプロトコルは ETSI (訳注: 欧州電気通信標準化機構) + 標準 TS 07.10 に基づいています。 + RFCOMM プロトコルは、単純な伝送プロトコルに RS-232 (EIATIA-232-E) + シリアルポートの 9 本の結線をエミュレートする項目を加えたものです。 + RFCOMM プロトコルは、二つの Bluetooth デバイス間で、最大 60 + までの同時接続 (RFCOMM チャネル) に対応しています。</para> + + <para>RFCOMM の目的から、完全な通信経路は、異なるデバイス上 + (通信の端点) で動作している二つのアプリケーションと、 + その間の通信セグメントを含んでいます。RFCOMM + は、それが動いているデバイスのシリアルポートを利用するアプリケーションをカバーするためのものです。 + 通信セグメントはあるデバイスから他のデバイスへの Bluetooth リンクです + (直接接続)。</para> + + <para>RFCOMM は直接接続している場合のデバイス間の接続、 + またはネットワークの場合のデバイスとモデムの間の接続にだけ関係があります。 + RFCOMM は、一方が Bluetooth 無線技術で通信し、 + もう一方で有線インタフェースを提供するモジュールのような、 + 他の構成にも対応できます。</para> + + <para>&os; では RFCOMM プロトコルは Bluetooth ソケット層に実装されています。</para> + </sect2> + + <sect2> + <title>デバイスのペアリング</title> + <indexterm><primary>pairing</primary></indexterm> + + <para>デフォルトでは Bluetooth 通信は認証されておらず、 + すべてのデバイスが他のすべてのデバイスと通信できます。 + Bluetooth デバイス (たとえば携帯電話) は特定のサービス + (たとえばダイアルアップサービス) を提供するために、 + 認証を要求することも選択できます。 + Bluetooth 認証は通常 <emphasis>PIN コード</emphasis> で行われます。 + PIN コードは最長 16 文字のアスキー文字列です。 + ユーザは両デバイスで同じ PIN コードを入力することを要求されます。 + 一度 PIN コードを入力すると、 + 両デバイスは <emphasis>リンクキー</emphasis> を作成します。 + その後、リンクキーはそのデバイス自身または、 + 不揮発性記憶デバイス内に格納できます。 + 次の機会には、両デバイスは前に作成されたリンクキーを使用するでしょう。 + このような手続きを<emphasis>ペアリング (pairing)</emphasis> + と呼びます。いずれかのデバイス上でリンクキーが失われたときには、 + ペアリングをやり直さなければならないことに注意してください。</para> + + <para>&man.hcsecd.8; デーモンが + Bluetooth 認証要求のすべてを扱う責任を負っています。 + デフォルトの設定ファイルは + <filename>/etc/bluetooth/hcsecd.conf</filename> です。 + PIN コードが <quote>1234</quote> + に設定された携帯電話に関する例は以下の通りです。</para> + + <programlisting>device { + bdaddr 00:80:37:29:19:a4; + name "Pav's T39"; + key nokey; + pin "1234"; + }</programlisting> + + <para>PIN コードには (長さを除いて) 制限はありません。 + いくつかのデバイス (たとえば Bluetooth ヘッドフォン) + には固定的な PIN コードが組み込まれているかもしれません。 + <option>-d</option> オプションは &man.hcsecd.8; + デーモンがフォアグラウンドで動作するように強制するため、 + 何が起きているのか確認しやすくなります。 + リモートデバイスがペアリングを受け取るように設定して、 + リモートデバイスへの Bluetooth 接続を開始してください。 + リモートデバイスはペアリングが受け入れらた、と応答して + PIN コードを要求するでしょう。 + <filename>hcsecd.conf</filename> 内にあるのと同じ + PIN コードを入力してください。 + これであなたの PC とリモートデバイスがペアとなりました。 + また、リモートデバイスからペアリングを開始することもできます。 + 以下は <command>hcsecd</command> の出力例です。</para> + +<programlisting>hcsecd[16484]: Got Link_Key_Request event from 'ubt0hci', remote bdaddr 0:80:37:29:19:a4 +hcsecd[16484]: Found matching entry, remote bdaddr 0:80:37:29:19:a4, name 'Pav's T39', link key doesn't exist +hcsecd[16484]: Sending Link_Key_Negative_Reply to 'ubt0hci' for remote bdaddr 0:80:37:29:19:a4 +hcsecd[16484]: Got PIN_Code_Request event from 'ubt0hci', remote bdaddr 0:80:37:29:19:a4 +hcsecd[16484]: Found matching entry, remote bdaddr 0:80:37:29:19:a4, name 'Pav's T39', PIN code exists +hcsecd[16484]: Sending PIN_Code_Reply to 'ubt0hci' for remote bdaddr 0:80:37:29:19:a4</programlisting> + </sect2> + + <sect2> + <title>サービスディスカバリプロトコル (SDP)</title> + <indexterm><primary>SDP</primary></indexterm> + + <para>サービスディスカバリプロトコル (SDP) は、 + クライアントアプリケーションが、 + サーバアプリケーションが提供するサービスの存在とその属性を発見する手段を提供します。 + サービスの属性には提示されているサービスのタイプまたはクラス、 + および、サービスを利用するのに必要な仕組みまたはプロトコルの情報が含まれます。</para> + + <para>SDP には SDP サーバと SDP クライアント間の通信が含まれます。 + SDP サーバは、サーバに関連づけられたサービスの特性について記述しているサービスレコードの一覧を維持しています。 + 各サービスレコードにはそれぞれ 1 つのサービスの情報が書かれています。 + クライアントは SDP リクエストを出すことによって、 + SDP サーバが維持しているサービスレコードから情報を検索できます。 + クライアントまたはクライアントに関連づけられたアプリケーションがサービスを利用することにしたら、 + サービスを利用するためには、 + サービスプロバイダへの接続を別途開かなければなりません。 + SDP はサービスとそれらの属性を発見するための仕組みを提供しますが、 + そのサービスを利用するための仕組みは提供しません。</para> + + <para>通常 SDP + クライアントは希望するサービスの特性に基づいてサービスを検索します。 + しかしながら、サービスに関する事前の情報なしに、 + どのタイプのサービスが SDP + サーバのサービスレコードに記述されているか知ることが望ましいことがあります。 + この、提供されている任意のサービスを閲覧する手順を、 + <emphasis>ブラウジング (browsing)</emphasis> と呼びます。</para> + + <para>現在のところ Bluetooth SDP サーバおよびクライアントは、 + <ulink url="http://www.geocities.com/m_evmenkin/">ここ</ulink> + からダウンロードできる第三者パッケージ + <application>sdp-1.5</application> で実装されています。 + <application>sdptool</application> + はコマンドラインの SDP クライアントです。 + 次の例は SDP ブラウズの問い合わせ方法を示しています。</para> + + <screen>&prompt.root; <userinput>sdptool browse 00:80:37:29:19:a4</userinput> +Browsing 00:80:37:29:19:A4 ... +Service Name: Dial-up Networking +Protocol Descriptor List: + "L2CAP" (0x0100) + "RFCOMM" (0x0003) + Channel: 1 + +Service Name: Fax +Protocol Descriptor List: + "L2CAP" (0x0100) + "RFCOMM" (0x0003) + Channel: 2 + +Service Name: Voice gateway +Service Class ID List: + "Headset Audio Gateway" (0x1112) + "Generic Audio" (0x1203) +Protocol Descriptor List: + "L2CAP" (0x0100) + "RFCOMM" (0x0003) + Channel: 3 +</screen> + + <para>... 等々。 + それぞれのサービスは属性の一覧 (たとえば RFCOMM チャネル) + を持っていることに注意してください。サービスによっては、 + 属性のリストの一部についてメモをとっておく必要があるかもしれません。 + Bluetooth 実装のいくつかは、サービスブラウジングに対応しておらず、 + 空の一覧を返してくるかもしれません。この場合、 + 特定のサービスを検索をすることは可能です。下記の例は + OBEX オブジェクトプッシュ (OPUSH) + サービスを検索する方法です。</para> + + <screen>&prompt.root; <userinput>sdptool search --bdaddr 00:07:e0:00:0b:ca OPUSH</userinput></screen> + + <para>&os; 上における Bluetooth クライアントへのサービス提供は + <application>sdpd</application> サーバが行います。</para> + <screen>&prompt.root; <userinput>sdpd</userinput></screen> + + <para><application>sdptool</application> は、ローカル + SDP サーバにサービスを登録するのにも用いられます。 + 下記の例は PPP (LAN) + サービスを備えたネットワークアクセスを登録する方法を示しています。 + 一部のサービスでは属性 (たとえば RFCOMM チャネル) + を要求することに注意してください。</para> + + <screen>&prompt.root; <userinput>sdptool add --channel=7 LAN</userinput></screen> + + <para>ローカル SDP サーバに登録されたサービスの一覧は SDP + ブラウザの問い合わせを <quote>特別な</quote> BD_ADDR + に送ることで得られます。</para> + + <screen>&prompt.root; <userinput>sdptool browse ff:ff:ff:00:00:00</userinput></screen> + </sect2> + + <sect2> + <title>ダイアルアップネットワーク (DUN) および PPP (LAN) + を用いたネットワークアクセスプロファイル</title> + + <para>ダイアルアップネットワーク (DUN) プロファイルはほとんどの場合、 + モデムや携帯電話とともに使用されます。 + このプロファイルが対象とする場面は以下のものです。</para> + + <itemizedlist> + <listitem><para>コンピュータから携帯電話またはモデムを、 + ダイアルアップインターネットアクセスサーバへの接続、 + または他のダイアルアップサービスを利用するための無線モデムとして使うこと</para></listitem> + + <listitem><para>データ呼び出しを受けるための、 + コンピュータによる携帯電話またはモデムの使用</para></listitem> + </itemizedlist> + + <para>PPP (LAN) によるネットワークアクセスプロファイルは、 + 次の状況で利用できます。</para> + + <itemizedlist> + <listitem><para>単一の Bluetooth デバイスへの LAN アクセス + </para></listitem> + + <listitem><para>マルチ Bluetooth デバイスへの LAN アクセス + </para></listitem> + + <listitem><para>(シリアルケーブルエミュレーション上の PPP + ネットワーク接続を使用した) PC から PC への接続</para></listitem> + </itemizedlist> + + <para>&os; ではどちらのプロファイルも &man.ppp.8; と + &man.rfcomm.pppd.8; (RFCOMM Bluetooth 接続を + PPP が制御可能なように変換するラッパ) で実装されています。 + いずれかのプロファイルが使用可能となる前に、 + <filename>/etc/ppp/ppp.conf</filename> 内に新しい + PPP ラベルが作成されていなければなりません。 + 例については、 &man.rfcomm.pppd.8; + のマニュアルページを参照してください。</para> + + <para>次の例では、DUN RFCOMM チャネル上で + BD_ADDR が 00:80:37:29:19:a4 のリモートデバイスへの RFCOMM + 接続を開くのに &man.rfcomm.pppd.8; が使われます。実際の RFCOMM + チャネル番号は SDP を介してリモートデバイスから得ます。 + 手動で RFCOMM チャネルを指定することもでき、その場合 + &man.rfcomm.pppd.8; は SDP 問い合わせを実行しません。 + リモートデバイス上の RFCOMM チャネルを見つけるには、 + <application>sdptool</application> を使ってください。</para> + + <screen>&prompt.root; <userinput>rfcomm_pppd -a 00:80:37:29:19:a4 -c -C dun -l rfcomm-dialup</userinput></screen> + + <para>PPP (LAN) サービスでネットワークアクセスを提供するためには、 + <application>sdpd</application> サーバが動いていなければなりません。 + これはローカル SDP サーバに LAN サービスを登録するのにも必要です。 + LAN サービスは RFCOMM チャネル属性を必要とすることに注意してください。 + <filename>/etc/ppp/ppp.conf</filename> ファイル内に + LAN クライアントの新しいエントリを作成しなければなりません。 + 例については &man.rfcomm.pppd.8; のマニュアルページを参照してください。 + 最後に、RFCOMM PPP サーバが実行され、 + ローカル SDP サーバに登録されているのと同じ + RFCOMM チャネルで待ち受けていなければなりません。 + 次の例は RFCOMM PPP サーバを起動する方法を示しています。</para> + + <screen>&prompt.root; <userinput>rfcomm_pppd -s -C 7 -l rfcomm-server</userinput></screen> + </sect2> + + <sect2> + <title>OBEX プッシュ (OPUSH) プロファイル</title> + <indexterm><primary>OBEX</primary></indexterm> + + <para>OBEX はモバイルデバイス間で広く使われている単純なファイル転送プロトコルです。 + これは主に赤外線通信で利用されており、ノートパソコンや + PDA 間の汎用的なファイル転送、および + PIM アプリケーションを搭載した携帯電話その他のデバイス間で名刺やカレンダーエントリを転送するのに用いられます。</para> + + <para>OBEX サーバおよびクライアントは、 + <ulink url="http://www.geocities.com/m_evmenkin/">ここ</ulink> + からダウンロードできる <application>obexapp-1.0</application> + という第三者のパッケージとして実装されています。 + このパッケージは <application>openobex</application> ライブラリ + (上記の <application>obexapp</application> に含まれます) および + <filename role="package">devel/glib12</filename> port を必要とします。 + なお、<application>obexapp</application> + はルート権限を必要としません。</para> + + <para>OBEX クライアントは OBEX + サーバとの間でオブジェクトを渡したり (プッシュ) + および受け取ったり (プル) するのに使用されます。 + オブジェクトは、たとえば名刺や予定などになります。 + OBEX クライアントは RFCOMM チャネル番号を + SDP によってリモートデバイスから得ることができます。 + これは RFCOMM チャネル番号の代わりにサービス名を指定することによって行うことができます。 + 対応しているサービス名は IrMC, FTRN および OPUSH です。 + RFCOMM チャネルを番号で指定することもできます。 + 下記は、デバイス情報オブジェクトを携帯電話から受け取り、 + 新しいオブジェクト (名刺) が携帯電話に渡される場合の + OBEX セッションの例です。</para> + + <screen>&prompt.user; <userinput>obexapp -a 00:80:37:29:19:a4 -C IrMC</userinput> +obex> get +get: remote file> telecom/devinfo.txt +get: local file> devinfo-t39.txt +Success, response: OK, Success (0x20) +obex> put +put: local file> new.vcf +put: remote file> new.vcf +Success, response: OK, Success (0x20) +obex> di +Success, response: OK, Success (0x20)</screen> + + <para>OBEX プッシュサービスを提供するためには、 + <application>sdpd</application> サーバが実行されていなければなりません。 + また OPUSH サービスをローカル SDP サーバに登録することも必要です。 + なお、OPUSH サービスには RFCOMM チャネル属性が必要です。 + 渡されるオブジェクトをすべて格納するルートフォルダを作成しなければいけません。 + ルートフォルダのデフォルトパスは + <filename>/var/spool/obex</filename> です。 + 最後に OBEX サーバが実行され、 + ローカル SDP サーバに登録されているのと同じ + RFCOMM チャネルで待ち受けていなければなりません。 + 下記の例は OBEX サーバの起動方法を示します。</para> + + <screen>&prompt.root; <userinput>obexapp -s -C 10</userinput></screen> + </sect2> + + <sect2> + <title>シリアルポート (SP) プロファイル</title> + <para>シリアルポート (SP) プロファイルは Bluetooth デバイスが RS232 + (または同様の) シリアルケーブルエミュレーションを行えるようにします。 + このプロファイルが対象とする場面は、 + レガシーアプリケーションが、仮想シリアルポート抽象を介して + Bluetooth をケーブルの代替品として使うところです。</para> + + <para>&man.rfcomm.sppd.1; + ユーティリティはシリアルポートプロファイルを実装します。 + Pseudo tty が仮想シリアルポート抽象概念として用いられます。 + 下記の例はリモートデバイスのシリアルポートサービスへ接続する方法を示します。 + なお、RFCOMM チャネルを指定する必要はありません。— + &man.rfcomm.sppd.1; は + SDP を介してリモートデバイスからその情報を得ることができます。 + これを上書きしたい場合にはコマンドラインで + RFCOMM チャネルを指定してください。</para> + + <screen>&prompt.root; <userinput>rfcomm_sppd -a 00:07:E0:00:0B:CA -t /dev/ttyp6</userinput> +rfcomm_sppd[94692]: Starting on /dev/ttyp6...</screen> + + <para>接続された pseudo tty はシリアルポートとして利用することができます。</para> + + <screen>&prompt.root; <userinput>cu -l ttyp6</userinput></screen> + </sect2> + + <sect2> + <title>トラブルシューティング</title> + + <sect3> + <title>リモートデバイスが接続できません</title> + <para>古い Bluetooth + デバイスのなかにはロールスイッチング (role switching) + に対応していないものがあります。 + デフォルトでは &os; が新しい接続を受け付けるときに、 + ロールスイッチを実行してマスタになろうとします。 + これに対応していないデバイスは接続できないでしょう。 + なお、ロールスイッチングは新しい接続が確立されるときに実行されるので、 + ロールスイッチングに対応しているかどうかリモートデバイスに問い合わせることはできません。 + ローカル側でロールスイッチングを無効にする + HCI オプションがあります。</para> + + <screen>&prompt.root; <userinput>hccontrol -n ubt0hci write_node_role_switch 0</userinput></screen> + </sect3> - <para>IP サブネットを作成し、 それらのセグメントをルータを - 使って接続したりせずに、 (Ethernet セグメントのような) - 物理ネットワークを二つのネットワークセグメントに分割することは - とても有効な場合があります。 - このような二つのネットワークを繋ぐデバイスはブリッジと呼ばれます。 - そして、 二つのネットワークインタフェイスカードを持つ FreeBSD - システムは、 ブリッジとして動作することができます。</para> + <sect3> + <title>何かがうまくいっていないみたいです。何が実際に起こっているか確認できますか?</title> + <para>できます。 + <ulink url="http://www.geocities.com/m_evmenkin/">ここ</ulink> + からダウンロードできる第三者パッケージ + <application>hcidump-1.5</application> を使ってください。 + <application>hcidump</application> ユーティリティは + &man.tcpdump.1; と似ています。 + これはターミナル上の Bluetooth パケットの内容の表示および + Bluetooth パケットをファイルにダンプするのに使えます。</para> + </sect3> + </sect2> + </sect1> - <para>ブリッジは、 各ネットワークインタフェイスに繋がる - デバイスの MAC 層のアドレス (例えば Ethernet アドレス) - を記憶します。 - ブリッジはトラフィックの送信元と受信先が異なったネットワーク上に - ある場合にのみ、 トラフィックを転送します。</para> + <sect1 id="network-bridging"> + <sect1info> + <authorgroup> + <author> + <firstname>Steve</firstname> + <surname>Peterson</surname> + <contrib>原作: </contrib> + </author> + </authorgroup> + </sect1info> + <title>ブリッジ</title> - <para>すなわち、 ブリッジはポート数の少ない Ethernet スイッチ - だ、 ということができます。</para> + <sect2> + <title>はじめに</title> + <indexterm><primary>IP サブネット</primary></indexterm> + <indexterm><primary>ブリッジ</primary></indexterm> + <para>IP サブネットを作成して、 + それらのセグメントをルータを使って接続することなしに、 + (Ethernet セグメントのような) + 一つの物理ネットワークを二つのネットワークセグメントに分割することはとても有効な場合があります。この方法で二つのネットワークを繋ぐデバイスは + <quote>ブリッジ</quote> と呼ばれます。 + 二つのネットワークインタフェースカードを持つ FreeBSD + システムは、ブリッジとして動作することができます。</para> + + <para>ブリッジは、各ネットワークインタフェイスに繋がるデバイスの + MAC 層のアドレス (Ethernet アドレス) を記憶することにより動作します。 + ブリッジはトラフィックの送信元と受信先が異なったネットワーク上にある場合にのみトラフィックを転送します。</para> + + <para>多くの点で、ブリッジはポート数の少ない Ethernet + スイッチのようなものといえます。</para> </sect2> <sect2> - <title>ブリッジがふさわしい状況とは</title> + <title>ブリッジがふさわしい状況</title> <para>今日ブリッジが活躍する場面は大きく分けて二つあります。</para> <sect3> <title>トラフィックの激しいセグメント</title> - <para>ひとつは、 物理ネットワークセグメントがトラフィック - 過剰になっているが、 なんらかの理由によりネットワークを - サブネットに分け、 ルータで接続することができない場合です。</para> + <para>ひとつは、 + 物理ネットワークセグメントがトラフィック過剰になっているが、 + なんらかの理由によりネットワークをサブネットに分け、 + ルータで接続することができない場合です。</para> - <para>編集部門と製作部門がおなじサブネットに同居している - 新聞社を例に考えてみましょう。 + <para>編集部門と製作部門がおなじサブネットに同居している新聞社を例に考えてみましょう。 編集部門のユーザはファイルサーバとして全員サーバ A を利用し、 製作部門のユーザはサーバ B を利用します。 すべてのユーザを接続するのには Ethernet が使われており、 高負荷となったネットワークは遅くなってしまいます。</para> - <para>もし編集部門のユーザを一つのネットワークセグメントに - 分離することができ、 製作部門もユーザも同様にできるのなら、 + <para>もし編集部門のユーザを一つのネットワークセグメントに分離することができ、 + 製作部門のユーザも同様にできるのなら、 二つのネットワークセグメントをブリッジで繋ぐことができます。 - ブリッジの "反対" 側へ向かうネットワークトラフィックだけが - 転送され、 各ネットワークセグメントの混雑は緩和されます。</para> + ブリッジの <quote>反対</quote> + 側へ向かうネットワークトラフィックだけが転送され、 + 各ネットワークセグメントの混雑は緩和されます。</para> </sect3> <sect3> <title>パケットフィルタ/帯域制御用ファイアウォール</title> + <indexterm><primary>ファイアウォール</primary></indexterm> + <indexterm><primary>IP マスカレード</primary></indexterm> - <para>もうひとつは、 IP Masquerading (NAT) を使わずに - ファイアウォール機能を利用したい場合です。</para> + <para>もうひとつは IP マスカレード (NAT) + を使わずにファイアウォール機能を利用したい場合です。</para> - <para>ここでは DSL もしくは ISDN で ISP に接続している - 小さな会社を例にとってみましょう。 - この会社は ISP から 13 個のグローバル IP アドレスの割り当て - を受けており、 ネットワーク内には 10 台の PC が存在します。 - このような状況では、 サブネット化にまつわる問題から + <para>ここでは DSL もしくは ISDN で + ISP に接続している小さな会社を例にとってみましょう。 + この会社は ISP からグローバル IP アドレスを + 13 個割り当てられており、ネットワーク上には 10 台の PC が存在します。 + このような状況では、サブネット化にまつわる問題から、 ルータを用いたファイアウォールを利用することは困難です。</para> + <indexterm><primary>ルータ</primary></indexterm> + <indexterm><primary>DSL</primary></indexterm> + <indexterm><primary>ISDN</primary></indexterm> <para>ブリッジを用いたファイアウォールなら、 - IP アドレスの問題を気にすること無く、 DSL/ISDN ルータの - 下流側に置くように設定できます。</para> + IP アドレスの問題を気にすること無く、 + DSL/ISDN ルータの下流側に置くように設定できます。</para> </sect3> </sect2> @@ -459,23 +1676,26 @@ Local1 (10.20.30.1, 10.9.9.30) --> T1-GW (10.9.9.1) <title>ブリッジを設定する</title> <sect3> - <title>ネットワークインタフェイスカードの選択</title> + <title>ネットワークインタフェースカードの選択</title> - <para>ブリッジを利用するには少なくとも二つのネットワークカードが - 必要です。 - 残念なことに、 FreeBSD 4.0 ではすべてのネットワークインタフェイス - カードがブリッジ機能をサポートしているわけではありません。 - カードがサポートされているかどうかについては &man.bridge.4; + <para>ブリッジを利用するには少なくとも二つのネットワークカードが必要です。 + 残念なことに FreeBSD 4.0 + ではすべてのネットワークインタフェースカードがブリッジ機能に対応しているわけではありません。 + カードに対応しているかどうかについては &man.bridge.4; を参照してください。</para> - <para>以下に進む前に、 二つのネットワークカードをインストールして - テストしてください。</para> + <para>以下に進む前に、 + 二枚のネットワークカードをインストールしてテストしてください。</para> </sect3> <sect3> <title>カーネルコンフィグレーションの変更</title> + <indexterm> + <primary>カーネルオプション</primary> + <secondary>options BRIDGE</secondary> + </indexterm> - <para>カーネルでブリッジ機能を有効にするには</para> + <para>カーネルでブリッジ機能を有効にするには:</para> <programlisting>options BRIDGE</programlisting> @@ -484,22 +1704,20 @@ Local1 (10.20.30.1, 10.9.9.30) --> T1-GW (10.9.9.1) </sect3> <sect3> - <title>ファイアウォール機能</title> - - <para>ブリッジと同時にファイアウォール機能も利用しようとしている - 場合には、 IPFIREWALL オプションも指定する必要があります。 - ブリッジをファイアウォールとして設定する際の一般的な - 情報に関しては、 <xref linkend="firewalls"/> - を参照してください。</para> - - <para>IP 以外のパケット (ARP など) がブリッジを通過するように - するためには、 ドキュメント化されていないファイアウォール用 - オプションを設定する必要があります。 このオプションは - <literal>IPFIREWALL_DEFAULT_TO_ACCEPT</literal> です。 - この変更により、 デフォルトではファイアウォールがすべての - パケットを accept するようになることに注意してください。 - この設定を行う前に、 この変更が自分のルールセットにどのような - 影響をおよぼすかを把握しておかなければなりません。</para> + <title>ファイアウォール対応</title> + <indexterm><primary>ファイアウォール</primary></indexterm> + <para>ファイアウォールとしてブリッジを利用しようとしている場合には + <varname>IPFIREWALL</varname> オプションも指定する必要があります。 + ブリッジをファイアウォールとして設定する際の一般的な情報に関しては、 + <xref linkend="firewalls"/> を参照してください。</para> + + <para>IP 以外のパケット (ARP など) + がブリッジを通過するようにするためには、 + 文書化されていないファイアウォール用オプションを設定する必要があります。 + このオプションは <literal>IPFIREWALL_DEFAULT_TO_ACCEPT</literal> + です。この変更により、 + デフォルトではファイアウォールがすべてのパケットを受け入れるようになることに注意してください。この設定を行う前に、 + この変更が自分のルールセットにどのような影響をおよぼすかを把握しておかなければなりません。</para> </sect3> <sect3> @@ -508,8 +1726,7 @@ Local1 (10.20.30.1, 10.9.9.30) --> T1-GW (10.9.9.1) <para>ブリッジで帯域制御機能を利用したい場合、 カーネルコンフィグレーションで <literal>DUMMYNET</literal> オプションを加える必要があります。 - 詳しい情報に関しては &man.dummynet.4; を参照 - してください。</para> + 詳しい情報に関しては &man.dummynet.4; を参照してください。</para> </sect3> </sect2> @@ -517,818 +1734,1310 @@ Local1 (10.20.30.1, 10.9.9.30) --> T1-GW (10.9.9.1) <title>ブリッジを有効にする</title> <para>ブリッジを有効にするには、 - <filename>/etc/sysctl.conf</filename> に以下の行を加えてください: + <filename>/etc/sysctl.conf</filename> に以下の行を加えてください。 </para> <programlisting>net.link.ether.bridge=1</programlisting> - <para>ブリッジを経由したパケットを ipfw でフィルタしたい場合には、 - </para> - - <programlisting>net.link.ether.bridge_ipfw=1</programlisting> + <para>指定したインタフェースでブリッジを可能にするには以下を加えてください。</para> - <para>という行も付け加える必要があります。</para> - </sect2> + <programlisting>net.link.ether.bridge_cfg=<replaceable>if1</replaceable>,<replaceable>if2</replaceable></programlisting> - <sect2> - <title>パフォーマンス</title> + <para>(<replaceable>if1</replaceable> および + <replaceable>if2</replaceable> + は二つのネットワークインタフェースの名前に置き換えてください)。 + ブリッジを経由したパケットを &man.ipfw.8 でフィルタしたい場合には、 + 以下の行も付け加える必要があります</para> - <para>私のブリッジ/ファイアウォールは Pentium 90 で、 - 3Com 3C900B と 3c905B を使っています。 - 防護される側のネットワークは 10Mbps の half duplex で、 - ブリッジとルータ (Cisco 675) の間は 100Mbps full duplex で - 動作しています。 - パケットフィルタを利用しない場合、 防護されている 10Mbps - ネットワークから Cisco 675 への ping では、 - ブリッジにより 0.4 ミリ秒の遅延が発生しています。</para> + <programlisting>net.link.ether.bridge_ipfw=1</programlisting> </sect2> <sect2> <title>その他の情報</title> + <para>ネットワークからブリッジに telnet したい場合、 ネットワークカードの一つに IP アドレスを割り当てれば OK です。 - 一般的に、 両方のカードに IP アドレスを割り当てるのは - よいアイデアではないとされています。</para> + 一般的に、両方のカードに + IP アドレスを割り当てるのはよい考えではないとされています。</para> <para>ネットワーク内に複数のブリッジを設置する場合、 - 任意のワークステーション間で一つ以上の経路を持つことは - できません。 技術的には、 これは spanning tree link management - はサポートされていない、 ということを意味します。</para> + 任意のワークステーション間で一つ以上の経路を持つことはできません。 + 技術的には、 + これはスパニングツリーのリンク制御はサポートされていない、 + ということを意味します。</para> + + <para>ブリッジは、ping にかかる時間を遅らせることがあります。特に、 + 一方のセグメントからもう一方へのトラフィックでそうなります。</para> </sect2> </sect1> - <sect1 id="nfs"> + <sect1 id="network-nfs"> + <sect1info> + <authorgroup> + <author> + <firstname>Tom</firstname> + <surname>Rhodes</surname> + <contrib>追記と再編成: </contrib> + </author> + </authorgroup> + <authorgroup> + <author> + <firstname>Bill</firstname> + <surname>Swingle</surname> + <contrib>原作: </contrib> + </author> + </authorgroup> + </sect1info> <title>NFS</title> - <para><emphasis>Written by &a.unfurl;, 4 March 2000.</emphasis></para> + <indexterm><primary>NFS</primary></indexterm> - <para>FreeBSD がサポートしている多くのファイルシステムの中でも、 - NFS、 すなわち Network File System は極めてユニークな存在です。 - NFS はあるマシンから他のマシンへと、 ネットワークを通じて - ディレクトリとファイルを共有することを可能にします。 - NFS を使うことで、 ユーザやプログラムはリモートシステムのファイルを、 + <para>FreeBSD がサポートしている多くのファイルシステムの中には、 + <acronym>NFS</acronym> + とも呼ばれているネットワークファイルシステムがあります。 + <acronym>NFS</acronym> はあるマシンから他のマシンへと、 + ネットワークを通じてディレクトリとファイルを共有することを可能にします。 + <acronym>NFS</acronym> を使うことで、 + ユーザやプログラムはリモートシステムのファイルを、 それがローカルファイルであるかのようにアクセスすることができます。 </para> - <para>NFS には以下の利点があります:</para> + <para><acronym>NFS</acronym> が提供可能な最も特筆すべき利点のいくつかを以下にあげます。</para> <itemizedlist> <listitem> - <para>一般的に使われるデータを単一のマシンに納める - ことができ、 ネットワーク上のユーザはデータにアクセスできる - ため、 ローカルワークステーションは多くのディクスを - 必要としません。</para> + <para>一般的に使われるデータを単一のマシンに納めることができ、 + ユーザはネットワークを通じてデータにアクセスできるため、 + ローカルワークステーションが使用するディスク容量が減ります。</para> </listitem> <listitem> <para>ネットワーク上のすべてのマシンに、 - ユーザが独自のホームディレクトリを持つ必要がありません。 - 一旦 NFS 経由でアクセスできるディレクトリができれば、 - どこからでもアクセス可能です。</para> + ユーザが別々にホームディレクトリを持つ必要がありません。 + <acronym>NFS</acronym> サーバ上にホームディレクトリが設定されれば、 + ネットワークのどこからでもアクセス可能です。</para> </listitem> <listitem> - <para>フロッピーや CD-ROM ドライブなどのストレージデバイスを、 - 追加のハードウェアなしにネットワーク上の他のマシンに - 使ってもらうことができます。</para> + <para>フロッピーディスクや CDROM ドライブ、 + ZIP ドライブなどのストレージデバイスを、 + ネットワーク上の他のマシンで利用することができます。 + ネットワーク全体のリムーバブルドライブの数を減らせるかもしれません。</para> </listitem> </itemizedlist> <sect2> - <title>どのようにして動作するのか</title> + <title><acronym>NFS</acronym> はどのように動作するのか</title> - <para>NFS はクライアント、 サーバの二つの部分から - 構成されます。 - これは 需要(want)/供給(have) の関係として考えることができます。 - クライアントはサーバが <emphasis>供給</emphasis> している - データに対する <emphasis>需要</emphasis> があります。 - サーバはそのデータをクライアントと共有します。 - このシステムが適切に機能するために、 いくつかのプロセスが - 設定され正しく動作していなければなりません。</para> + <para><acronym>NFS</acronym> は最低二つの主要な部分、 + サーバと一つ以上のクライアントからなります。 + クライアントはサーバマシン上に格納されたデータにリモートからアクセスします。 + これが適切に機能するには、 + いくつかのプロセスが設定されて実行されていなければなりません。</para> - <para>サーバは以下のデーモンを動作させなければなりません:</para> + <note><para>&os; 5.X では <command>portmap</command> ユーティリティは + <application>rpcbind</application> ユーティリティに置き換わりました。 + したがって &os; 5.X では、ユーザは下記の例で、 + <application>portmap</application> の例のすべてを + <command>rpcbind</command> に置き換える必要があります。</para></note> - <itemizedlist> - <listitem> - <para><command>nfsd</command> - NFS クライアントからの - リクエストを処理する NFS デーモン。</para> - </listitem> - - <listitem> - <para><command>mountd</command> - nfsd から渡された - リクエストを実際に実行する NFS マウントデーモン。</para> - </listitem> - - <listitem> - <para><command>portmap</command> - NFS サーバの利用しているポートを - NFS クライアントから取得できるようにするためのポートマッパデーモン。</para> - </listitem> - </itemizedlist> + <para>サーバは以下のデーモンを動作させなければなりません:</para> + <indexterm> + <primary>NFS</primary> + <secondary>サーバ</secondary> + </indexterm> + <indexterm> + <primary><application>portmap</application></primary> + </indexterm> + <indexterm> + <primary><application>mountd</application></primary> + </indexterm> + <indexterm> + <primary><application>nfsd</application></primary> + </indexterm> - <para>クライアント側ではデーモンを一つ実行する必要があります:</para> + <informaltable frame="none"> + <tgroup cols="2"> + <thead> + <row> + <entry>デーモン</entry> + <entry>説明</entry> + </row> + </thead> + <tbody> + <row> + <entry>nfsd</entry> + <entry><acronym>NFS</acronym> + クライアントからのリクエストを処理する + <acronym>NFS</acronym> デーモン</entry> + </row> + <row> + <entry>mountd</entry> + <entry>&man.nfsd.8; から渡されたリクエストを実際に実行する + <acronym>NFS</acronym> マウントデーモン</entry> + </row> + <row> + <entry>portmap</entry> + <entry><acronym>NFS</acronym> サーバの利用しているポートを + <acronym>NFS</acronym> + クライアントから取得できるようにするためのポートマッパデーモン</entry> + </row> + </tbody> + </tgroup> + </informaltable> - <itemizedlist> - <listitem> - <para><command>nfsiod</command> - NFS サーバからのリクエストを - 処理する NFS 非同期 I/O デーモン。</para> - </listitem> - </itemizedlist> + <para>クライアント側では <application>nfsiod</application> + というデーモンも実行できます。 + <application>nfsiod</application> デーモンは <acronym>NFS</acronym> + サーバからのリクエストを処理します。 + これは任意であり、性能を改善しますが、 + 通常の正しい動作には必要としません。詳細については &man.nfsiod.8; + マニュアルページを参照してください。</para> </sect2> - <sect2> - <title>NFS を設定する</title> + <sect2 id="network-configuring-nfs"> + <title><acronym>NFS</acronym> の設定</title> + <indexterm> + <primary>NFS</primary> + <secondary>設定</secondary> + </indexterm> - <para>幸運なことに、 FreeBSD システムで設定を行うのは簡単です。 - 実行させなければならないプロセスは、 <filename>/etc/rc.conf</filename> - ファイルをちょっと編集することでブート時から実行させる - ことができます。</para> + <para><acronym>NFS</acronym> の設定は比較的素直な工程です。 + 動かさなければならないプロセスは <filename>/etc/rc.conf</filename> + ファイルを少し変更すれば起動時に実行させられます。</para> - <para>NFS サーバでは、 以下の設定が必要です:</para> + <para><acronym>NFS</acronym> サーバでは + <filename>/etc/rc.conf</filename> ファイルの中で、 + 以下のオプションが設定されていることを確かめてください。</para> <programlisting>portmap_enable="YES" nfs_server_enable="YES" -nfs_server_flags="-u -t -n 4" mountd_flags="-r"</programlisting> - <para><command>mountd</command> は NFS サーバが有効になっている - 場合、 自動的に実行されます。 - <command>nfsd</command> への - <option>-u</option>、 <option>-t</option> フラグは - クライアントに UDP と TCP のサービスを提供することを指示します。 - <option>-n 4</option> フラグは <command>nfsd</command> - が 4 つのコピーを立ち上げることを指示します。</para> - - <para>クライアント側では、 以下のようにします:</para> - - <programlisting>nfs_client_enable="YES" -nfs_client_flags="-n 4"</programlisting> - - <para><command>nfsd</command> と同様に、 - <option>-n 4</option> は <command>nfsiod</command> - が 4 つのコピーを立ち上げることを指示します。</para> - - <para>最後に <filename>/etc/exports</filename> という - 設定ファイルを作成します。 - exports ファイルはサーバのどのファイルシステムが - 共有されるのか (<quote>exported</quote> といいます)、 - またどのクライアントが共有できるのかを指定します。 - <!-- kuriyama: exports should be filename? --> - ファイル中の各行は、 共有されるファイルシステムを - 指定します。 - ファイル中で指定できるオプションはたくさんありますが、 - そのうちの少ししか使うことはないでしょう。 - より細かいことに関しては &man.exports.5; - マニュアルページをお読み下さい。 + <para><command>mountd</command> は + <acronym>NFS</acronym> サーバが有効になっていれば、 + 自動的に実行されます。</para> + + <para>クライアント側では <filename>/etc/rc.conf</filename> + 内に以下の設定があることを確認してください。</para> + + <programlisting>nfs_client_enable="YES"</programlisting> + + <para><filename>/etc/exports</filename> ファイルは <acronym>NFS</acronym> + サーバがどのファイルシステムをエクスポート + (ときどき <quote>共有</quote> と呼ばれます) するのかを指定します。 + <filename>/etc/exports</filename> ファイル中の各行は、 + エクスポートするファイルシステム、 + およびそのファイルシステムにアクセスできるマシンを指定します。 + ファイルシステムにアクセスできるマシンとともに、 + アクセスオプションも指定できます。 + このファイルで指定できるオプションはたくさんありますが、 + ここではほんの少しだけ言及します。&man.exports.5; + マニュアルページを読めば、 + 他のオプションは簡単にみつけられるでしょう。 </para> - <para>いくつか <filename>/etc/exports</filename> の設定例 - を示します:</para> - - <para>以下の設定は、 - サーバと同じドメイン名(ドメイン名が無いので)か、 - <filename>/etc/hosts</filename> に記述のある三つのマシン - に対して、 <filename>/cdrom</filename> を export します。 - <option>-ro</option> オプションは共有されるファイルシステムを - 読み込み専用にします。 - このフラグにより、 リモートシステムは共有されたファイルシステム - にたいして何の変更も行えなくなります。</para> - - <programlisting>/cdrom -ro moe larry curly</programlisting> - - <para>以下の設定は、 IP アドレスによる三つのホストに対して - <filename>/home</filename> を export します。 - この設定はプライベートネットワークで DNS が走っていない - 場合に便利な設定でしょう。 - <option>-alldirs</option> フラグは指定されたファイルシステム - 以下のディレクトリに対しても同様に export します。</para> + <para>いくつか <filename>/etc/exports</filename> の設定例を示します。</para> + + <indexterm> + <primary>NFS</primary> + <secondary>エクスポートの例</secondary> + </indexterm> + <para>以下の例はファイルシステムのエクスポートの考え方を示しますが、 + あなたの環境とネットワーク設定に応じて設定は少し変わるでしょう。 + たとえば次の行は <filename>/cdrom</filename> + ディレクトリを、サーバと同じドメイン名か + (そのため、いずれもドメイン名がありません)、 + <filename>/etc/hosts</filename> + に記述されている三つの例となるマシンに対してエクスポートします。 + <option>-ro</option> + フラグは共有されるファイルシステムを読み込み専用にします。 + このフラグにより、 + リモートシステムは共有されたファイルシステムに対して何の変更も行えなくなります。</para> + + <programlisting>/cdrom -ro host1 host2 host3</programlisting> + + <para>以下の設定は IP アドレスで指定した 3 つのホストに対して + <filename>/home</filename> をエクスポートします。 + この設定はプライベートネットワークで + <acronym>DNS</acronym> が設定されていない場合に便利でしょう。 + 内部のホスト名に対して <filename>/etc/hosts</filename> + を設定するという手段もあります。 + 詳細については &man.hosts.5; を参照してください。 + <option>-alldirs</option> + フラグはサブディレクトリがマウントポイントとなることを認めます。 + 言い替えると、これはサブディレクトリをマウントしませんが、 + クライアントが要求するか、 + または必要とするディレクトリだけをマウントできるようにします。</para> <programlisting>/home -alldirs 10.0.0.2 10.0.0.3 10.0.0.4</programlisting> - <para>以下の設定は、 サーバとは異なるドメイン名の二つの - マシンに対して <filename>/a</filename> を export します。 - <option>-maproot=0</option> フラグは、 リモートマシンの - root ユーザが共有されたファイルシステムに root として書き込むことを - 許可します。 - -maproot=0 フラグが無ければ、 リモートマシンの root 権限を - 持っていても共有されたファイルシステム上のファイルを変更する - ことはできません。 - <!-- kuriyama: shoud be option. Correct description? --> - </para> - - <programlisting>/a -maproot=0 host.domain.com box.example.com</programlisting> - - <para>クライアントが export されたファイルシステムを共有 - する際には、 そのような権限が与えられていなければなりません。 + <para>以下の設定は、サーバとは異なるドメイン名の + 2 台のクライアントがアクセスできるように + <filename>/a</filename> をエクスポートします。 + <option>-maproot=root</option> フラグは、リモートシステムの + <username>root</username> ユーザが、 + エクスポートされたファイルシステムに <username>root</username> + として書き込むことを許可します。 + <literal>-maproot=root</literal> フラグが無ければ、 + リモートマシンの <username>root</username> 権限を持っていても、 + 共有されたファイルシステム上のファイルを変更することはできないでしょう。</para> + + <programlisting>/a -maproot=root host.example.com box.example.org</programlisting> + + <para>クライアントがエクスポートされたファイルシステムにアクセスするためには、 + そうする権限が与えられていなければなりません。 <filename>/etc/exports</filename> ファイルに クライアントが含まれているかどうか確認してください。 - <!-- kuriyama: your exports is correct? --> </para> - <para>必要な変更はすべて行ったので、 - FreeBSD を再起動してブート時からすべてが起動するようにするか、 - root で以下のコマンドを実行します:</para> - - <para>NFS サーバでは:</para> + <para><filename>/etc/exports</filename> ファイルでは、 + それぞれの行が一つのファイルシステムを一つのホストにエクスポートすることを表します。 + リモートホストはファイルシステム毎に一度だけ指定することができ、 + それに加えて一つのデフォルトエントリを置けます。たとえば + <filename>/usr</filename> が単一のファイルシステムであると仮定します。 + 次の <filename>/etc/exports</filename> は無効です。</para> + + <programlisting>/usr/src client +/usr/ports client</programlisting> + + <para>単一のファイルシステムである <filename>/usr</filename> + は、2 行に渡って、同じホスト <hostid>client</hostid> + へエクスポートされています。 + この場合、正しい書式は次のとおりです。</para> + + <programlisting>/usr/src /usr/ports client</programlisting> + + <para>あるホストにエクスポートされるある + 1 つのファイルシステムのプロパティは、 + 1 行ですべて指定しなければなりません。 + クライアントの指定のない行は、単一のホストとして扱われます。 + これはファイルシステムをエクスポートできる方法を制限しますが、 + 多くの場合これは問題になりません。</para> + + <para>下記は、 + <filename>/usr</filename> および <filename>/exports</filename> + がローカルファイルシステムである場合の、 + 有効なエクスポートリストの例です。</para> + + <programlisting># Export src and ports to client01 and client02, but only +# client01 has root privileges on it +/usr/src /usr/ports -maproot=root client01 +/usr/src /usr/ports client02 +# The client machines have root and can mount anywhere +# on /exports. Anyone in the world can mount /exports/obj read-only +/exports -alldirs -maproot=root client01 client02 +/exports/obj -ro</programlisting> + + <para>変更が有効となるように、 + <filename>/etc/exports</filename> が変更されたら + <command>mountd</command> を再起動しなければなりません。 + これは <command>mountd</command> + プロセスに HUP シグナルを送ることで実行できます。</para> + + <screen>&prompt.root; <userinput>kill -HUP `cat /var/run/mountd.pid`</userinput></screen> + + <para>他には、再起動すれば、FreeBSD はすべてを適切に設定します。 + しかしながら、再起動は必須ではありません。 + <username>root</username> + 権限で以下のコマンドを実行すれば、すべてが起動するでしょう。</para> + + <para><acronym>NFS</acronym> サーバでは:</para> <screen>&prompt.root; <userinput>portmap</userinput> &prompt.root; <userinput>nfsd -u -t -n 4</userinput> &prompt.root; <userinput>mountd -r</userinput></screen> - <para>NFS クライアントでは:</para> + <para><acronym>NFS</acronym> クライアントでは:</para> <screen>&prompt.root; <userinput>nfsiod -n 4</userinput></screen> - <para>これでリモートのファイルシステムを実際にマウントする - 準備ができました。 - やり方は二通りあります。 - この例では、 サーバの名前は <literal>server</literal> で、 + <para>これでリモートのファイルシステムを実際にマウントする準備がすべてできました。 + この例では、サーバの名前は <literal>server</literal> で、 クライアントの名前は <literal>client</literal> とします。 リモートファイルシステムを一時的にマウントするだけ、 - もしくは設定をテストするだけなら、 クライアント上で root - として以下のコマンドを実行してください:</para> - + もしくは設定をテストするだけなら、クライアント上で + <username>root</username> + 権限で以下のコマンドを実行するだけです。</para> + <indexterm> + <primary>NFS</primary> + <secondary>マウント</secondary> + </indexterm> <screen>&prompt.root; <userinput>mount server:/home /mnt</userinput></screen> - <para>これにより、 クライアントの <filename>/mnt</filename> - ディレクトリにサーバの <filename>/home</filename> が - マウントされます。 - もしすべてが正しく設定されていれば、 クライアントの /mnt - に、 サーバにあるファイルすべてが見えるようになっているはずです。 + <para>これで、サーバの <filename>/home</filename> + ディレクトリが、クライアントの <filename>/mnt</filename> + にマウントされます。もしすべてが正しく設定されていれば、 + クライアントの /mnt に入り、 + サーバにあるファイルすべてを見れるはずです。 </para> - <para>リモートファイルシステムを今後も (リブートする度に) - マウントしたいなら、 <filename>/etc/fstab</filename> - ファイルに設定を追加する必要があります。 - 例としてはこのようになります:</para> + <para>リモートファイルシステムを起動のたびに自動的にマウントしたいなら、 + ファイルシステムを <filename>/etc/fstab</filename> + ファイルに追加してください。 + 例としてはこのようになります。</para> <programlisting>server:/home /mnt nfs rw 0 0</programlisting> - <para>ほかのオプションに関しては &man.fstab.5; マニュアル - ページをお読み下さい。</para> + <para>&man.fstab.5; + マニュアルページに利用可能なオプションがすべて掲載されています。</para> </sect2> <sect2> - <title>典型的な使い方</title> + <title>実用的な使い方</title> - <para>NFS にはいくつかすてきな使い方があります。 - 私は自分が管理している LAN でそれらを利用しています。 - そのうちにいくつかをここで紹介しましょう。</para> + <para><acronym>NFS</acronym> には実用的な使用法がいくつもあります。 + ここで典型的な使用法をいくつか紹介しましょう。</para> - <para>ネットワークには幾つかのマシンがありますが、 - CD-ROM ドライブを持っているのは一台だけです。 - なぜかって? それは一台の CD-ROM ドライブをほかのマシンと - NFS 経由で共有しているからです。 - フロッピードライブについても同じことがいえます。</para> - - <para>ネットワーク内に多くのマシンがあると、 様々な場所に - ちらばる個人的なファイルは日に日に古くなってしまいます。 - 私はすべてのユーザのホームディレクトリを格納する、 - 中心となる NFS サーバを用意し、 LAN 上の残りのマシンと - 共有しています。 そうすることで、 どこにログインしても、 - 同じホームディレクトリを使うことができるのです。</para> + <indexterm> + <primary>NFS</primary> + <secondary>使用法</secondary> + </indexterm> + <itemizedlist> + <listitem> + <para>何台ものマシンで CDROM + などのメディアを共有するように設定します。 + これは安上がりで、たいていは、 + 複数のマシンにソフトウェアをインストールするのにより便利な方法です。</para> + </listitem> - <para>マシンのひとつに FreeBSD を再インストールするなら、 - NFS こそその方法です。 ディストリビューション CD をファイル - サーバに入れ、 再インストールを実行するだけです。</para> + <listitem> + <para>大規模なネットワークでは、 + すべてのユーザのホームディレクトリを格納するメイン + <acronym>NFS</acronym> + サーバを構築すると、ずっと便利でしょう。 + どのワークステーションにログインしても、 + ユーザがいつでも同じホームディレクトリを利用できるように、 + これらのホームディレクトリはネットワークに向けてエクスポートされます。</para> + </listitem> - <para>共用の <filename>/usr/ports/distfiles</filename> - ディレクトリを用意して、 すべてのマシンで共有しています。 - この方法だと、 別のマシンで既にインストールしたことのある - port をインストールする場合、 再びすべてのソースをダウンロードする - 必要がなくなります。</para> + <listitem> + <para>何台ものマシンで <filename>/usr/ports/distfiles</filename> + ディレクトリを共有できます。こうすると、 + 何台ものマシン上に port をインストールする必要がある時に、 + それぞれのマシンでソースコードをダウンロードすることなく、 + 直ちにソースにアクセスできます。</para> + </listitem> + </itemizedlist> </sect2> - <sect2> - <title>Problems integrating with other systems</title> - - <para><emphasis>原作: John Lind <email>john@starfire.MN.ORG</email>.</emphasis></para> - - <para><emphasis>訳: &a.jp.tomo;. - 6 September 1996.</emphasis></para> - - <para>ISA用のイーサネットアダプタの中には性能が悪いため、 - ネットワーク、 特に NFS で深刻な問題がおきるものがあります。 - これは FreeBSD に限ったことではありませんが、 FreeBSD - でも起こり得ます。</para> - - <para>この問題は、 - (FreeBSDを使用した) PC がシリコン・グラフィックス社や - サン・マイクロシステムズ社などの高性能な WS - にネットワーク接続されている場合に頻繁に起こります。 - NFS マウントはうまく行きます。 また、 - いくつかの操作もうまく働きますが、 他のシステム (WS) - に対する要求や応答は続いていても、 突然サーバが - クライアントの要求に対して反応しなくなります。 - これは、 クライアントが FreeBSD か上記の WS であるとき、 - にクライアント側に起きる現象です。 - 多くのシステムでは、 いったんこの問題が現われると、 - 行儀良くクライアントを終了する手段はありません。 - NFS がこの状態に陥ってしまうと、 正常に戻すことはできないため、 - 多くの場合、 クライアントを強制終了し、 - 再び実行することが唯一の解決法となります。 - </para> + <sect2 id="network-amd"> + <sect2info> + <authorgroup> + <author> + <firstname>Wylie</firstname> + <surname>Stilwell</surname> + <contrib>寄稿: </contrib> + </author> + </authorgroup> + <authorgroup> + <author> + <firstname>Chern</firstname> + <surname>Lee</surname> + <contrib>再構成: </contrib> + </author> + </authorgroup> + </sect2info> + <title><application>amd</application> による自動マウント</title> + + <indexterm><primary>amd</primary></indexterm> + <indexterm><primary>自動マウントデーモン</primary></indexterm> + + <para>&man.amd.8; (自動マウントデーモン) は、 + ファイルシステム内のファイルまたはディレクトリがアクセスされると、 + 自動的にリモートファイルシステムをマウントします。 + また、一定の間アクセスされないファイルシステムは + <application>amd</application> + によって自動的にアンマウントされます。 + <application>amd</application> を使用することは、通常 + <filename>/etc/fstab</filename> + 内に記述する恒久的なマウントに対する、 + 単純な代替案となります。</para> + + <para><application>amd</application> はそれ自身を NFS サーバとして + <filename>/host</filename> および <filename>/net</filename> + ディレクトリに結びつけることによって動作します。 + このディレクトリ内のどこかでファイルがアクセスされると、 + <application>amd</application> は対応するリモートマウントを調べて、 + 自動的にそれをマウントします。 + <filename>/net</filename> が、エクスポートされたファイルシステムを + IP アドレスで指定してマウントするのに利用される一方で、 + <filename>/host</filename> + は、エクスポートされたファイルシステムをリモートホスト名で指定してマウントするのに利用されます。</para> + + <para><filename>/host/foobar/usr</filename> + 内のファイルにアクセスすると、 + <application>amd</application> はホスト + <hostid>foobar</hostid> からエクスポートされた + <filename>/usr</filename> をマウントします。</para> - <para><quote>正しい</quote>解決法は、 - より高性能のイーサネットアダプタをFreeBSDシステムに - インストールすることですが、 - 満足な操作ができるような簡単な方法があります。 もし、 - FreeBSDシステムが<emphasis>サーバ</emphasis>になるのなら、 - クライアントからのマウント時に - <option>-w=1024</option>オプションをつけて下さい。 - もしFreeBSDシステムが<emphasis>クライアント</emphasis>になる - のなら、 NFSファイルシステムを <option>-r=1024</option> - オプションつきでマウントして下さい。 - これらのオプションは自動的にマウントをおこなう場合には - クライアントの <filename>fstab</filename> - エントリの4番目のフィールドに指定してもよいですし、 - 手動マウントの場合は mount コマンドの <option>-o</option> - パラメータで指定してもよいでしょう。</para> - - <para>NFSサーバとクライアントが別々のネットワーク上にあるような - 場合、 これと間違えやすい他の問題が起きることに注意して下さい。 - そのような場合は、 ルータが必要な UDP 情報をきちんと - ルーティングしているかを確かめて下さい。 - そうでなければ、 たとえあなたが何をしようと解決できないでしょう。 - </para> + <example> + <title><application>amd</application> + によるエクスポートされたファイルシステムのマウント</title> + + <para><command>showmount</command> コマンドを用いて、 + リモートホストのマウントで利用できるものが見られます。 + たとえば、<hostid>foobar</hostid> + と名付けられたホストのマウントを見るために次のように利用できます。</para> + + <screen>&prompt.user; <userinput>showmount -e foobar</userinput> +Exports list on foobar: +/usr 10.10.10.0 +/a 10.10.10.0 +&prompt.user; <userinput>cd /host/foobar/usr</userinput></screen> + </example> + + <para>例のように <command>showmount</command> はエクスポートとして + <filename>/usr</filename> を表示します。 + <filename>/host/foobar/usr</filename> にディレクトリを変更すると、 + <application>amd</application> はホスト名 <hostid>foobar</hostid> + を解決し、お望みのエクスポートをマウントしようと試みます。</para> + + <para><application>amd</application> は + <filename>/etc/rc.conf</filename> 内に次の行を記述すれば、 + 起動スクリプトによって起動されます。</para> + + <programlisting>amd_enable="YES"</programlisting> + + <para>さらに <varname>amd_flags</varname> オプションによって + <application>amd</application> + にフラグをカスタマイズして渡せます。デフォルトでは + <varname>amd_flags</varname> は次のように設定されています。</para> + + <programlisting>amd_flags="-a /.amd_mnt -l syslog /host /etc/amd.map /net /etc/amd.map"</programlisting> - <para>次の例では、 <hostid>fastws</hostid>は高性能のWSのホスト - (インタフェース)名で、 - <hostid>freebox</hostid>は低性能のイーサネットアダプタを備えた - FreeBSDシステムのホスト(インタフェース)名です。</para> - - <para>また、 <filename>/sharedfs</filename> はエクスポートされる - NFS ファイルシステムであり (<command>man exports</command> - を見て下さい)、 <filename>/project</filename> - はエクスポートされたファイルシステムの - クライアント上のマウントポイントとなります。 - 全ての場合において、 <option>hard</option> や <option>soft</option>、 - <option>bg</option> といった追加オプションが - アプリケーションにより要求されるかもしれないことに - 注意して下さい。</para> - - <para>クライアント側 FreeBSD システム (<hostid>freebox</hostid>) - の例は: - freebox の <filename>/etc/fstab</filename> - に次のように書いて下さい:</para> - - <programlisting>fastws:/sharedfs /project nfs rw,-r=1024 0 0</programlisting> - - <para><hostid>freebox</hostid> 上で手動で mount - コマンドを実行する場合は次のようにして下さい:</para> - - <screen>&prompt.root; <userinput>mount -t nfs -o -r=1024 fastws:/sharedfs /project</userinput></screen> - - <para>サーバ側FreeBSDシステムの例は: <hostid>fastws</hostid> の - <filename>/etc/fstab</filename> に次のように書いて下さい:</para> - - <programlisting>freebox:/sharedfs /project nfs rw,-w=1024 0 0</programlisting> - - <para><hostid>fastws</hostid> 上で手動で mount - コマンドで実行する場合は次のようにして下さい:</para> - - <screen>&prompt.root; <userinput>mount -t nfs -o -w=1024 freebox:/sharedfs /project</userinput></screen> - - <para>近いうちにどのような 16 ビットのイーサネットアダプタでも - 上記の読み出し、 - 書き込みサイズの制限なしの操作ができるようになるでしょう。</para> - - <para>失敗が発生したとき何が起きているか関心のある人に、 - なぜ回復不可能なのかも含めて説明します。 NFSは通常 - (より小さいサイズへ分割されるかもしれませんが) - 8Kの<quote>ブロック</quote> サイズで働きます。 - イーサネットのパケットサイズは最大1500バイト程度なので、 - 上位階層のコードにとっては1つのユニットのままなのですが、 - NFS <quote>ブロック</quote>は - 複数のイーサネットパケットに分割されます。 そして受信され、 - 組み立て直されてから<emphasis>肯定応答</emphasis> - されなければなりません。 - 高性能のWSは次々に NFSユニットを構成するパケットを、 - 基準の範囲内で間隔を詰めて次々に送り出すことができます。 小さく、 - 容量の低いカードでは、 同じユニットの - 前のパケットがホストに転送される前に、 後のパケットがそれを - <emphasis>踏みつぶし</emphasis>てしまいます。 - このため全体としてのユニットは再構成もされないし、 - 肯定応答もされません。 その結果、 - WSはタイムアウトして再送を試みますが、 - 8Kのユニット全体を再送しようとするので、 このプロセスは - 際限無く繰り返されてしまいます。</para> - - <para>ユニットサイズをイーサネットのパケットサイズの - 制限以下に抑えることにより、 受信された完全な - イーサネットパケットは個々に肯定応答を受けられることが - 保証されるので、 - デッドロック状態を避けることができるようになります。</para> - - <para>高性能のカードを使っている場合でも、 高性能な WS - が力任せに次々と PC システムにデータを送ったときには - <emphasis>踏みつぶし</emphasis> が起きるかもしれません。 - そのような<emphasis>踏みつぶし</emphasis> - は NFS <quote>ユニット</quote> - では保証されていません。 - <emphasis>踏みつぶし</emphasis>が起こったとき、 - 影響を受けたユニットは再送されます。 そして受信され、 - 組み立てられ、 - 肯定応答される公平な機会が与えられるでしょう。</para> + <para><filename>/etc/amd.map</filename> ファイルは、 + エクスポートがマウントされるデフォルトオプションを決定します。 + <filename>/etc/amd.conf</filename> ファイルは、 + <application>amd</application> + のより高度な機能の一部を設定します。</para> + + <para>詳細については &man.amd.8; および &man.amd.conf.5; + マニュアルページを参照してください。</para> </sect2> - </sect1> - <sect1 id="diskless"> - <title>Diskless operation</title> + <sect2 id="network-nfs-integration"> + <sect2info> + <authorgroup> + <author> + <firstname>John</firstname> + <surname>Lind</surname> + <contrib>寄稿: </contrib> + </author> + </authorgroup> + </sect2info> + <title>他のシステムとの統合についての問題</title> + + <para><emphasis>訳: &a.jp.tomo;. 6 September 1996.</emphasis></para> + + <para>ISA バス用のイーサネットアダプタの中には性能が悪いため、 + ネットワーク、特に NFS で深刻な問題がおきるものがあります。 + これは FreeBSD に限ったことではありませんが + FreeBSD でも起こり得ます。</para> + + <para>この問題は (FreeBSD を使用した) PC + がシリコングラフィックス社やサン・マイクロシステムズ社などの高性能なワークステーションにネットワーク接続されている場合に頻繁に起こります。 + NFS マウントはうまく動作するでしょう。 + また、いくつかの操作もうまく動作するかもしれませんが、 + 他のシステムに対する要求や応答は続いていても、 + 突然サーバがクライアントの要求に対して応答しなくなります。これは、 + クライアントが FreeBSD + か上記のワークステーションであるときにクライアント側に起きる現象です。 + 多くのシステムでは、いったんこの問題が現われると、 + 行儀良くクライアントを終了する手段はありません。 + NFS がこの状態に陥ってしまうと正常に戻すことはできないため、 + 多くの場合クライアントをリセットすることが唯一の解決法となります。</para> + + <para><quote>正しい</quote>解決法は、より高性能のイーサネットアダプタを + FreeBSD システムにインストールすることですが、 + 満足に動作させる簡単な方法があります。 + FreeBSD システムが <emphasis>サーバ</emphasis> になるのなら、 + クライアントからのマウント時に <option>-w=1024</option> + オプションをつけて下さい。FreeBSD システムが + <emphasis>クライアント</emphasis> になるのなら、NFS ファイルシステムを + <option>-r=1024</option> オプションつきでマウントして下さい。 + これらのオプションは自動的にマウントをおこなう場合には + クライアントの <filename>fstab</filename> + エントリの 4 番目のフィールドに指定してもよいですし、 + 手動マウントの場合は mount コマンドの <option>-o</option> + パラメータで指定してもよいでしょう。</para> + + <para>NFS サーバとクライアントが別々のネットワーク上にあるような場合、 + これと間違えやすい他の問題が起きることに注意して下さい。 + そのような場合は、ルータが必要な + UDP 情報をきちんとルーティングしているかを確かめて下さい。 + していなければ、たとえあなたが何をしようと解決できないでしょう。</para> + + <para>次の例では <hostid>fastws</hostid> + は高性能ワークステーションのホスト (インタフェース) 名で、 + <hostid>freebox</hostid> は低性能のイーサネットアダプタを備えた + FreeBSD システムのホスト (インタフェース) 名です。 + また <filename>/sharedfs</filename> はエクスポートされる + NFS ファイルシステムであり (&man.exports.5; を参照) 、 + <filename>/project</filename> はエクスポートされたファイルシステムの、 + クライアント上のマウントポイントとなります。 + すべての場合において、アプリケーションによっては + <option>hard</option> や <option>soft</option>, <option>bg</option> + といった追加オプションがふさわしいかもしれないことに注意して下さい。</para> + + <para>クライアント側 FreeBSD システム (<hostid>freebox</hostid>) + の <filename>/etc/fstab</filename> の例は以下のとおりです。</para> + + <programlisting>fastws:/sharedfs /project nfs rw,-r=1024 0 0</programlisting> + + <para><hostid>freebox</hostid> 上で手動で mount + コマンドを実行する場合は次のようにして下さい。</para> + + <screen>&prompt.root; <userinput>mount -t nfs -o -r=1024 fastws:/sharedfs /project</userinput></screen> + + <para>サーバ側 FreeBSD システム (<hostid>fastws</hostid>) + の <filename>/etc/fstab</filename> の例は以下のとおりです。</para> + + <programlisting>freebox:/sharedfs /project nfs rw,-w=1024 0 0</programlisting> + + <para><hostid>fastws</hostid> 上で手動で mount + コマンドで実行する場合は次のようにして下さい。</para> + + <screen>&prompt.root; <userinput>mount -t nfs -o -w=1024 freebox:/sharedfs /project</userinput></screen> + + <para>近いうちにどのような + 16 ビットのイーサネットアダプタでも、上記の読み出し、 + 書き込みサイズの制限なしで操作できるようになるでしょう。</para> + + <para>失敗が発生したとき何が起きているか関心のある人に、 + なぜ回復不可能なのかも含めて説明します。NFS は通常 + (より小さいサイズへ分割されるかもしれませんが) + 8 K の <quote>ブロック</quote> サイズで動作します。 + イーサネットのパケットサイズは最大 1500 バイト程度なので、 + 上位階層のコードにとっては 1 つのユニットであって、 + NFS <quote>ブロック</quote> + は複数のイーサネットパケットに分割されるものの、 + 上位階層のコードにとっては 1 つのユニットであって、 + ユニットとして受信され、組み立て直され、 + <emphasis>肯定応答</emphasis> (ACK) されなければなりません。 + 高性能のワークステーションは次々に NFS ユニットを構成するパケットを、 + 標準の許す限り間隔を詰めて次々に送り出すことができます。 + 小さく、容量の低いカードでは、 + 同じユニットの前のパケットがホストに転送される前に、 + 後のパケットがそれを踏みつぶしてしまいます。 + このため全体としてのユニットは、再構成も肯定応答もできません。 + その結果、 + ワークステーションはタイムアウトして再送を試みますが、 + 8 K のユニット全体を再送しようとするので、 + このプロセスは際限無く繰り返されてしまいます。</para> + + <para>ユニットサイズをイーサネットのパケットサイズの + 制限以下に抑えることにより、 + 受信した完全なイーサネットパケットについて個々に肯定応答を返せることが保証されるので、 + デッドロック状態を避けられるようになります。</para> + + <para>それでも、高性能なワークステーションが力任せに次々と + PC システムにデータを送ったときには踏みつぶしが起きるかもしれません。 + しかし、高性能のカードを使っていれば、NFS <quote>ユニット</quote> + で必ずそのような踏みつぶしが起きるとは限りません。 + 踏みつぶしが起きたら、影響を受けたユニットは再送されて、 + 受信され、組み立てられ、肯定応答される十分な見込みがあります。</para> + </sect2> + </sect1> - <para><emphasis>原作: &a.martin;</emphasis></para> + <sect1 id="network-diskless"> + <sect1info> + <authorgroup> + <author> + <firstname>Jean-François</firstname> + <surname>Dockès</surname> + <contrib>更新: </contrib> + </author> + </authorgroup> + </sect1info> + <title>ディスクレス稼働</title> <para><emphasis>訳: &a.jp.yasu;</emphasis></para> - <para><filename>netboot.com</filename>/<filename>netboot.rom</filename> - によって、 ディスクのないクライアントでネットワーク経由で - FreeBSD マシンのブートを行い FreeBSD を走らせることができます。 - 2.0 ではローカルなスワップを持つことができます。 - NFS 経由のスワッピングもサポートされています。 </para> + <indexterm><primary>ディスクレスワークステーション</primary></indexterm> + <indexterm><primary>ディスクレス稼働</primary></indexterm> + + <para>FreeBSD マシンはネットワークを通じて起動でき、 + そして NFS サーバからマウントしたファイルシステムを使用して、 + ローカルディスクなしで動作することができます。 + 標準の設定ファイルを変更する以上の、システムの修正は必要ありません。 + 必要な要素のすべてが用意されているので、 + このようなシステムを設定するのは簡単です。</para> + <itemizedlist> + <listitem> + <para>ネットワークを通じてカーネルを読み込む方法は、 + 少なくとも二つあります。</para> + <itemizedlist> + <listitem> + <para><emphasis>PXE</emphasis>: &intel; の + Preboot Execution Environment (PXE) システムは、 + 一部のネットワークカードまたはマザーボードに組み込まれた、 + スマートなブート ROM の一形態です。 + 詳細については &man.pxeboot.8; を参照してください。</para> + </listitem> + <listitem> + <para>port の + <emphasis><application>etherboot</application></emphasis> + (<filename role="package">net/etherboot</filename>) は、 + ネットワークを通じてカーネルを起動する ROM + 化可能なコードを提供します。 + コードはネットワークカード上のブート PROM に焼き付けるか、 + あるいはローカルフロッピー (ハード) ディスクドライブ、 + または動作している &ms-dos; システムから読み込むことができます。 + 多くのネットワークカードに対応しています。</para> + </listitem> + </itemizedlist> + </listitem> + + <listitem> + <para>サンプルスクリプト + (<filename>/usr/share/examples/diskless/clone_root</filename>) + はサーバ上で、 + ワークステーションのルートファイルシステムの作成と維持をやり易くします。 + このスクリプトは少し書き換えないといけないでしょうが、 + 早く取り掛かれるようにします。</para> + </listitem> - <para>サポートされているイーサネットカード: - Western Digital/SMC 8003, 8013, 8216 とその互換ボード, - NE1000/NE2000 とその互換カード (再コンパイルが必要)</para> + <listitem> + <para>ディスクレスシステム起動を検知しサポートする標準のシステム起動ファイルが + <filename>/etc</filename> 内にあります。</para> + </listitem> + + <listitem> + <para>必要なら、NFS + ファイルまたはローカルディスクのどちらかにスワップできます。</para> + </listitem> + </itemizedlist> + + <para>ディスクレスワークステーションを設定する方法はいろいろあります。 + 多くの要素が関わっており、 + その多くはローカルの状況に合わせてカスタマイズできます。下記は、 + 単純さと標準の FreeBSD + 起動スクリプトとの互換性を強調した完全なシステムの設定を説明します。 + 記述されているシステムの特徴は次のとおりです。</para> + + <itemizedlist> + <listitem> + <para>ディスクレスワークステーションは、 + 共有された読み取り専用の + <filename>ルート</filename>ファイルシステムと、 + 共有された読み取り専用の + <filename>/usr</filename> を使用します。</para> + <para><filename>ルート</filename> ファイルシステムは、 + 標準的な FreeBSD (典型的にはサーバの) のルートのコピーで、 + 一部の設定ファイルが、ディスクレス稼働、 + また場合によってはそのワークステーションに特有のもので上書きされています。</para> + <para>書き込み可能でなければならない <filename>ルート</filename> + の部分は &man.mfs.8; ファイルシステムで覆われます。 + システムが再起動するときにはすべての変更が失われるでしょう。</para> + </listitem> + <listitem> + <para>カーネルは DHCP (または BOOTP) および TFTP を用いて + <application>etherboot</application> によって読み込まれます。</para> + </listitem> + </itemizedlist> + + <caution><para>記述されているとおり、 + このシステムは安全ではありません。 + ネットワークの保護された範囲で使用されるべきであり、 + 他のホストから信頼されてはいけません。</para> + </caution> <sect2> <title>セットアップの手順</title> - <procedure> - <step> - <para>サーバにするマシンを見つけます。 - このマシンには、 FreeBSD 2.0のバイナリとbootpを - 記憶するだけの十分なディスクスペースが必要です。 - tftp と NFS も使えます。 + <sect3> + <title>DHCP/BOOTP の設定</title> + <indexterm> + <primary>ディスクレス稼働</primary> + <secondary>起動</secondary> + </indexterm> + + <para>ネットワークを通じて設定を取得し、 + ワークステーションを起動するために一般的に使用されるプロトコルには、 + BOOTP と DHCP の 2 つがあります。 + それらはワークステーションのブートストラップ時に何ヵ所かで使用されます。</para> + <itemizedlist> + <listitem><para><application>etherboot</application> + はカーネルを見つけるために DHCP (デフォルト) または + BOOTP (設定オプションが必要) を使用します + (PXE は DHCP を使用します) 。</para> + </listitem> + <listitem><para>NFS ルートの場所を定めるためにカーネルは + BOOTP を使用します。</para> + </listitem> + </itemizedlist> + + <para>BOOTP だけを使用するようにシステムを設定することもできます。 + &man.bootpd.8; サーバプログラムは + FreeBSD のベースシステムに含まれています。</para> + + <para>しかしながら、DHCP には BOOTP に勝る点が多々あります。 + (よりよい設定ファイル、PXE が使えること、 + そしてディスクレス稼働には直接関係しない多くの長所) + ここでは BOOTP だけ利用する場合と、 + BOOTP と DHCP を組み合わせた設定を扱います。特に ISC DHCP + ソフトウェアパッケージを利用する後者の方法に重点をおきます。</para> - テストしたマシン:</para> + <sect4> + <title>ISC DHCP を使用する設定</title> + <indexterm> + <primary>DHCP</primary> + <secondary>ディスクレス稼働</secondary> + </indexterm> + + <para><application>isc-dhcp</application> サーバは、 + BOOTP および DHCP リクエストの両方に答えることができます。</para> + + <para>4.4-Release の時点で <application>isc-dhcp 3.0</application> + はベースシステムの一部では無くなりました。 + まずはじめに + <filename role="package">net/isc-dhcp3</filename> port + または対応する package をインストールする必要があるでしょう。 + ports および package に関する一般的な情報については + <xref linkend="ports"/> を参照してください。</para> + + <para><application>isc-dhcp</application> がインストールされると、 + 動作するために設定ファイルを必要とします + (通常 <filename>/usr/local/etc/dhcpd.conf</filename> + が指定されます) 。 + 下記にコメントを含めた例を示します。</para> + + <programlisting> + default-lease-time 600; + max-lease-time 7200; + authoritative; + + option domain-name "example.com"; + option domain-name-servers 192.168.4.1; + option routers 192.168.4.1; + + subnet 192.168.4.0 netmask 255.255.255.0 { + use-host-decl-names on; <co id="co-dhcp-host-name"/> + option subnet-mask 255.255.255.0; + option broadcast-address 192.168.4.255; + + host margaux { + hardware ethernet 01:23:45:67:89:ab; + fixed-address margaux.example.com; + next-server 192.168.4.4;<co id="co-dhcp-next-server"/> + filename "/tftpboot/kernel.diskless";<co id="co-dhcp-filename"/> + option root-path "192.168.4.4:/data/misc/diskless";<co id="co-dhcp-root-path"/> + } + }</programlisting> + + <calloutlist> + <callout arearefs="co-dhcp-host-name"><para>このオプションは + <literal>host</literal> 宣言の値を、 + ディスクレスホストへのホスト名として送るように + <command>dhcpd</command> に指示します。 + 別の方法として、ホスト宣言内に + <literal>option host-name <replaceable>margaux</replaceable></literal> + を加えるものがあります。</para> + </callout> + + <callout arearefs="co-dhcp-next-server"><para>TFTP サーバを + <literal>next-server</literal> ディレクティブに指定します + (デフォルトは DHCP サーバと同じホストを使います)。</para> + </callout> + + <callout arearefs="co-dhcp-filename"><para>カーネルとして + <application>etherboot</application> が読み込むファイルを + <literal>filename</literal> ディレクティブに指定します。 + <note><para>PXE は相対的なファイル名を好むようです。 + また、カーネルではなく <command>pxeboot</command> + を読み込みます + (<literal>option filename "pxeboot"</literal>)。</para> + </note> + </para> + </callout> + + <callout arearefs="co-dhcp-root-path"><para>ルートファイルシステムへのパスを、 + 通常の NFS 書式で <literal>root-path</literal> + オプションに指定します。</para> + </callout> + </calloutlist> + </sect4> + <sect4> + <title>BOOTP を使用する設定</title> + <indexterm> + <primary>BOOTP</primary> + <secondary>ディスクレス稼働</secondary> + </indexterm> + + <para>続けて、<command>bootpd</command> + で同等のことをする設定です。 + これは <filename>/etc/bootptab</filename> におきます。</para> + + <para>BOOTP を使用するために、デフォルトではない + <literal>NO_DHCP_SUPPORT</literal> オプション付きで + <application>etherboot</application> + をコンパイルしなければならないことと、PXE は DHCP + を <emphasis>必要</emphasis> とすることに注意してください。 + <application>bootpd</application> の唯一明白な利点は、 + これがベースシステムに存在するということです。</para> + + <programlisting> + .def100:\ + :hn:ht=1:sa=192.168.4.4:vm=rfc1048:\ + :sm=255.255.255.0:\ + :ds=192.168.4.1:\ + :gw=192.168.4.1:\ + :hd="/tftpboot":\ + :bf="/kernel.diskless":\ + :rp="192.168.4.4:/data/misc/diskless": + + margaux:ha=0123456789ab:tc=.def100</programlisting> + </sect4> + </sect3> - <itemizedlist> - <listitem> - <para>HP9000/8xx / HP-UX 9.04以降 - (9.04以前では動きません)</para> - </listitem> + <sect3> + <title><application>Etherboot</application> + を用いるブートプログラムの準備</title> + + <indexterm> + <primary>Etherboot</primary> + </indexterm> + + <para><ulink url="http://etherboot.sourceforge.net">Etherboot + のウェブサイト</ulink> には主に Linux システムについて述べた<ulink + url="http://etherboot.sourceforge.net/doc/html/userman/t1.html"> + 広範囲の文書</ulink> + が含まれています。 + しかし、それにもかかわらず有用な情報を含んでいます。 + 下記は FreeBSD システム上での <application>etherboot</application> + の使用法についての概観を示します。</para> + + <para>まずはじめに <filename role="package">net/etherboot</filename> + の package または port をインストールしなければなりません。 + <application>etherboot</application> port は通常 + <filename>/usr/ports/net/etherboot</filename> にあります。 + ports ツリーがシステムにインストールされている場合、 + このディレクトリ内で <literal>make</literal> + を実行すれば、よきに計らってくれます。 + ports および packages に関する情報は <xref linkend="ports"/> + を参照してください。</para> - <listitem> - <para>Sun/Solaris 2.3. (bootpが必要)</para> - </listitem> - </itemizedlist> - </step> - - <step> - <para>クライアントにIP、gateway、netmaskを提供する - bootpサーバをセットアップします。</para> - - <programlisting>diskless:\ - :ht=ether:\ - :ha=0000c01f848a:\ - :sm=255.255.255.0:\ - :hn:\ - :ds=192.1.2.3:\ - :ip=192.1.2.4:\ - :gw=192.1.2.5:\ - :vm=rfc1048:</programlisting> - </step> - - <step> - <para>クライアントにブート情報を提供する TFTP サーバを - (bootp サーバと同じマシンに) セットアップします。 - このファイルの名前は、 - <filename>cfg.<replaceable>X.X.X.X</replaceable></filename> - (もしくは - <filename>/tftpboot/cfg.<replaceable>X.X.X.X</replaceable> - </filename>)で、 - ここで <replaceable>X.X.X.X</replaceable> はクライアントの - IP アドレスです。 - このファイルの内容は netboot コマンドで有効です。 - 2.0では、 netboot は以下のようなコマンドを持ちます:</para> - - <informaltable frame="none"> - <tgroup cols="2"> - <tbody> - <row> - <entry>help</entry> - <entry>helpリストの表示</entry> - </row> - - <row> - <entry>ip - <option><replaceable>X.X.X.X</replaceable></option></entry> - <entry>クライアントのIPアドレスの表示/セット</entry> - </row> - - <row> - <entry>server - <option><replaceable>X.X.X.X</replaceable></option></entry> - <entry>bootp/tftp サーバのアドレスの表示/セット</entry> - </row> - - <row> - <entry>netmask - <option><replaceable>X.X.X.X</replaceable></option></entry> - <entry>netmaskの表示/セット</entry> - </row> - - <row> - <entry>hostname <replaceable>name</replaceable></entry> - <entry>hostnameの表示/セット</entry> - </row> - - <row> - <entry>kernel - <option><replaceable>name</replaceable></option></entry> - <entry>カーネル名の表示/セット</entry> - </row> - - <row> - <entry>rootfs - <option><replaceable>ip:/fs</replaceable></option></entry> - <entry>root ファイルシステムの表示/セット</entry> - </row> - - <row> - <entry>swapfs - <option><replaceable>ip:/fs</replaceable></option></entry> - <entry>swap ファイルシステムの表示/セット</entry> - </row> - - <row> - <entry>swapsize - <option><replaceable>size</replaceable></option></entry> - <entry>diskless swapsize を KBytes単位でセット</entry> - </row> - - <row> - <entry>diskboot</entry> - <entry>ディスクからのブート</entry> - </row> - - <row> - <entry>autoboot</entry> - <entry>ブートプロセスの続行</entry> - </row> - - <row> - <entry>trans - <option>on</option>|<option>off</option></entry> - <entry>トランシーバのオン|オフ</entry> - </row> - - <row> - <entry>flags - <option>b</option><option>c</option> - <option>d</option><option>h</option> - <option>s</option><option>v</option></entry> - <entry>ブートフラグの設定</entry> - </row> - </tbody> - </tgroup> - </informaltable> - - <para>完全にディスクレスな場合の一般的な cfg - ファイルは以下のようになります:</para> - - <programlisting>rootfs 192.1.2.3:/rootfs/myclient -swapfs 192.1.2.3:/swapfs -swapsize 20000 -hostname myclient.mydomain</programlisting> - - <para>ローカルに swap - を持つマシンについては以下のようになります:</para> - - <programlisting>rootfs 192.1.2.3:/rootfs/myclient -hostname myclient.mydomain</programlisting> - - </step> - - <step> - <para>NFS サーバがクライアントにroot(必要ならswapも) - ファイルシステムをexportしているか、 また、 - クライアントがこれらのファイルシステムに - ルートアクセスできるか確認します。 FreeBSDにおける一般的な - <filename>/etc/exports</filename> ファイルは - 以下のようになります:</para> - - <programlisting>/rootfs/myclient -maproot=0:0 myclient.mydomain -/swapfs -maproot=0:0 myclient.mydomain</programlisting> - - <para>そして、 HP-UX側では以下のようになります:</para> - - <programlisting>/rootfs/myclient -root=myclient.mydomain -/swapfs -root=myclient.mydomain</programlisting> - </step> - - <step> - <para>NFS経由でスワッピングを行う場合 - (完全にディスクレスな場合の設定)、 クライアントが使用する - swap ファイルを <command>dd</command> で作成します。 - もし、 <command>swapfs</command> コマンドが上記の例のように - 引数 <filename>/swapfs</filename>を持ちそのサイズが 20000 - である場合、 myclientに対するスワップファイルは - <filename>/swapfs/swap.<replaceable>X.X.X.X</replaceable> - </filename> で呼び出されます。 ここで - <replaceable>X.X.X.X</replaceable> はクライアントの IP - アドレスです。 例:</para> - - <screen>&prompt.root; <userinput>dd if=/dev/zero of=/swapfs/swap.192.1.2.4 bs=1k count=20000</userinput></screen> - - <para>また、 スワッピングが開始されるとクライアントの - スワップスペースはセンシティブな情報を含むようになるので、 - 不正なアクセスを防止するため、 このファイルへの - 読み書きのアクセス制限がなされていることを確認して下さい: - </para> + <para>ここで説明している方法では、ブートフロッピーを使用します。 + 他の方法 (PROM または DOS プログラム) については + <application>etherboot</application> + の文書を参照してください。</para> + + <para>ブートフロッピーを作成するためには、 + <application>etherboot</application> + をインストールしたマシンのドライブにフロッピーディスクを挿入します。 + それからカレントディレクトリを <application>etherboot</application> + ツリー内の <filename>src</filename> + ディレクトリにして次のように入力します。</para> + + <screen> + &prompt.root; <userinput>gmake bin32/<replaceable>devicetype</replaceable>.fd0</userinput> + </screen> + + <para><replaceable>devicetype</replaceable> は + ディスクレスワークステーションのイーサネットカードタイプに依存します。 + 正しい <replaceable>devicetype</replaceable> を決定するために、 + 同じディレクトリ内の <filename>NIC</filename> + ファイルを参照してください。</para> + </sect3> - <screen>&prompt.root; <userinput>chmod 0600 /swapfs/swap.192.1.2.4</userinput></screen> - </step> + <sect3> + <title>TFTP および NFS サーバの設定</title> + + <indexterm> + <primary>TFTP</primary> + <secondary>ディスクレス稼働</secondary> + </indexterm> + <indexterm> + <primary>NFS</primary> + <secondary>ディスクレス稼働</secondary> + </indexterm> + + <para>TFTP サーバ上で <command>tftpd</command> + を有効にする必要があります。</para> + <procedure> + <step> + <para><command>tftpd</command> が提供するファイルを置くディレクトリ + (たとえば <filename>/tftpboot</filename>) + を作成してください。</para> + </step> + + <step> + <para><filename>/etc/inetd.conf</filename> + ファイルに以下の行を追加してください。</para> + + <programlisting>tftp dgram udp wait root /usr/libexec/tftpd tftpd -s /tftpboot</programlisting> + + <note><para>少なくとも PXE のいくつかのバージョンが TCP 版の + TFTP を要求するようです。その場合 + <literal>dgram udp</literal> を <literal>stream tcp</literal> + に置き換えた 2 番目の行を追加してください。</para> + </note> + </step> + <step> + <para><command>inetd</command> + に設定ファイルを再読み込みさせてください。</para> + <screen>&prompt.root; <userinput>kill -HUP `cat /var/run/inetd.pid`</userinput></screen> + </step> + </procedure> + + <para><filename>tftpboot</filename> + ディレクトリはサーバ上のどこにでも置けます。 + その場所が <filename>inetd.conf</filename> および + <filename>dhcpd.conf</filename> + の両方に設定されていることを確かめてください。</para> + + <para>さらに NFS を有効にして + NFS サーバの適切なファイルシステムをエクスポートする必要があります。</para> + + <procedure> + <step> + <para>この行を <filename>/etc/rc.conf</filename> + に追加してください。</para> + <programlisting>nfs_server_enable="YES"</programlisting> + </step> + + <step> + <para>下記を <filename>/etc/exports</filename> に加えることで、 + ディスクレスマシンのルートディレクトリが位置するファイルシステムをエクスポートしてください + (ボリュームのマウントポイントを適当に調節し、 + <replaceable>margaux</replaceable> + をディスクレスワークステーションの名前に置き換えてください)。</para> + + <programlisting><replaceable>/data/misc</replaceable> -alldirs -ro <replaceable>margaux</replaceable></programlisting> + </step> + <step> + <para><command>mountd</command> + に設定ファイルを再読み込みさせてください。 + <filename>/etc/rc.conf</filename> 内で NFS + をはじめて有効にする必要があったのなら、 + 代わりに再起動した方がよいかもしれません。</para> + <screen>&prompt.root; <userinput>kill -HUP `cat /var/run/mountd.pid`</userinput></screen> + </step> + </procedure> + </sect3> - <step> - <para>クライアントがそれぞれのrootファイルシステムとして使う - ディレクトリにrootファイルシステムを展開します - (上記の例では<filename>/rootfs/myclient</filename>)。</para> + <sect3> + <title>ディスクレス用のカーネル構築</title> - <itemizedlist> - <listitem> - <para>HP-UX システム: サーバはHP9000/800 - シリーズのマシンで、 HP-UX 9.04 以降が必要です。 - これ以前のバージョンでは NFS - を経由するデバイスファイルが作成ができません。</para> - </listitem> + <indexterm> + <primary>ディスクレス稼働</primary> + <secondary>カーネル設定</secondary> + </indexterm> - <listitem> - <para><filename>/rootfs/myclient</filename> に - <filename>/dev</filename> を - 展開する際に、 いくつかのシステム (HPUX) では - FreeBSD に合った デバイスファイルが作成されないので - 注意してください。 - その際には最初の起動時にシングルユーザモードに - 移行して (ブートの段階でCtrl-Cを押す)、 - <filename>/dev</filename> に移って - <command>sh ./MAKEDEV all</command> として、 - クライアントからこれを 修正してください。</para> - </listitem> - </itemizedlist> - </step> + <para>次のオプションを (通常のものに) 追加した、 + ディスクレスクライアント用のカーネルコンフィグレーションファイルを作成してください。</para> - <step> - <para>クライアントで <command>netboot.com</command> - を実行するか、 <filename>netboot.rom</filename> - ファイルから EPROMを作成します。</para> - </step> - </procedure> - </sect2> + <programlisting> + options BOOTP # Use BOOTP to obtain IP address/hostname + options BOOTP_NFSROOT # NFS mount root filesystem using BOOTP info + options BOOTP_COMPAT # Workaround for broken bootp daemons.</programlisting> - <sect2> - <title><filename>/</filename> および <filename>/usr</filename> - ファイルシステムを共有して使用する</title> + <para><literal>BOOTP_NFSV3</literal> および + <literal>BOOTP_WIRED_TO</literal> を利用してもよいかもしれません + (<filename>LINT</filename> を参照してください)。</para> - <para>今のところ、 これを行う公式に認められた方法はありませんが、 - 私はそれぞれのクライアントで <filename>/usr</filename> - ファイルシステムと個々の <filename>/</filename> - ファイルシステムを共有して使っています。 - どなたかこれをきちんと行うやり方の提案がありましたら、 - 私に、 もしくは &a.core; グループに知らせてください。</para> - </sect2> + <para>カーネルを構築して (<xref linkend="kernelconfig"/> を参照)、 + <filename>dhcpd.conf</filename> に記述した名称で + tftp ディレクトリにコピーしてください。</para> + </sect3> - <sect2> - <title>特定の設定についてnetbootをコンパイルする</title> + <sect3> + <title>ルートファイルシステムの準備</title> + + <indexterm> + <primary>ルートファイルシステム</primary> + <secondary>ディスクレス稼働</secondary> + </indexterm> + + <para><filename>dhcpd.conf</filename> に + <literal>root-path</literal> として記載された + ディスクレスワークステーションのためのルートファイルシステムを作成する必要があります。</para> + + <para>これを行う最も簡単な方法は + <filename>/usr/share/examples/diskless/clone_root</filename> + シェルスクリプトを使用することです。 + このスクリプトは、少なくともファイルシステムが作成される場所 + (<literal>DEST</literal> 変数) + を調節するために変更する必要があります。</para> + + <para>説明についてはスクリプトの一番上にあるコメントを参照してください。 + ベースシステムをどのように構築するか、 + またファイルがどのようにディスクレス稼働、サブネット、 + または個々のワークステーションに固有のバージョンによって、 + 選択的にオーバライドできるかを説明します。 + また、ディスクレスな場合の + <filename>/etc/fstab</filename> ファイルおよび + <filename>/etc/rc.conf</filename> ファイルの例を示します。</para> + + <para><filename>/usr/share/examples/diskless</filename> + 内の <filename>README</filename> + ファイルには、多くの興味深い背景情報が書かれています。 + しかし <filename>diskless</filename> ディレクトリ内の他の例と同じく、 + <filename>clone_root</filename> と + <filename>/etc/rc.diskless[12]</filename> + で実際に使われているものとは異なる設定方法が説明されています。 + ここに書かれている方法は + <filename>rc</filename> スクリプトの変更が必要になりますが、 + こちらの方が気に入ったというのでなければ、 + 参照にとどめてください。</para> + </sect3> - <para><filename>/sys/i386/boot/netboot/Makefile</filename> - の中の設定を変更して - コンパイルすることで、 netbootでNE1000/2000 - カードをサポートします。 - このファイルの先頭にあるコメントを見てください。</para> + <sect3> + <title>スワップの設定</title> + + <para>必要なら、サーバに置かれたスワップファイルに + NFS 経由でアクセスできます。 + <filename>bootptab</filename> または + <filename>dhcpd.conf</filename> の正確なオプションは、 + 現時点では明確には文書化されていません。 + 下記の設定例は isc-dhcp 3.0rc11 + を使用して動作したと報告されているものです。</para> + <procedure> + <step><para><filename>dhcpd.conf</filename> + に下記の行を追加してください。</para> + <programlisting> + # Global section + option swap-path code 128 = string; + option swap-size code 129 = integer 32; + + host margaux { + ... # Standard lines, see above + option swap-path <replaceable>"192.168.4.4:/netswapvolume/netswap"</replaceable>; + option swap-size <replaceable>64000</replaceable>; + }</programlisting> + <para>これは、少なくとも FreeBSD クライアントにおいては、 + DHCP/BOOTP オプションコードの 128 は + NFS スワップファイルへのパスで、オプションコード 129 + は KB 単位のスワップサイズだということです。 + もっと古いバージョンの <command>dhcpd</command> では + <literal>option option-128 "...</literal> + という書式が受け付けられましたが、もはや動かないようです。</para> + <para>これに対して、<filename>/etc/bootptab</filename> + では次の書式を使います。</para> + + <para><literal>T128="192.168.4.4:/netswapvolume/netswap":T129=64000 + </literal></para> + </step> + + <step> + <para>NFS スワップファイルサーバ側でスワップファイルを作成します。</para> + <screen> + &prompt.root; <userinput>mkdir <replaceable>/netswapvolume/netswap</replaceable></userinput> + &prompt.root; <userinput>cd <replaceable>/netswapvolume/netswap</replaceable></userinput> + &prompt.root; <userinput>dd if=/dev/zero bs=1024 count=<replaceable>64000</replaceable> of=swap.<replaceable>192.168.4.6</replaceable></userinput> + &prompt.root; <userinput>chmod 0600 swap.<replaceable>192.168.4.6</replaceable></userinput></screen> + <para><replaceable>192.168.4.6</replaceable> + はディスクレスクライアントの IP アドレスです。</para> + </step> + + <step> + <para>NFS スワップファイルサーバ上で + <filename>/etc/exports</filename> + に下記の行を追加してください。</para> + <programlisting> + <replaceable>/netswapvolume</replaceable> -maproot=0:10 -alldirs <replaceable>margaux</replaceable></programlisting> + <para>それから、上述したように <application>mountd</application> + にエクスポートファイルを再読み込みさせてください。</para> + </step> + </procedure> + </sect3> + + <sect3> + <title>雑多な問題</title> + + <sect4> + <title>読み取り専用の <filename>/usr</filename> + で動作させる</title> + + <indexterm> + <primary>ディスクレス稼働</primary> + <secondary>読み取り専用の /usr</secondary> + </indexterm> + + <para>ディスクレスワークステーションが X + を起動するように設定されている場合、 + xdm 設定ファイルを調整しなければならないでしょう。 + これはデフォルトでエラーファイルを + <filename>/usr</filename> に置きます。</para> + </sect4> + <sect4> + <title>FreeBSD ではないサーバを使用する</title> + + <para>ルートファイルシステムを提供するサーバが FreeBSD + で動作していない場合、 + FreeBSD マシン上でルートファイルシステムを作成し、 + <command>tar</command> または <command>cpio</command> + を利用して置きたい場所にコピーしなければならないでしょう。</para> + <para>この状況では、major/minor 整数サイズが異なっていることにより + <filename>/dev</filename> + 内のスペシャルファイルに関する問題が時々おこります。 + この問題を解決するには、非 FreeBSD + サーバからディレクトリをエクスポートして、 + そのディレクトリを FreeBSD マシンでマウントし、 + FreeBSD マシン上で <command>MAKEDEV</command> + を実行して正しいデバイスエントリを作成します + (FreeBSD 5.0 およびそれ以降では、&man.devfs.5; + を使用してユーザに意識させずにデバイスノードを割り当てるので、 + これらのバージョンでは + <command>MAKEDEV</command> は必要ありません)。</para> + </sect4> + </sect3> </sect2> </sect1> - <sect1 id="isdn"> + <sect1 id="network-isdn"> <title>ISDN</title> - <para><emphasis>最終更新: Bill Lloyd <email>wlloyd@mpd.ca</email></emphasis>.</para> + <indexterm> + <primary>ISDN</primary> + </indexterm> <para><emphasis>訳: &a.jp.kiroh;. 11 December 1996.</emphasis></para> <para>ISDN 技術とハードウェアに関しては、 - <ulink url="http://alumni.caltech.edu/~dank/isdn/"> + <ulink url="http://www.alumni.caltech.edu/~dank/isdn/"> Dan Kegel's ISDN Page</ulink> がよい参考になるでしょう。</para> - <para>ISDN の導入手順は、 簡単にいって以下のようになります。 </para> + <para>手軽な ISDN の導入手順は以下のようになります。</para> <itemizedlist> <listitem> - <para>ヨーロッパ在住の方は、 ISDN - カードの節に進んでください。</para> + <para>ヨーロッパ在住の方は ISDN カードの節に進んでください。</para> </listitem> <listitem> - <para>ISDN を使って、 - インターネットプロバイダに(専用線は使用せず)、 ダ - イアルアップ接続しようとしている場合は、 + <para>ダイヤルアップ専用でない回線上で、 + インターネットプロバイダをつかってインターネットに接続するために + ISDN を使用することを第一に考えている場合は、 ターミナルアダプタの使用を考えてみてください。 - この方法はもっとも柔軟性があり、 プロバイダを変更した場 - 合の問題も少ないでしょう。</para> + この方法はもっとも柔軟性があり、 + プロバイダを変更した場合の問題も少ないでしょう。</para> </listitem> <listitem> - <para>2つの LAN の間を接続しようする場合や、 ISDN - 専用線を使用する場合 には、 - スタンドアローンルータ/ブリッジの使用を勧めます。</para> + <para>2 つの LAN を接続する場合や、 + ISDN 専用線を使用する場合には、 + スタンドアロンなルータまたはブリッジの使用を勧めます。</para> </listitem> </itemizedlist> - <para>どの方法を用いるかを決定するには、 - 費用が重要な要素になってきます。 以下に、 最も安価な方法から、 - 高価な方法まで順に説明していきます。</para> - - <sect2> + <para>費用はどの解決法を選ぶかを決める重要な要因です。 + 以下に、最も安価な方法から、高価な方法まで順に説明していきます。</para> + + <sect2 id="network-isdn-cards"> + <sect2info> + <authorgroup> + <author> + <firstname>Hellmuth</firstname> + <surname>Michaelis</surname> + <contrib>寄稿: </contrib> + </author> + </authorgroup> + </sect2info> <title>ISDN カード</title> - <para><emphasis>著者:&a.hm;.</emphasis></para> - - <para>このセクションの記述は、 DSS1/Q.931 ISDN - 標準がサポートされている国のユーザにのみ有効です。</para> - - <para>最近増えてきている PC ISDN カードのうちいくつかは、 FreeBSD - 2.2.x 以降で isdn4bsd - ドライバパッケージによりサポートされています。 - 依然として開発中ではありますが、 - ヨーロッパ中でうまく動作しているという報告があります。</para> - - <para>最新の isdn4bsd は、 - <ulink url="ftp://isdn4bsd@ftp.consol.de/pub/"> - ftp://isdn4bsd@ftp.consol.de/pub/</ulink> から入手できます。 - この ftp サイトでは、 ユーザ名として <username>isdn4bsd</username> - を使い、 パスワードにメールアドレスを使ってログインする - 必要があります。 ログインできたら <filename>pub</filename> - ディレクトリに移動してください。 ユーザー名 - <username>ftp</username> や <username>anonymous</username> - によるログインでは、 必要なファイルにたどりつけません。</para> - - <para>isdn4bsd は、 IP over raw HDLC もしくは同期 PPP - を利用して他の ISDN ルータと接続できます。 - 留守番電話アプリケーションも使えます。</para> - - <para>Siemens ISDN チップセット (ISAC/HSCX) - を使用したものを主に多くのカードがサポートされています。 - 他のチップセット (Motorola、 Cologn ChipDesigns) - のサポートは現在開発中です。 - サポートされるカードの最新のリストは、 - <ulink url="ftp://isdn4bsd@ftp.consol.de/pub/README">README</ulink> - を参照してください。</para> - - <para>他の ISDN プロトコルを追加したい場合や、 - サポートされていない ISDN PC カード サポートしたい場合など - isdn4bsd を拡張したい場合は、 <email>hm@kts.org</email> - までご連絡ください。</para> - - <para>majordomoによるメーリングリストが利用できます。 - 参加するには、 本文に</para> - - <programlisting>subscribe freebsd-isdn</programlisting> - - <para>と記入したメールを - &a.majordomo; 宛てに送ってください。</para> + <indexterm> + <primary>ISDN</primary> + <secondary>カード</secondary> + </indexterm> + + <para>FreeBSD の ISDN 実装は、パッシブカードを使用した DSS1/Q.931 + (または Euro-ISDN) 標準だけに対応しています。FreeBSD 4.4 + からは、ファームウェアが他の信号プロトコルにも対応している + 一部のアクティブカードにも対応しました。 + その中には、はじめて対応された一次群速度インタフェース (PRI) + ISDN カードもあります。</para> + + <para><application>Isdn4bsd</application> は IP over raw HDLC + または同期 PPP を利用して他の ISDN ルータに接続できるようにします。 + PPP では、カーネル PPP を spp を修正した isppp + ドライバとともに利用するか、または ユーザプロセス &man.ppp.8; + を利用するかのどちらかになります。ユーザ &man.ppp.8; + を利用すると、二つ以上の ISDN B チャネルを併せて利用できます。 + ソフトウェア 300 ボーモデムのような多くのユーティリティとともに、 + 留守番電話アプリケーションも利用可能です。</para> + + <para>FreeBSD が対応している PC ISDN カードの数は増加しており、 + ヨーロッパ全域や世界のその他多くの地域でうまく使えることが報告されています。</para> + + <para>対応しているパッシブ ISDN カードのほとんどは Infineon + (前身は Siemens) の ISAC/HSCX/IPAC ISDN + チップセットを備えたカードですが、 + Cologne Chip から供給されたチップを備えた ISDN カード + (ISA バスのみ)、Winbond W6692 チップを備えた PCI カード、 + Tiger300/320/ISAC チップセットを組み合わたカードの一部、 + および AVM Fritz!Card PCI V.1.0 や AVM Fritz!Card PnP + のようなベンダ独自のチップセットに基づいたカードもあります。</para> + + <para>現在のところ、対応しているアクティブカードは + AVM B1 (ISA および PCI) BRI カードと AVM T1 PCI PRI カードです。</para> + + <para><application>isdn4bsd</application> についての文書は + FreeBSD システム内の <filename>/usr/share/examples/isdn/</filename> + ディレクトリまたは + <ulink url="http://www.freebsd-support.de/i4b/">isdn4bsd + のウェブサイト</ulink>を参照してください。 + そこにはヒントや正誤表や + <ulink url="http://people.FreeBSD.org/~hm/">isdn4bsd + ハンドブック</ulink>のような、 + さらに多くの文書に対するポインタがあります。</para> + + <para>異なる ISDN プロトコルや、現在対応されていない ISDN PC + カードに対応することや、その他 <application>isdn4bsd</application> + を拡張することに興味があるなら、&a.hm; に連絡してください。</para> + + <para><application>isdn4bsd</application> のインストール、設定、 + そしてトラブルシューティングに関して質問があれば + &a.isdn.name; メーリングリストが利用可能です。</para> </sect2> <sect2> <title>ISDN ターミナルアダプタ</title> - <para>ターミナルアダプタ (TA) はISDN に対して、 - 通常の電話線に対するモデムに相当するものです。</para> - - <para>ほとんどの TA は、 標準のヘイズ AT + <para>ターミナルアダプタ (TA) は ISDN で、 + 通常の電話線におけるモデムに相当するものです。</para> + <indexterm><primary>モデム</primary></indexterm> + <para>ほとんどの TA は、標準のヘイズ AT コマンドセットを使用しているので、 単にモデムと置き換えて使うことができます。</para> - <para>TA は、 基本的にはモデムと同じように動作しますが、 - 接続方法は異なり、 通信速度も古いモデムよりはるかに速くなります。 + <para>TA は、基本的にはモデムと同じように動作しますが、 + 接続方法は異なり、通信速度も古いモデムよりはるかに速くなります。 <link linkend="ppp">PPP</link> の設定を、 - モデムの場合と同じように行ってください。 とくにシリアル速度を - 使用できる最高速度に設定するのを忘れないでください。</para> - - <para>プロバイダへの接続に TA を使用する最大のメリットは、 動的 - PPP を行えることです。 最近 IP アドレスが不足してきているため、 - ほとんどのプロバイダは、 専用の IP - アドレスを割り当てないようになっています。 - ほとんどのスタンドアローンルータは、 動的 IP - アドレスに対応していません。</para> - - <para>訳注: 最近の ISDN ルータでは、 IP - アドレスの動的割り当てに対応しているものも多いようです。 - ただし制限がある場合もありますので、 詳しくはメーカ - に問い合わせてください。</para> - - <para>TA を使用した場合の機能や接続の安定性は、 使用している PPP - デーモンに完全に依存します。 そのため、 FreeBSD で PPP - の設定が完了していれば、 使用している既存のモデムを ISDN の TA - に簡単にアップグレードすることができます。 ただし、 それまでの - PPP のプログラムに問題があった場合、 その問題は TA + モデムの場合と同じように行ってください。 + 特にシリアル速度を使用できる最高速度に設定するのを忘れないでください。</para> + <indexterm><primary>PPP</primary></indexterm> + <para>プロバイダへの接続に TA を使用する最大のメリットは、動的 + PPP を行えることです。 + 最近 IP アドレス空間がますます不足してきているため、 + ほとんどのプロバイダは、 + 固定 IP アドレスを割り当てないようになっています。 + ほとんどのスタンドアローンルータは、動的 IP + アドレス割り当てに対応していません。</para> + + <note> + <title>訳注</title> + <para>最近の ISDN ルータでは + IP アドレスの動的割り当てに対応しているものも多いようです。 + ただし制限がある場合もありますので、 + 詳しくはメーカに問い合わせてください。</para> + </note> + + <para>TA を使用した場合の機能や接続の安定性は、使用している PPP + デーモンに完全に依存します。そのため、FreeBSD で PPP + の設定が完了していれば、使用している既存のモデムを ISDN の TA + に簡単にアップグレードすることができます。ただし、それまでの + PPP のプログラムに問題があった場合、その問題は TA に置き換えてもそのまま残ります。</para> - <para>最高の安定性を求めるのであれば、 ユーザープロセス - <link linkend="userppp">iijPPP</link> ではなく、 カーネル + <para>最高の安定性を求めるのであれば、ユーザープロセス + <link linkend="userppp">iijPPP</link> ではなく、カーネル <link linkend="ppp">PPP</link>を使用してください。</para> - <para>以下の TA は、 FreeBSD で動作確認ずみです。</para> + <para>以下の TA は、FreeBSD で動作確認ずみです。</para> <itemizedlist> <listitem> @@ -1340,69 +3049,66 @@ hostname myclient.mydomain</programlisting> </listitem> </itemizedlist> - <para>他の TA もほとんどの場合うまく動作するでしょう。 TA - のメーカーでは、 TA がほとんどの標準モデム AT - コマンドセットを受け付けるようにするよう、 - 努力しているようです。</para> + <para>他の TA もほとんどの場合うまく動作するでしょう。TA + のメーカーでは、TA がほとんどの標準モデム AT + コマンドセットを受け付けるようにするよう努力しているようです。</para> <para>外部 TA を使う際の最大の問題点は、 - モデムの場合と同じく良いシリアルカー - ドが必要であるということです。</para> - - <para>シリアルデバイスの詳細、 - そして非同期シリアルポートと同期シリアルポートの差については、 - 同期・非同期の違いやシリアルデバイスについて説明したチュートリアル <ulink - url="http://www.freebsd.org/tutorials">FreeBSD Serial - Hardware</ulink> を参照してください。</para> - - <para>標準の PC シリアルポート(非同期)に接続された TA は、 128Kbs - の接続を行っていても、 最大通信速度が 115.2Kbs - に制限されてしまいます。 128Kbs の ISDN - の性能を最大限に生かすためには、 TA + モデムの場合と同じく良いシリアルカードが必要であるということです。</para> + + <para>シリアルデバイスの詳細と、 + 非同期シリアルポートと同期シリアルポートの差を理解するには、<ulink + url="../../../en_US.ISO8859-1/articles/serial-uart/index.html">FreeBSD + シリアルハードウェア</ulink>チュートリアルを参照してください。</para> + + <para>標準の PC シリアルポート (非同期) に接続された TA は + 128 Kbs の接続を行っていても、最大通信速度が 115.2 Kbs + に制限されてしまいます。128 Kbs の ISDN + の性能を最大限に生かすためには TA を同期シリアルカードに接続しなければなりません。</para> - <para>内蔵 TA を購入して、 - 同期/非同期問題を片付けてしまおうとは思わないでく ださい。 - 内蔵 TA には、 単に標準 PC シリアルポートのチップが内蔵されてい - るだけです。 内蔵 TA の利点といえば、 - シリアルケーブルを買わなくていいと いうことと、 + <para>内蔵 TA を購入すれば、 + 同期/非同期問題を回避できるとは思わないでください。内蔵 TA には、 + 単に標準 PC シリアルポートのチップが内蔵されているだけです。 + 内蔵 TA の利点といえば、 + シリアルケーブルを買わなくていいということと、 電源コンセントが一つ少なくて済むということくらいでしょう。 </para> - <para>同期カードと TA の組合せは 386 の FreeBSD - マシンの場合でも、 スタンドア - ローンのルータと同程度の速度は確保できます。 - またこの組合せでは、 ルータより柔軟な設定が可能です。</para> + <para>同期カードと TA + の組合せでも、スタンドアロンのルータと同程度の速度は確保できます。 + さらに、386 の FreeBSD マシンと組合せると、 + より柔軟な設定が可能です。</para> - <para>同期カード/TA を選ぶか、 スタンドアローンルータを選ぶかは、 + <para>同期カード/TA を選ぶか、スタンドアロンルータを選ぶかは、 多分に宗教的な問題です。 - メーリングリストでもいくつか議論がありました。 議論の内容に - ついては、 <ulink url="../search/search.html">archives</ulink> + メーリングリストでもいくつか議論がありました。議論の全容については、 + <ulink url="../../../../search/search.html">アーカイブ</ulink> を参照してください。</para> </sect2> <sect2> - <title>スタンドアローン ISDN ブリッジ/ルータ</title> - - <para>ISDN ブリッジやルータは、 OS 特有のものではありません。 - もちろん FreeBSD 特有のものでもありません。 + <title>スタンドアロン ISDN ブリッジ/ルータ</title> + <indexterm> + <primary>ISDN</primary> + <secondary>スタンドアロン ブリッジ/ルータ</secondary> + </indexterm> + <para>ISDN ブリッジあるいはルータは、 + FreeBSD あるいは他の OS に特有のものでは皆目ありません。 ルーティングやブリッジング技術に関する詳細は、 ネットワークの参考書をご覧ください。</para> <para>このページでは、 ルータとブリッジにどちらでもあてはまるように記述します。</para> - <para>ISDN ルータ/ブリッジは、 - ローエンドの製品のコストが下がってきていることもあり、 - より一般的に使用されるようになるでしょう。 ISDN ルータは、 - 外見は小さな箱で、 - ローカルのイーサネットネットワーク(もしくはカード)と直接、 - 接続します。 また、 - 自身で他のブリッジ/ルータとの接続を制御します。 PPP - や他のプロトコルを使用するためのソフトウェアは、 - すべて組み込まれています。</para> - - <para>ルータは、 完全な同期 ISDN 接続を使用するため、 通常の TA + <para>ローエンド ISDN ルータ/ブリッジ製品は、 + 価格が下がってきていることもあり、 + より広く選択されるようになるでしょう。ISDN ルータは、 + ローカルイーサネットネットワークに直接接続し、 + 自身で他のブリッジ/ルータとの接続を制御する小さな箱です。PPP + や他の広く使用されているプロトコルをつかって通信するためのソフトウェアが組み込まれています。</para> + + <para>ルータは、完全な同期 ISDN 接続を使用するため、通常の TA と比較してスループットが大幅に向上します。</para> <para>ISDN ルータ/ブリッジを使用する場合の最大の問題点は、 @@ -1410,48 +3116,64 @@ hostname myclient.mydomain</programlisting> インターネットプロバイダとの接続を考えている場合には、 プロバイダと相談することをお勧めします。</para> - <para>事務所の LAN と家庭の LAN の間など、 二つの LAN + <para>事務所の LAN と家庭の LAN の間など、二つの LAN セグメントの間を接続しようとしている場合は、 - ブリッジ/ルータの使用がもっともメンテナンスが 簡単で、 - 努力が少なくてすむ方法です。 両側の機材を購入するのであれば、 - メーカー間の接続性の問題もないでしょう。</para> + これはもっともメンテナンスが簡単で、安くあがる解決方法です。 + 接続の両側の機材を購入するので、 + リンクがうまくいくであろうことを保証できます。</para> - <para>たとえば家庭の LAN や出張所の LAN - を本社のネットワークに接続するためには、 + <para>たとえば、 + 家庭のコンピュータや支店のネットワークを本社のネットワークに接続するためには、 以下のような設定が使用できます。</para> <example> - <title>出張所 LAN または 家庭 LAN</title> + <title>支店または家庭のネットワーク</title> + + <indexterm><primary>10 base 2</primary></indexterm> + <para>ネットワークは 10 Base 2 イーサネット (<quote>thinnet</quote>) + のバス型トポロジを用いています。ルータとネットワークの間は、 + 必要に応じて AUI/10BT トランシーバを使って接続してください。</para> - <para>ネットワークは、 10 Base T イーサネットです。 - ルータとネットワークの間は、 必要に応じて AUI/10BT - トランシーバを使って接続します。</para> + <mediaobject> + <imageobject> + <imagedata fileref="advanced-networking/isdn-bus"/> + </imageobject> - <!-- This should be a graphic --> - <programlisting>---Sun ワークステーション + <textobject> + <literallayout class="monospaced">---Sun ワークステーション | ----FreeBSD マシン +---FreeBSD box | ---Windows 95 (別に勧めているわけじゃありません) | -スタンドアローンルータ +スタンドアロンルータ | -ISDN BRI ライン</programlisting> +ISDN BRI ライン</literallayout> + </textobject> - <para> - 家庭/出張所 LAN で、 - 一台しかコンピュータを接続しないのであれば、 クロス - のツイストペアケーブルを使用して、 - スタンドアローンルータと直結も可能です。</para> + <textobject> + <phrase>10 Base 2 イーサネット</phrase> + </textobject> + </mediaobject> + + <para>家庭/支店で一台しかコンピュータを使用しないのであれば、 + クロスのツイストペアケーブルを使用して、 + 直接スタンドアロンルータに接続することも可能です。</para> </example> <example> <title>本社 LAN や他の LAN</title> - <para>ネットワークは、 ツイストペアイーサネットです。 </para> + <para>ネットワークは 10 base T イーサネット + (<quote>Twisted Pair</quote>) + のスター型トポロジを用いています。</para> - <!-- This should be a graphic --> - <programlisting>-------Novell サーバ + <mediaobject> + <imageobject> + <imagedata fileref="advanced-networking/isdn-twisted-pair"/> + </imageobject> + <textobject> + <literallayout class="monospaced"> -------Novell サーバ | | |ハ ---Sun | | @@ -1461,192 +3183,255 @@ ISDN BRI ライン</programlisting> | | |___---スタンドアローンルータ | - ISDN BRI ライン</programlisting> + ISDN BRI ライン</literallayout> + </textobject> + <textobject> + <phrase>ISDN ネットワークダイアグラム</phrase> + </textobject> + </mediaobject> </example> - <para>ほとんどのルータ/ブリッジでは、 別々の二つのサイトに対して、 - <emphasis>同時</emphasis>にそれ - ぞれ<emphasis>独立した</emphasis>二つの PPP 接続が可能です。 - これは、 通常の TA ではサポートされない機能で、 - ルータ/ブリッジ接続の大きな利点です (シリアルポートを - 二つもつ特殊(そして高価な) TA では可能です)。 - チャンネル割り当てや MPP などと混同しないでください。</para> - - <para>これは、 大変便利な機能です。 - たとえば事務所で専用線 ISDN 接続を使用していて、 - 別の ISDN ラインを購入したくないとします。 この場合、 - 事務所のルータは、 一つの専用線 B - チャンネル接続(64Kbs)を維持しつつ、 別 の B - チャンネルを他の用途に使用することができます。 たとえば、 - 他の場所 とのダイアルイン、 ダイアルアウトに使用したり、 - バンド幅を増やすために、 - インターネットとの接続への動的な割り当て(MPP - など)に使用したりすることが可能です。</para> - - <para>またイーサネットブリッジは、 IP パケットだけでなく IPX/SPX - などすべての - プロトコルのパケットを中継することが可能です。</para> - + <para>ほとんどのルータ/ブリッジの大きな利点は、 + 別々の二つのサイトに対して、<emphasis>同時</emphasis> + にそれぞれ<emphasis>独立した</emphasis>二つの PPP + 接続が可能であることです。 + これは、シリアルポートを 2 つもった特定の (通常は高価な) + モデルを除いて、通常の TA では対応していません。 + チャネルボンディングや MPP などと混同しないでください。</para> + + <para>たとえば、事務所で専用線 ISDN 接続を使用していて、 + 別の ISDN 回線を購入したくないときには大変便利な機能です。この場合、 + 事務所のルータは、インターネットに接続するための一つの専用線 B + チャネル接続 (64 Kbs) を管理し、 + 別の B チャネルを他のデータ接続に使用できます。 + 2 つ目の B チャネルは他の場所とのダイアルイン、 + ダイアルアウトに使用したり、バンド幅を増やすために、 + 1 つ目の B チャネルと動的に結合すること (MPPなど) + ができます。</para> + + <indexterm><primary>IPX/SPX</primary></indexterm> + <para>またイーサネットブリッジは、IP パケット以外も中継できます。 + IPX/SPX など、使用するすべてのプロトコルを送ることが可能です。</para> </sect2> </sect1> - <sect1 id="nis"> + <sect1 id="network-nis"> + <sect1info> + <authorgroup> + <author> + <firstname>Bill</firstname> + <surname>Swingle</surname> + <contrib>原作: </contrib> + </author> + </authorgroup> + <authorgroup> + <author> + <firstname>Eric</firstname> + <surname>Ogren</surname> + <contrib>追記: </contrib> + </author> + <author> + <firstname>Udo</firstname> + <surname>Erdelhoff</surname> + </author> + </authorgroup> + </sect1info> <title>NIS/YP</title> - <para><emphasis>原作: &a.unfurl;, - 2000 年 1 月 21 日, - 監修: Eric Ogren <email>eogren@earthlink.net</email>, - Udo Erdelhoff <email>ue@nathan.ruhr.de</email>, - 2000 年 6 月.</emphasis></para> - <sect2> <title>NIS/YP とは?</title> - <para>NIS とは Network Information Services の略で - Sun Microsystems によって Unix の (もともとは SunOS の) - 集中管理のために開発されました。 現在では事実上の業界標準になっており、 - 主要な Unix は (Solaris、 HP-UX、 AIX、 Linux、 NetBSD、 OpenBSD、 - FreeBSD、 等々) すべてこれをサポートしています。</para> - - <para>NIS は元々、 イエローページ (または yp) として知られていましたが、 - 著作権を侵害しているとして Sun はその名を変えさせられました。</para> + <indexterm><primary>NIS</primary></indexterm> + <indexterm><primary>Solaris</primary></indexterm> + <indexterm><primary>HP-UX</primary></indexterm> + <indexterm><primary>AIX</primary></indexterm> + <indexterm><primary>Linux</primary></indexterm> + <indexterm><primary>NetBSD</primary></indexterm> + <indexterm><primary>OpenBSD</primary></indexterm> + <para>NIS とは Network Information Services の略で + Sun Microsystems によって &unix; の (もともとは &sunos; の) + 集中管理のために開発されました。現在では事実上の業界標準になっており、 + 主要な &unix; ライクシステム + (&solaris;, HP-UX, &aix;, Linux, NetBSD, OpenBSD, FreeBSD、等々) + はすべてこれをサポートしています。</para> + + <indexterm><primary>イエローページ</primary><see>NIS</see></indexterm> + <para>NIS は元々、イエローページといっていましたが、 + 商標問題から Sun はその名前を変えました。 + 古い用語 (および yp) はまだよく見られ、使用されています。</para> + + <indexterm> + <primary>NIS</primary> + <secondary>ドメイン</secondary> + </indexterm> <para>NIS は RPC を使ったクライアント/サーバシステムです。 - これを使うと NISドメイン内のマシン間で、 - 共通の設定ファイルを共有することができます。 - また、 NIS を使うことでシステム管理者は最小限の設定データで - NIS クライアントを立ち上げることができ、 - 1 ヶ所から設定データの追加、 削除、 変更が可能です。 </para> - - <para>NIS は Windows NT のドメインシステムに似ています。 - 内部の実装は似ても似つかないものですが、 基本的な機能を - 対比することはできます。</para> + これを使うと NIS ドメイン内のマシン間で、 + 共通の設定ファイルを共有することができます。 + また NIS を使うことでシステム管理者は最小限の設定データで + NIS クライアントを立ち上げることができ、 + 1 ヶ所から設定データの追加、削除、変更が可能です。</para> + + <indexterm><primary>Windows NT</primary></indexterm> + <para>NIS は &windowsnt; のドメインシステムに似ています。 + 内部の実装は似ても似つかないものですが、 + 基本的な機能を対比することはできます。</para> </sect2> <sect2> <title>知っておくべき用語 / プロセス</title> <para>NIS サーバの立ち上げや NIS クライアントの設定など、 - NIS を FreeBSD に導入するにあたって、 - 目にするであろう用語や重要なユーザプロセスがいくつかあります。</para> + NIS を FreeBSD に導入するにあたって、 + 目にするであろう用語や重要なユーザプロセスがいくつかあります。</para> - <itemizedlist> - <listitem> - <para><emphasis>NIS ドメイン名</emphasis>. NIS マスターサーバ一つと - そのクライアント (スレーブサーバを含む) は一つの NIS ドメイン名を - 持ちます。 NT のドメイン名同様、 - NIS ドメイン名は DNS とは何の関係もありません。</para> - </listitem> - <listitem> - <para><emphasis>portmap</emphasis>. <command>portmap</command> - は RPC (Remote Procedure Call、 NIS - で使われるネットワークプロトコル) - を利用するために実行しておかなければなりません。 - <command>portmap</command> が動いていなければ、 - NIS サーバの起動もクライアントとしての機能も得られません。</para> - </listitem> - <listitem> - <para><emphasis>ypbind</emphasis>. <command>ypbind</command> - は NIS クライアントを NIS サーバに<quote>結び付け</quote>ます。 - これは NIS ドメイン名をシステムから受け、 RPC - を用いてサーバに接続します。 <command>ypbind</command> - はクライアントとサーバのコミュニケーションの中枢であり、 - もしクライアントマシンの <command>ypbind</command> - が機能を停止した場合は - NIS サーバへアクセスできなくなります。</para> - </listitem> - <listitem> - <para><emphasis>ypserv</emphasis>. <command>ypserv</command> - は NIS サーバでのみ実行されるもので、 NIS - のサーバプロセスそのものです。 ypserv が機能を停止したときは、 - サーバは NIS リクエストに答えられなくなります - (運が良ければ、 スレーブサーバがいて代わりを努めるでしょう)。</para> - - <note> - <para>今まで使っていたサーバが機能を停止したとき、 - 別のサーバに再接続しに行かない NIS の実装もいくつかあります - (FreeBSD のものは違います)。 - そのような場合に復帰するための唯一の方法は、 - サーバプロセス (あるいはサーバ全体)、 もしくはクライアントの - <command>ypbind</command> - プロセスを再スタートすることです。</para> - </note> - </listitem> - <listitem> - <para><emphasis>rpc.yppasswdd</emphasis>. - <command>rpc.yppasswdd</command> は NIS - マスターサーバで動かされるべきもう一つのプロセスで、 - NIS クライアントから - NIS パスワードを変更させるデーモンです。 - このデーモンが動いていないときは、 ユーザは NIS マスターサーバに - login し、 そこでパスワードを変更することになります。</para> - </listitem> - - <!-- XXX Missing: rpc.ypxfrd (not important, though) May only run - on the master --> - </itemizedlist> + <indexterm> + <primary><application>portmap</application></primary> + </indexterm> + + <informaltable> + <tgroup cols="2"> + <thead> + <row> + <entry>用語</entry> + <entry>説明</entry> + </row> + </thead> + <tbody> + <row> + <entry>NIS ドメイン名</entry> + <entry>NIS マスタサーバとそのクライアントすべて + (スレーブサーバを含む) には NIS ドメイン名がついています。 + &windowsnt; ドメイン名と同様に、NIS ドメイン名は + DNS とは何の関係もありません。</entry> + </row> + <row> + <entry>portmap</entry> + <entry>RPC (Remote Procedure Call, + NIS で使用されるネットワークプロトコル) + を利用するために実行しておかなければなりません。 + <command>portmap</command> が動作していなければ、 + NIS サーバを起動することも、 + NIS クライアントとして動作させることもできません。</entry> + </row> + <row> + <entry>ypbind</entry> + <entry>NIS クライアントを + NIS サーバに<quote>結びつけ</quote>ます。 + これは NIS ドメイン名をシステムから取得し + RPC を用いてサーバに接続します。<command>ypbind</command> + は NIS 環境におけるクライアントとサーバ間の通信の中枢です。 + クライアントマシンの + <command>ypbind</command> が停止した場合は、NIS + サーバへアクセスすることができなくなります。</entry> + </row> + <row> + <entry>ypserv</entry> + <entry>は NIS サーバでのみ実行されるべきもので、 + NIS サーバプロセスそのものです。&man.ypserv.8; + が停止した場合、サーバはもはや NIS + リクエストに応答することができなくなるでしょう + (できれば、後を引き継ぐスレーブサーバがあるとよいでしょう)。 + 今まで使っていたサーバが機能を停止したとき、 + 別のサーバに再接続しに行かない NIS の実装もいくつかあります + (FreeBSD のものは違います)。 + そのような場合に復帰するための唯一の方法は、 + サーバプロセス (あるいはサーバ全体)、もしくはクライアントの + <command>ypbind</command> + プロセスを再スタートすることです。</entry> + </row> + <row> + <entry>rpc.yppasswdd</entry> + <entry>NIS マスターサーバで動かすべき、 + もう一つのプロセスです。これは NIS クライアントが + NIS パスワードを変更することを可能にするデーモンです。 + このデーモンが動作していないときは、 + ユーザは NIS マスタサーバにログインし、 + そこでパスワードを変更しなければなりません。</entry> + </row> + </tbody> + </tgroup> + </informaltable> + <!-- XXX Missing: rpc.ypxfrd (not important, though) May only run + on the master --> </sect2> <sect2> <title>動作のしくみ</title> - <para>NIS 環境にあるホストは、 次の 3 種類に分類されます。 それは、 - マスターサーバ、 スレーブサーバ、 クライアントです。 - サーバは、 ホストの設定情報の中心的な情報格納庫の役割をします。 - マスターサーバは元となる信頼できる情報を保持し、 - スレーブサーバは、 冗長性を確保するため、 この情報をミラーします。 - そしてクライアントは、 サーバから情報の提供を受けて動作します。</para> - - <para>この方法を用いることで、 数多くのファイルにある情報が共有できます。 - よく NIS で共有されるのは、 - <filename>master.passwd</filename> や <filename>group</filename>、 + <para>NIS 環境にあるホストは、 + マスターサーバ、スレーブサーバ、クライアントの + 3 種類に分類されます。 + サーバは、ホストの設定情報の中心的な情報格納庫の役割をします。 + マスターサーバは元となる信頼できる情報を保持し、 + スレーブサーバは冗長性を確保するためこの情報をミラーします。 + そしてクライアントは、サーバから情報の提供を受けて動作します。</para> + + <para>この方法を用いることで、数多くのファイルにある情報が共有できます。 + よく NIS で共有されるのは、 + <filename>master.passwd</filename> や <filename>group</filename>, <filename>hosts</filename> といったファイルです。 - クライアント上のプロセスで、 通常ローカルのファイルにある情報が必要 - となったとき、 - クライアントは接続しているサーバに問い合わせを行い、 その情報を得ます。 - </para> + クライアント上のプロセスが、 + 通常ならローカルのファイルにある情報を必要とするときは、 + クライアントは代わりに接続している + NIS サーバに問い合わせを行います。</para> <sect3> - <title>マシンの分類</title> - - <itemizedlist> - <listitem> - <para><emphasis>NIS マスターサーバ</emphasis>. - このサーバは Windows NT で言うところのプライマリ - ドメインコントローラにあたります。 - すべての NIS クライアントで利用されるファイルを保守し、 - <filename>passwd</filename> や - <filename>group</filename>、 その他 NIS - クライアントが参照するファイルは、 - マスターサーバにあります。</para> - - <note> - <para>一つのマシンが一つ以上の NIS - ドメインのマスターサーバになることは可能です。 - しかし、 ここでは比較的小規模の NIS 環境を対象としているため、 - そのような場合については扱いません。</para> - </note> - </listitem> - <listitem> - <para><emphasis>NIS スレーブサーバ</emphasis>。 - NT で言うところのバックアップドメインコントローラに似たもので、 - NIS スレーブサーバは NIS - マスターサーバのデータファイルのコピーを保持します。 - NIS スレーブサーバは重要な環境で必要とされる冗長性を提供し、 - マスターサーバの負荷のバランスをとります。 - NIS クライアントは常に最初にレスポンスを返したサーバを - NIS サーバとして接続しますが、 - これにはスレーブサーバも含まれます。</para> - </listitem> - <listitem> - <para><emphasis>NIS クライアント</emphasis>。 - NIS クライアントは大部分の NT ワークステーションのように、 - logon に際して - NIS サーバに対して (NT ワークステーションの場合では NT - ドメインコントローラに) 認証します。</para> - </listitem> - </itemizedlist> + <title>マシンの分類</title> + + <itemizedlist> + <indexterm> + <primary>NIS</primary> + <secondary>マスタサーバ</secondary> + </indexterm> + + <listitem> + <para><emphasis>NIS マスターサーバ</emphasis>。 + このサーバは &windowsnt; + で言うところのプライマリドメインコントローラにあたります。 + すべての NIS クライアントで利用されるファイルを保守します。 + <filename>passwd</filename> や <filename>group</filename>、 + その他 NIS クライアントが参照するファイルは、 + マスターサーバにあります。</para> + + <note><para>一つのマシンが一つ以上の NIS + ドメインのマスターサーバになることは可能です。 + しかし、ここでは比較的小規模の NIS 環境を対象としているため、 + そのような場合については扱いません。</para></note> + </listitem> + + <listitem> + <indexterm> + <primary>NIS</primary> + <secondary>スレーブサーバ</secondary> + </indexterm> + + <para><emphasis>NIS スレーブサーバ</emphasis>。 + &windowsnt; のバックアップドメインコントローラに似たもので、 + NIS スレーブサーバは NIS + マスターサーバのデータファイルのコピーを保持します。 + NIS スレーブサーバは重要な環境で必要とされる冗長性を提供し、 + マスターサーバの負荷のバランスをとります。 + NIS クライアントは常に最初にレスポンスを返したサーバを + NIS サーバとして接続しますが、 + これにはスレーブサーバも含まれます。</para> + </listitem> + + <listitem> + <indexterm> + <primary>NIS</primary> + <secondary>クライアント</secondary> + </indexterm> + + <para><emphasis>NIS クライアント</emphasis>。 + NIS クライアントは大部分の &windowsnt; + ワークステーションのように、ログオンに際して + NIS サーバ (&windowsnt; ワークステーションの場合は + &windowsnt; ドメインコントローラ) + に接続して認証します。</para> + </listitem> + </itemizedlist> </sect3> </sect2> @@ -1656,234 +3441,250 @@ ISDN BRI ライン</programlisting> <para>この節では NIS 環境の立ち上げ例を取り上げます。</para> <note> - <para>この節ではあなたが FreeBSD 3.3 以降を使っているものとします。 - ここで与えられる指示は<emphasis>おそらく</emphasis> FreeBSD の - 3.0 以降の、 どのバージョンでも機能するでしょうが、 - それを保証するものではありません。</para> + <para>この節ではあなたが FreeBSD 3.3 + 以降を使っているものとします。 + ここで与えられる指示は <emphasis>おそらく</emphasis> FreeBSD の + 3.0 以降のどのバージョンでも機能するでしょうが、 + それを保証するものではありません。</para> </note> <sect3> - <title>計画を立てる</title> + <title>計画を立てる</title> - <para>あなたが大学の小さな研究室の管理人であるとしましょう。 - この研究室は 15 台の FreeBSD マシンからなっていて、 - 現在はまだ集中管理されていません。 - すなわち、 各マシンは <filename>/etc/passwd</filename> と - <filename>/etc/master.passwd</filename> を各々が持っています。 + <para>あなたが大学の小さな研究室の管理人であるとしましょう。 + この研究室は 15 台の FreeBSD マシンからなっていて、 + 現在はまだ集中管理されていません。 + すなわち、各マシンは <filename>/etc/passwd</filename> と + <filename>/etc/master.passwd</filename> を各々が持っています。 これらのファイルは手動でお互いに同期させています。 - つまり現時点では、 新しいユーザをあなたが追加するとき、 - <command>adduser</command> を 15 ヶ所すべてで実行しなければなりません。 - これは明らかに変える必要があるため、 + つまり現時点では、新しいユーザをあなたが追加するとき、 + <command>adduser</command> を 15 ヶ所すべてで実行しなければなりません。 + これは明らかに変える必要があるため、 あなたはこのうち 2 台をサーバにして NIS を導入することを決めました。</para> - <para>その結果、 研究室の設定はこのようなものになります:</para> - - <informaltable> - <tgroup cols="3"> - <thead> - <row> - <entry>マシンの名前</entry> - <entry>IP address</entry> - <entry>役割</entry> - </row> - </thead> - <tbody> - <row> - <entry><hostid>ellington</hostid></entry> - <entry><hostid role="ipaddr">10.0.0.2</hostid></entry> - <entry>NIS マスタ</entry> - </row> - <row> - <entry><hostid>coltrane</hostid></entry> - <entry><hostid role="ipaddr">10.0.0.3</hostid></entry> - <entry>NIS スレーブ</entry> - </row> - <row> - <entry><hostid>basie</hostid></entry> - <entry><hostid role="ipaddr">10.0.0.4</hostid></entry> - <entry>教員用のワークステーション</entry> - </row> - <row> - <entry><hostid>bird</hostid></entry> - <entry><hostid role="ipaddr">10.0.0.5</hostid></entry> - <entry>クライアントマシン</entry> - </row> - <row> - <entry><hostid>cli[1-11]</hostid></entry> - <entry><hostid role="ipaddr">10.0.0.[6-17]</hostid></entry> - <entry>その他のクライアントマシン</entry> - </row> - </tbody> - </tgroup> - </informaltable> + <para>その結果、研究室の設定はこのようなものになります:</para> + + <informaltable> + <tgroup cols="3"> + <thead> + <row> + <entry>マシンの名前</entry> + <entry>IP アドレス</entry> + <entry>役割</entry> + </row> + </thead> + <tbody> + <row> + <entry><hostid>ellington</hostid></entry> + <entry><hostid role="ipaddr">10.0.0.2</hostid></entry> + <entry>NIS マスタ</entry> + </row> + <row> + <entry><hostid>coltrane</hostid></entry> + <entry><hostid role="ipaddr">10.0.0.3</hostid></entry> + <entry>NIS スレーブ</entry> + </row> + <row> + <entry><hostid>basie</hostid></entry> + <entry><hostid role="ipaddr">10.0.0.4</hostid></entry> + <entry>教員用のワークステーション</entry> + </row> + <row> + <entry><hostid>bird</hostid></entry> + <entry><hostid role="ipaddr">10.0.0.5</hostid></entry> + <entry>クライアントマシン</entry> + </row> + <row> + <entry><hostid>cli[1-11]</hostid></entry> + <entry><hostid role="ipaddr">10.0.0.[6-17]</hostid></entry> + <entry>その他のクライアントマシン</entry> + </row> + </tbody> + </tgroup> + </informaltable> <para>もし NIS によるシステム管理の設定を行なうのが初めてなら、 - どのようにしたいのか、 ひととおり最後まで考えてみることをお勧めします。 - ネットワークの規模によらず、 いくつか決めるべきことがあるからです。</para> - - <sect4> - <title>NIS ドメイン名を決める</title> + どのようにしたいのか、ひととおり最後まで考えてみることをお勧めします。 + ネットワークの規模によらず、いくつか決めるべきことがあるからです。</para> - <para>ここでいうドメイン名は、 今まであなたが使っていた、 - いわゆる <quote>ドメイン名</quote> - と呼んでいたものとは違います。 + <sect4> + <title>NIS ドメイン名を決める</title> + + <indexterm> + <primary>NIS</primary> + <secondary>ドメイン名</secondary> + </indexterm> + <para>ここでいうドメイン名は、今まであなたが使っていた、 + いわゆる <quote>ドメイン名</quote> と呼んでいたものとは違います。 正確には <quote>NIS ドメイン名</quote> と呼ばれます。 - クライアントがサーバに情報を要求するとき、 - その要求には自分が属する NIS ドメインの名前が含まれています。 - これは、 1 つのネットワークに複数のサーバがある場合に、 - どのサーバが要求を処理すれば良いかを決めるために使われます。 - NIS ドメイン名とは、 関連のあるホストをグループ化するための名前である、 - と考えると良いでしょう。 </para> + クライアントがサーバに情報を要求するとき、 + その要求には自分が属する NIS ドメインの名前が含まれています。 + これは 1 つのネットワークに複数のサーバがある場合に、 + どのサーバが要求を処理すれば良いかを決めるために使われます。 + NIS ドメイン名とは、 + 関連のあるホストをグループ化するための名前である、 + と考えると良いでしょう。</para> <para>組織によってはインターネットのドメイン名を - NIS ドメイン名に使っているところがありますが、 - これはネットワークのトラブルをデバッグするときに混乱の原因となるため、 - お勧めできません。 - NIS ドメイン名はネットワーク内で一意でなければならないので、 - ドメイン名がドメインに含まれるマシンを表すようなものであれば、 - 分かりやすくなります。 たとえば - Acme 社のアート(Art)部門であれば、 - NIS ドメイン名を"acme-art"とすれば良いでしょう。 </para> - - <para>しかしながら、 オペレーティングシステムによっては、 - そのネットワークドメイン名を NIS - のドメイン名として使うものもあります (特に SunOS)。 - あなたのネットワークにそのような制限のあるマシンが 1 台でもあるときは、 NIS - のドメイン名としてインターネットのネットワークドメイン名を使わなければ<emphasis>いけません</emphasis>。</para> - </sect4> - - <sect4> - <title>サーバマシンの物理的な条件とは</title> + NIS ドメイン名に使っているところがあります。 + これはネットワークのトラブルをデバッグするときに混乱の原因となるため、お勧めできません。 + NIS ドメイン名はネットワーク内で一意なければいけません。そして、 + ドメイン名がドメインに含まれるマシンを表すようなものであれば分かり易いです。 + たとえば Acme 社のアート (Art) 部門であれば NIS ドメイン名を + <quote>acme-art</quote> とすれば良いでしょう。この例では + NIS ドメイン名として <emphasis>test-domain</emphasis> + を使用します。</para> + + <indexterm><primary>SunOS</primary></indexterm> + <para>しかしながらオペレーティングシステムによっては (特に &sunos;)、 + NIS ドメイン名をネットワークドメイン名として使うものもあります。 + あなたのネットワークにそのような制限のあるマシンが + 1 台でもあるときは、NIS + のドメイン名としてインターネットのネットワークドメイン名を使わなければ<emphasis>いけません</emphasis>。</para> + </sect4> + + <sect4> + <title>サーバマシンの物理的必要条件</title> <para>NIS サーバとして使うマシンを選ぶ際には、 - いくつかの注意点があります。 - NIS における困ったことの一つに、 - クライアントのサーバへの依存度があります。 - クライアントが自分の NIS ドメインのサーバに接続できない場合、 - マシンが使用不能になることがよくあります。 - もし、 ユーザやグループに関する情報が得られなければ、 - ほとんどのシステムは一時的にですが停止してしまいます。 - こういったことを念頭に置いて、 - しょっちゅうリブートされるマシンや、 - 開発に使われそうなマシンを選ばないようにしなければなりません。 - 理想的には、 NIS サーバはスタンドアロンで - NIS サーバ専用となるマシンにするべきです。 - ネットワークの負荷が重くなければ、 - 他のサービスを走らせているマシンを NIS - サーバにしてもかまいません。 ただし NIS - サーバが使えなくなると、 - <emphasis>すべての</emphasis>クライアントに影響をおよぼす、 - という点には注意しなければなりません。</para> - </sect4> + いくつか注意すべき点があります。 + NIS に関する困ったことの一つに、 + クライアントのサーバへの依存度があります。 + クライアントが自分の NIS ドメインのサーバに接続できないと、 + マシンが使用不能になることがあまりに多いのです。 + もし、ユーザやグループに関する情報が得られなければ、 + ほとんどのシステムは一時的に停止してしまいます。 + こういったことを念頭に置いて、頻繁にリブートされるマシンや、 + 開発に使われそうなマシンを選ばないようにしなければなりません。 + 理想的には NIS サーバはスタンドアロンで + NIS サーバ専用のマシンにするべきです。 + ネットワークの負荷が重くなければ、 + 他のサービスを走らせているマシンを NIS サーバにしてもかまいません。 + ただし NIS サーバが使えなくなると、<emphasis>すべての</emphasis> + クライアントに影響をおよぼす、という点には注意しなければなりません。</para> + </sect4> </sect3> <sect3> - <title>NIS サーバ</title> + <title>NIS サーバ</title> <para>元となるすべての NIS 情報は、 - NIS マスターサーバと呼ばれる 1 台のマシンに置かれます。 - この情報が格納されるデータベースを NIS マップと呼びます。 - FreeBSDでは、 このマップは + NIS マスターサーバと呼ばれる 1 台のマシンに格納されます。 + この情報が格納されるデータベースを NIS マップと呼びます。 + FreeBSD では、このマップは <filename>/var/yp/[domainname]</filename> に置かれます。 <filename>[domainname]</filename> は、 - サーバがサービスする NIS ドメインです。 - 1 台の NIS サーバが複数のドメインをサポートすることも可能です。 - つまり、 このディレクトリを各々のドメインごとに作ることができ、 - 各ドメインごと、 独立したマップの集合を持つことになります。</para> + サーバがサービスする NIS ドメインです。 + 1 台の NIS サーバが複数のドメインをサポートすることも可能です。 + つまり、このディレクトリを各々のドメインごとに作ることができます。 + それぞれのドメインは、独立したマップの集合を持つことになります。</para> <para>NIS のマスターサーバとスレーブサーバ上では、 <command>ypserv</command> デーモンがすべての NIS 要求を処理します。 - <command>ypserv</command> は NIS クライアントからの要求を受け付け、 - ドメイン名とマップ名を対応するデータベースファイルへのパスに変換し、 - データをクライアントに返送します。</para> + <command>ypserv</command> は NIS クライアントからの要求を受け付け、 + ドメイン名とマップ名を対応するデータベースファイルへのパスに変換し、 + データをクライアントに返送します。</para> - <sect4> + <sect4> <title>NIS マスターサーバの設定</title> - - <para>やりたいことにもよりますが、 - NIS マスターサーバの設定は比較的単純です。 + <indexterm> + <primary>NIS</primary> + <secondary>サーバ設定</secondary> + </indexterm> + <para>やりたいことにもよりますが + NIS マスターサーバの設定は比較的単純です。 FreeBSD は初期状態で NIS に対応しています。 - 必要なことは以下の行を <filename>/etc/rc.conf</filename> に追加し、 - FreeBSD をリスタートすることだけです。</para> - - <itemizedlist> - <listitem> - <para> - <programlisting>nisdomainname="test-domain"</programlisting> - - この行はネットワークのセットアップ時に - (すなわち再起動したときに) NIS のドメイン名を - <emphasis>test-domain</emphasis> - にセットします。</para> - </listitem> - <listitem> - <para> - <programlisting>nis_server_enable="YES"</programlisting> - - これは FreeBSD に、 次にネットワークが立ち上がったとき NIS - のサーバプロセスを起動させます。</para> - </listitem> - <listitem> - <para> - <programlisting>nis_yppasswdd_enable="YES"</programlisting> - - これは <command>rpc.yppasswdd</command> デーモンを有効にします。 - 上述したようにこれはユーザが NIS - のパスワードをクライアントのマシンから変更することを可能にします。</para> - </listitem> - </itemizedlist> - - <para>あと、 あなたがしなければいけないことはスーパユーザ権限でコマンド - <command>/etc/netstart</command> を実行することです。 + 必要なのは以下の行を <filename>/etc/rc.conf</filename> + に追加することだけで、 + あとは FreeBSD がやってくれます。</para> + + <procedure> + <step> + <para><programlisting>nisdomainname="test-domain"</programlisting> + この行はネットワークの設定後に (たとえば再起動後に) + NIS のドメイン名を <emphasis>test-domain</emphasis> + に設定します。</para> + </step> + <step> + <para> + <programlisting>nis_server_enable="YES"</programlisting> + これは FreeBSD に次にネットワークが立ち上がったとき NIS + のサーバプロセスを起動させます。</para> + </step> + <step> + <para> + <programlisting>nis_yppasswdd_enable="YES"</programlisting> + これは <command>rpc.yppasswdd</command> + デーモンを有効にします。上述したようにこれはユーザが NIS + のパスワードをクライアントのマシンから変更することを可能にします。</para> + </step> + </procedure> + + <note> + <para>NIS の設定によっては、 + さらに他のエントリを付け加える必要があるかもしれません。 + 詳細については、下記の + <link linkend="network-nis-server-is-client">NIS クライアントとしても動作している NIS サーバ</link> + 節を参照してください。</para> + </note> + + <para>さて、あとはスーパユーザ権限で + <command>/etc/netstart</command> コマンドを実行するだけです。 これにより <filename>/etc/rc.conf</filename> - で定義された値を使ってすべての設定が行なわれます。</para> + で定義された値を使ってすべての設定が行なわれます。</para> </sect4> - <sect4> - <title>NIS マップの初期化</title> - - <para><emphasis>NIS マップ</emphasis> とは - <filename>/var/yp</filename> ディレクトリにあるデータベースファイルです。 - これらは NIS マスタの <filename>/etc</filename> - ディレクトリの設定ファイルから作られます。 - 唯一の例外は - <filename>/etc/master.passwd</filename> ファイルです。 - これは、 root や他の管理用アカウントのパスワードまでその - NIS ドメインのすべてのサーバに伝えたくないという、 - もっともな理由によるものです。 このため NIS - マップの初期化の前に以下を行う必要があります。</para> - - <screen>&prompt.root; <userinput>cp /etc/master.passwd /var/yp/master.passwd</userinput> + <sect4> + <title>NIS マップの初期化</title> + <indexterm> + <primary>NIS</primary> + <secondary>マップ</secondary> + </indexterm> + <para><emphasis>NIS マップ</emphasis> とは + <filename>/var/yp</filename> + ディレクトリにあるデータベースファイルです。 + これらは NIS マスタの <filename>/etc</filename> + ディレクトリの設定ファイルから作られます。 + 唯一の例外は <filename>/etc/master.passwd</filename> ファイルです。 + これは <username>root</username> + や他の管理用アカウントのパスワードまでその + NIS ドメインのすべてのサーバに伝えたくないという、 + もっともな理由によるものです。このため NIS + マップの初期化の前に以下を行う必要があります。</para> + + <screen>&prompt.root; <userinput>cp /etc/master.passwd /var/yp/master.passwd</userinput> &prompt.root; <userinput>cd /var/yp</userinput> &prompt.root; <userinput>vi master.passwd</userinput></screen> - <para>あなたはシステムに関するアカウント (bin、 tty、 kmem、 games、 etc) - をすべて削除しなければなりません。 - またあなたが NIS クライアントに伝えたくないと思うアカウント - (たとえば root や他の UID が 0 (スーパユーザ) のアカウント) - についても削除する必要があります。</para> - - <note> - <para><filename>/var/yp/master.passwd</filename> が - グループや全世界から読めるようになっていないようにしてください - (モード 600)! 必要なら <command>chmod</command> コマンドを - 使ってください。</para> - </note> - - <para>すべてが終わったらマップを初期化します! - FreeBSD には、 これを行うために <command>ypinit</command> - という名のスクリプトが含まれています - (詳細はそのマニュアルページをご覧ください)。 - このスクリプトはほとんどの UNIX OS で存在しますが、 - すべてとは限らないことを覚えておいてください。 - Digital Unix/Compaq Tru64 Unix では - <command>ypsetup</command> と呼ばれています。 - NIS マスタのためのマップを作るためには + <para>システムに関するアカウント + (<username>bin</username>, <username>tty</username>, + <username>kmem</username>, <username>games</username> など) + や、NIS クライアントに伝えたくないアカウント + (たとえば <username>root</username> + や他の UID が 0 (スーパユーザ) のアカウント) + をすべて NIS マップから取り除かなければなりません。</para> + + <note><para> + <filename>/var/yp/master.passwd</filename> が + グループまたは誰もが読めるようになっていないようにしてください + (モード 600)! + 必要なら <command>chmod</command> + コマンドを使ってください。</para></note> + + <indexterm><primary>Tru64 UNIX</primary></indexterm> + <para>すべてが終わったら NIS マップを初期化します! + FreeBSD には、これを行うために <command>ypinit</command> + という名のスクリプトが含まれています + (詳細はそのマニュアルページをご覧ください)。 + このスクリプトはほとんどの &unix; OS に存在しますが、 + すべてとは限らないことを覚えておいてください。 + Digital Unix/Compaq Tru64 UNIX では <command>ypsetup</command> + と呼ばれています。NIS マスタのためのマップを作るためには <option>-m</option> オプションを <command>ypinit</command> - に与えます。 上述のステップを完了しているなら、 - 以下を実行して NIS マップを生成します。</para> + に与えます。上述のステップを完了しているなら、以下を実行して + NIS マップを生成します。</para> - <screen>ellington&prompt.root; <userinput>ypinit -m test-domain</userinput> + <screen>ellington&prompt.root; <userinput>ypinit -m test-domain</userinput> Server Type: MASTER Domain: test-domain Creating an YP server will require that you answer a few questions. Questions will all be asked at the beginning of the procedure. @@ -1907,37 +3708,40 @@ Is this correct? [y/n: y] <userinput>y</userinput> NIS Map update completed. ellington has been setup as an YP master server without any errors.</screen> - <para><command>ypinit</command> は - <filename>/var/yp/Makefile</filename> を - <filename>/var/yp/Makefile.dist</filename> から作成します。 - 作成されていれば、 - そのファイルはあなたが扱っているのが FreeBSD - のみからなる、 - サーバが一つだけの NIS 環境であるという前提に立っています。 + <para><command>ypinit</command> は + <filename>/var/yp/Makefile</filename> を + <filename>/var/yp/Makefile.dist</filename> から作成します。 + 作成された時点では、そのファイルはあなたが FreeBSD + マシンだけからなるサーバが 1 台だけの + NIS 環境を扱っていると仮定しています。 <emphasis>test-domain</emphasis> - はスレーブサーバを一つ持っていますので、 - <filename>/var/yp/Makefile</filename> - を編集する必要があります。</para> + はスレーブサーバを一つ持っていますので + <filename>/var/yp/Makefile</filename> + を編集しなければなりません。</para> - <screen>ellington&prompt.root; <userinput>vi /var/yp/Makefile</userinput></screen> + <screen>ellington&prompt.root; <userinput>vi /var/yp/Makefile</userinput></screen> - <para>`NOPUSH = "True"' - としている行を (もし既にコメントアウトされていないならば) - コメントアウトしなければなりません。</para> - </sect4> + <para>以下の行を (もし既にコメントアウトされていないならば) + コメントアウトしなければなりません。</para> - <sect4> - <title>NIS スレーブサーバの設定</title> + <programlisting>NOPUSH = "True"</programlisting> + </sect4> + <sect4> + <title>NIS スレーブサーバの設定</title> + <indexterm> + <primary>NIS</primary> + <secondary>スレーブサーバ</secondary> + </indexterm> <para>NIS スレーブサーバの設定はマスターサーバの設定以上に簡単です。 スレーブサーバにログオンし <filename>/etc/rc.conf</filename> - ファイルを前回と同様に編集します。 唯一の違うところは + ファイルを前回と同様に編集します。唯一の違うところは <command>ypinit</command> の実行に <option>-s</option> - オプションを使わなければいけないことです。 - <option>-s</option> オプションは NIS - マスターサーバの名前を要求し、 コマンドラインは以下のようになります。</para> + オプションを使わなければいけないことです。 + <option>-s</option> オプションは NIS マスターサーバの名前を要求し、 + コマンドラインは以下のようになります:</para> - <screen>coltrane&prompt.root; <userinput>ypinit -s ellington test-domain</userinput> + <screen>coltrane&prompt.root; <userinput>ypinit -s ellington test-domain</userinput> Server Type: SLAVE Domain: test-domain Master: ellington @@ -1994,108 +3798,123 @@ ypxfr: Exiting: Map successfully transferred coltrane has been setup as an YP slave server without any errors. Don't forget to update map ypservers on ellington.</screen> - <para>この例の場合、 <filename>/var/yp/test-domain</filename> - というディレクトリが必要になります。 - NIS マスターサーバのマップファイルのコピーはこのディレクトリに置かれますが、 - あなたは、 これらが確実に最新のものに維持されるようにする必要があります。 - 次のエントリをスレーブサーバの <filename>/etc/crontab</filename> - に追加することで、 最新のものに保つことができます。 - </para> + <para>この例の場合 <filename>/var/yp/test-domain</filename> + というディレクトリが必要になります。 + NIS マスターサーバのマップファイルのコピーは、 + このディレクトリに置いてください。 + これらを確実に最新のものに維持する必要があります。 + 次のエントリをスレーブサーバの <filename>/etc/crontab</filename> + に追加することで、最新のものに保つことができます:</para> <programlisting>20 * * * * root /usr/libexec/ypxfr passwd.byname 21 * * * * root /usr/libexec/ypxfr passwd.byuid</programlisting> - <para>この二行は、 - スレーブサーバにあるマップファイルをマスターサーバのマップファイルと同期させるものですが、 - 必須というわけではありません。 なぜなら、 - マスターサーバは、 NIS マップに対する変更をスレーブサーバに伝えようとするからです。 - しかし、 サーバが管理するシステムにとってパスワード情報はとても重要なものですので、 - 強制的に更新してしまう方が良いでしょう。 - 特に、 - マップファイルの更新がきちんと行なわれるかどうかわからないくらい混雑するネットワークでは、 - 重要なポイントになります。</para> - - <para>コマンド <command>/etc/netstart</command> - をスレーブサーバでも実行してください。 - NIS サーバを起動します。</para> + <para>この二行はスレーブサーバにあるマップファイルを、 + マスターサーバのマップファイルと同期させるものです。 + このエントリは必須というわけではありませんが、マスターサーバは + NIS マップに対する変更をスレーブサーバに伝えようとしますし、 + サーバが管理するシステムにとってパスワード情報はとても重要なので、 + 強制的に更新してしまうことはよい考えです。特に、 + マップファイルの更新がきちんと行なわれるかどうかわからないくらい混雑するネットワークでは、 + 重要になります。</para> + + <para>スレーブサーバ上でも <command>/etc/netstart</command> + コマンドを実行して、NIS サーバを再起動してください。</para> </sect4> </sect3> <sect3> - <title>NIS クライアント</title> + <title>NIS クライアント</title> <para>NIS クライアントは <command>ypbind</command> - デーモンを使って、 特定の NIS - サーバとの間に結合 (binding) と呼ばれる関係を成立させます。 + デーモンを使って、特定の NIS + サーバとの間に結合 (binding) と呼ばれる関係を成立させます。 <command>ypbind</command> はシステムのデフォルトのドメイン - (<command>domainname</command> コマンドで設定されます) - をチェックし、 RPC 要求をブロードキャストパケットとしてローカルネットワークに送信します。 - この RPC 要求により、 <command>ypbind</command> - が結合を成立させようとしているドメイン名が指定されます。 + (<command>domainname</command> コマンドで設定されます) + を確認し、RPC 要求をローカルネットワークにブロードキャストします。 + この RPC 要求により <command>ypbind</command> + が結合を成立させようとしているドメイン名が指定されます。 要求されているドメイン名に対してサービスするよう設定されたサーバが - ブロードキャストパケットを受信すると、 - サーバは <command>ypbind</command> に応答し、 - <command>ypbind</command> は応答のあったサーバのアドレスを記録します。 - 複数のサーバがある(たとえば一つのマスターサーバと、 - 複数のスレーブサーバがある)場合、 - <command>ypbind</command> は、 - 最初に応答したサーバのアドレスを使用します。 - これ以降、 クライアントのシステムは、 - すべての NIS の要求をそのサーバに向けて送信します。 + ブロードキャストを受信すると、 + サーバは <command>ypbind</command> に応答し<command>ypbind</command> + は応答のあったサーバのアドレスを記録します。複数のサーバ + (たとえば一つのマスターサーバと、複数のスレーブサーバ) + が利用可能な場合、<command>ypbind</command> は、 + 最初に応答したサーバのアドレスを使用します。 + これ以降、クライアントのシステムは、 + すべての NIS の要求をそのサーバに向けて送信します。 <command>ypbind</command> は、 - サーバが順調に動作していることを確認するため、 - 時々 <quote>ping</quote> をサーバに送ります。 - 反応が戻ってくるべき時間内に ping に対する応答が来なければ、 - <command>ypbind</command> は、 - そのドメインを結合不能(unbound)として記録し、 - 別のサーバを見つけるべく、 再びブロードキャストパケットの送信を行います。 </para> + サーバが順調に動作していることを確認するため、 + 時々 <quote>ping</quote> をサーバに送ります。 + 反応が戻ってくるべき時間内に ping に対する応答が来なければ、 + <command>ypbind</command> は、そのドメインを結合不能 + (unbound) として記録し、別のサーバを見つけるべく、 + 再びブロードキャストパケットの送信を行います。</para> <sect4> <title>NIS クライアントの設定</title> - - <para>FreeBSD マシンにおける NIS クライアントの設定は非常に単純です。</para> - - <itemizedlist> - <listitem> - <para><filename>/etc/rc.conf</filename> - ファイルを編集して以下の行を追加し、 - ネットワークのセットアップ時に - NIS ドメイン名をセットして - <command>ypbind</command> を起動させます。</para> + <indexterm> + <primary>NIS</primary> + <secondary>クライアントの設定</secondary> + </indexterm> + <para>FreeBSD マシンを NIS クライアントにする設定は非常に単純です。</para> + + <procedure> + <step> + <para>ネットワークの起動時に NIS ドメイン名を設定して + <command>ypbind</command> を起動させるために + <filename>/etc/rc.conf</filename> + ファイルを編集して以下の行を追加します。</para> <programlisting>nisdomainname="test-domain" nis_client_enable="YES"</programlisting> - </listitem> + </step> - <listitem> - <para>NIS サーバにあるすべてのパスワードエントリを取り込むため、 - <command>vipw</command> コマンドで以下の行を - <filename>/etc/master.passwd</filename> に追加します。 </para> + <step> + <para>NIS サーバから、 + 利用可能なパスワードエントリをすべて取り込むため、 + <filename>/etc/master.passwd</filename> + からすべてのユーザアカウントを取り除いて、 + <command>vipw</command> コマンドで以下の行を + <filename>/etc/master.passwd</filename> の最後に追加します。</para> <programlisting>+:::::::::</programlisting> <note> <para>この行によって NIS - サーバのパスワードマップにアカウントがある人全員にアカウントが与えられます。 - この行を変更すると、 さまざまな NIS クライアントの設定を行なうことが可能です。 - 詳細は <link linkend="netgroups">netgroups</link> の部分を、 - さらに詳しい情報については、 O'Reilly の - <literal>Managing NFS and NIS</literal> をお読みください。</para> + サーバのパスワードマップにアカウントがある人全員にアカウントが与えられます。 + この行を変更すると、 + さまざまな NIS クライアントの設定を行なうことが可能です。 + 詳細は <link linkend="network-netgroups">ネットグループ</link> + を、さらに詳しい情報については、O'Reilly の + <literal>Managing NFS and NIS</literal> を参照してください。</para> </note> - </listitem> - <listitem> + <note> + <para><filename>/etc/master.passwd</filename> + 内に少なくとも一つのローカルアカウント + (つまり NIS 経由でインポートされていないアカウント) + を置くべきです。 + また、このアカウントは <groupname>wheel</groupname> + グループのメンバーであるべきです。 + NIS がどこか調子悪いときには、 + リモートからこのアカウントでログインし、 + root になって修復するのに利用できます。</para> + </note> + </step> + + <step> <para>NIS サーバにあるすべてのグループエントリを取り込むため、 - 以下の行を <filename>/etc/group</filename> に追加します。</para> + 以下の行を <filename>/etc/group</filename> に追加します。</para> <programlisting>+:*::</programlisting> - </listitem> - </itemizedlist> + </step> + </procedure> <para>上記の手順がすべて完了すれば、 - <command>ypcat passwd</command> によって - NIS サーバの passwd マップが参照できるようになっているはずです。 - </para> + <command>ypcat passwd</command> によって + NIS サーバの passwd マップが参照できるようになっているはずです。 + </para> </sect4> </sect3> </sect2> @@ -2104,20 +3923,20 @@ nis_client_enable="YES"</programlisting> <title>NIS セキュリティ</title> <para>一般にドメイン名さえ知っていれば、 - どこにいるリモートユーザでも ypserv に RPC を発行して - NIS マップの内容を引き出すことができます。 - こういった不正なやりとりを防ぐため、 - ypserv には securenets と呼ばれる機能があります。 - これはアクセスを決められたホストだけに制限する機能です。 - ypserv は起動時に <filename>/var/yp/securenets</filename> ファイルから - securenets に関する情報を読み込みます。</para> + どこにいるリモートユーザでも &man.ypserv.8; に RPC を発行して + NIS マップの内容を引き出すことができます。 + こういった不正なやりとりを防ぐため、 + &man.ypserv.8; には securenets と呼ばれる機能があります。これは、 + アクセスを決められたホストだけに制限するのに使える機能です。 + &man.ypserv.8; は起動時に <filename>/var/yp/securenets</filename> + ファイルから securenets に関する情報を読み込みます。</para> <note> - <para>上記のパス名は、 <option>-p</option> - オプションで指定されたパス名によって変わります。 - このファイルは、 空白で区切られたネットワーク指定とネットマスクのエントリからなっていて、 - <quote>#</quote> で始まる行はコメントとみなされます。 - 簡単な securenets ファイルの例を以下に示します。</para> + <para>上記のパス名は <option>-p</option> + オプションで指定されたパス名によって変わります。このファイルは、 + 空白で区切られたネットワーク指定とネットマスクのエントリからなっていて、 + <quote>#</quote> で始まる行はコメントとみなされます。 + 簡単な securenets ファイルの例を以下に示します。</para> </note> <programlisting># allow connections from local host -- mandatory @@ -2129,48 +3948,53 @@ nis_client_enable="YES"</programlisting> # between 10.0.0.0 to 10.0.15.255 10.0.0.0 255.255.240.0</programlisting> - <para>ypserv が上記のルールの一つと合致するアドレスからの要求を受け取った場合、 - 処理は通常に行なわれます。 - もしアドレスがルールに合致しなければ、 - その要求は無視されて警告メッセージがログに記録されます。 - また、 <filename>/var/yp/securenets</filename> が存在しない場合、 - ypserv はすべてのホストからの接続を受け入れます。 + <para>&man.ypserv.8; + が上記のルールの一つと合致するアドレスからの要求を受け取った場合、 + 処理は正常に行なわれます。 + もしアドレスがルールに合致しなければ、 + その要求は無視されて警告メッセージがログに記録されます。 + また <filename>/var/yp/securenets</filename> が存在しない場合、 + <command>ypserv</command> はすべてのホストからの接続を受け入れます。 </para> - <para>ypserv は Wietse Venema 氏による + <para><command>ypserv</command> は Wietse Venema 氏による <application>tcpwrapper</application> パッケージもサポートしています。 - そのため、 <filename>/var/yp/securenets</filename> の代わりに - tcpwrapper の設定ファイルを使ってアクセス制御を行なうことも可能です。 - </para> + そのため <filename>/var/yp/securenets</filename> の代わりに + <application>tcpwrapper</application> + の設定ファイルを使ってアクセス制御を行なうことも可能です。</para> <note> <para>これらのアクセス制御機能は一定のセキュリティを提供しますが、 - どちらも特権ポートのテストのような <quote>IP spoofing</quote> - 攻撃に対して脆弱です。 - すべての NIS 関連のトラフィックはファイアウォールでブロックされるべきです。</para> - - <para><filename>/var/yp/securenets</filename> - を使っているサーバは、 - 古風な TCP/IP 実装を持つ正しいクライアントへのサービスに失敗することがあります。 - これらの実装の中にはブロードキャストのホストビットをすべて 0 でセットしてしまったり + どちらも特権ポートのテストのような <quote>IP spoofing</quote> + 攻撃に対して脆弱です。すべての NIS + 関連のトラフィックはファイアウォールでブロックされるべきです。</para> + + <para><filename>/var/yp/securenets</filename> + を使っているサーバは、古い TCP/IP + 実装を持つ正当なクライアントへのサービスに失敗することがあります。 + これらの実装の中にはブロードキャストのホストビットをすべて + 0 でセットしてしまったり、 ブロードキャストアドレスの計算でサブネットマスクを見落としてしまったりするものがあります。 - これらの問題はクライアントの設定を正しく行なうことで修正できますが、 - 他の問題は問題となっているクライアントシステムの撤去か - <filename>/var/yp/securenets</filename> の放棄が必要です。</para> - - <para>このような古風な TCP/IP の実装を持つサーバで - <filename>/var/yp/securenets</filename> - を使うことは非常に悪い考えであり、 - あなたのネットワークの大部分において - NIS の機能を失うことになるでしょう。</para> - - <para><application>tcpwrapper</application> - パッケージの使用はあなたの NIS サーバのレイテンシ (遅延) を増加させます。 - 追加された遅延は、 特に混雑したネットワークや遅い - NIS サーバでクライアントプログラムのタイムアウトを引き起こすに十分なだけ長いでしょう。 - 一つ以上のクライアントシステムがこれらの兆候を示したなら、 - あなたは問題となっているクライアントシステムを - NIS スレーブサーバにして自分自身に結び付くように強制すべきです。</para> + これらの問題にはクライアントの設定を正しく行なえば解決できるものもありますが、 + 問題となっているクライアントシステムを引退させるか、 + <filename>/var/yp/securenets</filename> + を使わないようにしなければならないものもあります。</para> + + <para>このような古風な TCP/IP の実装を持つサーバで + <filename>/var/yp/securenets</filename> + を使うことは実に悪い考えであり、 + あなたのネットワークの大部分において + NIS の機能喪失を招きます。</para> + + <indexterm><primary>tcpwrapper</primary></indexterm> + <para><application>tcpwrapper</application> + パッケージを使うとあなたの NIS サーバのレイテンシ (遅延) + が増加します。特に混雑したネットワークや遅い NIS + サーバでは、遅延の増加によって、 + クライアントプログラムのタイムアウトが起こるかもしれません。 + 一つ以上のクライアントシステムがこれらの兆候を示したなら、 + あなたは問題となっているクライアントシステムを + NIS スレーブサーバにして自分自身に結び付くように強制すべきです。</para> </note> </sect2> @@ -2178,26 +4002,27 @@ nis_client_enable="YES"</programlisting> <title>何人かのユーザのログオンを遮断する</title> <para>わたしたちの研究室には <hostid>basie</hostid> という、 - 教員専用のマシンがあります。 わたしたちはこのマシンを - NIS ドメインの外に出したくないのですが、 - マスタ NIS サーバの <filename>passwd</filename> - ファイルには教員と学生の両方が載っています。 - どうしたらいいでしょう?</para> + 教員専用のマシンがあります。わたしたちはこのマシンを + NIS ドメインの外に出したくないのですが、 + マスタ NIS サーバの <filename>passwd</filename> + ファイルには教員と学生の両方が載っています。 + どうしたらいいでしょう?</para> <para>当該人物が NIS のデータベースに載っていても、 - そのユーザがマシンにログオンできないようにする方法があります。 - そうするには、 <emphasis>-<replaceable>username</replaceable></emphasis> を - クライアントマシンの <filename>/etc/master.passwd</filename> - ファイルの末尾に付け足します。 - <replaceable>username</replaceable> - はあなたがログインさせたくないと思っているユーザのユーザ名です。 - これは <command>vipw</command> で行うべきです。 - <command>vipw</command> は <filename>/etc/master.passwd</filename> - への変更をチェックし、 編集終了後パスワードデータベースを再構築します。 - たとえば、 ユーザ <emphasis>bill</emphasis> が <hostid>basie</hostid> - にログオンするのを防ぎたいなら、 以下のようにします。</para> - - <screen>basie&prompt.root; <userinput>vipw</userinput> + そのユーザがマシンにログオンできないようにする方法があります。 + そうするには + <emphasis>-<replaceable>username</replaceable></emphasis> + をクライアントマシンの <filename>/etc/master.passwd</filename> + ファイルの末尾に付け足します。 + <replaceable>username</replaceable> + はあなたがログインさせたくないと思っているユーザのユーザ名です。 + これは <command>vipw</command> で行うべきです。 + <command>vipw</command> は <filename>/etc/master.passwd</filename> + への変更をチェックし、編集終了後パスワードデータベースを再構築します。 + たとえば、ユーザ <emphasis>bill</emphasis> が <hostid>basie</hostid> + にログオンするのを防ぎたいなら、以下のようにします。</para> + + <screen>basie&prompt.root; <userinput>vipw</userinput> <userinput>[add -bill to the end, exit]</userinput> vipw: rebuilding the database... vipw: done @@ -2225,201 +4050,206 @@ nobody:*:65534:65534::0:0:Unprivileged user:/nonexistent:/sbin/nologin basie&prompt.root;</screen> </sect2> - <sect2 id="netgroups"> - <title>netgroups の利用</title> - - <para><emphasis>netgroups の部分の原作: - Udo Erdelhoff <email>ue@nathan.ruhr.de</email>. - 2000 年 7 月.</emphasis></para> - - <para>前節までに見てきた手法は, - 極めて少ないユーザ/マシン向けに個別のルールを必要としている場合にはうまく機能します。 - しかし大きなネットワークでは, - ユーザに触られたくないマシンへログオンを防ぐのを<emphasis>忘れるでしょう</emphasis>し, - そうでなくとも各マシンを個別に設定して回らなければならず、 + <sect2 id="network-netgroups"> + <sect2info> + <authorgroup> + <author> + <firstname>Udo</firstname> + <surname>Erdelhoff</surname> + <contrib>寄稿: </contrib> + </author> + </authorgroup> + </sect2info> + <title>ネットグループの利用</title> + <indexterm><primary>ネットグループ</primary></indexterm> + + <para>前節までに見てきた手法は、 + 極めて少ないユーザ/マシン向けに個別のルールを必要としている場合にはうまく機能します。 + しかし大きなネットワークでは、 + ユーザに触られたくないマシンへログオンを防ぐのを + <emphasis>忘れるでしょう</emphasis> し、 + そうでなくとも各マシンを個別に設定して回らなければならず、 <emphasis>集中</emphasis>管理という NIS の恩恵を失ってしまいます。</para> - <para>NIS の開発者はこの問題を <emphasis>netgroups</emphasis> - と呼ばれる方法で解決しました。 - 彼らの目的とその意味合いは UNIX - のファイルシステムで使われている一般的なグループと比較できます。 - 主たる相違は数字による id を欠いていることと、 - ネットグループを定義するのにユーザアカウントと別のネットグループの、 - 両方を含められる機能です。</para> + <para>NIS の開発者はこの問題を <emphasis>ネットグループ</emphasis> + と呼ばれる方法で解決しました。 + その目的と意味合いは &unix; + のファイルシステムで使われている一般的なグループと比較できます。 + 主たる相違は数値 ID が存在しないことと、 + ユーザアカウントと別のネットグループを含めたネットグループを定義できることです。</para> <para>ネットグループは百人/台以上のユーザとマシンを含む、 - 大きく複雑なネットワークを扱うために開発されました。 - もし、 あなたがこのような状況を扱わなければならないなら便利なものなのですが、 - この複雑さは単純な例でネットグループの説明をすることをほとんど不可能にしています。 - この部の残りで使われている例は、 この問題を実演しています。</para> - - <para>あなたの行なった、 研究室への NIS - の導入の成功が上司の目に止ったとしましょう。 - あなたの次の仕事は、 - あなたの NIS - ドメインをキャンパスの他のいくつものマシンを覆うものへ拡張することです。 - 二つの表は新しいユーザと新しいマシンの名前とその説明を含んでいます。</para> + 大きく複雑なネットワークを扱うために開発されました。 + あなたがこのような状況を扱わなければならないなら便利なものなのですが、 + 一方で、この複雑さは単純な例でネットグループの説明をすることをほとんど不可能にしています。 + この節の残りで使われている例は、この問題を実演しています。</para> + + <para>あなたの行なった、 + 研究室への NIS の導入の成功が上司の目に止ったとしましょう。 + あなたの次の仕事は、あなたの NIS + ドメインをキャンパスの他のいくつものマシンを覆うものへ拡張することです。 + 二つの表は新しいユーザと新しいマシンの名前とその説明を含んでいます。</para> <informaltable> - <tgroup cols="2"> - <thead> - <row> - <entry>ユーザの名前</entry> - <entry>説明</entry> - </row> - </thead> - - <tbody> - <row> - <entry>alpha, beta</entry> - <entry>IT 学科の通常の職員</entry> - </row> - - <row> - <entry>charlie, delta</entry> - <entry>IT 学科の新しい見習い</entry> - </row> - - <row> - <entry>echo, foxtrott, golf, ...</entry> - <entry>一般の職員</entry> - </row> - - <row> - <entry>able, baker, ...</entry> - <entry>まだインターン</entry> - </row> - </tbody> - </tgroup> + <tgroup cols="2"> + <thead> + <row> + <entry>ユーザの名前</entry> + <entry>説明</entry> + </row> + </thead> + + <tbody> + <row> + <entry>alpha, beta</entry> + <entry>IT 学科の通常の職員</entry> + </row> + + <row> + <entry>charlie, delta</entry> + <entry>IT 学科の新しい見習い</entry> + </row> + + <row> + <entry>echo, foxtrott, golf, ...</entry> + <entry>一般の職員</entry> + </row> + + <row> + <entry>able, baker, ...</entry> + <entry>まだインターン</entry> + </row> + </tbody> + </tgroup> </informaltable> <informaltable> - <tgroup cols="2"> - <thead> - <row> - <entry>マシンの名前</entry> - <entry>説明</entry> - </row> - </thead> - - <tbody> - <row> + <tgroup cols="2"> + <thead> + <row> + <entry>マシンの名前</entry> + <entry>説明</entry> + </row> + </thead> + + <tbody> + <row> <!-- Names taken from "Good Omens" by Neil Gaiman and Terry Pratchett. Many thanks for a brilliant book. --> - <entry>war, death, famine, polution</entry> - <entry>最も重要なサーバ。 IT 職員だけがログオンを許されます。</entry> - </row> - <row> - <!-- gluttony was omitted because it was too fat ;-) --> - <entry>pride, greed, envy, wraith, lust, sloth</entry> - <entry>あまり重要でないサーバ。 IT 学科の全員がログオンを許されます。</entry> - </row> - - <row> - <entry>one, two, three, four, ...</entry> - <entry>通常のワークステーション。 - <emphasis>本当の</emphasis> 職員だけがログオンを許されます。</entry> - </row> - - <row> - <entry>trashcan</entry> - <entry>重要なデータの入っていないひどく古いマシン。 - インターンでもこのマシンの使用を許されます。</entry> - </row> - </tbody> - </tgroup> + <entry>war, death, famine, pollution</entry> + <entry>最も重要なサーバ。IT 職員だけがログオンを許されます。</entry> + </row> + <row> + <!-- gluttony was omitted because it was too fat --> + <entry>pride, greed, envy, wrath, lust, sloth</entry> + <entry>あまり重要でないサーバ。IT 学科の全員がログオンを許されます。</entry> + </row> + + <row> + <entry>one, two, three, four, ...</entry> + <entry>通常のワークステーション。 + <emphasis>本当の</emphasis> 職員だけがログオンを許されます。</entry> + </row> + + <row> + <entry>trashcan</entry> + <entry>重要なデータの入っていないひどく古いマシン。 + インターンでもこのマシンの使用を許されます。</entry> + </row> + </tbody> + </tgroup> </informaltable> <para>もしあなたがこの手の制限を各ユーザを個別にブロックする形で実装するなら、 - あなたはそのシステムにログオンすることが許されていない各ユーザについて - -<replaceable>user</replaceable> という 1 行を、 - 各システムのパスワードに追加しなければならなくなるでしょう。 - もしあなたが 1 エントリでも忘れればトラブルに巻き込まれてしまいます。 + あなたはそのシステムにログオンすることが許されていない各ユーザについて + -<replaceable>user</replaceable> という 1 行を、各システムの + <filename>passwd</filename> に追加しなければならなくなるでしょう。 + もしあなたが 1 エントリでも忘れればトラブルに巻き込まれてしまいます。 最初のセットアップの時にこれを正しく行えるのはありえることかも知れませんが、 - 遂には連日の業務の間に例の行を追加し<emphasis>忘れてしまうでしょう</emphasis>。 - 結局マーフィーは楽観主義者だったのです。</para> + 遂には連日の業務の間に例の行を追加し<emphasis>忘れてしまうでしょう</emphasis>。 + 結局マーフィーは楽観主義者だったのです。</para> <para>この状況をネットグループで扱うといくつかの有利な点があります。 - 各ユーザを別個に扱う必要はなく、 - ユーザを一つ以上のネットグループに割り当て、 - ネットグループの全メンバのログインを許可したり禁止したりすることができます。 - 新しいマシンを追加するときはネットグループへログインの制限を定義するだけ、 + 各ユーザを別個に扱う必要はなく、 + ユーザを一つ以上のネットグループに割り当て、 + ネットグループの全メンバのログインを許可したり禁止したりすることができます。 + 新しいマシンを追加するときはネットグループへログインの制限を定義するだけ、 新しいユーザを追加するときはそのユーザを一つ以上のネットグループへ追加するだけで、 - それぞれ行なうことができます。 - これらの変更は互いに独立なので、 - <quote>ユーザとマシンの組合わせをどうするか</quote> + それぞれ行なうことができます。 + これらの変更は互いに独立なので、 + <quote>ユーザとマシンの組合わせをどうするか</quote> は存在しなくなります。 - あなたの NIS のセットアップが注意深く計画されていれば、 - マシンへのアクセスを認めるにも拒否するにも中心の設定をたった一カ所変更するだけです。</para> + あなたの NIS のセットアップが注意深く計画されていれば、 + マシンへのアクセスを認めるにも拒否するにも中心の設定をたった一カ所変更するだけです。</para> - <para>最初のステップは NIS マップ netgroup の初期化です。 - FreeBSD の ypinit はこのマップをデフォルトで作りませんが、 - その NIS の実装はそれが作られさえすればそれをサポートするものです。 - 空のマップを作るには、 単に</para> + <para>最初のステップは NIS マップネットグループの初期化です。 + FreeBSD の &man.ypinit.8; はこのマップをデフォルトで作りませんが、 + その NIS の実装はそれが作られさえすればそれをサポートするものです。 + 空のマップを作るには、単に</para> <screen>ellington&prompt.root; <userinput>vi /var/yp/netgroup</userinput></screen> <para>とタイプして内容を追加していきます。 - わたしたちの例では、 すくなくとも - IT 職員、 IT 見習い、 一般職員、 インターンの - 4 つのネットグループが必要です。</para> + わたしたちの例では、すくなくとも IT 職員、IT 見習い、一般職員、 + インターンの 4 つのネットグループが必要です。</para> <programlisting>IT_EMP (,alpha,test-domain) (,beta,test-domain) IT_APP (,charlie,test-domain) (,delta,test-domain) USERS (,echo,test-domain) (,foxtrott,test-domain) \ - (,golf,test-domain) + (,golf,test-domain) INTERNS (,able,test-domain) (,baker,test-domain)</programlisting> - <para><literal>IT_EMP</literal>、 <literal>IT_APP</literal> - 等はネットグループの名前です。 - それぞれの括弧で囲まれたグループが一人以上のユーザアカウントをそれに登録しています。 - グループの 3 つのフィールドは</para> + <para><literal>IT_EMP</literal>, <literal>IT_APP</literal> + 等はネットグループの名前です。 + それぞれの括弧で囲まれたグループが一人以上のユーザアカウントをそれに登録しています。 + グループの 3 つのフィールドは</para> <orderedlist> - <listitem> - <para>その記述が有効なホスト(群)の名称。 - ホスト名を特記しなければそのエントリはすべてのホストで有効です。 + <listitem> + <para>その記述が有効なホスト (群) の名称。 + ホスト名を特記しなければそのエントリはすべてのホストで有効です。 もしあなたがホスト名を特記するなら、 - あなたは闇と恐怖と全き混乱の領域となるでしょう。</para> - </listitem> - - <listitem> - <para>このネットグループに所属するアカウントの名称。</para> - </listitem> - - <listitem> - <para>そのアカウントの NIS ドメイン。 - もしあなたが一つ以上の NIS ドメインの不幸な仲間なら、 - あなたは他の NIS - ドメインからあなたのネットグループにアカウントを導入できます。</para> - </listitem> + あなたは闇と恐怖と全き混乱の領域に入り込んでしまうでしょう。</para> + </listitem> + + <listitem> + <para>このネットグループに所属するアカウントの名称。</para> + </listitem> + + <listitem> + <para>そのアカウントの NIS ドメイン。 + もしあなたが一つ以上の NIS ドメインの不幸な仲間なら、 + あなたは他の NIS + ドメインからあなたのネットグループにアカウントを導入できます。</para> + </listitem> </orderedlist> - <para>各フィールドには、 ワイルドカードが使えます。 - 詳細は &man.netgroup.5; をご覧ください。</para> + <para>各フィールドには、ワイルドカードが使えます。 + 詳細は &man.netgroup.5; をご覧ください。</para> <note> - <para>8 文字以上のネットグループ名は、 - 特にあなたの NIS - ドメインで他のオペレーティングシステムを走らせているときは使うべきではありません。 - 名前には大文字小文字の区別があります。 + <indexterm><primary>ネットグループ</primary></indexterm> + <para>8 文字以上のネットグループ名は、特にあなたの NIS + ドメインで他のオペレーティングシステムを走らせているときは使うべきではありません。 + 名前には大文字小文字の区別があります。 そのためネットグループ名に大文字を使う事は、 - ユーザやマシン名とネットグループ名を区別する簡単な方法です。</para> + ユーザやマシン名とネットグループ名を区別する簡単な方法です。</para> - <para>NIS クライアントの中には (FreeBSD 以外で) - 多数のエントリを扱えないものもあります。 - たとえば SunOS の古い版では 15 - 以上の<emphasis>エントリ</emphasis>を含むネットグループはトラブルを起こします。 - この制限は 15 ユーザ以下のサブ・ネットグループをいくつも作り、 - 本当のネットグループはこのサブ・ネットグループからなるようにすることで回避できます。</para> + <para>(FreeBSD 以外の) NIS クライアントの中には + 多数のエントリを扱えないものもあります。 + たとえば &sunos; の古い版では 15 以上の + <emphasis>エントリ</emphasis> + を含むネットグループはトラブルを起こします。 + この制限は 15 ユーザ以下のサブネットグループをいくつも作り、 + 本当のネットグループはこのサブネットグループからなるようにすることで回避できます。</para> - <programlisting>BIGGRP1 (,joe1,domain) (,joe2,domain) (,joe3,domain) [...] + <programlisting>BIGGRP1 (,joe1,domain) (,joe2,domain) (,joe3,domain) [...] BIGGRP2 (,joe16,domain) (,joe17,domain) [...] -BIGGRP3 (,joe32,domain) (,joe33,domain) +BIGGRP3 (,joe31,domain) (,joe32,domain) BIGGROUP BIGGRP1 BIGGRP2 BIGGRP3</programlisting> - <para>単一のネットグループに 225 人以上のユーザをいれたいときは、 - このやり方を繰り返すことができます。</para> + <para>単一のネットグループに 225 人以上のユーザをいれたいときは、 + このやり方を繰り返すことができます。</para> </note> <para>新しい NIS マップの有効化と配布は簡単です。</para> @@ -2428,24 +4258,24 @@ BIGGROUP BIGGRP1 BIGGRP2 BIGGRP3</programlisting> ellington&prompt.root; <userinput>make</userinput></screen> <para>これで新しい 3 つの NIS マップ - <filename>netgroup</filename>、 - <filename>netgroup.byhost</filename> - <filename>netgroup.byuser</filename> ができるはずです。 + <filename>netgroup</filename>, + <filename>netgroup.byhost</filename>, + <filename>netgroup.byuser</filename> ができるはずです。 新しい NIS マップが利用できるか確かめるには - &man.ypcat.1; を使います。</para> + &man.ypcat.1; を使います。</para> <screen>ellington&prompt.user; <userinput>ypcat -k netgroup</userinput> ellington&prompt.user; <userinput>ypcat -k netgroup.byhost</userinput> ellington&prompt.user; <userinput>ypcat -k netgroup.byuser</userinput></screen> <para>最初のコマンドの出力は <filename>/var/yp/netgroup</filename> - の内容に似ているはずです。 - 2 番目のコマンドはホスト別のネットグループを作っていなければ出力されません。 - 3 番目のコマンドはユーザに対するネットグループのリストを得るのに使えます。</para> + の内容に似ているはずです。 + 2 番目のコマンドはホスト別のネットグループを作っていなければ出力されません。 + 3 番目のコマンドはユーザに対するネットグループのリストを得るのに使えます。</para> <para>クライアント側の設定は非常に簡単です。 - サーバ <replaceable>war</replaceable> を設定するには、 - &man.vipw.8; を実行して以下の行</para> + サーバ <replaceable>war</replaceable> を設定するには、 + &man.vipw.8; を実行して以下の行</para> <programlisting>+:::::::::</programlisting> @@ -2455,109 +4285,110 @@ ellington&prompt.user; <userinput>ypcat -k netgroup.byuser</userinput></screen> <para>に入れ替えるだけです。</para> - <para>今、 ネットグループ <replaceable>IT_EMP</replaceable> - で定義されたユーザのデータだけが <replaceable>war</replaceable> - のパスワードデータベースに読み込まれ、 - そのユーザだけがログインを許されています。</para> + <para>今、ネットグループ <replaceable>IT_EMP</replaceable> + で定義されたユーザのデータだけが <replaceable>war</replaceable> + のパスワードデータベースに読み込まれ、 + そのユーザだけがログインを許されています。</para> <para>残念ながらこの制限はシェルの ~ の機能や、 - ユーザ名やユーザの数値 id の変換ルーチンにも影響します。 - 言い換えれば、 - cd ~<replaceable>user</replaceable> はうまく動かず、 - <command>ls -l</command> はユーザ名のかわりに数値の id を表示し - <command>find . -user joe -print</command> は - <quote>No such user</quote> で失敗します。 - これを避けるためには、 - すべてのユーザのエントリを<emphasis>サーバにログインすることを許さずに</emphasis>読み込むことが必要です。</para> + ユーザ名や数値の ユーザ ID の変換ルーチンにも影響します。 + つまり、 + <command>cd ~<replaceable>user</replaceable></command> はうまく動かず、 + <command>ls -l</command> はユーザ名のかわりに数値の ID を表示し + <command>find . -user joe -print</command> は + <quote>No such user</quote> で失敗します。 + これを避けるためには、すべてのユーザのエントリを + <emphasis>サーバにログインすることを許さずに</emphasis> + 読み込まなければなりません。</para> <para>これはもう一行を <filename>/etc/master.passwd</filename> - に追加することで実現できます。 その行は - <literal>+:::::::::/sbin/nologin</literal> を含んでおり、 - <quote>すべてのエントリを読み込むが、 読み込まれたエントリのシェルは - <filename>/sbin/nologin</filename> で置き換えられる</quote> - ということを意味します。 passwd エントリの他のフィールドを + に追加することで実現できます。その行は以下の</para> + + <para><literal>+:::::::::/sbin/nologin</literal> を含んでおり、 + これは + <quote>すべてのエントリを読み込むが、読み込まれたエントリのシェルは + <filename>/sbin/nologin</filename> で置き換えられる</quote> + ということを意味します。passwd エントリの他のフィールドを <filename>/etc/master.passwd</filename> - の既定値から置き換えることも可能です。</para> + の既定値から置き換えることも可能です。</para> <!-- Been there, done that, got the scars to prove it - ue --> <warning> - <para><literal>+:::::::::/sbin/nologin</literal> の行が - <literal>+@IT_EMP:::::::::</literal> - の行より後ろに位置することに注意してください。 - さもないと NIS から読み込まれた全ユーザが /sbin/nologin - をログインシェルとして持つことになります。</para> + <para><literal>+:::::::::/sbin/nologin</literal> の行が + <literal>+@IT_EMP:::::::::</literal> + の行より後ろに位置することに注意してください。 + さもないと NIS から読み込まれた全ユーザが /sbin/nologin + をログインシェルとして持つことになります。</para> </warning> - <para>この変更の後では、 新しい職員が IT 学科に参加しても - NIS マップを一つ書き換えるだけで済みます。 - 同様にして、 あまり重要でないサーバのローカルの - <filename>/etc/master.passwd</filename> - のかつての - <literal>+:::::::::</literal> - 行を以下のように置き換えます。</para> + <para>この変更の後では、新しい職員が IT 学科に参加しても + NIS マップを一つ書き換えるだけで済みます。 + 同様にして、あまり重要でないサーバのローカルの + <filename>/etc/master.passwd</filename> のかつての + <literal>+:::::::::</literal> 行を以下のように置き換えます。</para> <programlisting>+@IT_EMP::::::::: +@IT_APP::::::::: +:::::::::/sbin/nologin</programlisting> - <para>この行は、 一般のワークステーションでは以下のようになります。</para> + <para>この行は、一般のワークステーションでは以下のようになります。</para> <programlisting>+@IT_EMP::::::::: +@USERS::::::::: +:::::::::/sbin/nologin</programlisting> <para>これでしばらく順調に運用していましたが、 - 数週間後、 ポリシに変更がありました。 - IT 学科はインターンを雇い始め、 IT - インターンは一般のワークステーションと余り重要ではないサーバを使うことが許され、 + 数週間後、ポリシに変更がありました。 + IT 学科はインターンを雇い始め、IT + インターンは一般のワークステーションと余り重要ではないサーバを使うことが許され、 IT 見習いはメインサーバへのログインが許されました。 - あなたは新たなネットグループ IT_INTERN を追加して新しい IT - インターンたちをそのグループに登録し、 - すべてのマシンの設定を変えて回ることにしました。 + あなたは新たなネットグループ IT_INTERN を追加して新しい IT + インターンたちをそのグループに登録し、 + すべてのマシンの設定を変えて回ることにしました。 古い諺にこうあります。 - <quote>集中管理における過ちは、 大規模な混乱を導く</quote>。</para> + <quote>集中管理における過ちは、大規模な混乱を導く</quote>。</para> <para>いくつかのネットグループから新たなネットグループを作るという - NIS の機能は、 このような状況に対処するために利用できます。 - その方法の一つは、 役割別のネットグループを作ることです。 - たとえば、 重要なサーバへのログイン制限を定義するために - <replaceable>BIGSRV</replaceable> というネットグループを作り + NIS の機能は、このような状況に対処するために利用できます。 + その方法の一つは、役割別のネットグループを作ることです。 + たとえば、重要なサーバへのログイン制限を定義するために + <replaceable>BIGSRV</replaceable> というネットグループを作り あまり重要ではないサーバへは <replaceable>SMALLSRV</replaceable> - というネットグループを、 そして一般のワークステーション用に - <replaceable>USERBOX</replaceable> という第 3 のネットグループを - 作ることができます。 これらのネットグループの各々は、 - 各マシンにログインすることを許されたネットグループを含みます。 + というネットグループを、そして一般のワークステーション用に + <replaceable>USERBOX</replaceable> という第 3 のネットグループを + 作ることができます。これらのネットグループの各々は、 + 各マシンにログインすることを許されたネットグループを含みます。 あなたの NIS マップネットグループの新しいエントリは、 - 以下のようになるはずです。</para> + 以下のようになるはずです。</para> <programlisting>BIGSRV IT_EMP IT_APP SMALLSRV IT_EMP IT_APP ITINTERN USERBOX IT_EMP ITINTERN USERS</programlisting> <para>このログイン制限の定義法は、 - 同一の制限を持つマシンのグループを定義できるときには便利なものです。 - 残念ながらこのようなケースは例外的なものです。 - ほとんどの場合、 各マシンに基づくログイン制限の定義機能が必要となるでしょう。</para> + 同一の制限を持つマシンのグループを定義できるときには便利なものです。 + 残念ながらこのようなケースは例外的なものです。 + ほとんどの場合、各マシンに基づくログイン制限の定義機能が必要となるでしょう。</para> <para>マシンごとのネットグループの定義は、 - 上述したようなポリシの変更を扱うことができるもうひとつの方法です。 - このシナリオでは、 各マシンの <filename>/etc/master.passwd</filename> は - ``+'' で始まる2つの行を含みます。 - 最初のものはそのマシンへのログインを許されたアカウントを追加するもので、 - 2 番目はその他のアカウントを<filename>/sbin/nologin</filename> + 上述したようなポリシの変更を扱うことができるもうひとつの方法です。 + このシナリオでは、各マシンの <filename>/etc/master.passwd</filename> は + <quote>+</quote> で始まる 2 つの行からなります。 + 最初のものはそのマシンへのログインを許されたアカウントを追加するもので、 + 2 番目はその他のアカウントを <filename>/sbin/nologin</filename> をシェルとして追加するものです。 - マシン名をすべて大文字で記述したものをネットグループの名前として使うのは良いやり方です。 - 言い換えれば、 件の行は次のようになるはずです。</para> + マシン名をすべて大文字で記述したものをネットグループの名前として使うのは良い考えです。 + 言い換えれば、件の行は次のようになるはずです。</para> <programlisting>+@<replaceable>BOXNAME</replaceable>::::::::: +:::::::::/sbin/nologin</programlisting> - <para>一度、 各マシンに対してこの作業を済ませてしまえば、 - 二度とローカルの <filename>/etc/master.passwd</filename> - を編集する必要がなくなります。 - 以降のすべての変更は NIS マップの編集で扱うことができます。 - 以下はこのシナリオに対応するネットグループマップに、 - いくつかの便利な定義を追加した例です。</para> + <para>一度、各マシンに対してこの作業を済ませてしまえば、 + 二度とローカルの <filename>/etc/master.passwd</filename> + を編集する必要がなくなります。 + 以降のすべての変更は NIS マップの編集で扱うことができます。 + 以下はこのシナリオに対応するネットグループマップに、 + いくつかの便利な定義を追加した例です。</para> <programlisting># Define groups of users first IT_EMP (,alpha,test-domain) (,beta,test-domain) @@ -2595,55 +4426,54 @@ ONE SECURITY TWO (,hotel,test-domain) # [...more groups to follow]</programlisting> - <para>もしユーザアカウントを管理するデータベースの類を使っているなら、 - あなたはデータベースのレポートツールからマップの最初の部分を作れるようにしてあるべきです。 - この方法なら、 新しいユーザは自動的にマシンにアクセスできるでしょう。</para> + <para>もしユーザアカウントを管理するのにデータベースの類を使っているなら、 + データベースのレポートツールからマップの最初の部分を作れるようにするべきです。 + そうすれば、新しいユーザは自動的にマシンにアクセスできるでしょう。</para> <para>最後に使用上の注意を: - マシン別のネットグループを使うことが常に賢明というわけではありません。 - あなたが数ダースから数百の同一の環境のマシンを学生の研究室に配置しているのならば、 - NIS マップのサイズを手頃な範囲に押さえるために、 - マシン別のネットグループのかわりに役割別のネットグループを使うべきです。</para> + マシン別のネットグループを使うことが常に賢明というわけではありません。 + あなたが数ダースから数百の同一の環境のマシンを学生の研究室に配置しているのならば、 + NIS マップのサイズを手頃な範囲に押さえるために、 + マシン別のネットグループのかわりに役割別のネットグループを使うべきです。</para> </sect2> <sect2> <title>忘れてはいけないこと</title> - <para>NIS 環境にある今、 今までとは違ったやり方が必要なことが - 2、3 あります。</para> + <para>NIS 環境にある今、 + 今までとは違ったやり方が必要なことがいくつかあります。</para> <itemizedlist> - <listitem> - <para>研究室にユーザを追加するときは、 - それをマスター NIS サーバに<emphasis>だけ</emphasis>追加しなければならず、 - さらに<emphasis>NIS マップを再構築することを忘れてはいけません</emphasis>。 - これを忘れると新しいユーザは NIS マスタ以外のどこにもログインできなくなります。 - たとえば、 新しくユーザ <quote>jsmith</quote> - をラボに登録したいときは以下のようにします。</para> - - <screen>&prompt.root; <userinput>pw useradd jsmith</userinput> + <listitem> + <para>研究室にユーザを追加するときは、それをマスター NIS サーバに + <emphasis>だけ</emphasis> 追加しなければならず、さらに + <emphasis>NIS マップを再構築することを忘れてはいけません</emphasis>。 + これを忘れると新しいユーザは NIS マスタ以外のどこにもログインできなくなります。 + たとえば、新しくユーザ <quote>jsmith</quote> + をラボに登録したいときは以下のようにします:</para> + + <screen>&prompt.root; <userinput>pw useradd jsmith</userinput> &prompt.root; <userinput>cd /var/yp</userinput> &prompt.root; <userinput>make test-domain</userinput></screen> - <para><command>pw useradd jsmith</command> のかわりに - <command>adduser jsmith</command> を使うこともできます。</para> - </listitem> - <listitem> - <para><emphasis>管理用アカウントを NIS マップから削除してください</emphasis>。 - 管理用アカウントやパスワードを、 - それらのアカウントへアクセスされるべきでないユーザが居るかも知れないマシンにまで伝えて回りたいとは思わないでしょう。</para> - </listitem> - <listitem> - <para><emphasis>NIS のマスタとスレーブをセキュアに、 - そして機能停止時間を最短に保ってください</emphasis>。 + <para><command>pw useradd jsmith</command> のかわりに + <command>adduser jsmith</command> を使うこともできます。</para> + </listitem> + <listitem> + <para><emphasis>管理用アカウントを NIS マップから削除してください</emphasis>。 + 管理用アカウントやパスワードを、 + それらのアカウントへアクセスさせてはいけないユーザが居るかも知れないマシンにまで伝えて回りたいとは思わないでしょう。</para> + </listitem> + <listitem> + <para><emphasis>NIS のマスタとスレーブをセキュアに、 + そして機能停止時間を最短に保ってください</emphasis>。 もし誰かがこれらのマシンをクラックしたり、 - あるいは単に電源を落としたりすると、 - 彼らは実質的に多くの人を研究室へログインできなくしてしまえます。</para> + あるいは単に電源を落としたりすると、 + 彼らは実質的に多くの人を研究室へログインできなくしてしまえます。</para> - <para>これはどの集中管理システムにとっても第一の弱点で、 - そして最も重要な弱点でしょう。 - あなたの NIS サーバを守らなければ怒れるユーザと対面することになるでしょう!</para> - </listitem> + <para>これはどの集中管理システムにとってももっとも大きな弱点でしょう。 + あなたの NIS サーバを守らなければ怒れるユーザと対面することになるでしょう!</para> + </listitem> </itemizedlist> </sect2> @@ -2651,276 +4481,3153 @@ TWO (,hotel,test-domain) <title>NIS v1 との互換性</title> <para>FreeBSD の - <application>ypserv</application> は、 - NIS v1 クライアントを部分的にサポートします。 - FreeBSD の NIS 実装は NIS v2 プロトコルのみを使用していますが、 - ほかの実装では、 古いシステムとの下位互換性を持たせるため - v1 プロトコルをサポートしているものもあります。 - そのようなシステムに付いている - <application>ypbind</application> デーモンは、 - 必要がないにもかかわらず NIS v1 - のサーバとの結合を成立させようとします(しかも - v2 サーバからの応答を受信した後でも、 - ブロードキャストをし続けるかも知れません)。 - FreeBSD の ypserv は、 - クライアントからの通常のリクエストはサポートしていますが、 - v1 のマップ転送リクエストはサポートしていないことに注意してください。 - つまり FreeBSD の ypserv を、 - v1 だけをサポートするような古い NIS サーバと組み合わせて - マスターやスレーブサーバとして使うことはできません。 - 幸いなことに、 現在、 そのようなサーバが使われていることは - ほとんどないでしょう。</para> + <application>ypserv</application> は、 + NIS v1 クライアントを部分的にサポートしています。 + FreeBSD の NIS 実装は NIS v2 プロトコルのみを使用していますが、 + ほかの実装では、古いシステムとの下位互換性を持たせるため + v1 プロトコルをサポートしているものもあります。 + そのようなシステムに付いている + <application>ypbind</application> デーモンは、 + 必要がないにもかかわらず NIS v1 + のサーバとの結合を成立させようとします + (しかも v2 サーバからの応答を受信した後でも、 + ブロードキャストをし続けるかも知れません)。 + FreeBSD の ypserv は、 + クライアントからの通常のリクエストはサポートしていますが、 + v1 のマップ転送リクエストはサポートしていないことに注意してください。 + つまり FreeBSD の ypserv を、 + v1 だけをサポートするような古い NIS サーバと組み合わせて + マスターやスレーブサーバとして使うことはできません。 + 幸いなことに、現在、そのようなサーバが使われていることは + ほとんどないでしょう。</para> </sect2> - <sect2> + <sect2 id="network-nis-server-is-client"> <title>NIS クライアントとしても動作している NIS サーバ</title> - <para>複数のサーバが存在し、 サーバ自身が NIS - クライアントでもあるようなドメインで ypserv が実行される場合には、 - 注意が必要です。 - 一般的に良いとされているのは、 - 他のサーバと結合をつくるようにブロードキャストパケットの送信をさせるのではなく、 - サーバをそれ自身に結合させることです。 - もし、 サーバ同士が依存関係を持っていて、 一つのサーバが停止すると、 - 奇妙なサービス不能状態に陥ることがあります。 - その結果、 すべてのクライアントはタイムアウトを起こして - 他のサーバに結合しようと試みますが、 - これにかかる時間はかなり大きく、 - サーバ同士がまた互いに結合してしまったりすると、 - サービス不能状態はさらに継続することになります。</para> + <para>複数のサーバが存在し、サーバ自身が NIS + クライアントでもあるようなドメインで + ypserv が実行される場合には注意が必要です。 + 一般的に良いとされているのは、 + 他のサーバと結合をつくるようにブロードキャストさせるのではなく、 + サーバをそれ自身に結合させることです。 + もし、サーバ同士が依存関係を持っていて、一つのサーバが停止すると、 + 奇妙なサービス不能状態に陥ることがあります。 + その結果、すべてのクライアントはタイムアウトを起こして + 他のサーバに結合しようと試みますが、 + これにかかる時間はかなり大きく、 + サーバ同士がまた互いに結合してしまったりすると、 + サービス不能状態はさらに継続することになります。</para> <para> - <command>ypbind</command> に - <option>-S</option> オプションフラグを指定して実行することで、 - ホストを特定のサーバに結合することが可能です。 - </para> + <command>ypbind</command> に + <option>-S</option> オプションフラグを指定して実行することで、 + ホストを特定のサーバに結合することが可能です。 + NIS サーバを再起動するたびに、これを手動で行いたくないなら、 + 次の行を <filename>/etc/rc.conf</filename> + に追加すればよいでしょう。</para> + + <programlisting>nis_client_enable="YES" # run client stuff as well +nis_client_flags="-S <replaceable>NIS domain</replaceable>,<replaceable>server</replaceable>"</programlisting> + + <para>詳細については &man.ypbind.8; を参照してください。</para> </sect2> <sect2> - <title>libscrypt 対 libdescrypt</title> - + <title>パスワード形式</title> + <indexterm> + <primary>NIS</primary> + <secondary>パスワード形式</secondary> + </indexterm> <para> - NIS を実装しようする人の誰もがぶつかる問題の一つに、 - 暗号ライブラリの互換性があります。 - NIS サーバが DES 暗号ライブラリを使っている場合には、 - 同様に DES を使用しているクライアントしかサポートできません。 - サーバとクライアントがどのライブラリを使用しているかは、 - <filename>/usr/lib</filename> - のシンボリックリンクを見ればわかります。 - あるマシンが DES ライブラリを使うように設定されている場合、 - リンクは以下のようになっています。 </para> - - <screen> -&prompt.user; <userinput>ls -l /usr/lib/*crypt*</userinput> -lrwxrwxrwx 1 root wheel 13 Jul 15 08:55 /usr/lib/libcrypt.a@ -> libdescrypt.a -lrwxrwxrwx 1 root wheel 14 Jul 15 08:55 /usr/lib/libcrypt.so@ -> libdescrypt.so -lrwxrwxrwx 1 root wheel 16 Jul 15 08:55 /usr/lib/libcrypt.so.2@ -> libdescrypt.so.2 -lrwxrwxrwx 1 root wheel 15 Jul 15 08:55 /usr/lib/libcrypt_p.a@ -> libdescrypt_p.a --r--r--r-- 1 root wheel 13018 Nov 8 14:27 /usr/lib/libdescrypt.a -lrwxr-xr-x 1 root wheel 16 Nov 8 14:27 /usr/lib/libdescrypt.so@ -> libdescrypt.so.2 --r--r--r-- 1 root wheel 12965 Nov 8 14:27 /usr/lib/libdescrypt.so.2 --r--r--r-- 1 root wheel 14750 Nov 8 14:27 /usr/lib/libdescrypt_p.a</screen> - - <para>マシンが FreeBSD の標準の MD5 暗号ライブラリを使うように - 設定されている場合には、 以下のようになります。 </para> - - <screen> -&prompt.user; <userinput>ls -l /usr/lib/*crypt*</userinput> -lrwxrwxrwx 1 root wheel 13 Jul 15 08:55 /usr/lib/libcrypt.a@ -> libscrypt.a -lrwxrwxrwx 1 root wheel 14 Jul 15 08:55 /usr/lib/libcrypt.so@ -> libscrypt.so -lrwxrwxrwx 1 root wheel 16 Jul 15 08:55 /usr/lib/libcrypt.so.2@ -> libscrypt.so.2 -lrwxrwxrwx 1 root wheel 15 Jul 15 08:55 /usr/lib/libcrypt_p.a@ -> libscrypt_p.a --r--r--r-- 1 root wheel 6194 Nov 8 14:27 /usr/lib/libscrypt.a -lrwxr-xr-x 1 root wheel 14 Nov 8 14:27 /usr/lib/libscrypt.so@ -> libscrypt.so.2 --r--r--r-- 1 root wheel 7579 Nov 8 14:27 /usr/lib/libscrypt.so.2 --r--r--r-- 1 root wheel 6684 Nov 8 14:27 /usr/lib/libscrypt_p.a</screen> - - <para>NIS クライアントの認証でトラブルが発生した場合には、 - ここから問題となりそうな部分を探すと良いでしょう。 - NIS サーバを異種混在ネットワークに配置したいときは - DES が最大公約数となるでしょうから、 - すべてのシステムで DES を使わなければいけなくなるでしょう。</para> + NIS を実装しようする人の誰もがぶつかる問題の一つに、 + パスワード形式の互換性があります。 + NIS サーバが DES 暗号化パスワード使っている場合には、 + 同様に DES を使用しているクライアントしか対応できません。 + たとえば &solaris; の NIS クライアントがネットワーク内にある場合、 + ほぼ確実に DES 暗号化パスワードを使用しなければならないでしょう。</para> + <para>サーバとクライアントがどのライブラリを使用しているかは、 + <filename>/etc/login.conf</filename> を確認してください。 + ホストが DES 暗号パスワードを使用するように設定されている場合、 + <literal>default</literal> + クラスには以下のようなエントリが含まれます。</para> + + <programlisting>default:\ + :passwd_format=des:\ + :copyright=/etc/COPYRIGHT:\ + [Further entries elided]</programlisting> + + <para><literal>passwd_format</literal> + 特性について他に利用可能な値は + <literal>blf</literal> および <literal>md5</literal> + (それぞれ Blowfish および MD5 暗号化パスワード) です。</para> + + <para><filename>/etc/login.conf</filename> を変更したときは、 + ログイン特性データベースも再構築しなければなりません。 + これは <username>root</username> + 権限で下記のようにコマンドを実行すればできます。</para> + + <screen>&prompt.root; <userinput>cap_mkdb /etc/login.conf</userinput></screen> + + <note><para>すでに <filename>/etc/master.passwd</filename> + 内に記録されているパスワード形式は、 + ログイン特性データベースが再構築された<emphasis>後</emphasis>、 + ユーザが彼らのパスワードをはじめて変更するまで変更されないでしょう。</para></note> + + <para>次に、 + パスワードが選択した形式で暗号化されることを確実にするために、 + さらに <filename>/etc/auth.conf</filename> 内の + <literal>crypt_default</literal> において、 + 選択したパスワード形式に高い優先順位がついていることも確認してください。 + そうするためには、選択した形式をリストの先頭に置いてください。 + たとえば DES 暗号化されたパスワードを使用するときは、 + エントリは次のようになります。</para> + + <programlisting>crypt_default = des blf md5</programlisting> + + <para>&os; 上の各 + NIS サーバおよびクライアントにおいて上記の手順に従えば、 + ネットワーク内でどのパスワード形式が使用されるかが + それらのマシン間で整合されているということを確信できます。 + NIS クライアント上で問題があれば、 + ここから問題となりそうな部分を探すと良いでしょう。 + 覚えておいてください: + 異種混在ネットワークに NIS サーバを配置したいときには、 + DES が最大公約数的な標準となるでしょうから、 + すべてのシステムで DES を使用しなければならないかもしれません。</para> </sect2> </sect1> - <sect1 id="dhcp"> + <sect1 id="network-dhcp"> + <sect1info> + <authorgroup> + <author> + <firstname>Greg</firstname> + <surname>Sutter</surname> + <contrib>原作: </contrib> + </author> + </authorgroup> + </sect1info> <title>DHCP</title> - <para><emphasis>原作: &a.gsutter;, 2000 年 3 月.</emphasis></para> - <sect2> - <title>DHCPとは何でしょう?</title> - - <para> - DHCP (Dynamic Host Configuration Protocol) は、 システムをネットワー - クに接続するだけで、 ネットワークでの通信に必要な情報を入手するこ - とができる仕組みです。 FreeBSD では、 ISC (Internet Software - Consortium) による DHCP の実装を使用しています。 したがって、 ここで - の説明のうち、 実装によって異なる部分は ISC のもの用になっています。 - </para> + <title>DHCP とは何でしょうか?</title> + <indexterm> + <primary>ダイナミックホストコンフィギュレーションプロトコル + (DHCP)</primary> + <see>DHCP</see> + </indexterm> + <indexterm> + <primary>インターネットソフトウェアコンソーシアム (ISC)</primary> + </indexterm> + + <para>DHCP (Dynamic Host Configuration Protocol) は、 + システムをネットワークに接続するだけで、 + ネットワークでの通信に必要な情報を入手することができる仕組みです。 + FreeBSD では ISC (Internet Software Consortium) による + DHCP の実装を使用しています。したがって、 + ここでの説明のうち実装によって異なる部分は ISC のもの用になっています。</para> </sect2> <sect2> <title>この節で説明していること</title> - <para> - ハンドブックのこの節では DHCP システムの、 FreeBSD に組み込まれてい - る部分についてだけ説明しています。 ですから、 サーバについては説明 - していません。 後の節で紹介するリファレンスに加えて、 - DHCP のマニュアルページも有力な参考になることでしょう。</para> + <para>この節は ISC DHCP + システムのクライアント側およびサーバ側の構成要素の両方について説明します。 + クライアント側のプログラムである <command>dhclient</command> は + FreeBSD のベースシステム内に含まれています。そして、サーバ側の要素は + <filename role="package">net/isc-dhcp3</filename> port + から利用可能です。下記の説明の他に、 + &man.dhclient.8;, &man.dhcp-options.5; および &man.dhclient.conf.5; + マニュアルページが役にたつ情報源です。</para> </sect2> <sect2> <title>DHCP の動作</title> + <indexterm><primary>UDP</primary></indexterm> + <para>クライアントとなるマシン上で、 + DHCP のクライアントである <command>dhclient</command> を実行すると、 + まず設定情報の要求をブロードキャストします。デフォルトでは、 + このリクエストには UDP のポート 68 を使用します。 + サーバは UDP のポート 67 で応答し、クライアントの IP アドレスと、 + ネットマスクやルータ、DNS サーバなどの関連する情報を提供します。 + これらの情報のすべては DHCP の<quote>リース</quote>の形で送られ、DHCP + サーバ管理者によって決められたある一定の時間内でのみ有効になります。 + これによって、ネットワークに存在しなくなったホストの + IP アドレスは自動的に回収されることになります。</para> + + <para>DHCP + クライアントはサーバから非常に多くの情報を取得することができます。 + &man.dhcp-options.5; に非常に大きなリストが載っています。</para> + </sect2> - <para> - クライアントとなるマシン上で DHCP のクライアントである dhclient を実 - 行すると、 まず設定情報の要求をブロードキャストします。 デフォルト - では、 このリクエストには UDP のポート 68 を使用します。 サーバは UDP の - ポート 67 で応答し、 クライアントの IP アドレスと、 ネットマスクやルー - タ、 DNS サーバなどの関連する情報を提供します。 これらの情報の - すべては DHCP の「リース」の形で送られ、 DHCP サーバ管理者によって決 - められたある一定の時間内でのみ有効になります。 これによって、 ネッ - トワークに存在しなくなったホストの IP アドレスは自動的に回収される - ことになります。 + <sect2> + <title>FreeBSD への組み込み</title> + + <para>FreeBSD は ISC の DHCP クライアントである + <command>dhclient</command> を完全に組み込んでいます。 + DHCP クライアントはインストーラと基本システムの両方で提供されています。 + ですから DHCP サーバを走らせているネットワーク上ではネットワーク関係の設定についての詳細な知識は必要になりません。 + <command>dhclient</command> は、3.2 以降のすべての + FreeBSD の配布物に含まれています。</para> + <indexterm> + <primary><application>sysinstall</application></primary> + </indexterm> + + <para>DHCP は <application>sysinstall</application> + で対応されており、sysinstall でのネットワークインタフェイス設定の際は、 + <quote>このインタフェイスの設定として DHCP を試してみますか? + (Do you want to try DHCP configuration of this interface?)</quote> + という質問が最初になされます。 + これに同意することで <command>dhclient</command> が実行され、 + それが成功すればネットワークの設定情報は自動的に取得されます。</para> + + <para>システム起動時に DHCP を使ってネットワーク情報を取得するように + するには、次の二つを行なう必要があります。</para> + <indexterm> + <primary>DHCP</primary> + <secondary>必要条件</secondary> + </indexterm> + <itemizedlist> + <listitem> + <para><devicename>bpf</devicename> + デバイスがカーネルに組み込まれていることを確認します。 + これを組み込むには、カーネルコンフィグレーションファイルに + <literal>pseudo-device bpf</literal> + という行を追加し、カーネルを再構築します。 + カーネルの構築に関する詳細は、 + <xref linkend="kernelconfig"/> を参照してください。</para> + + <para><devicename>bpf</devicename> デバイスは、 + FreeBSD にはじめから用意されている + <filename>GENERIC</filename> カーネルに組み込まれていますので、 + 自分で設定を変えたカスタムカーネルを使っているのでなければ、 + DHCP を動作させるためにカーネルを再構築する必要はありません。</para> + + <note> + <para>セキュリティに関心のある方向けに注意しておきます。 + <devicename>bpf</devicename> + デバイスは、パケットスニファ (盗聴プログラム) + を動作させることができる + (ただし <username>root</username> 権限が必要) + デバイスです。 + <devicename>bpf</devicename> は DHCP を動作させるために + <emphasis>かならず</emphasis>必要ですが、 + セキュリティが非常に重要な場面では + DHCP をいつか使うかもしれないというだけで + <devicename>bpf</devicename> + デバイスをカーネルに追加すべきではないでしょう。</para> + </note> + </listitem> + + <listitem> + <para><filename>/etc/rc.conf</filename> を編集して、 + 次の行を追加してください。</para> + + <programlisting>ifconfig_fxp0="DHCP"</programlisting> + + <note> + <para><!-- XXX <xref linkend="config-network-setup"> --> + で説明されているように <literal>fxp0</literal> の部分を、 + 動的に設定したいインタフェースの名前で置き換えることを忘れないようにしてください。</para> + </note> + + <para>もし、使っている <command>dhclient</command> + の場所を変更していたり、<command>dhclient</command> + にフラグを渡したい場合は、同様に下のように書き加えてください。</para> + + <programlisting>dhcp_program="/sbin/dhclient" +dhcp_flags=""</programlisting> + </listitem> + </itemizedlist> + + <indexterm> + <primary>DHCP</primary> + <secondary>サーバ</secondary> + </indexterm> + <para>DHCP サーバである <command>dhcpd</command> は、Ports Collection に + <filename role="package">isc-dhcp2</filename> として収録されています。 + この port はクライアント、サーバ、リレーエージェント、文書から成る + ISC の DHCP 配布物をすべて含んでいます。</para> + </sect2> + + <sect2> + <title>関連ファイル</title> + <indexterm> + <primary>DHCP</primary> + <secondary>設定ファイル</secondary> + </indexterm> + <itemizedlist> + <listitem><para><filename>/etc/dhclient.conf</filename></para> + <para><command>dhclient</command> は設定ファイル + <filename>/etc/dhclient.conf</filename> を必要とします。 + 大抵の場合、このファイルはコメントだけであり、 + デフォルトが通常使いやすい設定になっています。 + この設定ファイルは &man.dhclient.conf.5; + マニュアルページで説明しています。</para> + </listitem> + + <listitem><para><filename>/sbin/dhclient</filename></para> + <para><command>dhclient</command> は静的にリンクされており、 + <filename>/sbin</filename> に置かれています。&man.dhclient.8; + マニュアルページで <command>dhclient</command> + コマンドについてより詳しく説明しています。</para> + </listitem> + + <listitem><para><filename>/sbin/dhclient-script</filename></para> + <para><command>dhclient-script</command> は FreeBSD 特有の、 + DHCP クライアント設定スクリプトです。これについては + &man.dhclient-script.8; マニュアルページで説明されていますが、 + これを編集する必要はほとんど発生しないでしょう。</para> + </listitem> + + <listitem><para><filename>/var/db/dhclient.leases</filename></para> + <para>DHCP クライアントはこのファイルに有効なリースのデータベースをログとして記録します。 + &man.dhclient.leases.5; にもうすこし詳しい解説があります。</para> + </listitem> + </itemizedlist> + </sect2> + + <sect2> + <title>参考になる文献</title> + + <para>DHCP のプロトコルは + <ulink url="http://www.freesoft.org/CIE/RFC/2131/">RFC 2131</ulink> + に完全に記述されています。また + <ulink url="http://www.dhcp.org/">dhcp.org</ulink> + にも有用な情報源が用意されています。</para> + </sect2> + + <sect2 id="network-dhcp-server"> + <title>DHCP サーバのインストールと設定</title> + + <sect3> + <title>この節で説明していること</title> + + <para>この節は DHCP の ISC (Internet Software Consortium) 実装を用いて + FreeBSD システムを + DHCP サーバとして動作させる方法の情報を提供します。</para> + + <para>DHCP のサーバ部分は FreeBSD の一部として提供されません。 + したがって、このサービスを提供するために + <filename role="package">net/isc-dhcp3</filename> + port をインストールする必要があるでしょう。 + Ports Collection を使用する情報についての詳細は + <xref linkend="ports"/> を参照してください。</para> + </sect3> + + <sect3> + <title>DHCP サーバのインストール</title> + <indexterm> + <primary>DHCP</primary> + <secondary>インストール</secondary> + </indexterm> + <para>FreeBSD システムを DHCP サーバとして設定するために、&man.bpf.4; + デバイスがカーネルに組み込まれていることを保証する必要があります。 + そうするためには、カーネルコンフィギュレーションファイルに + <literal>pseudo-device bpf</literal> を追加して、 + カーネルを再構築してください。 + カーネルの構築に関する詳細は <xref linkend="kernelconfig"/> + を参照してください。</para> + + <para><devicename>bpf</devicename> デバイスは、 + FreeBSD にはじめから用意されている <filename>GENERIC</filename> + カーネルの一部なので、DHCP + を動作させるためにカスタムカーネルを作成する必要はありません。</para> + + <note> + <para>セキュリティを特に意識する人は、<devicename>bpf</devicename> + <devicename>bpf</devicename> はパケットスニファ (盗聴プログラム) + が正常に (このようなプログラムはさらに特権アクセスを必要としますが) + 動作することを可能にするデバイスでもあることに注意してください。 + <devicename>bpf</devicename> は DHCP を使用するために必要 + <emphasis>です</emphasis>。 + しかし、セキュリティをとても気にしているなら、 + DHCP をいつか使うかもしれないというだけで + <devicename>bpf</devicename> + デバイスをカーネルに含めるべきではないでしょう。</para> + </note> + + <para>次に行わねばならないのは、 + <filename role="package">net/isc-dhcp3</filename> port + によってインストールされた <filename>dhcpd.conf</filename> + のサンプルを編集することです。 + デフォルトでは、これは + <filename>/usr/local/etc/dhcpd.conf.sample</filename> で、 + 編集する前にこれを + <filename>/usr/local/etc/dhcpd.conf</filename> + にコピーするべきでしょう。</para> + </sect3> + + <sect3> + <title>DHCP サーバの設定</title> + <indexterm> + <primary>DHCP</primary> + <secondary>dhcpd.conf</secondary> + </indexterm> + <para><filename>dhcpd.conf</filename> + はサブネットおよびホストに関する宣言で構成されます。 + 例を使って説明するのが最も簡単でしょう。</para> + + <programlisting>option domain-name "example.com";<co id="domain-name"/> +option domain-name-servers 192.168.4.100;<co id="domain-name-servers"/> +option subnet-mask 255.255.255.0;<co id="subnet-mask"/> + +default-lease-time 3600;<co id="default-lease-time"/> +max-lease-time 86400;<co id="max-lease-time"/> +ddns-update-style none;<co id="ddns-update-style"/> + +subnet 192.168.4.0 netmask 255.255.255.0 { + range 192.168.4.129 192.168.4.254;<co id="range"/> + option routers 192.168.4.1;<co id="routers"/> +} + +host mailhost { + hardware ethernet 02:03:04:05:06:07;<co id="hardware"/> + fixed-address mailhost.example.com;<co id="fixed-address"/> +}</programlisting> + + <calloutlist> + <callout arearefs="domain-name"> + <para>このオプションは、 + デフォルト探索ドメインとしてクライアントに渡されるドメインを指定します。 + これが意味するところの詳細については &man.resolv.conf.5; + を参照してください。</para> + </callout> + + <callout arearefs="domain-name-servers"> + <para>このオプションはクライアントが使用する、 + コンマで区切られた DNS サーバのリストを指定します。</para> + </callout> + + <callout arearefs="subnet-mask"> + <para>クライアントに渡されるネットマスクです。</para> + </callout> + + <callout arearefs="default-lease-time"> + <para>クライアントは特定のリース期限を要求することもできます。 + それ以外の場合は、サーバはこのリース期限値 (秒) + でリースを割り当てるでしょう。</para> + </callout> + + <callout arearefs="max-lease-time"> + <para>これはサーバがリースする時間の最大値です。 + クライアントがこれより長いリースを要求しても、 + <literal>max-lease-time</literal> + 秒だけしか有効にならないでしょう。</para> + </callout> + + <callout arearefs="ddns-update-style"> + <para>このオプションは、リースが受理、またはリリースされたときに + DHCP サーバが DNS を更新しようとするかどうかを指定します。 + ISC 実装では、このオプションは <emphasis>必要</emphasis> です。</para> + </callout> + + <callout arearefs="range"> + <para>これはどの範囲の IP アドレスが、 + クライアントに割り当てるために予約されたプールに使用されるかを示します。 + この範囲に含まれている IP アドレスはクライアントに渡されます。</para> + </callout> + + <callout arearefs="routers"> + <para>クライアントに供給されるデフォルトゲートウェイを宣言します。</para> + </callout> + + <callout arearefs="hardware"> + <para>(リクエストが生じた時に + DHCP サーバがホストを認識できるように) + ホストのハードウェア MAC アドレスを指定します。</para> + </callout> + + <callout arearefs="fixed-address"> + <para>ホストに常に同じ IP アドレスを付与することを指定します。 + DHCP サーバはリース情報を返す前にホスト名の名前解決をするので、 + ここにホスト名を書いても構いません。</para> + </callout> + </calloutlist> + + <para><filename>dhcpd.conf</filename> + を書き終えたら以下のコマンドでサーバを起動できます。</para> + + <screen>&prompt.root; <userinput>/usr/local/etc/rc.d/isc-dhcpd.sh start</userinput></screen> + + <para>今後サーバの設定に変更を加える必要が生じた時には、 + <literal>SIGHUP</literal> シグナルを + <application>dhcpd</application> に送っても、 + 多くのデーモンがそうであるようには、 + 設定ファイルが再読み込み <emphasis>されない</emphasis> + ことに注意してください。 + <literal>SIGTERM</literal> シグナルを送ってプロセスを停止し、 + それから上記のコマンドを用いて再起動させる必要があります。</para> + </sect3> + + <sect3> + <title>ファイル</title> + <indexterm> + <primary>DHCP</primary> + <secondary>設定ファイル</secondary> + </indexterm> + <itemizedlist> + <listitem><para><filename>/usr/local/sbin/dhcpd</filename></para> + <para><application>dhcpd</application> は静的にリンクされ + <filename>/usr/local/sbin</filename> に置かれます。 + <application>dhcpd</application> + に関するそれ以上の情報は port とともにインストールされる + &man.dhcpd.8; マニュアルページにあります。</para> + </listitem> + + <listitem><para><filename>/usr/local/etc/dhcpd.conf</filename></para> + <para><application>dhcpd</application> + はクライアントへのサービス提供をはじめる前に設定ファイル + <filename>/usr/local/etc/dhcpd.conf</filename> + を必要とします。このファイルは、 + サーバの稼働に関する情報に加えて、 + サービスされているクライアントに提供される情報のすべてを含む必要があります。 + この設定ファイルについての詳細は、 + port によってインストールされる &man.dhcpd.conf.5; + マニュアルページを参照してください。</para> + </listitem> + + <listitem><para><filename>/var/db/dhcpd.leases</filename></para> + <para>DHCP サーバは発行したリースのデータベースをこのファイルにログとして保持します。 + port によってインストールされる &man.dhcpd.leases.5; + にはもう少し詳しい説明があります。</para> + </listitem> + + <listitem><para><filename>/usr/local/sbin/dhcrelay</filename></para> + <para><application>dhcrelay</application> は、DHCP + サーバがクライアントからのリクエストを、 + 別のネットワーク上にある DHCP サーバに転送する高度な環境下で使用されます。 + port とともに提供される &man.dhcrelay.8; + マニュアルページにはより詳細な情報が含まれます。</para> + </listitem> + </itemizedlist> + </sect3> + </sect2> + </sect1> + + <sect1 id="network-dns"> + <sect1info> + <authorgroup> + <author> + <firstname>Chern</firstname> + <surname>Lee</surname> + <contrib>寄稿: </contrib> + </author> + </authorgroup> + </sect1info> + <title>DNS</title> + + <sect2> + <title>概観</title> + <indexterm><primary>BIND</primary></indexterm> + + <para>FreeBSD はデフォルトでは + DNS プロトコルの最も一般的な実装である BIND + (Berkeley Internet Name Domain) を使用します。DNS はホスト名を + IP アドレスに、そして IP アドレスをホスト名に関連づけるプロトコルです。 + たとえば <hostid>www.FreeBSD.org</hostid> に対する問い合わせは + The FreeBSD Project の ウェブサーバの IP アドレスを受け取るでしょう。 + その一方で <hostid>ftp.FreeBSD.org</hostid> に対する問い合わせは、 + 対応する FTP マシンの IP アドレスを返すでしょう。 + 同様に、その逆のことも可能です。 + IP アドレスに対する問い合わせを行うことで、 + そのホスト名を解決することができます。 + DNS 検索を実行するために、 + システム上でネームサーバを動作させる必要はありません。</para> + + <indexterm><primary>DNS</primary></indexterm> + <para>DNS は、 + 個々のドメイン情報を格納およびキャッシュした、 + 権威のあるルートサーバおよび他の小規模なネームサーバによる多少複雑なシステムによって、 + インターネット全体にわたって協調して動作します。</para> + + <para>この文書は FreeBSD で安定版として利用されている + BIND 8.x について説明します。 + FreeBSD では BIND 9.x を <filename role="package">net/bind9</filename> + port からインストールできます。</para> + + <para>RFC1034 および RFC1035 は DNS プロトコルを定義しています。</para> + + <para>現在のところ BIND は + <ulink url="http://www.isc.org/">Internet Software Consortium + (www.isc.org)</ulink> によって保守されています。</para> + </sect2> + + <sect2> + <title>用語</title> + + <para>この文書を理解するには + DNS 関連の用語をいくつか理解しなければいけません。</para> + + <indexterm><primary>リゾルバ</primary></indexterm> + <indexterm><primary>逆引き DNS</primary></indexterm> + <indexterm><primary>ルートゾーン</primary></indexterm> + + <informaltable frame="none"> + <tgroup cols="2"> + <thead> + <row> + <entry>用語</entry> + <entry>定義</entry> + </row> + </thead> + + <tbody> + <row> + <entry>正引き DNS</entry> + <entry>ホスト名から IP アドレスへの対応です。</entry> + </row> + + <row> + <entry>オリジン (origine)</entry> + <entry>特定のゾーンファイルによってカバーされるドメインへの参照です。</entry> + </row> + + <row> + <entry><application>named</application>, BIND, ネームサーバ</entry> + <entry>FreeBSD 内の BIND ネームサーバパッケージの一般名称です。</entry> + </row> + + <row> + <entry>リゾルバ (resolver)</entry> + <entry>マシンがゾーン情報についてネームサーバに問い合わせるシステムプロセスです。</entry> + </row> + + <row> + <entry>逆引き DNS</entry> + <entry>正引き DNS の逆です。つまり IP アドレスからホスト名への対応です。</entry> + </row> + + <row> + <entry>ルートゾーン</entry> + <entry>インターネットゾーン階層の起点です。 + すべてのゾーンはルートゾーンの下に属します。 + これはファイルシステムのすべてのファイルがルートディレクトリの下に属することと似ています。</entry> + </row> + + <row> + <entry>ゾーン</entry> + <entry>同じ権威によって管理される個々の DNS ドメイン、 + DNS サブドメイン、あるいは DNS の一部分です。</entry> + </row> + </tbody> + </tgroup> + </informaltable> + + <indexterm> + <primary>ゾーン</primary> + <secondary>例</secondary> + </indexterm> + + <para>ゾーンの例: </para> + <itemizedlist> + <listitem> + <para><hostid>.</hostid> はルートゾーンです。</para> + </listitem> + <listitem> + <para><hostid>org.</hostid> はルートゾーンの下のゾーンです。</para> + </listitem> + <listitem> + <para><hostid>example.org</hostid> は + <hostid>org.</hostid> ゾーンの下のゾーンです。</para> + </listitem> + <listitem> + <para><hostid>foo.example.org.</hostid> はサブドメインで、 + <hostid>example.org.</hostid> の下のゾーンです。</para> + </listitem> + <listitem> + <para> + <hostid>1.2.3.in-addr.arpa</hostid> は 3.2.1.* の + IP 空間に含まれるすべての IP アドレスを参照するゾーンです。 + </para> + </listitem> + </itemizedlist> - <para> - DHCP クライアントはサーバから非常に多くの情報を取得することができます。 - &man.dhcp-options.5; に、 その非常に大きなリストが載っています。</para> + <para>見て分かるように、ホスト名のより詳細な部分はその左側に現れます。 + たとえば <hostid>example.org.</hostid> は + <hostid>org.</hostid> より限定的です。同様に <hostid>org.</hostid> + はルートゾーンより限定的です。 + ホスト名の各部分のレイアウトはファイルシステムに非常に似ています。 + たとえば <filename>/dev</filename> はルートの下であることなどです。</para> </sect2> <sect2> - <title>FreeBSD への組み込み</title> + <title>ネームサーバを実行する理由</title> - <para> - FreeBSD は ISC の DHCP クライアントである - <command>dhclient</command> を完全に組み込んでいます。 DHCP クラ - イアントはインストーラと基本システムの両方で提供されています。 - ですから DHCP サーバを走らせているネットワーク上ではネットワー - ク関係の設定についての詳細な知識は必要になりません。 - <command>dhclient</command> は、 3.2 以降の FreeBSD のすべての配布 - に含まれています。</para> + <para>ネームサーバは通常二つの形式があります: + 権威のあるネームサーバとキャッシュネームサーバです。</para> + + <para>権威のあるネームサーバは以下の場合に必要です。</para> + + <itemizedlist> + <listitem> + <para>問い合わせに対して信頼できる返答をすることで、 + ある人が DNS 情報を世界に向けて発信したいとき。</para> + </listitem> + <listitem> + <para><hostid>example.org</hostid> といったドメインが登録されており、 + その下にあるホスト名に IP アドレスを割り当てる必要があるとき。</para> + </listitem> + <listitem> + <para>IP アドレスブロックが逆引き DNS エントリ (IP からホスト名への) + を必要とするとき。</para> + </listitem> + <listitem> + <para>プライマリサーバがダウンしているかまたはアクセスできない場合に、 + 代わりに問い合わせに対してスレーブと呼ばれるバックアップネームサーバが返答しなければならないとき。</para> + </listitem> + </itemizedlist> + + <para>キャッシュネームサーバは以下の場合に必要です。</para> + + <itemizedlist> + <listitem> + <para>ローカルのネームサーバが、 + 外部のネームサーバに問い合わせするよりも、 + キャッシュしてより速く返答できるとき。</para> + </listitem> + <listitem> + <para>ネットワークトラフィックの総量を減らしたいとき + (DNS のトラフィックはインターネットトラフィック全体の + 5% 以上を占めることが測定されています)</para> + </listitem> + </itemizedlist> + + <para><hostid>www.FreeBSD.org</hostid> に対する問い合わせを発したとき、 + リゾルバは大体の場合上流の ISP のネームサーバに問い合わせをして返答を得ます。 + ローカルのキャッシュ DNS サーバがあれば、 + 問い合わせはキャッシュ DNS サーバによって外部に対して一度だけ発せられます。 + 情報がローカルに蓄えられるので、 + 追加の問い合わせはいずれもローカルネットワークの外側にまで確認しなくてもよくなります。</para> + </sect2> + + <sect2> + <title>動作のしくみ</title> + <para>FreeBSD では BIND デーモンは自明な理由から + <application>named</application> と呼ばれます。</para> + + <informaltable frame="none"> + <tgroup cols="2"> + <thead> + <row> + <entry>ファイル</entry> + <entry>説明</entry> + </row> + </thead> + + <tbody> + <row> + <entry><application>named</application></entry> + <entry>BIND デーモン</entry> + </row> + + <row> + <entry><command>ndc</command></entry> + <entry>ネームデーモンコントロールプログラム</entry> + </row> + + <row> + <entry><filename>/etc/namedb</filename></entry> + <entry>BIND のゾーン情報が置かれるディレクトリ</entry> + </row> + + <row> + <entry><filename>/etc/namedb/named.conf</filename></entry> + <entry>デーモンの設定ファイル</entry> + </row> + </tbody> + </tgroup> + </informaltable> <para> - DHCP は <application>sysinstall</application> でサポートされてお - り、 sysinstall でのネットワークインタフェイス設定の際は、 「こ - のインタフェイスの設定として DHCP を試してみますか?」という質問 - が最初になされます。 これに同意することで dhclient が実行さ - れ、 それが成功すればネットワークの設定情報は自動的に取得されま - す。 </para> + ゾーンファイルは通常 <filename>/etc/namedb</filename> + ディレクトリ内に含まれており、ネームサーバによって処理される + DNS ゾーン情報を含んでいます。</para> + </sect2> + + <sect2> + <title>BIND の起動</title> + <indexterm> + <primary>BIND</primary> + <secondary>起動</secondary> + </indexterm> + <para>BIND はデフォルトでインストールされているので、 + すべてを設定することは比較的単純です。</para> + <para>named デーモンが起動時に開始されることを保証するには、 + <filename>/etc/rc.conf</filename> に以下の変更をいれてください。 + </para> + <programlisting>named_enable="YES"</programlisting> + <para>デーモンを手動で起動するためには (設定をした後で)</para> + <screen>&prompt.root; <userinput>ndc start</userinput></screen> + </sect2> + + <sect2> + <title>設定ファイル</title> + <indexterm> + <primary>BIND</primary> + <secondary>設定ファイル</secondary> + </indexterm> + <sect3> + <title><command>make-localhost</command> の利用</title> + <para>次のコマンドが</para> + <screen>&prompt.root; <userinput>cd /etc/namedb</userinput> +&prompt.root; <userinput>sh make-localhost</userinput></screen> + <para>ローカル逆引き DNS ゾーンファイルを + <filename>/etc/namedb/localhost.rev</filename> + に適切に作成することを確認してください。</para> + </sect3> + + <sect3> + <title><filename>/etc/namedb/named.conf</filename></title> + + <programlisting>// $FreeBSD$ +// +// 詳細については named(8) マニュアルページを参照してください。プライマリサーバ +// を設定するつもりなら、DNS がどのように動作するかの詳細を確実に理解してくださ +// い。単純な間違いであっても、影響をうける相手に対する接続を壊したり、無駄な +// インターネットトラフィックを大量に引き起こし得ます。 + +options { + directory "/etc/namedb"; + +// "forwarders" 節に加えて次の行を有効にすることで、ネームサーバに決して自発的 +// に問い合わせを発せず、常にそのフォワーダにたいして尋ねるように強制すること +// ができます: +// +// forward only; + +// あなたが上流のプロバイダ周辺の DNS サーバを利用できる場合、その IP アドレス +// をここに入力し、下記の行を有効にしてください。こうすれば、そのキャッシュの +// 恩恵にあやかることができ、インターネット全体の DNS トラフィックが減るでしょう。 +/* + forwarders { + 127.0.0.1; + }; +*/</programlisting> + + <para>コメントが言っている通り、上流のキャッシュの恩恵を受けるために + <literal>forwarders</literal> をここで有効にすることができます。 + 通常の状況では、ネームサーバはインターネットの特定のネームサーバを調べて、 + 探している返答を見つけるまで再帰的に問い合わせを行います。 + これが有効になっていれば、まず上流のネームサーバ + (または 与えられたネームサーバ) に問い合わせて、 + そのキャッシュを利用するでしょう。 + 問い合わせをする上流のネームサーバが極度に通信量が多く、 + 高速であった場合、これを有効にする価値があるかもしれません。</para> + + <warning><para>ここに <hostid role="ipaddr">127.0.0.1</hostid> + を指定しても動作 <emphasis>しません</emphasis>。 + 上流のネームサーバの IP アドレスに変更してください。</para> + </warning> + + <programlisting> /* + * あなたと利用したいネームサーバとの間にファイアウォールがある場合、 + * 下記の quiery-source 指令を有効にする必要があるでしょう。 + * 過去の BIND のバージョンは常に 53 番ポートに問い合わせをしますが、 + * BIND 8.1 はデフォルトで非特権ポートを使用します。 + */ + // query-source address * port 53; + + /* + * 砂場内で動作させている場合、ダンプファイルのために異なる場所を指定 + * しなければならないかもしれません。 + */ + // dump-file "s/named_dump.db"; +}; + +// 注意: 下記は将来のリリースで対応されるでしょう。 +/* +host { any; } { + topology { + 127.0.0.0/8; + }; +}; +*/ + +// セカンダリを設定することはより簡単な方法で、そのおおまかな姿が下記で説明さ +// れています。 +// +// ローカルネームサーバを有効にする場合、このサーバが最初に尋ねられるように +// /etc/resolv.conf に 127.0.0.1 を入力することを忘れないでください。さらに、 +// /etc/rc.conf 内で有効にすることも確認してください。 + +zone "." { + type hint; + file "named.root"; +}; + +zone "0.0.127.IN-ADDR.ARPA" { + type master; + file "localhost.rev"; +}; + +zone +"0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.INT" { + type master; + file "localhost.rev"; +}; + +// 注意: 下記の IP アドレスを使用しないでください。これはダミーでありデモや文書 +// だけを目的としたものです。 +// +// セカンダリ設定の例です。少なくともあなたのドメインが属するゾーンに対するセカ +// ンダリになることは便利かもしれません。プライマリの責を負っている IP アドレス +// をネットワーク管理者に尋ねてください。 +// +// 逆引き参照ゾーン (IN-ADDR.ARPA) を含めることを決して忘れないでください! +// (これは ".IN-ADDR.ARPA" を付け加えられたそれぞれの IP アドレスの最初のバイト +// の逆順です。) +// +// プライマリゾーンの設定をはじめる前に DNS および BIND がどのように動作するか +// 完全に理解してください。時々自明でない落し穴があります。それに比べるとセカン +// ダリを設定するのは単純です。 +// +// 注意: 下記の例を鵜呑みにして有効にしないでください。:-) 実際の名前とアドレス +// を代わりに使用してください。 +// +// 注意!!! FreeBSD は bind を砂場のなかで動かします (rc.conf 内の named_flags +// を参照してください)。セカンダリゾーンを含んだディレクトリは、bind によって +// 書き込み可能でなければなりません。次の手順が推奨されます: +// +// mkdir /etc/namedb/s +// chown bind:bind /etc/namedb/s +// chmod 750 /etc/namedb/s</programlisting> + + <para>BIND を砂場 (sandbox) で + (訳注: chroot をもちいて) 動作させるための詳細は + <link linkend="network-named-sandbox">砂場で named を実行する</link> を参照してください。</para> + + <programlisting>/* +zone "example.com" { + type slave; + file "s/example.com.bak"; + masters { + 192.168.1.1; + }; +}; + +zone "0.168.192.in-addr.arpa" { + type slave; + file "s/0.168.192.in-addr.arpa.bak"; + masters { + 192.168.1.1; + }; +}; +*/</programlisting> + <para><filename>named.conf</filename> の中で、 + 上記は転送と逆引きゾーンのためのスレーブエントリの例です。</para> + + <para>新しくサービスするそれぞれのゾーンについて、新規のエントリを + <filename>named.conf</filename> に加えなければいけません。</para> + + <para>たとえば <hostid role="domainname">example.org</hostid> + に対する最もシンプルなゾーンエントリは以下のようになります。</para> + + <programlisting>zone "example.org" { + type master; + file "example.org"; +};</programlisting> + + <para>このゾーンは <option>type</option> + 命令で示されているようにマスタで、ゾーン情報を + <option>file</option> 命令で指示された + <filename>/etc/namedb/example.org</filename> + ファイルに保持しています。</para> + + <programlisting>zone "example.org" { + type slave; + file "example.org"; +};</programlisting> + + <para>スレーブの場合、 + ゾーン情報は特定のゾーンのマスタネームサーバから転送され、 + 指定されたファイルに保存されます。 + マスタサーバが停止するか到達できない場合には、 + スレーブサーバが転送されたゾーン情報を保持していて、 + サービスできるでしょう。</para> + </sect3> + + <sect3> + <title>ゾーンファイル</title> + <para><hostid>example.org</hostid> に対するマスタゾーンファイル + (<filename>/etc/namedb/example.org</filename> に保持されます) + の例は以下のようになります。</para> + + <programlisting>$TTL 3600 + +example.org. IN SOA ns1.example.org. admin.example.org. ( + 5 ; Serial + 10800 ; Refresh + 3600 ; Retry + 604800 ; Expire + 86400 ) ; Minimum TTL + +; DNS Servers +@ IN NS ns1.example.org. +@ IN NS ns2.example.org. + +; Machine Names +localhost IN A 127.0.0.1 +ns1 IN A 3.2.1.2 +ns2 IN A 3.2.1.3 +mail IN A 3.2.1.10 +@ IN A 3.2.1.30 + +; Aliases +www IN CNAME @ + +; MX Record +@ IN MX 10 mail.example.org.</programlisting> + + <para><quote>.</quote> + が最後についているすべてのホスト名は正確なホスト名であり、 + 一方で <quote>.</quote> + で終了しないすべての行はオリジンが参照されることに注意してください。 + たとえば <literal>www</literal> は <literal>www + オリジン</literal> + に展開されます。この架空のゾーンファイルでは、 + オリジンは <hostid>example.org.</hostid> なので + <literal>www</literal> は <hostid>www.example.org.</hostid> + に展開されます。</para> + + <para> + ゾーンファイルの書式は次のとおりです。 + </para> + <programlisting>recordname IN recordtype value</programlisting> + + <indexterm> + <primary>DNS</primary> + <secondary>レコード</secondary> + </indexterm> + <para>DNS レコードに使われる最も一般的なものは以下のとおりです。</para> + + <variablelist> + <varlistentry> + <term>SOA</term> + + <listitem><para>ゾーン権威の起点</para></listitem> + </varlistentry> + + <varlistentry> + <term>NS</term> + + <listitem><para>権威のあるネームサーバ</para></listitem> + </varlistentry> + + <varlistentry> + <term>A</term> + + <listitem><para>ホストのアドレス</para></listitem> + </varlistentry> + + <varlistentry> + <term>CNAME</term> + + <listitem><para>別名としての正規の名称</para></listitem> + </varlistentry> + + <varlistentry> + <term>MX</term> + + <listitem><para>メールエクスチェンジャ</para></listitem> + </varlistentry> + + <varlistentry> + <term>PTR</term> + + <listitem><para>ドメインネームポインタ (逆引き DNS で使用されます)</para></listitem> + </varlistentry> + </variablelist> + + <programlisting> +example.org. IN SOA ns1.example.org. admin.example.org. ( + 5 ; Serial + 10800 ; Refresh after 3 hours + 3600 ; Retry after 1 hour + 604800 ; Expire after 1 week + 86400 ) ; Minimum TTL of 1 day</programlisting> + + <variablelist> + <varlistentry> + <term><hostid>example.org.</hostid></term> - <para>システム起動時に、 DHCP を使ってネットワーク情報を取得するように - するには、 次の 2 つのステップを行なう必要があります。</para> + <listitem><para>このゾーンのオリジンでもあるドメイン名</para></listitem> + </varlistentry> + + <varlistentry> + <term><hostid>ns1.example.org.</hostid></term> + + <listitem><para>このゾーンに対して権威のあるプライマリネームサーバ</para></listitem> + </varlistentry> + + <varlistentry> + <term><literal>admin.example.org.</literal></term> + + <listitem><para>このゾーンの責任者。@ + を置き換えた電子メールアドレスを指定します。 + (<email>admin@example.org</email> は + <literal>admin.example.org</literal> になります)</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><literal>5</literal></term> + + <listitem><para>ファイルのシリアル番号です。 + これはファイルが変更されるたびに増加させる必要があります。 + 現在では多くの管理者は <literal>yyyymmddrr</literal> + という形式をシリアル番号として使用することを好みます。 + 2001041002 は最後に修正されたのが 2001/04/10 で、後ろの 02 + はその日で二回目に修正されたものであるということを意味するでしょう。 + シリアル番号は、 + それが更新されたときにスレーブネームサーバに対してゾーンを通知するので重要です。</para> + </listitem> + </varlistentry> + </variablelist> + + <programlisting> +@ IN NS ns1.example.org.</programlisting> + + <para>これは <varname>NS</varname> エントリです。 + このゾーンに対して権威のある返答を返すネームサーバはすべて、 + このエントリを一つ有していなければなりません。 + ここにある <literal>@</literal> は + <hostid role="domainname">example.org.</hostid> を意味します。 + <literal>@</literal> はオリジンに展開されます。</para> + + <programlisting> +localhost IN A 127.0.0.1 +ns1 IN A 3.2.1.2 +ns2 IN A 3.2.1.3 +mail IN A 3.2.1.10 +@ IN A 3.2.1.30</programlisting> + + <para><varname>A</varname> レコードはマシン名を示します。 + 上記のように <hostid>ns1.example.org</hostid> は + <hostid role="ipaddr">3.2.1.2</hostid> に結びつけられるでしょう。 + ふたたびオリジンを示す <literal>@</literal> + がここに使用されていますが、これは + <hostid>example.org</hostid> が + <hostid role="ipaddr">3.2.1.30</hostid> + に結び付けられることを意味しています。</para> + + <programlisting> +www IN CNAME @</programlisting> + + <para><varname>CNAME</varname> + レコードは通常マシンに別名を与えるときに使用されます。 + 例では <hostid>www</hostid> はオリジン、すなわち + <hostid>example.org</hostid> + (<hostid role="ipaddr">3.2.1.30</hostid>) + のアドレスをふられたマシンへの別名を与えます。 + <varname>CNAME</varname> はホスト名の別名、 + または複数のマシン間で一つのホスト名をラウンドロビン + (訳注: 問い合わせがあるたびに別の IP アドレスを返すことで、 + 一台にアクセスが集中することを防ぐ手法) + するときに用いられます。</para> + + <programlisting> +@ IN MX 10 mail.example.org.</programlisting> + + <para><varname>MX</varname> レコードは、 + ゾーンに対してどのメールサーバがやってきたメールを扱うことに責任を持っているかを示します。 + <hostid role="fqdn">mail.example.org</hostid> + はメールサーバのホスト名で、10 はメールサーバの優先度を示します。</para> + + <para>優先度が 3,2 または + 1 などのメールサーバをいくつも置くことができます。 + <hostid role="domainname">example.org</hostid> + へ送ろうとしているメールサーバははじめに一番優先度の高いメールサーバに接続しようとします。 + そして接続できない場合、二番目に優先度の高いサーバに接続しようとし、 + 以下、メールが適切に配送されるまで同様に繰り返します。</para> + + <para>in-addr.arpa ゾーンファイル (逆引き DNS) に対しても + <varname>A</varname> または <varname>CNAME</varname> の代わりに + <varname>PTR</varname> エントリが用いられることを除けば、 + 同じ書式が使われます。</para> + + <programlisting>$TTL 3600 + +1.2.3.in-addr.arpa. IN SOA ns1.example.org. admin.example.org. ( + 5 ; Serial + 10800 ; Refresh + 3600 ; Retry + 604800 ; Expire + 3600 ) ; Minimum + +@ IN NS ns1.example.org. +@ IN NS ns2.example.org. + +2 IN PTR ns1.example.org. +3 IN PTR ns2.example.org. +10 IN PTR mail.example.org. +30 IN PTR example.org.</programlisting> + <para>このファイルは上記の架空のドメインの + IP アドレスからホスト名への対応を与えます。</para> + </sect3> + </sect2> + + <sect2> + <title>キャッシュネームサーバ</title> + <indexterm> + <primary>BIND</primary> + <secondary>キャッシュネームサーバ</secondary> + </indexterm> + <para>キャッシュネームサーバはどのゾーンに対しても権威をもたないネームサーバです。 + キャッシュネームサーバは単に自分で問い合わせをし、 + 後で使えるように問い合わせの結果を覚えておきます。 + これを設定するには、ゾーンを何も含まずに、 + 通常通りネームサーバを設定してください。</para> + </sect2> + + <sect2 id="network-named-sandbox"> + <title>砂場で <application>named</application> を実行する</title> + <indexterm> + <primary>BIND</primary> + <secondary>砂場での実行</secondary> + </indexterm> + + <indexterm> + <primary><command>chroot</command></primary> + </indexterm> + <para>セキュリティを強めるために &man.named.8; を非特権ユーザで実行し、 + 砂場のディレクトリ内に &man.chroot.8; + して実行したいと思うかもしれません。 + こうすると <application>named</application> + デーモンは砂場の外にはまったく手を出すことができません。 + <application>named</application> が乗っ取られたとしても、 + これによって起こりうる損害が小さくなるでしょう。 + FreeBSD にはデフォルトで、そのための <groupname>bind</groupname> + というユーザとグループがあります。</para> + + <note><para>多くの人々は <application>named</application> + を <command>chroot</command> するように設定する代わりに、 + &man.jail.8; 環境内で <application>named</application> + を実行することを奨めるでしょう。 + この節ではそれは扱いません。</para></note> + + <para><application>named</application> は砂場の外 + (共有ライブラリ、ログソケットなど) にアクセスできないので、 + <application>named</application> + を正しく動作させるためにいくつもの段階を経る必要があります。 + 下記のチェックリストにおいては、砂場のパスは + <filename>/etc/namedb</filename> で、 + このディレクトリの内容には何も手を加えていないと仮定します。 + <username>root</username> 権限で次のステップを実行してください。</para> <itemizedlist> - <listitem> - <para><devicename>bpf</devicename> - デバイスがカーネルに組み込まれていることを確認します。 - これを組み込むには、 カーネルコンフィグレーションファイルに - <literal>pseudo-device bpf</literal> - という行を追加し、 カーネルを再構築します。 - カーネルの構築に関する詳細は、 - <xref linkend="kernelconfig"/> を参照してください。</para> - - <para><devicename>bpf</devicename> デバイスは、 - FreeBSD の出荷時に用意されている - <filename>GENERIC</filename> カーネルに組み込まれていますので、 - 自分で設定を変えたカスタムカーネルを使っているのでなければ、 - DHCP を動作させるためにカーネルを再構築する必要はありません。</para> - - <note> - <para>セキュリティに関心のある方向けに注意しておきます。 - <devicename>bpf</devicename> - デバイスは、 パケットスニファ (盗聴プログラム) - を動作させることができる (ただし root 権限が必要) - デバイスです。 - <devicename>bpf</devicename> は DHCP を動作させるために - <emphasis>かならず</emphasis>必要ですが、 - セキュリティが非常に重要な場面では - DHCP を本当に使う時まで <devicename>bpf</devicename> - デバイスをカーネルに追加すべきではないでしょう。</para> - </note> - </listitem> - - <listitem> - <para><filename>/etc/rc.conf</filename> を編集して、 - 次の行を追加してください。</para> - - <programlisting>ifconfig_fxp0="DHCP"</programlisting> - - <note> - <para><literal>fxp0</literal> の部分を、 動的に設定したいインター - フェースの名前で置き換えることを忘れないようにしてください。 - </para> - </note> - - <para> - もし、 使っている<command>dhclient</command> の場所を変更してい - たり、 <command>dhclient</command> にフラグを渡したい場合は、 同 - 様に下のように書き加えてください。</para> - - <programlisting>dhcp_program="/sbin/dhclient" -dhcp_flags=""</programlisting> - </listitem> + <listitem> + <para><application>named</application> + が存在することを期待しているディレクトリをすべて作成します。</para> + + <screen>&prompt.root; <userinput>cd /etc/namedb</userinput> +&prompt.root; <userinput>mkdir -p bin dev etc var/tmp var/run master slave</userinput> +&prompt.root; <userinput>chown bind:bind slave var/*</userinput><co id="chown-slave"/></screen> + + <calloutlist> + <callout arearefs="chown-slave"> + <para>これらのディレクトリに対して + <application>named</application> + が必要なのは書き込み権限だけなので、それだけを与えます。</para> + </callout> + </calloutlist> + </listitem> + + <listitem> + <para>基本ゾーンファイルと設定ファイルの編集と作成を行います。</para> + <screen>&prompt.root; <userinput>cp /etc/localtime etc</userinput><co id="localtime"/> +&prompt.root; <userinput>mv named.conf etc && ln -sf etc/named.conf</userinput> +&prompt.root; <userinput>mv named.root master</userinput> +<!-- I don't like this next bit --> +&prompt.root; <userinput>sh make-localhost && mv localhost.rev localhost-v6.rev master</userinput> +&prompt.root; <userinput>cat > master/named.localhost +$ORIGIN localhost. +$TTL 6h +@ IN SOA localhost. postmaster.localhost. ( + 1 ; serial + 3600 ; refresh + 1800 ; retry + 604800 ; expiration + 3600 ) ; minimum + IN NS localhost. + IN A 127.0.0.1 +^D</userinput></screen> + + <calloutlist> + <callout arearefs="localtime"> + <para>これは <application>named</application> が &man.syslogd.8; + に正しい時刻でログを書き込むことを可能にします。</para> + </callout> + </calloutlist> + </listitem> + + <listitem> + <para>4.9-RELEASE より前のバージョンの &os; を使用している場合、 + 静的リンクされた <application>named-xfer</application> + を構築し、砂場にコピーしてください。</para> + + <screen>&prompt.root; <userinput>cd /usr/src/lib/libisc</userinput> +&prompt.root; <userinput>make cleandir && make cleandir && make depend && make all</userinput> +&prompt.root; <userinput>cd /usr/src/lib/libbind</userinput> +&prompt.root; <userinput>make cleandir && make cleandir && make depend && make all</userinput> +&prompt.root; <userinput>cd /usr/src/libexec/named-xfer</userinput> +&prompt.root; <userinput>make cleandir && make cleandir && make depend && make NOSHARED=yes all</userinput> +&prompt.root; <userinput>cp named-xfer /etc/namedb/bin && chmod 555 /etc/namedb/bin/named-xfer</userinput><co id="clean-cruft"/></screen> + + <para>静的リンクされた <command>named-xfer</command> + をインストールしたら、 + ソースツリーの中にライブラリまたはプログラムの古くなったコピーを残さないように、 + 掃除する必要があります。</para> + + <screen>&prompt.root; <userinput>cd /usr/src/lib/libisc</userinput> +&prompt.root; <userinput>make cleandir</userinput> +&prompt.root; <userinput>cd /usr/src/lib/libbind</userinput> +&prompt.root; <userinput>make cleandir</userinput> +&prompt.root; <userinput>cd /usr/src/libexec/named-xfer</userinput> +&prompt.root; <userinput>make cleandir</userinput></screen> + + <calloutlist> + <callout arearefs="clean-cruft"> + <para>このステップは時々失敗することが報告されています。 + もし失敗した場合、次のコマンドを実行してください。</para> + + <screen>&prompt.root; <userinput>cd /usr/src && make cleandir && make cleandir</userinput></screen> + + <para>そして <filename>/usr/obj</filename> + ツリーを削除します。</para> + + <screen>&prompt.root; <userinput>rm -fr /usr/obj && mkdir /usr/obj</userinput></screen> + + <para>これはソースツリーからすべての<quote>がらくた</quote>を一掃します。 + もう一度上記の手順を行うと、今度はうまく動作するでしょう。</para> + </callout> + </calloutlist> + + <para>バージョン 4.9-RELEASE 以降の + &os; を使用している場合 <filename>/usr/libexec</filename> + にある <command>named-xfer</command> + のコピーはデフォルトで静的リンクされています。 + 砂場にコピーするために単純に &man.cp.1; が使えます。</para> + </listitem> + + <listitem> + <para><application>named</application> が見ることができ、 + 書き込むことのできる <devicename>dev/null</devicename> + を作成します。</para> + + <screen>&prompt.root; <userinput>cd /etc/namedb/dev && mknod null c 2 2</userinput> +&prompt.root; <userinput>chmod 666 null</userinput></screen> + </listitem> + + <listitem> + <para><filename>/etc/namedb/var/run/ndc</filename> から + <filename>/var/run/ndc</filename> + へのシンボリックリンクを作成します。</para> + + <screen>&prompt.root; <userinput>ln -sf /etc/namedb/var/run/ndc /var/run/ndc</userinput></screen> + + <note> + <para>これは単に &man.ndc.8; を実行するたびに <option>-c</option> + オプションを指定しなくてもよいようにするだけです。 + /var/run の中身は起動時に削除されるため、 + これが有用だと思うなら、このコマンドをルートの crontab に + <option>@reboot</option> + オプションを指定して追加してください。 + 詳細については &man.crontab.5; を参照してください。</para> + </note> + </listitem> + + <listitem> + <para><application>named</application> が書き込める追加の + <devicename>log</devicename> ソケットを作成するように + &man.syslogd.8; を設定します。 + これを行うためには、<filename>/etc/rc.conf</filename> + 内の <varname>syslogd_flags</varname> 変数に + <literal>-l /etc/namedb/dev/log</literal> を加えてください。</para> + </listitem> + + <listitem> + <para>次の行を <filename>/etc/rc.conf</filename> に加えて + <application>named</application> が起動し、 + 自身を砂場内に <command>chroot</command> するように調整します</para> + + <programlisting>named_enable="YES" +named_flags="-u bind -g bind -t /etc/namedb /etc/named.conf"</programlisting> + + <note> + <para>設定ファイル <replaceable>/etc/named.conf</replaceable> + は <emphasis>砂場のディレクトリに対して相対的な</emphasis> + フルパスで表されることに注意してください。 + つまり、上記の行で示されたファイルは実際には + <filename>/etc/namedb/etc/named.conf</filename> です。</para> + </note> + </listitem> </itemizedlist> + <para>次のステップは <application>named</application> + がどのゾーンを読み込むか、 + そしてディスク上のどこにゾーンファイルがあるのかを知るために + <filename>/etc/namedb/etc/named.conf</filename> を編集することです。 + 下記に例をコメントを加えて示します + (ここで特にコメントされていない内容については、 + 砂場の中で動作させない DNS サーバの設定と同じです)。</para> + + <programlisting>options { + directory "/";<co id="directory"/> + named-xfer "/bin/named-xfer";<co id="named-xfer"/> + version ""; // Don't reveal BIND version + query-source address * port 53; +}; +// ndc control socket +controls { + unix "/var/run/ndc" perm 0600 owner 0 group 0; +}; +// Zones follow: +zone "localhost" IN { + type master; + file "master/named.localhost";<co id="master"/> + allow-transfer { localhost; }; + notify no; +}; +zone "0.0.127.in-addr.arpa" IN { + type master; + file "master/localhost.rev"; + allow-transfer { localhost; }; + notify no; +}; +zone "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.int" { + type master; + file "master/localhost-v6.rev"; + allow-transfer { localhost; }; + notify no; +}; +zone "." IN { + type hint; + file "master/named.root"; +}; +zone "private.example.net" in { + type master; + file "master/private.example.net.db"; + allow-transfer { 192.168.10.0/24; }; +}; +zone "10.168.192.in-addr.arpa" in { + type slave; + masters { 192.168.10.2; }; + file "slave/192.168.10.db";<co id="slave"/> +};</programlisting> + + <calloutlist> + <callout arearefs="directory"> + <para><literal>directory</literal> は + <filename>/</filename> を指定します。 + <application>named</application> + が必要とするファイルはすべてこのディレクトリにあります。 + (この指定は <quote>通常の</quote> (訳注: 砂場内で動作させない) + ユーザにとっての <filename>/etc/namedb</filename> + と等価です)。</para> + </callout> + + <callout arearefs="named-xfer"> + <para><command>named-xfer</command> + バイナリへの (<application>named</application> にとっての) + フルパスを指定します。 + <application>named</application> はデフォルトで + <command>named-xfer</command> を <filename>/usr/libexec</filename> + から探すようにコンパイルされているので、これが必要です</para> + </callout> + <callout arearefs="master"> + <para>このゾーンに対するゾーンファイルを + <application>named</application> が見つけられるようにファイル名を + (上記と同様に <literal>directory</literal> からの相対パスで) + 指定します。</para> + </callout> + <callout arearefs="slave"> + <para>このゾーンに対するゾーン情報がマスタサーバからが転送されたあとに、 + <application>named</application> + がゾーンファイルのコピーを書き込むファイル名を + (上記と同様に <literal>directory</literal> からの相対パスで) + 指定します。これが、上記のように設定段階で + <filename>slave</filename> ディレクトリの所有者を + <groupname>bind</groupname> に変更する理由です。</para> + </callout> + </calloutlist> + + <para>上記のステップを完了したら、サーバを再起動するか &man.syslogd.8; + を再起動し、&man.named.8; を起動してください。その際、 + <varname>syslogd_flags</varname> および + <varname>named_flags</varname> + に新たに指定したオプションが有効になっていることを確かめてください。 + これで <application>named</application> + を砂場のなかで動作させることができているはずです!</para> + </sect2> + + <sect2> + <title>セキュリティ</title> + + <para>BIND は DNS の最も一般的な実装ではありますが、 + 常にセキュリティ問題を抱えています。 + 問題になり得る、また悪用可能なセキュリティホールが時々みつかります。 + </para> + + <para>現在のインターネットおよび FreeBSD + のセキュリティ問題について常に最新の情報を得るために + <ulink url="http://www.cert.org/">CERT</ulink> および + <ulink url="../handbook/eresources.html#ERESOURCES-MAIL">freebsd-security-notifications</ulink> + を購読するとよいでしょう。</para> + + <tip><para>問題が生じたとしても、 + 最新のソースからビルドした named を用意しておけば、 + 問題にならないかもしれません。</para></tip> + </sect2> + + <sect2> + <title>さらなる情報源</title> <para> - DHCP サーバである <command>dhcpd</command> は、 ports - collectionに <literal>isc-dhcp2</literal> として収録されていま - す。 この port はクライアント、 サーバ、 リレーエージェントから成 - る ISC の DHCP 配布物をすべて含んでいます。 + BIND/named のマニュアルページ: &man.ndc.8; &man.named.8; &man.named.conf.5; </para> + + <itemizedlist> + <listitem> + <para><ulink + url="http://www.isc.org/products/BIND/">ISC Bind + 公式ページ</ulink></para> + </listitem> + + <listitem> + <para><ulink + url="http://www.nominum.com/getOpenSourceResource.php?id=6"> + BIND FAQ</ulink></para> + </listitem> + + <listitem> + <para><ulink url="http://www.oreilly.com/catalog/dns4/">O'Reilly + DNS and BIND 4th Edition</ulink></para> + </listitem> + + <listitem> + <para><ulink + url="ftp://ftp.isi.edu/in-notes/rfc1034.txt">RFC1034 + - Domain Names - Concepts and Facilities</ulink> + (ドメイン名、その概念と基盤)</para> + </listitem> + + <listitem> + <para><ulink + url="ftp://ftp.isi.edu/in-notes/rfc1035.txt">RFC1035 + - Domain Names - Implementation and Specification</ulink> + (ドメイン名、その実装と仕様)</para> + </listitem> + </itemizedlist> </sect2> + </sect1> + + <sect1 id="network-ntp"> + <sect1info> + <authorgroup> + <author> + <firstname>Tom</firstname> + <surname>Hukins</surname> + <contrib>寄稿: </contrib> + </author> + </authorgroup> + </sect1info> + <title>NTP</title> + + <indexterm><primary>NTP</primary></indexterm> <sect2> - <title>関連ファイル</title> + <title>概説</title> + + <para>時間の経過とともに、コンピュータの時計はずれてしまいがちです。 + 時間が経つと、コンピュータの時計は正確でなくなってゆきます。 + NTP (Network Time Protocol) + は時計が正確であることを保証する方法の一つです。</para> + + <para>インターネットサービスの多くは、 + コンピュータの時計が正確であることに依存しているか、 + あるいは多くを負っています。 + たとえば web サーバ は、 + あるファイルがある時刻以降に修正されていたらそのファイルを送ってほしいという要求を受け取るかもしれません。 + &man.cron.8; のようなサービスは所定の時間にコマンドを実行します。 + 時計が正確でない場合、 + これらのコマンドは期待したとおりには実行されないかもしれません。</para> + + <indexterm> + <primary>NTP</primary> + <secondary>ntpd</secondary> + </indexterm> + <para>FreeBSD は &man.ntpd.8; NTP サーバを搭載しています。これは、 + マシンの時計を合わせるために他の NTP サーバに問い合わせをしたり、 + 他のマシンに対して時刻を報じるために使用できます。</para> + </sect2> + + <sect2> + <title>適切な NTP サーバの選択</title> + + <indexterm> + <primary>NTP</primary> + <secondary>サーバ選択</secondary> + </indexterm> + + <para>時刻を同期するために利用する NTP サーバを、 + 一つ以上見つける必要があります。 + ネットワーク管理者、または ISP はこの目的のために + NTP サーバを設定しているかもしれません — + 本当にそうなのか確かめるためにドキュメントを確認してください。 + あなたの近くの NTP サーバを探せる + <ulink url="http://www.eecis.udel.edu/~mills/ntp/servers.html">公にアクセス可能な + NTP サーバのリスト</ulink> があります。 + どのサーバを選択するとしても、そのサーバの運営ポリシを理解し、 + 要求されているなら利用許可を求めることを忘れないでください。</para> + + <para>使用しているサーバのうちのどれかが到達不能になるか、 + その時計の信頼性が低い場合、無関係の + NTP サーバをいくつか選択するとよいでしょう。 + &man.ntpd.8; は他のサーバから受け取った応答を賢く利用します — + 信頼できないサーバより信頼できるサーバを重視します。</para> + </sect2> + + <sect2> + <title>マシンの設定</title> + + <indexterm> + <primary>NTP</primary> + <secondary>設定</secondary> + </indexterm> + + <sect3> + <title>基本設定</title> + <indexterm><primary>ntpdate</primary></indexterm> + + <para>マシンが起動するときだけ時計を同期させたい場合は + &man.ntpdate.8; が使えます。頻繁に再起動され、 + たまに同期すれば十分なデスクトップマシンには適切かもしれません。 + しかしほとんどのマシンでは &man.ntpd.8; を実行するべきです。</para> + + <para>&man.ntpd.8; を動かしているマシンでも、起動時に + &man.ntpdate.8; を使用するのはよい考えです。 + &man.ntpd.8; プログラムは時計を徐々に変更します。しかし + &man.ntpdate.8; + は正しい時刻と現在設定されているマシンの時刻がどんなに離れていようとも時計を設定します。</para> + + <para>起動時に &man.ntpdate.8; を有効にするためには、 + <literal>ntpdate_enable="YES"</literal> を + <filename>/etc/rc.conf</filename> に追加してください。 + さらに、同期したいすべてのサーバおよび、&man.ntpdate.8; + に渡すあらゆるフラグを <varname>ntpdate_flags</varname> + に指定する必要があるでしょう。</para> + </sect3> + + <sect3> + <title>一般設定</title> + + <indexterm> + <primary>NTP</primary> + <secondary>ntp.conf</secondary> + </indexterm> + + <para>NTP は &man.ntp.conf.5; に記述された書式の + <filename>/etc/ntp.conf</filename> ファイルによって設定されます。 + 簡単な例を以下に示します。</para> + + <programlisting>server ntplocal.example.com prefer +server timeserver.example.org +server ntp2a.example.net + +driftfile /var/db/ntp.drift</programlisting> + + <para><literal>server</literal> オプションは、 + 使用するサーバを一行に一つずつ指定します。サーバが上記の + <hostid role="fqdn">ntplocal.example.com</hostid> のように + <literal>prefer</literal> 引数とともに指定された場合、 + このサーバは他のサーバより優先されます。 + 優先されたサーバからの応答は、 + 他のサーバの応答と著しく異なる場合は破棄されますが、 + そうでなければ他の応答を考慮することなく使用されます。 + <literal>prefer</literal> 引数は、通常、 + 特別な時間モニタハードウェアを備えているような非常に正確であるとされている + NTP サーバに対して使用されます。</para> + + <para><literal>driftfile</literal> + オプションはシステム時計の周波数オフセットを格納するために使用するファイルを指定します。 + &man.ntpd.8; プログラムは、 + 時計の自然変動を自動的に補正するためにこれを用います。 + これにより、一定時間外部の時刻ソースから切り離されたとしても、 + 十分正確な時刻を維持することを可能にします。</para> + + <para><literal>driftfile</literal> オプションは、使用している NTP + サーバから過去に受け取った応答に関する情報を格納するために、 + どのファイルが使用されるか指定します。 + このファイルは NTP に関する内部情報を含んでいます。 + これは他のプロセスによって修正されてはいけません。</para> + </sect3> + + <sect3> + <title>サーバへのアクセス制御</title> + + <para>デフォルトでは NTP + サーバはインターネット上のすべてのホストからアクセスが可能です。 + <filename>/etc/ntp.conf</filename> 内で <literal>restrict</literal> + オプションを指定することによって、 + どのマシンがサーバにアクセスできるかを制御できるようにします。</para> + + <para>NTP サーバにアクセスするマシンのすべてを拒否したいのなら、 + 以下の行を <filename>/etc/ntp.conf</filename> + に追加してください。</para> + + <programlisting>restrict default ignore</programlisting> + + <para>あなたのネットワーク内のマシンにだけサーバに接続して時計を同期することを認めたいが、 + それらからサーバに対して設定を行うのを許さず、 + 同期する端末としても利用されないようにしたいのなら、 + 以下を加えてください。</para> + + <programlisting>restrict 192.168.1.0 mask 255.255.255.0 notrust nomodify notrap</programlisting> + + <para><hostid role="ipaddr">192.168.1.0</hostid> + をあなたのネットワークの IP アドレスに + <hostid role="netmask">255.255.255.0</hostid> + をあなたのネットワークのネットマスクに置き換えてください。</para> + + <para><filename>/etc/ntp.conf</filename> には複数の + <literal>restrict</literal> オプションを置けます。 + 詳細に付いては &man.ntp.conf.5; の + <literal>Access Control Support</literal> + サブセクションを参照してください。</para> + </sect3> + </sect2> + + <sect2> + <title>NTP サーバの実行</title> + + <para>NTP サーバが起動時に実行されることを保証するために、 + <literal>xntpd_enable="YES"</literal> を + <filename>/etc/rc.conf</filename> に加えてください。 + &man.ntpd.8; にフラグを追加したい場合は + <filename>/etc/rc.conf</filename> 内の + <varname>xntpd_flags</varname> パラメータを編集してください。</para> + + <para>マシンを再起動することなくサーバを実行したいときは、 + <filename>/etc/rc.conf</filename> 内の <varname>xntpd_flags</varname> + で追加されたパラメータをすべて指定して + <command>ntpd</command> を実行してください。以下に例を示します。</para> + <screen>&prompt.root; <userinput>ntpd -p /var/run/ntpd.pid</userinput></screen> + + <note> + <para>&os; 5.X では <filename>/etc/rc.conf</filename> + 内のさまざまなオプションの名前が変わりました。 + したがって、上記の + <literal>xntpd</literal> に関するオプションは + <literal>ntpd</literal> に置き換えてください。</para></note> + </sect2> + + <sect2> + <title>一時的なインターネット接続で ntpd を使用する</title> + + <para>&man.ntpd.8; プログラムは正しく機能するために、 + インターネットへの常時接続を必要としません。しかしながら、 + オンデマンドでダイアルアップされるように設定された一時的な接続の場合、 + NTP トラフィックがダイアルを引き起こしたり、 + 接続を維持し続けるようなことを避けるようにした方がよいでしょう。 + ユーザ PPP を使用している場合、以下の例のように + <filename>/etc/ppp/ppp.conf</filename> 内で + <literal>filter</literal> ディレクティブが使用できます。</para> + + <programlisting> set filter dial 0 deny udp src eq 123 + # Prevent NTP traffic from initiating dial out + set filter dial 1 permit 0 0 + set filter alive 0 deny udp src eq 123 + # Prevent incoming NTP traffic from keeping the connection open + set filter alive 1 deny udp dst eq 123 + # Prevent outgoing NTP traffic from keeping the connection open + set filter alive 2 permit 0/0 0/0</programlisting> + + <para>詳細については &man.ppp.8; 内の <literal>PACKET FILTERING</literal> + セクション、および <filename>/usr/share/examples/ppp/</filename> + 内の例を参照してください。</para> + + <note> + <para>小さい番号のポートをブロックするインターネットアクセスプロバイダでは、 + 応答があなたのマシンに到達しないので + NTP がきちんと動作しない場合もあります。</para> + </note> + </sect2> + + <sect2> + <title>さらなる情報源</title> + + <para>NTP サーバに関する文書は HTML 形式で + <filename>/usr/share/doc/ntp/</filename> にあります。</para> + </sect2> + </sect1> + + <sect1 id="network-natd"> + <sect1info> + <authorgroup> + <author> + <firstname>Chern</firstname> + <surname>Lee</surname> + <contrib>寄稿: </contrib> + </author> + </authorgroup> + </sect1info> + <title>ネットワークアドレス変換 (NAT)</title> + + <sect2 id="network-natoverview"> + <title>概要</title> + <indexterm> + <primary><application>natd</application></primary> + </indexterm> + <para>一般に &man.natd.8; として知られている FreeBSD + ネットワークアドレス変換デーモンは、 + raw IP パケットを受信して、 + ソースアドレスをローカルマシンに変更し、 + そのパケットを外向きの IP パケットの流れに再注入するデーモンです。 + &man.natd.8; は、 + データが戻ってきたときに、データの本来の場所を判別し、 + もともと要求した相手へデータを返すことができるようにソース IP + アドレスとポートを変更します。</para> + <indexterm><primary>インターネット接続共有</primary></indexterm> + <indexterm><primary>IP マスカレード</primary></indexterm> + <para>NAT の最も一般的な使用法は、 + 一般的にはインターネット接続共有として知られているものを実行することです。</para> + </sect2> + + <sect2 id="network-natsetup"> + <title>設定</title> + <para>IPv4 の IP 空間が足りなくなりつつあること、および、 + ケーブルや DSL のような高速の加入者回線利用者の増加によって、 + 人々はますますインターネット接続を共有する手段を必要としています。 + 一つの接続および + IP アドレスを通していくつものコンピュータを回線に接続する能力がある + &man.natd.8; が合理的な選択になります。</para> + + <para>もっともよくあるのは、ユーザが 1 つの + IP アドレスでケーブルまたは DSL 回線に接続されたマシンを持っており、 + インターネットへのアクセスを + LAN 経由でいくつかのコンピュータに提供するのに、 + この接続されたコンピュータを使用したいという場合です。</para> + + <para>そのためには、インターネットに接続されている FreeBSD + マシンはゲートウェイとして動作しなければなりません。 + このゲートウェイマシンは 2 つの NIC が必要です + (1 つはインターネットルータへ接続するためで、もう 1 つは + LAN に接続するためです)。 + LAN 上のすべてのマシンはハブまたはスイッチを通して接続されます。</para> + + <mediaobject> + <imageobject> + <imagedata fileref="advanced-networking/natd"/> + </imageobject> + + <textobject> + <literallayout class="monospaced"> _______ __________ ________ + | | | | | | + | Hub |-----| Client B |-----| Router |----- Internet + |_______| |__________| |________| + | + ____|_____ +| | +| Client A | +|__________|</literallayout> + </textobject> + + <textobject> + <phrase>ネットワークレイアウト</phrase> + </textobject> + </mediaobject> + + <para>インターネット接続を共有するために、 + このような設定がよく使用されています。 + <acronym>LAN</acronym> 内のマシンの + 1 台がインターネットに接続しています。 + 残りのマシンはその <quote>ゲートウェイ</quote> + マシンを通してインターネットにアクセスします。</para> + </sect2> + + <sect2 id="network-natdkernconfiguration"> + <title>設定</title> + + <indexterm> + <primary>カーネル</primary> + <secondary>設定</secondary> + </indexterm> + <para>次のオプションがカーネルコンフィギュレーションファイルに必要です。</para> + <programlisting>options IPFIREWALL +options IPDIVERT</programlisting> + + <para>さらに、次のオプションを入れてもよいでしょう。</para> + <programlisting>options IPFIREWALL_DEFAULT_TO_ACCEPT +options IPFIREWALL_VERBOSE</programlisting> + + <para>下記の設定を <filename>/etc/rc.conf</filename> + で行わなければなりません。</para> + + <programlisting>gateway_enable="YES" +firewall_enable="YES" +firewall_type="OPEN" +natd_enable="YES" +natd_interface="<replaceable>fxp0</replaceable>" +natd_flags=""</programlisting> + + <informaltable frame="none"> + <tgroup cols="2"> + <tbody> + <row> + <entry>gateway_enable="YES"</entry> + <entry>マシンがゲートウェイとして動作するように設定します。 + <command>sysctl net.inet.ip.forwarding=1</command> + コマンドを実行しても同じ効果がえられます。</entry> + </row> + <row><entry>firewall_enable="YES"</entry> + <entry><filename>/etc/rc.firewall</filename> + にあるファイアウォールルールを起動時に有効にします。</entry> + </row> + <row><entry>firewall_type="OPEN"</entry> + <entry>これはあらかじめ定義されている、 + すべてのパケットを通すファイアウォールルールセットを指定します。 + 他のタイプについては <filename>/etc/rc.firewall</filename> + を参照してください。</entry> + </row> + <row> + <entry>natd_interface="fxp0"</entry> + <entry>パケットを転送するインタフェースを指定します + (インターネットに接続されたインタフェース)。</entry> + </row> + <row> + <entry>natd_flags=""</entry> + <entry>起動時に &man.natd.8; に渡される追加の引数</entry> + </row> + </tbody> + </tgroup> + </informaltable> + + <para><filename>/etc/rc.conf</filename> + に前述したオプションを定義すると、起動時に + <command>natd -interface fxp0</command> が実行されます。 + これは手動でも実行できます。</para> + + <para>LAN にぶら下がっているマシンおよびインタフェースのそれぞれには + <ulink url="ftp://ftp.isi.edu/in-notes/rfc1918.txt">RFC 1918</ulink> + で定義されているプライベートネットワーク空間の + IP アドレス番号を割り当て、デフォルトゲートウェイアドレスを + <application>natd</application> マシンの内側の + IP アドレスにすべきです。</para> + + <para>たとえば LAN 側のクライアント + <hostid>A</hostid> および <hostid>B</hostid> は + IP アドレス <hostid role="ipaddr">192.168.0.2</hostid> および + <hostid role="ipaddr">192.168.0.3</hostid> を割り当てられており、 + natd マシンの LAN インタフェースは IP アドレス + <hostid role="ipaddr">192.168.0.1</hostid> + を割り当てられています。 + クライアント <hostid>A</hostid> および <hostid>B</hostid> + のデフォルトゲートウェイは <application>natd</application> + マシンの <hostid role="ipaddr">192.168.0.1</hostid> + に設定されなければなりません。 + <application>natd</application> マシンの外部、 + またはインターネットインタフェースは &man.natd.8; + の動作に際して特別の修正を必要としません。</para> + </sect2> + + <sect2 id="network-natdport-redirection"> + <title>ポート転送</title> + + <para>&man.natd.8; の短所は、インターネットから + LAN 内のクライアントにアクセスできないということです。 + LAN 内のクライアントは外部に向けて接続を行うことはできますが、 + 入って来るものを受け取ることができません。これは、LAN + クライアントのどれかでインターネットサービスを動かそうとした場合に、 + 問題になります。これを何とかする単純な方法は + <application>natd</application> マシンから LAN クライアントへ、 + 選択したインターネットポートを転送することです。</para> + + <para>たとえばクライアント <hostid>A</hostid> で実行されている + IRC サーバがあり、 + クライアント <hostid>B</hostid> 上で実行されている + web サーバがあるとします。 + これが正しく動作するには、ポート 6667 (IRC) および 80 (web) + への接続を対応するマシンに転送しなければなりません。</para> + + <para><option>-redirect_port</option> に適切なオプションを加えて + &man.natd.8; に渡さなければなりません。 + 書式は以下のとおりです。</para> + <programlisting> -redirect_port proto targetIP:targetPORT[-targetPORT] + [aliasIP:]aliasPORT[-aliasPORT] + [remoteIP[:remotePORT[-remotePORT]]]</programlisting> + + <para>上記の例では、引数は以下のようにします。</para> + + <programlisting> -redirect_port tcp 192.168.0.2:6667 6667 + -redirect_port tcp 192.168.0.3:80 80</programlisting> + + <para>これで適切な <emphasis>tcp</emphasis> ポートが + LAN クライアントマシンに転送されます。</para> + + <para><option>-redirect_port</option> + 引数は個々のポートを対応させるポート範囲を示すのに使えます。 + たとえば <replaceable>tcp 192.168.0.2:2000-3000 2000-3000</replaceable> + は 2000 番から 3000番ポートに受け取られたすべての接続を、 + クライアント <hostid>A</hostid> 上の + 2000 番から 3000 番に転送します。</para> + + <para>これらのオプションは &man.natd.8; を直接実行するか、 + <filename>/etc/rc.conf</filename> 内の + <literal>natd_flags=""</literal> + オプションに指定して使用できます。</para> + + <para>設定オプションの詳細については + &man.natd.8; をご覧ください。</para> + </sect2> + + <sect2 id="network-natdaddress-redirection"> + <title>アドレス転送</title> + <indexterm><primary>アドレス転送</primary></indexterm> + <para>複数の IP アドレスが利用可能ですが、 + それらが 1 台のマシン上になければならないときには、 + アドレス転送が便利です。 + これを用いれば &man.natd.8; は LAN クライアントのそれぞれに外部 + IP アドレスを割り当てることができます。 + &man.natd.8; は LAN + クライアントから外部へ出て行くパケットを適切な外部の + IP アドレスで書き直し、 + そして特定の IP アドレスに対してやって来るトラフィックのすべてを、 + 指定された LAN クライアントに転送します。 + これは静的 NAT としても知られています。 + たとえば <hostid role="ipaddr">128.1.1.1</hostid>, + <hostid role="ipaddr">128.1.1.2</hostid> および + <hostid role="ipaddr">128.1.1.3</hostid> の IP アドレスが、 + <application>natd</application> + ゲートウェイマシンに属しているとします。 + <hostid role="ipaddr">128.1.1.2</hostid> および + <hostid role="ipaddr">128.1.1.3</hostid> は + LAN クライアントの <hostid>A</hostid> および <hostid>B</hostid> + に転送される一方で、<hostid role="ipaddr">128.1.1.1</hostid> は + <application>natd</application> ゲートウェイマシンの外部 + IP アドレスとして使用することができます。</para> + + <para><option>-redirect_address</option> の書式は以下のとおりです:</para> + + <programlisting>-redirect_address localIP publicIP</programlisting> + + <informaltable frame="none"> + <tgroup cols="2"> + <tbody> + <row> + <entry>localIP</entry> + <entry>LAN クライアントの内部 IP アドレス</entry> + </row> + <row> + <entry>publicIP</entry> + <entry>LAN クライアントに対応する外部 IP アドレス</entry> + </row> + </tbody> + </tgroup> + </informaltable> + + <para>上記の例では引数は以下のようになります。</para> + + <programlisting>-redirect_address 192.168.0.2 128.1.1.2 +-redirect_address 192.168.0.3 128.1.1.3</programlisting> + + <para><option>-redirect_port</option> と同様に、これらの引数は + <filename>/etc/rc.conf</filename> 内の + <literal>natd_flags=""</literal> + オプションで指定できます。アドレス転送では、 + 特定の IP アドレスで受け取られたデータはすべて転送されるので、 + port 転送は必要ありません。</para> + + <para><application>natd</application> マシン上の外部 IP アドレスは、 + アクティブで外部インタフェースにエイリアスされていなければなりません。 + やりかたは &man.rc.conf.5; を参照してください。</para> + </sect2> + </sect1> + + <sect1 id="network-inetd"> + <sect1info> + <authorgroup> + <author> + <firstname>Chern</firstname> + <surname>Lee</surname> + <contrib>寄稿: </contrib> + </author> + </authorgroup> + </sect1info> + + <title><application>inetd</application> <quote>スーパサーバ</quote></title> + + <sect2 id="network-inetd-overview"> + <title>概観</title> + + <para>&man.inetd.8; は複数のデーモンに対する接続を制御するので、 + <quote>インターネットスーパサーバ</quote> と呼ばれます。 + ネットワークサービスを提供するプログラムは、 + 一般的にデーモン呼ばれます。<application>inetd</application> + は他のデーモンを管理するサーバを努めます。 + 接続が <application>inetd</application> によって受け付けられると、 + <application>inetd</application> + は接続がどのデーモンに対するものか判断して、 + そのデーモンを起動し、ソケットを渡します。 + <application>inetd</application> を 1 つ実行することにより、 + それぞれのデーモンをスタンドアロンモードで実行することに比べ、 + 全体としてのシステム負荷を減らします。</para> + + <para>基本的に、<application>inetd</application> + は他のデーモンを起動するために使用されます。しかし、 + <application>chargen</application>, <application>auth</application> + および <application>daytime</application> + のようなささいなプロトコルは直接扱われます。</para> + + <para>この節ではコマンドラインオプションおよび設定ファイル + <filename>/etc/inetd.conf</filename> による + <application>inetd</application> の設定の基本を説明します。</para> + </sect2> + + <sect2 id="network-inetd-settings"> + <title>設定</title> + + <para><application>inetd</application> は + <filename>/etc/rc.conf</filename> の仕組によって初期化されます。 + デフォルトでは <literal>inetd_enable</literal> オプションは + <quote>NO</quote> に設定されています。 + しかし多くの場合、<application>sysinstall</application> + でセキュリティプロファイルを + medium に設定することにより、有効化されます。 + <programlisting>inetd_enable="YES"</programlisting> または + <programlisting>inetd_enable="NO"</programlisting> を + <filename>/etc/rc.conf</filename> に置くことで、起動時に + <application>inetd</application> を有効または無効にできます。</para> + + <para>さらに <literal>inetd_flags</literal> オプションによって、 + いろいろなコマンドラインオプションを + <application>inetd</application> に渡すことができます。</para> + </sect2> + + <sect2 id="network-inetd-cmdline"> + <title>コマンドラインオプション</title> + + <para><application>inetd</application> 書式</para> + + <para><option> inetd [-d] [-l] [-w] [-W] [-c maximum] [-C rate] [-a address | hostname] + [-p filename] [-R rate] [configuration file]</option></para> + + <variablelist> + <varlistentry> + <term>-d</term> + + <listitem> + <para>デバッグモードにします。</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>-l</term> + + <listitem> + <para>成功した接続のログをとります。</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>-w</term> + + <listitem> + <para>外部サービスに対して TCP Wrapper を有効にします + (デフォルト)。</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>-W</term> + + <listitem> + <para><application>inetd</application> + 組み込みの内部サービスに対して TCP Wrapper を有効にします + (デフォルト)。</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>-c maximum</term> + + <listitem> + <para>サービス毎に同時に起動可能な最大値のデフォルトを指定します。 + デフォルトでは無制限です。サービスごとに指定する + <option>max-child</option> + パラメータで上書きできます。</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>-C rate</term> + + <listitem> + <para>1 分間にひとつの IP アドレスから起動されるサービスの、 + 最大値のデフォルトを指定します。デフォルトは無制限です。 + サービスごとに指定する + <option>max-connections-per-ip-per-minute</option> + パラメータで上書きできます。</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>-R rate</term> + + <listitem> + <para>あるサービスを 1 分間に起動できる最大の数を指定します。 + デフォルトは 256 です。rate に 0 を指定すると、 + 起動可能な数は無制限になります。</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>-a</term> + + <listitem> + <para>バインドする IP アドレスを一つ指定します。 + 代わりにホスト名も指定できます。この場合、ホスト名に対応する + IPv4 または IPv6 アドレスが使用されます。通常 + <application>inetd</application> が &man.jail.8; + 内で起動される時点で、ホスト名が指定されます。この場合、 + ホスト名は &man.jail.8; 環境に対応するものです。</para> + + <para>ホスト名指定が使用され、 + IPv4 および IPv6 両方にバインドしたい場合、 + <filename>/etc/inetd.conf</filename> の各サービスに対して、 + 各バインドに対する適切なプロトコルのエントリが必要です。 + たとえば TCP ベースのサービスは、 + ひとつはプロトコルに <quote>tcp4</quote> を使用し、 + もう一つは <quote>tcp6</quote> を使用する、 + 2 つのエントリが必要です。</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>-p</term> + + <listitem> + <para>デフォルトとは異なる + PID を保持するファイルを指定します。</para> + </listitem> + </varlistentry> + </variablelist> + + <para><filename>/etc/rc.conf</filename> 内の + <literal>inetd_flags</literal> オプションを用いて、これらのオプションを + <application>inetd</application> に渡すことができます。デフォルトでは + <literal>inetd_flags</literal> は <quote>-wW</quote> に設定されており、 + これは <application>inetd</application> + の内部および外部サービスに対して TCP wrapper を有効にします。 + 初心者ユーザはこれらのパラメータを変更する必要は通常ありませんし、 + <filename>/etc/rc.conf</filename> に入力する必要もありません。</para> + + <note> + <para>外部サービスは、接続を受け取ったときに起動される + <application>inetd</application> の外部にあるデーモンで、 + それに対して、内部サービスは <application>inetd</application> + 自身が提供する内部のデーモンです。</para> + </note> + + </sect2> + + <sect2 id="network-inetd-conf"> + <title><filename>inetd.conf</filename></title> + + <para><application>inetd</application> の設定は + <filename>/etc/inetd.conf</filename> + ファイルによって制御されます。</para> + + <para><filename>/etc/inetd.conf</filename> が変更されたときは、 + 以下のように <application>inetd</application> プロセスに + HangUP シグナルを送ることにより、<application>inetd</application> + に設定ファイルを再読み込みさせられます。</para> + + <example id="network-inetd-hangup"> + <title><application>inetd</application> への HangUP シグナル送付</title> + + <screen>&prompt.root; <userinput>kill -HUP `cat /var/run/inetd.pid`</userinput></screen> + </example> + + <para>設定ファイルのそれぞれの行は、 + 個々のデーモンについての指示になります。 + ファイル内のコメントは <quote>#</quote> が先頭につきます。 + <filename>/etc/inetd.conf</filename> の書式は以下のとおりです。</para> + + <programlisting>service-name +socket-type +protocol +{wait|nowait}[/max-child[/max-connections-per-ip-per-minute]] +user[:group][/login-class] +server-program +server-program-arguments</programlisting> + + <para>IPv4 を利用する <application>ftpd</application> + デーモンのエントリの例です。</para> + + <programlisting>ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l</programlisting> + + <variablelist> + <varlistentry> + <term>service-name</term> + + <listitem> + <para>これは特定のデーモンのサービス名です。 + これは <filename>/etc/services</filename> + 内のサービスリストに対応していなければなりません。 + これは <application>inetd</application> + がどのポートで受け付けなければならないかを決定します。 + 新しいサービスが作成された場合、まずはじめに + <filename>/etc/services</filename> + 内に記載しなければなりません。</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>socket-type</term> + + <listitem> + <para><literal>stream</literal>, + <literal>dgram</literal>, <literal>raw</literal> または + <literal>seqpacket</literal> のどれかを指定します。 + <literal>stream</literal> + はコネクションに基づいた TCP デーモンに使用しなければならず、 + 一方で <literal>dgram</literal> は + UDP 転送プロトコルを利用したデーモンに対して使用されます。</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>protocol</term> + + <listitem> + <para>次のうちのどれか 1 つを指定します。</para> + + <informaltable> + <tgroup cols="2"> + <thead> + <row> + <entry>プロトコル</entry> + <entry>説明</entry> + </row> + </thead> + <tbody> + <row> + <entry>tcp, tcp4</entry> + <entry>TCP IPv4</entry> + </row> + <row> + <entry>udp, udp4</entry> + <entry>UDP IPv4</entry> + </row> + <row> + <entry>tcp6</entry> + <entry>TCP IPv6</entry> + </row> + <row> + <entry>udp6</entry> + <entry>UDP IPv6</entry> + </row> + <row> + <entry>tcp46</entry> + <entry>TCP IPv4 および v6 の両方</entry> + </row> + <row> + <entry>udp46</entry> + <entry>UDP IPv4 および v6 の両方</entry> + </row> + </tbody> + </tgroup> + </informaltable> + </listitem> + </varlistentry> + + <varlistentry> + <term>{wait|nowait}[/max-child[/max-connections-per-ip-per-minute]]</term> + + <listitem> + <para><option>wait|nowait</option> は + <application>inetd</application> から起動したデーモンが、 + 自分のソケットを管理できるかどうかを示します。 + 通常マルチスレッド化されている stream ソケットデーモンは + <option>nowait</option> を使用するべきである一方、 + <option>dgram</option> ソケットタイプは + wait オプションを使用しなければなりません。 + <option>nowait</option> + は新しいソケット毎に子のデーモンを起動する一方で、 + <option>wait</option> + は通常複数のソケットを 1 つのデーモンに渡します。</para> + + <para><application>inetd</application> + が起動できる子のデーモンの最大数は + <option>max-child</option> オプションで設定できます。 + 特定のデーモンに対して、起動する数が + 10 までという制限が必要な場合、 + <option>nowait</option> の後に <literal>/10</literal> + を置きます。</para> + + <para><option>max-child</option> に加えて、他にある + 1 つの場所から特定のデーモンへの最大接続数を制限するオプションが利用できます。 + <option>max-connections-per-ip-per-minute</option> + がそれです。ここに 10 を指定すると、特定の + IP アドレスからの特定のサービスへの接続を + 1 分間につき 10 回に制限します。 + これは故意または故意でない資源の浪費および、 + マシンへのサービス不能 (DoS) 攻撃を防ぐのに有用です。</para> + + <para><option>wait</option> または + <option>nowait</option> はこの欄に必ず必要です。 + <option>max-child</option> および + <option>max-connections-per-ip-per-minute</option> + は任意です。</para> + + <para><option>max-child</option> または + <option>max-connections-per-ip-per-minute</option> + 制限をかけない + stream タイプのマルチスレッドデーモンの設定は + <literal>nowait</literal> になります。</para> + + <para>作成できる子プロセスの上限が 10 である同じデーモンの設定は + <literal>nowait/10</literal> になります。</para> + + <para>さらに、 + 1 分間に IP アドレスあたりの接続制限が 20、 + 子プロセスの上限が 10 である同じデーモンの設定は + <literal>nowait/10/20</literal> になります。</para> + + <para>以下のように、これらのオプションはすべて + <application>fingerd</application> + デーモンのデフォルト設定に使われています。</para> + + <programlisting>finger stream tcp nowait/3/10 nobody /usr/libexec/fingerd fingerd -s</programlisting> + </listitem> + </varlistentry> + + <varlistentry> + <term>user</term> + + <listitem> + <para>user はあるデーモンが実行するときのユーザ名を指定します。 + 一般的にデーモンは <username>root</username> + ユーザとして実行します。セキュリティを考慮して、 + いくつかのサーバは <username>daemon</username> ユーザ、 + または最低の権限が与えられている <username>nobody</username> + ユーザとして実行することも多く見られます。</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>server-program</term> + + <listitem> + <para>接続を受け取ったときに実行するデーモンのフルパスです。 + デーモンが <application>inetd</application> + によって内部的に提供されるサービスの場合 + <option>internal</option> を使用します。</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>server-program-arguments</term> + + <listitem> + <para>ここには、起動するときにデーモンに渡される、 + argv[0] から始まる引数を指定して、 + <option>server-program</option> と協調して動作します。 + <application>mydaemon -d</application> がコマンドラインの場合、 + <option>server program arguments</option> の値に + <literal>mydaemon -d</literal> を指定します。 + また、デーモンが内部サービスの場合、ここに + <option>internal</option> を指定します。</para> + </listitem> + </varlistentry> + </variablelist> + </sect2> + + <sect2 id="network-inetd-security"> + <title>セキュリティ</title> + + <para>インストールの時に選択したセキュリティプロファイルによっては、 + 多くの <application>inetd</application> + のデーモンがデフォルトで有効になっているかもしれません。 + あるデーモンが特に必要でない場合には、それを無効にしてください! + 問題となっているデーモンが記述されている行の先頭に + <quote>#</quote> をおいて <link + linkend="network-inetd-hangup">inetd + にハングアップシグナル</link>を送ってください。 + <application>fingerd</application> のようないくつかのデーモンは、 + 動かそうとすべきではないかもしれません。なぜなら、 + それらは攻撃者に対してあまりにも多くの情報を与えるからです。</para> + + <para>セキュリティをあまり考慮せず、 + 接続試行に対してタイムアウトまでの時間が長いか、 + タイムアウトしないデーモンもあります。 + これは、特定のデーモンに攻撃者がゆっくり接続要求を送ることによって、 + 利用可能なリソースを飽和させることを可能にします。ある種のデーモンに + <option>ip-per-minute</option> および <option>max-child</option> + 制限を設けることはよい考えかもしれません。</para> + + <para>TCP wrapper はデフォルトで有効です。 + <application>inetd</application> + から起動されるさまざまなデーモンに対して + TCP 制限を設けることの詳細については + &man.hosts.access.5; マニュアルページを参照してください。</para> + </sect2> + + <sect2 id="network-inetd-misc"> + <title>その他</title> + + <para><application>daytime</application>, + <application>time</application>, + <application>echo</application>, + <application>discard</application>, + <application>chargen</application> および + <application>auth</application> はすべて + <application>inetd</application> + が内部的に提供するサービスです。</para> + + <para><application>auth</application> サービスは identity + (ident, identd) ネットワークサービスを提供し、 + ある程度設定可能です。</para> + + <para>詳細については &man.inetd.8; マニュアルを参照してください。</para> + </sect2> + </sect1> + + <sect1 id="network-plip"> + <title>パラレルライン IP (PLIP)</title> + + <indexterm><primary>PLIP</primary></indexterm> + <indexterm><primary>パラレルライン IP</primary></indexterm> + + <para>PLIP はパラレルポート間で TCP/IP 通信を可能にします。 + これはネットワークカードの無いマシンやノートパソコンにインストールするときに役に立ちます。 + この節では以下について説明します。</para> + + <itemizedlist> + <listitem> + <para>パラレル (ラップリンク または パラレルクロス) + ケーブルの作成。</para> + </listitem> + + <listitem> + <para>2 台のコンピュータの PLIP による接続。</para> + </listitem> + </itemizedlist> + + <sect2 id="network-create-parallel-cable"> + <title>パラレル (クロス) ケーブルの作成</title> + + <para>コンピュータ用品店のほとんどでパラレル (クロス) + ケーブルを購入することができます。 + 購入することができないか、 + 単にケーブルがどのような構造であるか知りたい場合は、 + 次の表に通常のパラレルプリンタケーブルをもとに作成する方法が示されています。</para> + + <table> + <title>ネットワーク向けのパラレル (クロス) ケーブル結線</title> + + <tgroup cols="5"> + <thead> + <row> + <entry>A-名称</entry> + + <entry>A-端</entry> + + <entry>B-端</entry> + + <entry>説明</entry> + + <entry>Post/Bit</entry> + </row> + </thead> + + <tbody> + <row> + <entry><literallayout>DATA0 +-ERROR</literallayout></entry> + + <entry><literallayout>2 +15</literallayout></entry> + + <entry><literallayout>15 +2</literallayout></entry> + + <entry>Data</entry> + + <entry><literallayout>0/0x01 +1/0x08</literallayout></entry> + </row> + + <row> + <entry><literallayout>DATA1 ++SLCT</literallayout></entry> + + <entry><literallayout>3 +13</literallayout></entry> + + <entry><literallayout>13 +3</literallayout></entry> + + <entry>Data</entry> + + <entry><literallayout>0/0x02 +1/0x10</literallayout></entry> + </row> + + <row> + <entry><literallayout>DATA2 ++PE</literallayout></entry> + + <entry><literallayout>4 +12</literallayout></entry> + + <entry><literallayout>12 +4</literallayout></entry> + + <entry>Data</entry> + + <entry><literallayout>0/0x04 +1/0x20</literallayout></entry> + </row> + + <row> + <entry><literallayout>DATA3 +-ACK</literallayout></entry> + + <entry><literallayout>5 +10</literallayout></entry> + + <entry><literallayout>10 +5</literallayout></entry> + + <entry>Strobe</entry> + + <entry><literallayout>0/0x08 +1/0x40</literallayout></entry> + </row> + + <row> + <entry><literallayout>DATA4 +BUSY</literallayout></entry> + + <entry><literallayout>6 +11</literallayout></entry> + + <entry><literallayout>11 +6</literallayout></entry> + + <entry>Data</entry> + + <entry><literallayout>0/0x10 +1/0x80</literallayout></entry> + </row> + + <row> + <entry>GND</entry> + + <entry>18-25</entry> + + <entry>18-25</entry> + + <entry>GND</entry> + + <entry>-</entry> + </row> + </tbody> + </tgroup> + </table> + </sect2> + + <sect2 id="network-plip-setup"> + <title>PLIP の設定</title> + + <para>はじめに、ラップリンクケーブルを入手しなければなりません。 + 次に、両方のコンピュータのカーネルが &man.lpt.4; + ドライバ対応であることを確認してください。</para> + + <screen>&prompt.root; <userinput>grep lp /var/run/dmesg.boot</userinput> +lpt0: <Printer> on ppbus0 +lpt0: Interrupt-driven port</screen> + + <para>パラレルポートは割り込み駆動ポートでなければなりません。 + &os; 4.X では、 + 以下のような行がカーネルコンフィギュレーションファイル内になければならないでしょう。</para> + + <programlisting>device ppc0 at isa? irq 7</programlisting> + + <para>&os; 5.X では <filename>/boot/device.hints</filename> + ファイルに以下の行がなければならないでしょう。</para> + + <programlisting>hint.ppc.0.at="isa" +hint.ppc.0.irq="7"</programlisting> + + <para>それからカーネルコンフィギュレーションファイルに + <literal>device plip</literal> という行があるか、または + <filename>plip.ko</filename> + カーネルモジュールが読み込まれていることを確認してください。 + どちらの場合でも &man.ifconfig.8 コマンドを直接実行したときに、 + パラレルネットワークインタフェースが現れるはずです。 + &os; 4.X ではこのようになります。</para> + + <screen>&prompt.root; <userinput>ifconfig lp0</userinput> +lp0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> mtu 1500</screen> + + <para>&os; 5.X ではこのようになります。</para> + + <screen>&prompt.root; <userinput>ifconfig plip0</userinput> +plip0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> mtu 1500</screen> + + <note><para>パラレルインタフェースに対して用いられるデバイス名は + &os; 4.X + (<devicename>lp<replaceable>X</replaceable></devicename>) と + &os; 5.X + (<devicename>plip<replaceable>X</replaceable></devicename>) + 間で異なります。</para></note> + + <para>両方のコンピュータのパラレルインタフェースにラップリンクケーブルを接続します。</para> + + <para>両方のネットワークインタフェースパラメータを + <username>root</username> で設定します。 + たとえば、&os; 4.X を動作させている <hostid>host1</hostid> と + &os; 5.X を動作させている <hostid>host2</hostid> + の両ホストを接続したい場合は次のようにします。</para> + + <programlisting> host1 <-----> host2 +IP Address 10.0.0.1 10.0.0.2</programlisting> + + <para>次のコマンドで <hostid>host1</hostid> + 上のインタフェースを設定します。</para> + + <screen>&prompt.root; <userinput>ifconfig lp0 10.0.0.1 10.0.0.2</userinput></screen> + + <para>次のコマンドで <hostid>host2</hostid> + 上のインタフェースを設定します。</para> + + <screen>&prompt.root; <userinput>ifconfig plip0 10.0.0.2 10.0.0.1</userinput></screen> + + <para>さて、これで接続が確立したはずです。詳細については &man.lp.4; + および &man.lpt.4; マニュアルページをご覧ください。</para> + + <para>さらに<filename>/etc/hosts</filename> + に両ホストを加えるとよいでしょう。</para> + + <programlisting>127.0.0.1 localhost.my.domain localhost +10.0.0.1 host1.my.domain host1 +10.0.0.2 host2.my.domain</programlisting> + + <para>接続がうまくいっているか確かめるために、 + 両方のホスト上で互いを ping してください。 + たとえば <hostid>host1</hostid> で以下を実行します。</para> + + <screen>&prompt.root; <userinput>ifconfig lp0</userinput> +lp0: flags=8851<UP,POINTOPOINT,RUNNING,SIMPLEX,MULTICAST> mtu 1500 + inet 10.0.0.1 --> 10.0.0.2 netmask 0xff000000 +&prompt.root; <userinput>netstat -r</userinput> +Routing tables + +Internet: +Destination Gateway Flags Refs Use Netif Expire +host2 host1 UH 0 0 lp0 +&prompt.root; <userinput>ping -c 4 host2</userinput> +PING host2 (10.0.0.2): 56 data bytes +64 bytes from 10.0.0.2: icmp_seq=0 ttl=255 time=2.774 ms +64 bytes from 10.0.0.2: icmp_seq=1 ttl=255 time=2.530 ms +64 bytes from 10.0.0.2: icmp_seq=2 ttl=255 time=2.556 ms +64 bytes from 10.0.0.2: icmp_seq=3 ttl=255 time=2.714 ms + +--- host2 ping statistics --- +4 packets transmitted, 4 packets received, 0% packet loss +round-trip min/avg/max/stddev = 2.530/2.643/2.774/0.103 ms</screen> + </sect2> + </sect1> + + <sect1 id="network-ipv6"> + <sect1info> + <authorgroup> + <author> + <firstname>Aaron</firstname> + <surname>Kaplan</surname> + <contrib>原作: </contrib> + </author> + </authorgroup> + <authorgroup> + <author> + <firstname>Tom</firstname> + <surname>Rhodes</surname> + <contrib>再構成と追記: </contrib> + </author> + </authorgroup> + </sect1info> + + <title>IPv6</title> + <para>IPv6 (IPng <quote>IP next generation</quote> とも呼ばれます) + は、著名な IP プロトコル + (<acronym>IPv4</acronym> とも呼ばれます) の新しいバージョンです。 + 他の最新の *BSD システムと同様に FreeBSD は <acronym>KAME</acronym> + IPv6 リファレンス実装を含んでいます。したがって、あなたの + FreeBSD システムには IPv6を試すために必要なものすべてが備わっています。 + この節では IPv6 の設定と実行に関して説明します。</para> + + <para>1990 年代のはじめには、人々は IPv4 + アドレス空間が急速に縮小していることに気づくようになりました。 + インターネットの成長率が増大するにしたがって、 + 2 つの心配ごとがでてきました。</para> + + <itemizedlist> + <listitem> + <para>アドレスの枯渇。 + 今日では、プライベートアドレス空間 + (<hostid role="ipaddr">10.0.0.0/8</hostid>, + <hostid role="ipaddr">192.168.0.0/24</hostid> など) + およびネットワークアドレス変換 (<acronym>NAT</acronym>) + が使用されているので、それほど心配されていません。</para> + </listitem> + + <listitem> + <para>ルーティングテーブルのエントリが大きくなりすぎていました。 + これは今でも心配な事柄です。</para> + </listitem> + </itemizedlist> + + <para>IPv6 は以下の、そしてその他多くの問題を扱います。</para> + + <itemizedlist> + <listitem> + <para>128 bit アドレス空間。言い換えると、理論上 + 340,282,366,920,938,463,463,374,607,431,768,211,456 + 個のアドレスが利用可能です。これは地球上の一平方メータあたり、 + およそ 6.67 * 10^27 個の IPv6 アドレスがあることを意味します。</para> + </listitem> + + <listitem> + <para>ルータは、 + ルーティングテーブル内にネットワーク集約アドレスだけを格納することで、 + ルーティングテーブルの平均を 8192 項目程度に減らします。</para> + </listitem> + </itemizedlist> + + <para>他にも以下のように IPv6 の便利な機能がたくさんあります。</para> + + <itemizedlist> + <listitem> + <para>アドレス自動設定 (RFC2462)</para> + </listitem> + + <listitem> + <para>エニーキャスト (anycast) アドレス + (<quote>one-out-of many</quote> + 訳注: 複数の異なるノードが応答する 1 つのアドレス。 + RFC2526 を参照してください)。</para> + </listitem> + + <listitem> + <para>強制マルチキャストアドレス</para> + </listitem> + + <listitem> + <para>IPsec (IP セキュリティ)</para> + </listitem> + + <listitem> + <para>シンプルなヘッダ構造</para> + </listitem> + + <listitem> + <para>モバイル <acronym>IP</acronym></para> + </listitem> + + <listitem> + <para>IPv4 から IPv6 への移行手段</para> + </listitem> + </itemizedlist> + + + <para>詳細については下記を参照してください。</para> + + <itemizedlist> + <listitem> + <para><ulink url="http://www.sun.com">Sun.com</ulink> の IPv6 概観</para> + </listitem> + + <listitem> + <para><ulink url="http://www.ipv6.org">IPv6.org</ulink></para> + </listitem> + + <listitem> + <para><ulink url="http://www.kame.net">KAME.net</ulink></para> + </listitem> + + <listitem> + <para><ulink url="http://www.6bone.net">6bone.net</ulink></para> + </listitem> + </itemizedlist> + + <sect2> + <title>IPv6 アドレスの背景</title> + <para>いくつか違うタイプの IPv6 アドレスがあります。 + ユニキャスト (Unicast)、エニーキャスト (Anycast) + およびマルチキャスト (Multicast) です。</para> + + <para>ユニキャストアドレスは周知のアドレスです。 + ユニキャストアドレスへ送られたパケットは、 + まさにそのアドレスに属するインターフェースに到着します。</para> + + <para>エニーキャストアドレスはユニキャストアドレスと構文上判別不可能ですが、 + インタフェース群に宛てられています。 + エニーキャストアドレスに送られたパケットは (ルータメトリック的に) + 最も近いインタフェースに到着します。 + エニーキャストアドレスはルータでしか使ってはいけません。</para> + + <para>マルチキャストアドレスはインタフェース群を識別します。 + マルチキャストアドレスに送られたパケットは、 + マルチキャスト群に属するすべてのインタフェースに到着します。</para> + + <note><para>IPv4 のブロードキャストアドレス + (通常 <hostid role="ipaddr">xxx.xxx.xxx.255</hostid>) + は、IPv6 ではマルチキャストアドレスで表現されます。</para></note> + + <!-- XXX: J.Furukawa: take <screen> to <table> change in rev.1.283 in advance. --> + <table frame="none"> + <title>予約された IPv6 アドレス</title> + + <tgroup cols="4"> + <thead> + <row> + <entry>IPv6 アドレス</entry> + <entry>プレフィックス長 (ビット)</entry> + <entry>説明</entry> + <entry>備考</entry> + </row> + </thead> + + <tbody> + <row> + <entry><hostid role="ip6addr">::</hostid></entry> + <entry>128 ビット</entry> + <entry>不特定</entry> + <entry>IPv4 の + <hostid role="ipaddr">0.0.0.0</hostid> 参照</entry> + </row> + + <row> + <entry><hostid role="ip6addr">::1</hostid></entry> + <entry>128 ビット</entry> + <entry>ループバックアドレス</entry> + <entry>IPv4 の + <hostid role="ipaddr">127.0.0.1</hostid> 参照</entry> + </row> + + <row> + <entry><hostid role="ip6addr">::00:xx:xx:xx:xx</hostid></entry> + <entry>96 ビット</entry> + <entry>IPv4 埋め込みアドレス</entry> + <entry>下位の 32 ビットは IPv4 アドレスです。 + <quote>IPv4 互換 IPv6 アドレス</quote> とも呼ばれます。</entry> + </row> + + <row> + <entry><hostid role="ip6addr">::ff:xx:xx:xx:xx</hostid></entry> + <entry>96 ビット</entry> + <entry>IPv4 射影 IPv6 アドレス</entry> + <entry>下位の 32 ビットは IPv4 アドレスです。 + IPv6 に対応していないホストに対するアドレスです。</entry> + </row> + + <row> + <entry><hostid role="ip6addr">fe80::</hostid> + - <hostid role="ip6addr">feb::</hostid></entry> + <entry>10 ビット</entry> + <entry>リンクローカル</entry> + <entry>IPv4 のループバックアドレス参照</entry> + </row> + + <row> + <entry><hostid role="ip6addr">fec0::</hostid> + - <hostid role="ip6addr">fef::</hostid></entry> + <entry>10 ビット</entry> + <entry>サイトローカル</entry> + <entry> </entry> + </row> + + <row> + <entry><hostid role="ip6addr">ff::</hostid></entry> + <entry>8 ビット</entry> + <entry>マルチキャスト</entry> + <entry> </entry> + </row> + + <row> + <entry><hostid role="ip6addr">001</hostid> (基数 2)</entry> + <entry>3 ビット</entry> + <entry>グローバルユニキャスト</entry> + <entry>すべてのグローバルユニキャストアドレスはこのプールから割り当てられます。 + はじめの 3 ビットは <quote>001</quote> です。</entry> + </row> + </tbody> + </tgroup> + </table> + </sect2> + + <sect2> + <title>IPv6 アドレスを読む</title> + <para>正規の書式では + <hostid role="ip6addr">x:x:x:x:x:x:x:x</hostid> + と表されます。それぞれの + <quote>x</quote> は 16 ビットの 16 進数です。たとえば + <hostid role="ip6addr">FEBC:A574:382B:23C1:AA49:4592:4EFE:9982</hostid> + となります。</para> + + <para>すべてゼロの長い部分文字列がアドレス内によく現れます。 + そのため、そのような部分文字列は <quote>::</quote> + に短縮することができます。 + たとえば、<hostid role="ip6addr">fe80::1</hostid> は正規形の + <hostid role="ip6addr">fe80:0000:0000:0000:0000:0000:0000:0001</hostid> + に対応します。</para> + + <para>3 番目の形式は、最後の 32 ビットの部分を + <quote>.</quote> を分割文字として使う、 + なじみ深い IPv4 (10 進) 形式で書くことです。 + たとえば <hostid role="ip6addr">2002::10.0.0.1</hostid> + は (16 進) 正規形の + <hostid role="ip6addr">2002:0000:0000:0000:0000:0000:0a00:0001</hostid> + に対応し、同時に <hostid role="ip6addr">2002::a00:1</hostid> + と書くこととも等価です。</para> + + <para>ここまで来れば、下記を理解することができるでしょう。</para> + + <screen>&prompt.root; <userinput>ifconfig</userinput></screen> + + <programlisting>rl0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500 + inet 10.0.0.10 netmask 0xffffff00 broadcast 10.0.0.255 + inet6 fe80::200:21ff:fe03:8e1%rl0 prefixlen 64 scopeid 0x1 + ether 00:00:21:03:08:e1 + media: Ethernet autoselect (100baseTX ) + status: active</programlisting> + + <para><hostid role="ip6addr">fe80::200:21ff:fe03:8e1%rl0</hostid> + は自動的に設定されたリンクローカルアドレスです。 + これは自動設定の一環として、 + イーサネット MAC アドレスを変換したものを含んでいます。</para> + + <para>IPv6 アドレス構造についての詳細は RFC2373 をご覧ください。</para> + </sect2> + + <sect2> + <title>接続</title> + + <para>現在、他の IPv6 ホストおよびネットワークに接続するためには + 4 つの方法があります。</para> <itemizedlist> - <listitem><para><filename>/etc/dhclient.conf</filename></para> - <para><command>dhclient</command> は設定ファイル - <filename>/etc/dhclient.conf</filename> を必要とします。 - 大抵の場合、 このファイルはコメントだけであり、 デフォルトが - 通常使いやすい設定になっています。 この設定ファイルは - マニュアルページ &man.dhclient.conf.5; で説明しています。 - </para> - </listitem> - - <listitem><para><filename>/sbin/dhclient</filename></para> - <para> - <command>dhclient</command> は静的にリンクされており、 - <filename>/sbin</filename> に置かれています。 マニュアルページ - &man.dhclient.8; で <command>dhclient</command> コマンドについて - より詳しく説明しています。</para> - </listitem> - - <listitem><para><filename>/sbin/dhclient-script</filename></para> - <para> - <command>dhclient-script</command> は FreeBSD 特有の、 DHCP クラ - イアント設定スクリプトです。 これについてはマニュアルページ - &man.dhclient-script.8; で説明されていますが、 これを編集する - 必要はほとんど発生しないでしょう。</para> + <listitem> + <para>6bone 実験ネットワークに参加する。</para> </listitem> - <listitem><para><filename>/var/db/dhclient.leases</filename></para> - <para> - DHCP クライアントはこのファイルに有効なリースのデータベースを - ログとして記録します。 &man.dhclient.leases.5; にもうすこし詳 - しい解説があります。 - </para> - </listitem> + <listitem> + <para>上流のプロバイダから IPv6 ネットワークの割り当てを受ける。 + 手順については、インターネットプロバイダに問い合わせてください。</para> + </listitem> + + <listitem> + <para>IPv6 over IPv4 によるトンネル。</para> + </listitem> + + <listitem> + <para>ダイアルアップ接続の場合 freenet6 port を使用する。</para> + </listitem> </itemizedlist> + + <para>ここでは、現在もっともよく使われている方法と思われる + 6bone へ接続する方法を説明します。</para> + + <para>はじめに 6bone サイトをみて、 + あなたに最も近い 6bone 接続先を見つけてください。 + 責任者に連絡すると、少しばかり運がよければ、 + 接続を設定する方法についての指示を受けられるでしょう。 + 多くのばあい、これには + GRE (gif) トンネルの設定が含まれます。</para> + + <note> + <title>訳注</title> + <para>6bone は <hostid role="ip6addr">3ffe::</hostid> (16 ビット) + という IPv6 アドレスを割り振られた実験目的のネットワークでしたが、 + 2006 年 6 月に運用を停止することになっています。 + 他の商用や試験的な IPv6 接続サービスを探してください。</para> + </note> + + <para>ここに &man.gif.4; トンネルを設定する典型的な例を示します。</para> + + <screen>&prompt.root; <userinput>ifconfig gif0 create</userinput> +&prompt.root; <userinput>ifconfig gif0</userinput> +gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280 +&prompt.root; <userinput>ifconfig gif0 tunnel <replaceable>MY_IPv4_ADDR</replaceable> <replaceable>HIS_IPv4_ADDR</replaceable></userinput> +&prompt.root; <userinput>ifconfig gif0 inet6 alias <replaceable>MY_ASSIGNED_IPv6_TUNNEL_ENDPOINT_ADDR</replaceable></userinput></screen> + + <para>大文字になっている単語を、 + 上流の 6bone ノードから受け取った情報に置き換えてください。</para> + + <para>これでトンネルが確立されます。&man.ping6.8; を + <hostid role="ip6addr">ff02::1%gif0</hostid> + に送ることによって、トンネルが動作しているか確かめてください。 + ping の応答を 2 つ受け取るはずです。</para> + + <note><para><hostid role="ip6addr">ff02:1%gif0</hostid> + というアドレスに興味をそそられている場合のために説明すると、 + これはマルチキャストアドレスです。 + <literal>%gif0</literal> は、ネットワークインタフェース + <devicename>gif0</devicename> + 上のマルチキャストアドレスが使用されるということを示しています。 + マルチキャストアドレスに対して <command>ping</command> + を送ったので、トンネルのもう一方の端も応答します。</para></note> + + <para>ここまで来ると 6bone + アップリンクに経路設定することは比較的簡単でしょう。</para> + + <screen>&prompt.root; <userinput>route add -inet6 default -interface gif0</userinput> +&prompt.root; <userinput>ping6 -n <replaceable>MY_UPLINK</replaceable></userinput></screen> + + <screen>&prompt.root; <userinput>traceroute6 www.jp.FreeBSD.org</userinput> +(3ffe:505:2008:1:2a0:24ff:fe57:e561) from 3ffe:8060:100::40:2, 30 hops max, 12 byte packets + 1 atnet-meta6 14.147 ms 15.499 ms 24.319 ms + 2 6bone-gw2-ATNET-NT.ipv6.tilab.com 103.408 ms 95.072 ms * + 3 3ffe:1831:0:ffff::4 138.645 ms 134.437 ms 144.257 ms + 4 3ffe:1810:0:6:290:27ff:fe79:7677 282.975 ms 278.666 ms 292.811 ms + 5 3ffe:1800:0:ff00::4 400.131 ms 396.324 ms 394.769 ms + 6 3ffe:1800:0:3:290:27ff:fe14:cdee 394.712 ms 397.19 ms 394.102 ms</screen> + + <para>この出力はマシンによって異なります。 + これで、あなたが <filename role="package">www/mozilla</filename> + のような IPv6 が利用可能なブラウザを持っていれば、 + IPv6 サイト + <ulink url="http://www.kame.net">www.kame.net</ulink> + にいって踊るカメを見ることができるでしょう。</para> </sect2> <sect2> - <title>参考になる文献</title> + <title>IPv6 世界の DNS</title> + <para>IPv6 のための新しい DNS レコードが 2 種類あります。</para> - <para>DHCP のプロトコルは - <ulink url="http://www.freesoft.org/CIE/RFC/2131/">RFC 2131</ulink> - に完全に記述されています。 また、 - <ulink url="http://www.dhcp.org/">dhcp.org</ulink> - にも有用な - 情報源が用意されています。 </para> + <itemizedlist> + <listitem> + <para>AAAA レコード</para> + </listitem> + + <listitem> + <para>A6 レコード</para> + </listitem> + </itemizedlist> + + <para>AAAA レコードは簡単に使えます。</para> + + <programlisting>MYHOSTNAME AAAA MYIPv6ADDR</programlisting> + + <para>上記をプライマリゾーン DNS ファイルに加えて、 + もらったばかりの IPv6 アドレスにホスト名を割り当ててください。 + あなた自身で <acronym>DNS</acronym> ゾーンを管理していない場合は、 + <acronym>DNS</acronym> プロバイダに頼んでください。 + <application>bind</application> の最新バージョン + (バージョン 8.3 および 9) は AAAA レコードに対応しています。</para> </sect2> </sect1> </chapter> |