ネットワーク解説
戸根勤の
ネットワーク情報
ネットワーク用語事典
ネットワーク解説
Linuxのネットワーク
ネットワークのプログラミング
試してわかるインターネットの仕組み
選択肢の評価
ネットワークの性能設計
随筆風記事
Linux入門
インターネット接続日記
著書紹介
セミナー/講演の案内
掲示板
Sambaの概要とブラウジング

 Linuxを始めとしたUnix系のOSでは,ファイルサーバにアクセスするときはNFSというプロトコルを使い,プリントサーバにアクセスするときは通称lpdというプロトコルを使う方法が一般的だ。一方,Windowsのファイルサーバとプリントサーバは,このUnix流の方法とは違って,SMB/CIFSというプロトコルを使う。
 この二つには互換性がないので,そのままではLinuxをWindowsのファイルサーバやプリントサーバとして使うことはできない。その場合の対処方法は二つある。一つはWindows側にNFSやlpdのクライアントソフトウェアをインストール方法だ。つまり,WindowsクライアントをUnixの流儀に従わせるのである。そして,もう一つはLinux側にSMB/CIFSのサーバソフトウェアをインストールする方法だ。こちらは,LinuxサーバをWindowsの流儀に合わせることになる。細かい点に違いはあるが,どちらの方法でも目的は達成できる。しかし,一般的に,前者のソフトウェアが有料なのに対して後者は無料である。そのため,後者の方法を用いることが多い。今回は,その後者の方法の仕組みや設定に関する話題を取り上げる。

SambaはWindowsネットワーク互換

 後者の方法で使うサーバソフトウェアがSambaだ。Windowsのファイルサーバやプリントサーバの機能を総称してWindowsネットワークと呼ぶが,Unix系のOS上でそのサーバ機能を実現するのがSambaだといえる。Sambaという名前はWindowsネットワークで使われているSMB(Server Message Block)プロトコルに由来している。開発者がSMBの3文字を含む単語をスペルチェッカで探したらSambaという単語が見つかったので,それを名前に採用したということだ。なお,SMBプロトコルは,その後,CIFS(Common Internet File System)という名称に変更されたが,Sambaという名前はそのままだ。
 このSambaが今回の話題の中心だが,その内容を説明する前に,Windowsネットワークの仕組みを復習しておこう。WindowsネットワークはWindows 9xやWindows NTのOSに組み込まれており,外見上,OSと渾然一体となっているように見える。OSとの区別を不明瞭にしているのはマイクロソフトの戦略上の理由によるのだが,それではWindowsネットワーク本来の機能や仕組みを理解しにくいので,まず,それを基本的な要素に分解してみよう。すると図1のようになる。

ブラウジング

 Windowsネットワークを使う方法はいろいろだが,典型的な方法はデスクトップの「ネットワークコンピュータ」アイコンを開くものだろう。アイコンを開くとそこにサーバが一覧表示され,そこから使用するサーバを選択できるようになっている。このサーバを一覧表示する仕組みをブラウジングという。その基本動作は次のようなものだ。
 ネットワークのどこかにマスタブラウザというマシンがあり,それがサーバの一覧情報(ブラウズリスト)を管理する。そして,サーバはそこに定期的に自分の存在を通知することになっている。マスタブラウザはその通知を元にサーバをリストに追加し,また,一定時間以上通知がなければリストから削除する。これで,ブラウズリストにはその時点でネットワークに存在するサーバだけが記録されることになる。だから,ネットワーク上のマシンは必要に応じてマスタブラウザからブラウズリストを取り寄せれば,そこにどんなサーバがあるのかがわかる。
 このブラウジングの仕組みの要になるのがマスタブラウザだが,これは人間が設定するのではなく,サーバ同士が連絡を取り合って,自動的に選出される。その選出作業は各サーバに設定されている優先順位を元にして行われる。ドメインコントローラのように停止する回数が少なく,安定して稼動するマシンには高い優先順位が設定されており,そうしたマシンがマスタブラウザになることが多い。
 しかし,ネットワークの構成によってそうならないこともある。サーバ専用のマシンを設けず,各自のパソコンをサーバとしても使い,互いに相手のファイルを利用しあう,いわゆるピアツーピアの利用形態がその例だ。そういった利用形態ではサーバの優先順位が皆同じになる。その場合は,マシンを起動した順番などによってマスタブラウザが決まり,マスタブラウザに選出されるマシンは流動的になる。それでも,どのマシンがマスタブラウザなのか区別がつけばよいが,普通のユーザでは区別ができない。リソースキットにはブラウズマスタを探して表示してくれるユーティリティ(browmon.exeあるいはbrowstat.exe)が付属するが,普通のユーザはそんなユーティリティは使わないからだ。そのため,自分のマシンがマスタブラウザであることを知らずに,シャットダウンすることもある。すると,マスタブラウザが存在しなくなる。これは一時的な状態で,しばらく待てば再びマスタブラウザが自動的に選出されるのだが,それまでの間はブラウズリストを入手できなくなり,「ネットワークコンピュータ」アイコンを開いたときにサーバが見えなくなる。これをネットワークの障害と勘違いすることもある。
 ブラウジングはWindows 95を開発したときに付け加えられた機能で,使い勝手を良くするために,単にサーバを一覧表示するだけのもので,本来の機能であるファイル/プリントサービスとは別に動作する。だから,サーバ一覧が見えなくてもサーバ自身が動いていれば,問題なくサーバを使用できる。Windows 95以前からWindowsネットワーク(昔はLANマネージャあるいはMS-Networksと呼んでいた)を使っている人は,昔を思い出せばその状態が理解できるだろう。一覧が見えなくても,サーバ名を直接指定すればサーバに接続できるし,問題なくサーバを利用できるのである(図2)。

ファイル/プリントサービス

 「ネットワークコンピュータ」アイコンを開いてサーバが見えたら,次は目的のサーバアイコンを開くことになるだろう。すると,そのサーバで使用可能なディレクトリやプリンタが見える。ここからがWindowsネットワークの中核となるファイルプリントサービスの機能だ。その基本的な動作は次のようなものだ。
 ブラウジングは複数のサーバ間でデータをやり取りするものだったが,ファイル/プリントサービスはクライアントとサーバが1対1でやり取りする。そのやり取りの内容は,ディレクトリを作る/消す,ファイルをオープン/クローズする,ファイルからデータを読み込む,ファイルにデータを書き込む,ファイルのある部分をロック/アンロックする,印刷データを送る,といったようなファイルシステムやプリンタに対する操作を定義したコマンドをクライアントからサーバに送り,サーバがそれに従ってファイルを操作する,というものだ。コマンドにはサーバ上で利用可能なディレクトリやプリンタの情報を問い合わせる,特定のディレクトリに接続する,といったサーバ特有の操作を定義したものもある。
 元々のSMBプロトコルはそうしたコマンドの取り決めを行ったものだった。SMBプロトコルはその後改良が重ねられ,CIFSという名称に変わり,今は64個のコマンドと16個のサブコマンドが定義されている。さらに,ブラウジング,ユーザ認証,リモート管理などの仕様が追加されて現在に姿になっている。その仕様は下記のURLで公開されている。
http://msdn.microsoft.com/workshop/networking/cifs/spec.asp

アクセス制限

 このファイル/プリントサービスがあればファイルを読み書きしたり,プリンタに印刷できるのだが,皆が一緒に使うサーバはそれだけでは不十分だ。他人のファイルを勝手に覗き見したり,書き換えたりできないようにアクセス制限機能が必要になる。
 Windowsネットワークにはアクセス制限を実現する方法が二つある。一つはシェアレベルセキュリティと呼ばれているもので,サーバでディレクトリやプリンタを公開するときに,そこにパスワードを付与するものだ。シェアレベルセキュリティではディレクトリやプリンタに接続するときにパスワードをチェックし,正しいパスワードを送ってきたクライアントだけに接続が許可される。
 もう一つは,ユーザレベルセキュリティと呼ばれるものだ。こちらの方は,サーバを利用するときに最初にユーザ名とパスワードを通知する。それが登録されているものと一致すれば正しいユーザだと見なして,それ以後の操作を許可するものだ。ただ,ユーザレベルセキュリティでは,ユーザ認証が済めばすべての操作が許される,というわけではない。サーバにはどのユーザがどのディレクトリやプリンタを使用できるかを表したユーザ権限が登録されており,その権限に従ってディレクトリやプリンタの使用が許可されるのである。

ユーザ認証機能は切り離されている

 ファイルやプリンタにアクセスするコマンドをクライアントが送ってきたときに,それを許可すべきかどうかをチェックする機能はファイル/プリントサービスの一部として組み込まれている。しかし,ユーザ名とパスワードによってユーザを確認するユーザ認証の機能は別に切り離されている。その理由は,ユーザ認証を利用するのはファイル/プリントサービスだけではないからだ。ネットワークを使わずにログオンするときにも使うし,データベースサーバなど,Windowsネットワーク以外のサーバが利用することもある。だから,ユーザ認証はファイル/プリンタサービスとは切り離しておくべきなのだ。
 Windows NTの場合はこのユーザ認証の仕組みが2種類ある。一つは名前がつけられていないので何と呼べばよいのかわからないが,ドメインに所属しないサーバで採用しているものだ。そのマシン上にユーザ名とパスワードを登録したデータベースを持ち,それと入力されたユーザ名/パスワードを照合してユーザを確認するのである。
 そして,もう一つがいわゆるNTドメインである。ドメインもOSと渾然一体となっているように見えるためその実体が不明瞭だが,本質的な機能はユーザ名とパスワードを確認するユーザ認証の機能を持っているだけに過ぎない。
 ただ,実際のユーザ認証機能は単にユーザ名とパスワードを照合するだけではなく,複雑な要素を含んでいる。その代表的なものが,サーバが複数ある環境でどのサーバからも利用できる全体的なユーザ認証の機能を提供することだ。NTドメインはドメインコントローラというドメイン管理用のマシンを用意し,そこにあるデータベース(これをSAMという)にユーザ管理情報を集中して登録することでこの機能を実現している。ドメインに所属するマシンはドメインコントローラからユーザ認証情報を入手したり,ドメインコントローラに認証作業を依頼することでユーザ認証を実行するのだ。
 ただ,このような集中化にはデメリットがある。ドメインコントローラが1台だと,障害が発生したときにユーザ認証ができなくなり,誰もネットワークを使えなくなってしまうからだ。また,遅い通信回線経由でユーザ認証情報にアクセスすると処理時間がかかるの点も問題である。そこで,主となるプライマリドメインコントローラ(PDC)以外に,複数のバックアップドメインコントローラ(BDC)を要所要所に配置することで障害と性能の問題に対処している。これがNTドメインの基本的な仕組みである。ドメインで扱うユーザ認証情報は一種の分散データベースによって管理されているといってもよい。
 この仕組みによってドメインに対してユーザ認証の操作(ログオン)を1回行えば,そこに所属するサーバにはログオン操作なしでアクセスできるようになる。ドメインに所属するサーバはドメインコントローラからユーザ認証に関する情報をもらうため,個々のサーバ毎にログオン操作が必要なくなるのである。アプリケーションもドメインのユーザ認証を利用すれば,個々にログオンする必要がなくなる。
 このように,1回のログオン操作ですべてのサーバにアクセスできるようにする考え方をシングルユーザログオンというが,元々,Windows NTのドメインはこうした目的のために導入されたものだった。まだ,Windows NTが誕生する前,WindowsネットワークがLANマネージャと呼ばれ,OS/2の拡張機能として提供されていた頃のことだ。その後,LANマネージャはWindows NTのOS自身に組み込まれ,そして,ドメインもOSと一体であるかのように装うようになったのである。
 今の大企業のネットワークは,当時,ドメインを設計した時点で想定していたものよりも規模が大きくなってしまった。そのため,全ユーザを単一ドメインに登録するとドメインが大きくなりすぎ,性能などの面で不都合が生じるようになった。そこで,ドメインを分割して信頼関係を結ぶように改良された。それがドメインを使ったユーザ認証を複雑化させている。
 また,LANを使って構築された今のネットワークは比較的容易にネットワークを覗き見できるので,パスワードを盗聴される危険性もある。そこで単純にパスワードを送るのではなく,暗号操作も必要になる。
 いずれにしても,ユーザ認証というのは単にユーザ名とパスワードを照合するだけのものではなく,独立したシステムとして考えるに値するものなのだ。

NetBIOSの仕組み

 Windowsネットワークのすべての通信はNetBIOSという通信メカニズムを使用している。こう書くとわかり難いが,要するに,ブラウジングやユーザ認証などで何らかのデータ送受信が必要なときにはNetBIOSに依頼してデータ送受信を実行してもらうのである。このNetBIOSのメカニズムについても簡単に復習しておこう。
 NetBIOSの実体はデータを運ぶプロトコルを利用するためのAPIであり,自分自身ではデータを運ぶ機能は持っていない。そこで,その機能を持ったプロトコル(データ転送プロトコル)と組み合わせて使うことになっている。つまり,ブラウジングやユーザ認証から依頼されたデータ送受信を自分自身で行わず,それをデータ転送プロトコルに依頼し直して実行してもらうのだ。
 元々はNetBEUIというデータ転送プロトコルと組み合わせていたが,後にTCP/IP,IPX/SPXなどでも利用できるようになり,Windowsにはそうしたプロトコルが標準添付されている。ただし,SambaではWindowsのようにいろいろなプロトコルと組み合わせることはできず,NetBIOSとTCP/IPプロトコルの組み合わせしか利用できない。なお,この組み合わせをNBT(NetBIOS over TCP/IP)という。
 Sambaを理解するためには,このNBTのメカニズムをもう少し分解して理解しておいた方がよい。NetBIOSの通信メカニズムは相手の名前を指定してそこにデータを送ることが基本動作となっている。たとえば,サーバにファイルアクセスのコマンドを送るのであれば,まず,コマンドやパラメータをまとめて一塊のデータをつくる。そして,サーバの名前を指定して,データの塊をそこに送るようにNetBIOSに依頼するのである。すると,NetBIOSはその依頼をTCP/IPプロトコルにわかるように作り直してTCP/IPプロトコルに渡すのである。
 ところが,TCP/IPプロトコルの方は,名前ではなくIPアドレスによって送信先の相手を指定してデータを運ぶことになっている。そこにギャップがあるのだが,それは名前をIPアドレスに変換することで解決する。つまり,サーバ名をサーバのIPアドレスに変換するのだ。この変換を名前解決と呼ぶが,NBTには二つの仕組みが用意されている。
 一つはブロードキャストを用いるものだ。これはネットワークに接続した全コンピュータに対して問い合わせを行い,名前の該当者を探すものだ。ブロードキャストを使うと問い合わせのパケットが全員に届くので,該当者が自分のIPアドレスを応答するのである。その場に居合わせた全員に「xxさん,いますか?」と問いかけ,「はい,それは私です」と答えをもらうのと同じだ。
 この仕組みはシンプルで良いのだが,ブロードキャストはルータで遮断されてしまい,その向こう側には届かない。だから,ルータが設置されたネットワークでは使えない。その場合は,名前とそれに対応するアドレスを登録したサーバを用意してそこに問い合わせる方法を使う。この問い合わせはブロードキャストではなく,通常の通信なのでルータを超えることができる。NetBIOSの仕様ではこのサーバをNBNS(NetBIOS Name Server)と呼んでおり,Windows NTサーバにもその機能が付属している。WINSサーバがそれだ。
 この二つのいずれかを使って名前解決を行えば,後はNetBIOSを使って通信できる状態になる。その通信にも二つのタイプがある。
 一つは,クライアントとサーバの間でコマンドをやり取りで使われるものだ。このやり取りは1対1で行われ,やり取りするデータのサイズに制限はない。大きなファイルを読み書きするときにはやり取りするデータのサイズも大きくなるので,データサイズに制限を設けられないのである。
 NetBIOSでそういったデータのやり取りを実現するのがセッションサービスだ。セッションサービスはデータを運ぶ途中のネットワークでエラーが発生した場合に自動的にエラーを訂正してくれる機能がある。だから,ファイル/プリントサービスなど,セッションサービスを利用する側はネットワークのエラーのことを気にせずにデータを送ることができる。
 もう一つはブラウジングなどで制御用データのやり取りに使われるものだ。ブラウジングの制御情報のやり取りは比較的短く,また,マスタブラウザの選出では多数のマシンがデータを送りあう。こうした通信のために用意されているのがデータグラムサービスだ。こちらの方にはエラー訂正の機能はないが,多数のマシンとやり取りするなど,セッションサービスにはない機能を備えている。
 この三つがNetBIOSの基本要素である。そして,NBTではそれぞれにTCP/IPプロトコルのポート番号が割り当てられている。名前解決が137番,データグラムサービスが138番,セッションサービスが139番である。このポート番号を見れば,どのプログラムがどういった種類の通信を行っているのか調べることができる。それはこの後で紹介しよう。

NetBIOSの名前のルール

(後日追加予定)


ポート番号とファイアウォールの設定

(後日追加予定)

Sambaの概要

 さて,Windowsネットワークを構成要素に分解してみたが,Sambaはここで紹介した機能のほとんどすべてを持っている。NetBIOSの名前解決で使用するNBNSの機能も備えている。ユーザ認証の仕組みがWindows NTと異なっていたり,Unix系OSとWindowsのファイルシステムの違いからファイル名やアクセス権限などに若干の差異はあるが,それを除けばWindowsと互換性があり,ネットワーク上で混在利用できる。Sambaの機能概要はWindowsネットワークの概要そのものなので,これ以上の説明は不要だろう。
 次にSambaのサーバ機能の実体だが,それはsmbdとnmbdという二つのデーモンプログラムによって構成され,それが図1のような役割分担を行っている。その様子はSambaを動かしているマシンで図3のように通信の状態を調べてみるとわかる。なお,nmbdはブラウジングや名前の解決といった付加的な機能を果たすだけなので,これを動かさなくてもファイル/プリンタサービスを利用できる。ただし,ブラウジングと名前解決の機能がないサーバを利用するには,直接IPアドレスを使ってサーバにアクセスしなくてはならない。そうするためには,lmhostsファイルにサーバ名とIPアドレスを記載し,図2のようにそのサーバ名を使って直接接続する。何らかの理由でサーバの存在を見せたくない,といった特殊な意図があれば別だが,普通,このような使い方はしない。だから,smbdとnmbdの二つはワンセットでSambaの機能を実現すると考えたほうがよいだろう。
 この二つのデーモンプログラムに加えて,表1にあげるようなユーティリティプログラムがあり,それを合わせてSambaというシステム全体が構成されている。そして,その動作は表2にある設定ファイルによってコントロールする。この設定ファイルはsmbdとnmbdの両方に共通するものなので,設定するときにsmbdとnmbdを区別して考える必要はない。

表1 Sambaに付属するユーティリティプログラム
プログラム名 内容
smbclient Windowsネットワークのクライアント機能。アプリケーションから直接サーバのファイルにアクセスするのではなく,コマンドを使ってサーバにファイルを送ったり,サーバからファイルを取り出したりするときに使う。
testparm Sambaの設定ファイル(smb.conf)をテストするユーティリティ。
testprns プリンタの設定をテストするユーティリティ。
smbstatus サーバへの接続状態を調べるユーティリティ。
nmblookup NetBIOSで使う名前を問い合わせするユーティリティ。名前解決が正しく行われているかどうか確認するときに使う。
make_smbcodepage smbdが使うコードページ定義ファイルを作成するユーティリティ。
smbpasswd 暗号化パスワードを有効にしたときに,パスワードを登録するためのユーティリティ。
表2 Sambaの動作を決める設定ファイル
設定ファイル名 内容
/etc/smb.conf Sambaの動作全般を規定する設定ファイル。
/etc/smbusers Windowsネットワークでのユーザ名と,Unix側でのユーザ名を変換するための設定を書いたファイル。
/etc/smbpasswd 暗号化パスワードを有効にしたときに,暗号化したパスワードを登録しておくファイル。

 

smbfs

(後日追加予定)

設定ファイルの構造

 次はSambaの具体的な設定方法だが,ほとんどの設定はsmb.confファイル中に記述するパラメータによって行うので,smb.confファイルの書き方がわかればSambaの設定方法はわかたことになる。
 smb.confファイルには次のような形式でパラメータを記述する。

[<セクション名>]
 <パラメータ名>=<パラメータ値>

セクション名は特別なものとして表3の三つが予め定義されているが,それ以外のものは公開するディレクトリやプリンタの名前を表すことになっている。だから,公開する名前に合わせて自由にセクション名を決めればよい。ただし,セクション名の末尾に$を付けるとWindowsエクスプローラのディレクトリ/プリンタ一覧表示で表示されなくなる。NTサーバは,ドライブ名の末尾に$をつけ,C$,D$というような名前でディレクトリを公開するのがデフォルト設定になっており,一覧表示には現われないが,その名前を直接指定すればディレクトリに接続できるようにしている。これと同じことである。
 smb.confを設定するポイントは各セクションに記述するパラメータの意味の方だろう。これがわかれば,Sambaの設定方法はわかったことになる。

表3 特別な意味を持ったセクション名
セクション名 意味
[global] Sambaの全体的な動作を設定するパラメータを記述する
[homes] このセクションが存在すると,ユーザのホームディレクトリが公開される。ここには,そのディレクトリ公開に関する設定パラメータを記述する。設定パラメータの記述方法は通常のディレクトリ公開と同様。
[printers] このセクションが存在すると,デフォルトプリンタが公開される。ここには,そのプリンタ公開に関する設定パラメータを記述する。設定パラメータの記述方法は通常のプリンタ公開と同様。

 

ブラウジングに関する設定項目

 では,ブラウジングに関する設定パラメータから見ていこう。
 ブラウジングに関連するパラメータには表4のものがある。ブラウジングの細かい動作を知らないと,その意味を理解できないものが多いので,詳細な動作と合わせて説明しよう。
 まず,workgroupだが,ここにはそのマシンが所属するワークグループやドメインの名前を記述すればよい。
 ブラウジングの基本は,マスタブラウザがメンバサーバの名前を管理することにあるが,そのためにはどのサーバがメンバなのかを知る必要がある。そこで,メンバとなるサーバは定期的に自分の名前をマスタブラウザに通知することになっている。これをホストアナウンスメントと呼ぶが,マスタブラウザは自動的に選出されるので,事前にどれがマスタブラウザになるのか判断できないし,途中で別のマシンに変わることもある。
 このように,固定していない相手と通信するのは,一般の通信技術では厄介なことなのだが,NetBIOSを使うと次のように簡単に実現できる。もっとも,ブラウジングはNetBIOSの機能を前提にして考案されたものだから,簡単に実現できるのは当然のことかもしれない。
 その辺の話題はさておき,実現方法を説明しよう。NetBIOSは名前によってデータの送り先を決定するが,その名前は1台のマシンに対して一つだけ割り当てるのではなく,1台のマシンが複数の名前を持てるようになっている。しかも,名前は固定的なものではなく,動的に変更することもできる。
 その様子は簡単な実験で確かめることができる。Sambaに付属するnmblookupというユーティリティを使って,NetBIOSの名前を問い合わせてみるのだ。図4はその結果である。
 NetBIOSの名前付けのルールでは,名前の末尾にあるタイプ情報が16進数で'1d'になっているものがマスタブラウザを表す。nmblookupではこの16進数を#xxと表現するので,MYGROUP#1dとすれば,それがMYGROUPでのマスタブラウザの名前になる。その名前を問い合わせると,10.1.1.2というアドレスのマシンが該当することがわかる。さらにそのIPアドレスのマシンに対して持っている名前を問い合わせると,P166というマシン名を持っていることがわかる。ここで,P166というマシンをシャットダウンし,しばらく待つと今度は別のマシンがマスタブラウザとして選出される。そこで同じことを繰り返してみると,今度はC433というマシン名で10.1.1.4というアドレスを持つマシンがマスタブラウザになったことがわかる。マスタブラウザが変わっても,MYGROUP#1dという名前を持っていることに変わりはない。
 NetBIOSが複数の名前を動的に割り当てられるという性質を利用し,マスタブラウザを選出したときにそのマシン本来の名前とは別にブラウジング用に名前を持たせているのである。どれがマスタブラウザになってもMYGROUP#1dという名前を持っているから,その名前に対して通知を送れば,マスタブラウザに届くのだ。workgroupの名前は使い方の一つがこれである。メンバサーバはworkgroupの名前に対して自分のマシン名を通知するのだ。すると,それがマスタブラウザに届き,そこに登録されるのである。
 workgroupパラメータとして設定する名前はマスタブラウザの名前を表すのだが,同時にそれが管理するグループの名前と考えることもできる。そして,このグループがワークグループやドメインに対応するのである。この後で説明するマスタブラウザの選出などにもこの名前が使われるが,それらはすべて最終的にNetBIOSの名前が元になっている。それはワークグループでもドメインでも同じなので,workgroupパラメータではワークグループとドメインを区別して考える必要はない。ワークグループを採用しているのであればワークグループ名が,ドメインを採用しているのであればドメイン名がグループの名前となる。workgroupというパラメータ名から誤解しがちだが,このパラメータはワークグループを採用する場合だけに使うのではない。

表4 ブラウジングに関する設定パラメータ
パラメータ名 デフォルト値 内容
workgroup WORKGROUP そのマシンが所属するワークグループやドメインの名前。
preferred master no この値がyesだと,マシン起動時にマスタブラウザの選出を強制的に開始するよう,ネットワーク全体に通知する。
local master yes マスタブラウザの選出に参加するか否かを設定する。yesで参加,noで不参加。
os level 0 マスタブラウザの選出の際に使われる優先順位の元になる値。大きな値が優先順位が高い。なお,Sambaはこの値を10進数で表現するが,Windowsの仕様書では16進数で表現されている。そして,Windows 9xは1,NTワークステーションは16(16進数で10),NTサーバは32(16進数で20)という値を持っている。
domain master no ドメインマスタブラウザになるか否かを設定する。
remote browse sync なし マスタブラウザのIPアドレスを設定すると,その相手と定期的にブラウズリスト情報を交換するようになる。
remote announce なし マスタブラウザのIPアドレスを設定すると,その相手にホストアナウンスメントを送ってくれる。

 

マスタブラウザの選出

 マスタブラウザはサーバ同士が制御情報を交換して自動的に選出するが,その選出に関連するパラメータが次の三つだ。
・preferred master
・os level
・local master
まず,preferred masterだが,これをyesにすると,Sambaを起動したときにマスタブラウザの選出作業を要求するための"election"というメッセージをグループ全員に通知する。
 electionメッセージはpreferred masterが起動したときだけでなく,何らかの理由でマスタブラウザがいなくなってしまったときにも送信される。また,NTサーバのプライマリドメインコントローラ(PDC)もpreferred serverの一種なので,PDCの起動時にもelectionメッセージが送られる。このいずれかの場合にelectionメッセージが送られ,それをきっかけにしてマスタブラウザ選出作業が始まる。
 実際のマスタブラウザ選出作業は,electionメッセージが流れた時点ですでに始まっている。electionメッセージの中にはある種の優先順を表す情報が含まれており,マスタブラウザの候補者は送信されたelectionメッセージ中の優先順位と自分の持っている値とを比較することになっている。そして自分の優先順位が低ければ何もしない。すると,electionメッセージ送信者がマスタブラウザとなる。自分の優先順位が高い場合は,その候補者が今度はelectionメッセージを送信する。自分の方が高い優先順位であり,それ以前のelectionメッセージは無効になることを知らせるためだ。
 これを続けると,一番高い優先順位を持ったマシンがelectionメッセージを送ると,それ以後electionメッセージを送るものはいなくなり,それで選出作業は終了する。実際には,electionメッセージの数を減らすために,優先順位の低いマシンはelectionメッセージを送る前に少し待つことになっている。優先順位の高いマシンが先にelectionメッセージを送れば,優先順位の低いマシンがelectionメッセージを送ることがなくなり,メッセージを減らすことができるからだ。
 この優先順位に関係するパラメータがos levelだ。正確には,優先順位はos levelパラメータだけで決まるのではなく,os levelが同じ値の場合にはブラウジングのバージョン,そのマシンの役割,起動してからの経過時間などを加味して優先順位が決まる。しかし,この値が大きければ,そのマシンがマスタブラウザになると考えてよい。Windowsの中ではNTサーバが32と最大の値を持っているので,33以上の値を設定すれば,Windowsを抑えてそのマシンがマスタブラウザになる。
 こういったマスタブラウザ選出作業に参加するのは,local masterパラメータがyesに設定されているマシンだけである。これがnoだと,そのマシンはelectionメッセージを送ることはなくなり,マスタブラウザの候補から外れる。ブラウジンググループ中の全員がマスタブラウザの候補から外れていると,マスタブラウザ不在の状態になる。すると,ブラウジングが働かなくなるので,そうならないよう,最低1台はlocal masterをyesに設定する。

ドメイン内でドメインマスタブラウザを動かさない

 マスタブラウザ選出の仕組みはelectionメッセージをグループに所属する全員に送ることで成り立っているが,ルータを設置したネットワークではうまく動作しない。実際のelectionメッセージはブロードキャストであり,これがルータの向こう側に届かないからだ。そのため,ブロードキャストが届く範囲,つまりサブネット毎に別々にマスタブラウザが選出されてグループが管理されることになる。これだと複数のサブネットにまたがってブラウジングのグループを作ることができな。この問題を解決するのがドメインマスタブラウザだ。
 ドメインマスタブラウザは各サブネットに存在するマスタブラウザ(ローカルマスタブラウザ)からブラウズリストをもらい,それを統合して大きなブラウズリストを作る(図5)。そして,ローカルマスタブラウザにもその大きなブラウズリストの情報が反映される。これでローカルマスタブラウザはネットワーク全体のブラウズリストを手に入れることができる。こうすれば,複数のサブネットにまたがるブラウジングのグループを作ることができる。
 このドメインマスタブラウザを有効にするか否かを決めるパラメータがdomain masterだ。
 ドメインマスタブラウザを有効にするときは二つの点に注意しないといけない。一つは,NTサーバのPDCが存在する場合に,そのドメイン名と同じ名前でドメインマスタブラウザを有効にしてはいけない,という点だ。NTサーバのPDCはドメインマスタブラウザとして動作することが必須条件となっており,SambaがPDCの代わりにドメインマスタブラウザ役を務めるようになると,PDCが正しく動作しない。PDCが動かないとユーザ認証ができないので,マシンへのログオンもできなくなり,そのドメインは使いものにならなくなる。これは,ネットワークにとっては大事件といえる。

ドメインマスタブラウザにはNBNSが必要

 もう一つの注意点は,ネットワークのどこかにNBNS(WINSサーバ)が必要になる点だ。NBNSにはサブネット内だけでなく,ネットワーク全体の名前とIPアドレスが登録される。そこに名前を問い合わせれば,ルータの向こう側にいるものも含めて,該当者のIPアドレスが全部わかる。
 NetBIOSの名前付けのルールでは,名前の末尾にあるタイプ情報が16進数で'1d'になっているものがマスタブラウザを表すので,グループ名の末尾に'1d'を付け加えてNBNSに問い合わせれば,マスタブラウザのIPアドレスが返ってくるからだ。図4の実験はマスタブラウザが1台しか存在しない状態で行ったので,IPアドレスは一つしか返ってこないが,NBNSに複数のマスタブラウザが登録されていれば,その台数分だけIPアドレスが返ってくる。たとえば図5の構成なら,3台分のIPアドレスが返ってくる。これでルータの向こう側にあるマスタブラウザの存在がわかりIPアドレスもわかるので,それと通信できるようになる。
 ところが,NBNSがないとマスタブラウザへのIPアドレスの問い合わせにはブロードキャストを使うことになり,それはルータの向こう側には届かないから,向こう側のマスタブラウザの存在には気づかずに終わってしまう。当然,それと通信することもできない。だから,ドメインマスタブラウザを有効にしても,ルータの向こう側のマスタブラウザとブラウズリストを交換できず,ドメインマスタブラウザを有効にする意味がなくなるのだ。
 このとき使うNBNSはSambaのものでも,NTサーバのWINSサーバでもどちらでもよい。名前の問い合わせに応える機能は両者とも同じなので,とにかく,ネットワーク上のどこかにNBNSが存在し,マスタブラウザがNBNSを使うように設定されていればよい。

ブラウジングできない状態

(後日追加予定)


データ転送プロトコル毎に別々に選出されるマスタブラウザ

(後日追加予定)

NBNS(WINSサーバ)の設定

 NBNSはドメインマスタブラウザだけでなく,一般のクライアンマシンがルータを超えてサーバとやり取りするときにも利用する。これを,正しく設定しないとブラウジングだけでなく,肝心のファイル/プリンタサービスも使えなくなる。ルータが設置されている場合はNBNSの設定は必須だと思った方がよい。
 まず,NBNSの設置場所だが,これはネットワーク上のどこでも構わない。NBNSに対する名前の問い合わせはブロードキャストではなく,通常のTCP/IPの通信(ユニキャスト)を使うのでルータを超えることができるからだ。また,SambaのNBNSとNTサーバのWINSはほぼ同等の機能を持っているので,WINSサーバが動いていればSambaのNBNSを動かす必要はない。
 WINSサーバが存在しない場合はSambaのNBNSを動かすが,SambaのNBNSはWINSサーバと違って複製パートナーを持つことができないので,ネットワーク上で複数のNBNSを動かしてはいけない。動かすのは1台だけだ。
 その設定は表5のパラメータで行うが,ポイントはNBNSを動かすマシンを1台選び,そのwins supportというパラメータをyesにすることだ。そして,そのマシンのIPアドレスを他のマシンのwins serverパラメータに設定することである。
 wins proxyパラメータはNBNSやWINSに対応できない古いマシンのために使うものだ。NBNSに対応するマシンはNBNSを使うように設定するのが本来の方法であり,それを設定せずにwins proxyを使うのは,トラフィックを増やす要因になるので避けた方がよい。

表5 WINSサーバに関する設定パラメータ
パラメータ名 デフォルト値 内容
wins support no SambaのNBNS(WINSサーバ)を有効にするか否かを設定する。なお,SambaのNBNSはWINSサーバとは違って,複製パートナーを持つことができず,ネットワークで1台だけしか稼動できない。複数のマシンでこのパラメータをyesに設定してはいけない。
wins server なし このパラメータを設定しないと,名前解決をブロードキャストで行う。このパラメータにNBNS(WINSサーバ)のIPアドレスを設定すると,名前解決にそのサーバを使う。なお,このパラメータはwins supportをyesとし,自分自身のNBNSを有効にしている場合は,このパラメータを設定してはいけない。
wins proxy no 名前解決のブロードキャストを受信して,それをNBNS(WINSサーバ)に転送する。そして,返ってきた答えを元のマシンに転送する。

 

lmhostsファイル

 何らかの理由でルータが設置されているにも関わらず,NBNSを動かせない場合があるかもしれない。そんな場合はlmhostsファイルにコンピュータの名前とIPアドレスを併記することによって名前の解決を行うこともできる(図6)。
 lmhostsファイルの基本的なフォーマットや考え方はWindowsのものと同じだが,SambaのlmhostsファイルはWindowsにあるような#DOMなどのキーワードを使うことができない。
 余談だが,ドメインマスタブラウザを使うときにNBNSが必要になるのは,#DOMキーワードが使えないことが理由の一つだ。Windows NTでドメインを採用している場合は,通常,ドメインコントローラがマスタブラウザになる。だから,#DOMキーワードでドメインコントローラを設定することによって,それを手がかりにルータの向こう側のブラウジンググループと通信できるようになる。しかし,Sambaはos levelなどのパラメータ設定によってマスタブラウザが決まるため,Windowsのようにマスタブラウザが固定的ではない。だから#DOMキーワードと同様の方法でルータの向こう側にあるマスタブラウザと連絡をとる方法は使いにくいのだ。
 その代わりにremote browse syncとremote announceいうパラメータがある。マスタブラウザは定期的にドメインマスタブラウザとブラウズリスト情報を交換することになっているが,これと同じようにマスタブラウザ同士でブラウズリスト情報を交換するように設定するのがremote browse syncパラメータだ。ルータの向こう側にあるマスタブラウザのIPアドレスをここに設定すると,その相手と定期的にブラウズリスト情報を交換するようになる。ただし,相手のマスタブラウザのIPアドレスは固定していないかもしれない。その場合は,相手サブネットのブロードキャストアドレスを設定する。192.16.1.255といったようにIPアドレスのホスト部分のビットがすべて1になるようなアドレスがブロードキャストアドレスになるので,それを設定するのだ。すると,そのサブネットの全員にブラウズリスト交換のメッセージが届き,その中にマスタブラウザがいれば,それが応答してくれる。
 もう一つのremote announceパラメータはホストアナウンスメントに関するものだ。ホストアナウンスメントというのは,ブラウジンググループ内のサーバはマスタブラウザに定期的に自分の名前とIPアドレスを通知することだが,remote announceパラメータにルータの向こう側にあるマスタブラウザのIPアドレスを設定しておくと,その相手にホストアナウンスメントを送ってくれる。これも,remote browse syncと同様に,マスタブラウザのアドレスが固定されていない場合にはブロードキャストアドレスを設定できる。
 この二つを設定すればNBNSがなくても複数サブネットをまたがってブラウジンググループを作ることができる。しかし,ブラウジングの仕組みをよく理解してないと正しく設定できないし,全サーバに間違いなく設定するのは面倒なので,あまり使われていないようだ。



 以上がブラウジングに関する設定と主な注意点だ。ファイル/プリンタサービスやユーザ認証の設定に関しては次回取り上げることにしよう。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Copyright(C) 1997-2008 GlassCom
webmaster@glasscom.com