自宅内の Linux ホストのネットワーク設定 (NetBios) の備忘録
2 台の Linux ホストは、DHCP から IP を取っているが、IP アドレスが変わることは滅多にないので、各 Linux ホスト+windows 機の hosts ファイルに全て IP アドレスを書いていた。 年に 1, 2回程度の作業だったが、なにか方法があるはずだと思うようになった。
最初に考えたのは、サブネットに片っ端から ping を打って、arp テーブルで MAC アドレスとホストファイルの対応を取り、結果をhosts ファイルに書き込む方法。しかし時間がかかるのと、 Windowsで、例えば ruby のスクリプトを定期的に自動実行するやり方もよくわからない。そもそも Windows 同士では DNS に登録してなくても相互の名前が見えている。なにかブロードキャストを 使う仕組みとかありそう。Windows の Netなんちゃら。それを調べてみた。
Netbiosは同じサブネット内のマシンの名前解決のための仕組みで、UDP/137 でブロードキャストして、返事をしたマシンからホスト名 (netbios名) と IP アドレスを教えてもらうもののようだ。 Linux でその仕組みを使うには Samba 関連のパッケージがインストールされていることが必要。 1 台の linux ホスト (hoge1) では samba を動かしてるので、もう 1 台の linux ホスト(hoge2)も samba 関連のパッケージを入れてみる。smbd と nmbd が起動するが、一旦止める。そして、手始めに hoge2 にて nmblookup というsamba付属のコマンドを使いhoge1 の IP アドレスを調べてみる:
user1@hoge2:~$ nmblookup hoge1 querying hoge1 on xxx.xxx.xxx.255 yyy.yyy.yyy.yyy hoge1<00>
host2 では、 samba 関連のパッケージを入れたが、smbd も nmbd もまだ起動していない。この状態で nmblookup でhoge1 の IP アドレスを知ることができたのだから、 起っていることは、hoge2 からブロードキャストに対して hoge1 が返事をしていると考えて良さそう。試しに hoge1 で hoge2 の IP アドレスを調べようとしても、
user1@hoge1:~$ nmblookup hoge2 querying hoge1 on xxx.xxx.xxx.255 name_query failed to find name hoge2
となる。そもそも samba には smbd と nmbd の 2 種類のデーモンが動いているのは何故かあまり考えなかったが、 smbd はファイルシステムで、 nmbd がNetBiosサービスだったようだ。 hoge1 から hoge2 の IP アドレスを調べることができるためには、hoge2 で nmbd が動いていればよい。nmbd の設定は /etc/samba/smb.conf にする。ネットを見ていると、ここで wins support = yes と書けばよいとあたっが、上記の目的(ブロードキャストに対して IP アドレスを答えさせる)だけなら no のままでよい。もし wins support を yes にすると、 その nmbd は NetBios 名のネームサーバ Wins サーバになるそうだ。そうすると、ブロードキャストする代わりに、そのサーバにIP アドレスを問い合わせることになる(はず)。 また、smb.conf では wins server = xxx.xxx.xxx.xxx として、他の Wins サーバの IP アドレスを指定することもできるようだ。しかし今回はブロードキャストベースの名前解決をすることに したので、Wins サーバは立てないことに。そして、hoge2 で nmbd だけを起動させるには、ubuntu 12.04lts だと /etc/default/samba で、 RUN_MODE を daemons 以外にすればよい:
# Defaults for samba initscript # sourced by /etc/init.d/samba # installed at /etc/default/samba by the maintainer scripts # # # This is a POSIX shell fragment # # How should Samba (smbd) run? Possible values are "daemons" # or "inetd". #RUN_MODE="daemons" RUN_MODE="inetd"
と書いておけばよい。 /etc/init/smbd.conf はこのファイルを見て、smbd を起動するかどうかを判断している。ちなみに ubuntu 12.04lts の /etc/init/nmbd.conf では smb.conf に disable netbios = yes と書いてあると、nmbd を起動しない。
ここまできたら、あとは /etc/nsswitch.conf にホスト名解決を以下にした:
hosts: files dns winsこれで hosts ファイルになにも書かなくても、 NetBios名で接続ができるようになった。 Windows マシンは nsswitch.conf 的なものはよくわからないが、とくになにもしなくても nmbd の 動いている linux ホストへ NetBios 名で接続できるようになった。
蛇足
さらに OSX でも nsswitch 的なことをしたかったのだが、やり方がわからない。しかたなく、スクリプトを書き、 hosts ファイルを定期的に更新するようにした。 ちなみに OSX には nmblookup というコマンドは見当たらず、 代わりに smbutil lookup でブロードキャストできるようだ:
smbutil lookup hoge1
0 件のコメント:
コメントを投稿