Samba4winsのインストールと設定

提供:Samba-JP
ナビゲーションに移動検索に移動

ドイツのSerNetという組織により、開発中のSamba 4.0系列のソースコードからWINSサーバ部分を抜粋して実行可能な形式としたsamba4winsというプロダクトがリリースされています。

このsamba4winsを用いることで、WINSの複製を実現することが可能です。 以下インストールと設定方法について説明します。

samba4wins のインストール

以下、Fedora Core 5(以下FC5)とDebian GNU/Linux 3.1(以下sarge)へのインストールを例に説明を行ないます。

なお、詳細は後述しますが、基本的にsamba4winsはSambaが動作しているマシンで動作させることができません。そのため、以下の作業はSambaを動作させていないマシン上で行なうことが必要です。

FC5 へのインストール

samba4winsのソースや各種プラットフォーム向けのパッケージはhttp://ftp.sernet.de/pub/samba4WINS/ で配布されています。FC5用のパッケージはないのですが、http://ftp.sernet.de/pub/samba4WINS/rhel4-i386/samba4wins-1.0.4-22.i386.rpm にあるRPMパッケージを使うことができます。

パッケージをダウンロードの上、以下のようにrpmコマンドを用いてインストールしてください。

# rpm -ivh samba4wins-1.0.4-22.i386.rpm
Preparing...                ########################################### [100%]
   1:samba4wins             ########################################### [100%]

sargeへのインストール

環境が整っていれば、sargeへのインストールの方が簡単でしょう。

http://ftp.sernet.de/pub/samba4WINS/debian/pool/README.txt に記載のとおり、/etc/apt/sources.listファイルの末尾に以下の行

deb http://ftp.sernet.de/pub/samba4WINS/ debian/

を追加の上、以下のようにしてインストールを行ないます。

# apt-get update
Hit http://ftp.sernet.de debian/Packages
Hit http://ftp.sernet.de debian/Release
(中略)
Reading Package Lists... Done
# apt-get install samba4wins
Reading Package Lists... Done
##以下、途中は適宜省略してください。
Building Dependency Tree... Done
The following NEW packages will be installed:
  samba4wins
0 upgraded, 1 newly installed, 0 to remove and 2 not upgraded.
Need to get 0B/7936kB of archives.
After unpacking 23.1MB of additional disk space will be used.
Selecting previously deselected package samba4wins.
(Reading database ... 15491 files and directories currently installed.)
Unpacking samba4wins (from .../samba4wins_1.0.4-1_i386.deb) ...
Setting up samba4wins (1.0.4-1) ...

ソースからのインストール

パッケージからのインストールがうまくできない環境でも、ソースからのインストールを行なうことでsamba4winsを動作させることが可能です。以下、簡単に手順を説明します。

(1) ソースコードの入手

実は、samba4winsのソースコードはSRPM形式でのみ入手可能です。そのため、http://ftp.sernet.de/pub/samba4WINS/src/samba4wins-1.0.4-22.src.rpm を取得の上、ソースコードを取り出す必要があります。RPMが扱える環境であれば、rpm2cpio コマンドとcpioコマンドを以下のように組み合わせることで可能です。

$ rpm2cpio samba4wins-1.0.4-22.src.rpm | cpio -id
$ ls -l
total 12712
-rwxr-xr-x 1 root  root     1493 Aug 20 17:12 samba3-find-debuginfo.sh
-rwxr--r-- 1 monyo monyo 6446678 Aug  3 13:58 samba4wins-1.0.4-22.src.rpm
-rw-r----- 1 root  root    33935 Aug 20 17:12 samba4wins-1.0.4.diff
-rw-r----- 1 root  root    16068 Aug 20 17:12 samba4wins-1.0.4-HOWTO.txt
-rw-r----- 1 root  root     1231 Aug 20 17:12 samba4wins-1.0.4-NEWS.txt
-rw-r----- 1 root  root     1028 Aug 20 17:12 samba4wins-1.0.4-README.txt
-rw-r----- 1 root  root     2374 Aug 20 17:12 samba4wins-1.0.4-TODO.txt
-rw-r--r-- 1 root  root  6451015 Aug 20 17:12 samba4wins-13163.tar.bz2
-rw-r--r-- 1 root  root      364 Aug 20 17:12 samba4wins.conf
-rw-r--r-- 1 root  root      869 Aug 20 17:12 samba4wins.files
-rw-r--r-- 1 root  root     6256 Aug 20 17:12 samba4wins.spec
-rwxr-xr-x 1 root  root     1689 Aug 20 17:12 smbd4wins.init.rh
-rwxr-xr-x 1 root  root     2272 Aug 20 17:12 smbd4wins.init.suse

(2)コンパイルとインストール

以下のようにコンパイルとインストールを行います。

$ tar xjf samba4wins-13163.tar.bz2
$ cd samba4wins
$ patch -p0 < ../samba4wins-1.0.4.diff
patching file source/VERSION
patching file source/client/config.mk
patching file source/gtk/config.mk
(中略)
patching file source/utils/config.mk
patching file source/utils/net/config.mk
patching file source/wrepl_server/wrepl_in_call.c
$ cd source
$ ./autogen.sh: running script/mkversion.sh
./script/mkversion.sh: 'include/version.h' created for Samba("4.0.0tp2-SVN-build-UNKNOWN"\
)
./script/mkversion.sh: with VENDOR_SUFFIX = "SerNet-samba4wins-patch-tree"
./autogen.sh: running autoheader
./autogen.sh: running autoconf
Now run ./configure and then make.
$ ./configure
checking build system type... i686-pc-linux-gnu
checking host system type... i686-pc-linux-gnu
SAMBA VERSION: 4.0.0tp2-SVN-build-UNKNOWN
(以下省略)

configureオプションについては、機能上意味のあるオプションはありません。ただし各種ファイルのインストール先を指定するオプションは有効ですので、必要に応じて適宜設定してください。

デフォルトのインストール先は/usr/local/sambaです。ここでは--prefix=/usr/local/samba4winsオプションを指定してインストールを行ないました。

(3) 各種設定の実施

設定自体は、パッケージでインストールを行った場合と変わりません。ただし、各種ファイルが/usr/local/samba(デフォルトのインストール先の場合)以下に配置されていますので、以下の説明ではファイルの場所について適宜読み替えてください。

samba4winsの設定

以下、設定を行っていきます。なお、冒頭で記載したように、設定を行なうマシンでSambaが動作していないことを再度確認しておいてください。

複製パートナの設定

まずはsamba4wins側のWINSデータベースの複製先を指定します。最低限必要な情報は複製先のWINSサーバのNetBIOS名とIPアドレスです。以下のようにして登録を行ないます。

# ldbedit -H /var/lib/samba4wins/private/wins_config.ldb -a

標準の設定だとviエディタがあらかじめ数行の情報が入力された状態で起動しますので、以下のように情報を追加します。必要な複製パートナ分同様の情報を追加します。なお、先頭が「dn:」から始まる行が新たなエントリの始まりとして認識されます。

# editing 1 records
# record 1
dn: @BASEINFO
distinguishedName: @BASEINFO
sequenceNumber: 1

dn: CN=MISAKO,CN=PARTNERS ←以下の3行を追加
objectClass: wreplPartner
address: 192.168.10.110
※複製パートナとなるWINSサーバのNetBIOS名がMISAKOでIPアドレスが192.168.10.110の場合の例

(dn: CN=...)←複数のWINS複製パートナを追加する場合は、引続き「dn:」行を記載する。

複製対象がWindowsサーバの場合、Windowsサーバ側では、通常通り「新しいレプリケーション パートナー」メニューからサーバの追加を行なってください。

samba4winsサーバ同士で複製を行なう場合は、両方のサーバでldbeditコマンドによる設定を行なってください。

LDBファイルに設定可能な値の一覧

先ほどは、WINS複製パートナ構成時に最低限設定が必要な属性を紹介しました。実際は他にも以下のような属性を指定可能です。なお明示的に指定しなかった場合は、デフォルト値が設定されます。

属性, デフォルト値, 意味
dn, CN=複製先のNetBIOS名,CN=PARTNERS, エントリを一意に識別する値
objectClass, wreplPartner, WINS複製パートナオブジェクトであることを識別する
address, - , WINS複製パートナのIPアドレス
type, 0x3, 0:無効/1:プッシュパートナ/2:プルパートナ/3:プッシュ、プルパートナ
pullInterval, 1800, プル複製を行なう間隔(秒単位)、0はプル複製無効を意味する
pullRetryInterval, 30, プル複製のエラー発生時のリトライ間隔
pushChangeCount, 0, プッシュ複製に必要なデータベースの変更量。0はプッシュ複製無効を意味する
pushUseInform, 0, 0:複製に固定接続を使用しない/1:固定接続を使用する
outAddress, (自動選択) , 複製に用いる送信元IPアドレス、IPアドレスが複数存在している環境では指定を推奨

samba4wins.confの設定

samba4winsでは /etc/samba4wins/samba4wins.conf ファイルで設定の一部を行ないます。このファイルはsmb.confと同じ文法になっていますが、有効なパラメータはごく一部に限定されています。

実はファイルが存在さえしていれば、空ファイルでも動作しますが、最低限netbios nameパラメータを既存のWindowsマシン(やSambaサーバー)と重複しない名前に設定しておくことをお勧めします。ここでは以下のようにNetBIOS名をWINSSVにした場合について説明を行ないます。

[global]
    netbios name = WINSSV

そのほか、samba4wins.conf で設定可能なパラメータの一覧を以下に示します。

パラメータ名, デフォルト値, 意味,
netbios name, マシンのホスト名, smb.confと同義です。
workgroup, WORKGROUP,  同上
log level, 0,  同上
interfaces, (空文字列), 同上
bind interfaces only, no, 同上

dns proxy, yes, 同上
wins hook, (空文字列), 同上
max wins ttl, 同上
min wins ttl, 同上
nbtd:disable_broadcast, no, ブロードキャストアドレス上で137/udpの受信をリッスンを無効にするかどうかを制御する。デフォルトは無効にしない(リッスンする)。
winsdb:local_owner,  (自動), 登録された各エントリの所有者(IPアドレス)を指定する
wreplsrv: renew_interval, 518400(6日),レコードの解放を行なう時間間隔(秒単位)
wreplsrv:tombstone_interval, 518400(6日),レコードの破棄を行なう時間間隔(秒単位)
wreplsrv:tombstone_timeout, 86400(1日), 破棄されたレコードがデータベースから削除されるまでの時間(秒単位)
wreplsrv:tombstone_extra_timeout, 破棄されたレコードをデータベースから削除するまでに最低限保持が必要な時間(秒単位)
wreplsrv:verify_interval, 2073600(24日), 検証を行なう間隔(秒単位)
wreplsrv:scavenging_interval, (wreplsrv:renew_intervalパラメータの値), データベースの清掃を行なう間隔(秒単位)
wreplsrv:periodic_interval, 15, wins.ldbやwins_config.ldbファイルの変更をチェックする間隔(秒単位)

samba4winsの起動と動作の確認

ここまでの設定が終わったら、早速samba4winsを起動してみましょう。起動方法は若干ディストリビューション依存ですが、FC5であれば

# /etc/init.d/smbd4wins start

sargeであれば、

# /etc/init.d/samba4wins start

で起動するはずです。psコマンドなどでsmbd4winsプロセスが存在していることを確認してください。

WINS複製が正常に行われている場合、Windows側のツールからプッシュおよびプル複製を行なった後で確認すると、samba4winsのWINSサーバ経由のエントリが複製されていることが確認できます。

Samba側では、以下のようにldbsearchコマンドを実行することで、Windowsサーバ側から複製されたエントリが表示されることで確認が可能です。

# ldbsearch -H /var/lib/samba4wins/wins.ldb
# returned 45 records
# record 1
dn: name=AYA,type=0x03
distinguishedName: name=AYA,type=0x03
type: 0x03
name: AYA
objectClass: winsRecord
recordType: 0
recordState: 0
nodeType: 3
isStatic: 0
expireTime: 20060816015031.0Z
versionID: 16
winsOwner: 192.168.10.15
address: 192.168.10.232;winsOwner:192.168.10.15;expireTime:20060816015031.0Z;
registeredBy: 192.168.10.232

# record 2
dn: name=W2003AD1,type=0x00
distinguishedName: name=W2003AD1,type=0x00
type: 0x00
name: W2003AD1
objectClass: winsRecord
recordType: 1
recordState: 0
nodeType: 0
isStatic: 0
expireTime: 20060905150114.0Z
versionID: 7
winsOwner: 192.168.149.110
address: 192.168.149.110;winsOwner:192.168.149.110;expireTime:20060905150114.0Z;
(以下略)
※AYA<03>とW2003AD1<00>の存在が確認できる。なお各項目の意味についてはsamba4winsのドキュメ\
ントなどを参照のこと。

このように比較的簡単な設定で、Windowsサーバとも複製可能なWINSサーバを構築することが可能です。

ldbsearchの出力内容

上記の ldbsearch の出力内容では、本文で説明したエントリ以外にも多くの情報が出力されています。これらの意味について以下に記載しておきます。これらはldbeditコマンドで修正することが可能です。

なお、LDBとはSamba 4.0系列で導入予定のLDAPライクな簡易データベースで、ldbeditやldbsearchはLDBの操作ツールという位置付けになります。

エントリ名, 意味
dn, LDAPのDN名に相当し、各オブジェクトを一意に識別する識別子
distinguishedName, LDAPのdistinguishedNameに相当、システム上特に意味はない
type, NetBIOS名のプレフィックス
name, NetBIOS名
objectClass, 必ずwinsRecordが指定される
recordType, 0:ユニーク名/1:グループ名/2:特殊なグループ名(0x1Cなど)、3:マルチホーム
recordState, 0:アクティブ/1:解放済/2:破棄(tombstone)済
nodeType, 0:Bノード、1:Pノード、2:Mノード、3:Hノード
isStatic: 0:動的エントリ/1:静的エントリ
expireTime, 有効期限
versionID, バージョンID(所有者内で一意に付与されるID)
winsOwner, 所有者(該当エントリが登録されたサーバのIPアドレス)
address, 該当エントリのIPアドレスにwinsOwnerとexpireTimeを付加したもの

Sambaサーバとの共存

冒頭で、samba4winsサーバとSambaサーバの共存はできないと記載しました。これは両方のプロセスが同一のポートを使用するためです。ただし、同一のマシンに複数のIPアドレスを付与して、Sambaとsamba4winsを別々のIPアドレスで動作させることは可能です。ちょっと複雑ですが、以下192.168.10.15と192.168.10.16という2つのIPアドレスを持つマシン上で192.168.10.15ではSambaを、192.168.10.16ではsamba4winsを動作させる設定を行ないましょう。

Samba側の設定

Samba側では、以下の設定を行ないます。

[global]
  ...
  interfaces = 192.168.10.15
  bind interfaces only = yes
  socket address = 192.168.10.255
  wins server = 192.168.10.16

interfaces/bind interfaces onlyパラメータにより、基本的にSambaが192.168.10.15のみを利用するように構成します。加えて、socket addressパラメータにより、ブロードキャストアドレスを明示的に指定します。このパラメータを設定しないと、ブロードキャストアドレスが 0.0.0.0に設定されます。

一方、samba4wins側ではsamba4wins.confに以下の設定を行ないます。

[global]
  ...
  interfaces = 192.168.10.16
  bind interfaces only = yes
  wins server = 192.168.10.16

  nbtd:disable_broadcast = yes
  winsdb:local_owner = 192.168.10.16

nbtd:disable_broadcastパラメータは137/udpをブロードキャストアドレスで待ち受ける動作を抑止します。これによりポートの重複をなくします。winsdb:local_ownerパラメータは各エントリが登録されたマシンのIPアドレス情報(所有者情報)として設定するIPアドレスを明示します。これにより、netstatコマンドの出力は以下のようになり、同一マシン上での共存が実現します。

tcp        0      0 192.168.10.16:42        0.0.0.0:*               LISTEN
  ← WINS複製の受付
tcp        0      0 192.168.10.16:51409     192.168.10.110:42       ESTABLISHED
  ← WindowsサーバからのWINS複製コネクション
udp        0      0 192.168.10.16:137       0.0.0.0:*
  ← クライアントマシンからのWINS名前登録、解放の受付

↓以下nmbdが受付しているアドレス
udp        0      0 192.168.10.15:137       0.0.0.0:*
udp        0      0 192.168.10.255:137      0.0.0.0:*
udp        0      0 192.168.10.15:138       0.0.0.0:*
udp        0      0 192.168.10.255:138      0.0.0.0:*

※説明のため、出力順の並び変えや不要な行の削除を行なっています。

参考