sambaでの接続が回復した・・・・・・・

しばらく前からsambaでアクセス出来ないと言われて預かっていたサーバで、ようやくアクセスが可能になった(と思う)。
正確には起動直後はアクセス可能なのだが、時間が経過するとアクセスが遮断されるようになっていた。
いろいろ調べていてlog.nmbdを見るとマスターブラウザになろうとしてなれないというエラーが出ていた。
同じセグメントにはWindowsサーバもあり、そちらがマスターになっているようでリクエストを遮断しているように思えた。
まぁマスターブラウザにする必要も無いので、smb.confを修正してマスターブラウザにならないようにしたが、それでもエラーは出ていたが、とりあえずこの件は無視。

http://www.samba.gr.jp/ にあった文書を参考に、
smbclient -L サーバ名
でlinuxサーバ自身から接続しようとすると
Receiving SMB: Server stopped responding
session request to “サーバ名” failed (Call timed out: server did not respond after 20000 milliseconds)
とタイムアウトを起こしてしまいアクセス出来無い。
さらにsambaのログにも残らないので、これはリクエストがsmbdに渡っていないということだ。

そこで
netstat -a
コマンドでnetbios-ssn ポートが「LISTEN」状態になっているかを確認すると、それさえ表示されない(あれ?)。
ps -ax
でプロセスを確認すると
smbd -D
は動いているから、その前になにか障害があるようだ。

気になったのは
/var/log/samba/log.nmbd
に停止時のログとして
Packet send failed to 192.168.122.255(138) ERRNO=無効な引数です
というエラーが記録されているが、こんなIPアドレスを設定した覚えは無い。

nmbdが正しく動作しているかを確認するために、
nmblookup -B “サーバ名” __SAMBA__
を実行すると、正しいIPアドレスが帰ってくるから少なくともnmbdは動作していて、リクエストも受け取ってくれている。

次にクライアントのアドレスも返してくれるか、
nmblookup -B 192.168.xxx.255 “クライアントPC名”
を実行すると、こちらもIPアドレスが帰ってくる。

さらにブロードキャストへの応答を確認しようと
nmblookup -d 2 ‘*’
を実行したところ、
added interface virbr0 ip=192.168.122.1 bcast=192.168.122.255 netmask=255.255.255.0
added interface eth0 ip=xxx.xxx.xxx.xxx bcast=xxx.xxx.xxx.255 netmask=255.255.255.0
querying * on 192.168.122.255
Got a positive name query response from 192.168.122.1 ( 192.168.122.1 )
192.168.122.1 *<00>
と出力された。

interfaceのeth0は設定してあるが、もう一つの”virbr0″というのは設定した覚えは無い。
ところがこのIPアドレスには見覚えがある。
そう!log.nmbdにあった謎のブロードキャストアドレスと同じネットワークのアドレスだ。
そもそも”virbr0″というinterfaceは設定していないのだが、何故に出て来ているのだろうと思って、”virbr0″でググって見ると、どうも(XENとかで使う)ヴァーチャルマシン用のブリッジデバイスのことらしい。
この”virbr0″というinterfaceはlibvirtをインストールすると勝手に作られるらしく、どうもこれが本来のeth0の邪魔をしている感じだ。

/sbin/ifconfig
でネットワークの設定を見ても立派にネットワークインターフェースとして設定されている。
なので、このインターフェースを
/etc/sysconfig/network-scripts/ifdown virbr0
として止めようとしたが、
使い方: ifdown <デバイス名>
と出てしまい止められない(そりゃそうだ、実在のデバイスでは無いのだから)。

XENをインストールした覚えは無いが念のため
ps -ax | grep xen
としてみたが、当然ながら何も出てこない。
やけっぱちで
ps -ax | grep vir
としてみたら、
2189 ? S 0:00 libvirtd –daemon
というのが出てきたでは無いか。
仮想マシンを使うつもりは毛頭無いので、これを動かす必要も無く、早速止めることにした。

止めるには
/etc/rc.d/init.d/
の下にある”libvirtd”スクリプトを使えば良く、
/etc/rc.d/init.d/libvirtd stop
で簡単に止まった。
そうしたところ、virbr0というインターフェースは消滅し、smbclientでの接続も可能になり、クライアントPCからの接続も可能になった(はぁー、長かった・・・)。
ただ、このままではサーバの起動時に自動でlibvirtdが起動してしまうので、
/sbin/chkconfig –level 345 libvirtd off
として、自動起動を止めた。
しっかし、なんでlibvirtなんて入っていたのかなぁ?

←クリックしてくれると嬉しいです。
PR

コメントを残す