2010年 05月 16日
Windows 7 ネットワークに表示されない - SUSE + samba で解決する。
「なぜか\\PC名で開けずネットワークに出ない」 Windows NotWork !
「でも\\ip で開けるんだな、これが」
「リモートデスクトップで接続できない」 Windows NotWork !
ということがよくあります。当然ネットワーク管理者へのクレームとなります。
Windows 7 の DNS 名前解決ができない
これは Windows の「マスターブラウザー」の仕様によるものです。
Windows は「起動した順番」から「マスターブラウザー」を決定し、「マスターブラウザー」がシャットダウンすると、別なPCが「マスターブラウザー」となる「仕様」のようです。
また、「マスターブラウザー」となるコンピューターは出来るだけ新しいオペレーティングシステムを選ぶ「仕様」となっているようで、Windows 2003 より Windows 7/8/2008/2012 系のPCを「マスターブラウザー」として「勝手に」選んでくれる「仕様」となっています。
ということで、Windows ネットワークでは「マスターブラウザー」が勝手にどのタイミングで動いてしまうのか、「ネットワークから別なPCを探す」作業は全く「運」によるものということになります。この「マスターブラウザー」が Windows Server であっても、動作が不安定で、より「新しいOS」をマスターブラウザにしてしまうため、お出かけ中の「部長のPC」がマスターブラウザーになってしまったり、「ネットワーク」にPCが出てこないことが頻繁に発生するようです。
調べてみて解ったのは
1) 朝、起動したPCは、まず周囲にマスターブラウザーを探して自分よりエライPCがいなければマスターブラウザーとなる。自分よりエライPCが出勤してきたら、マスターブラウザーの席を譲る。これ社会人の常識。
2) 次に出勤してきた主任は「マスターブラウザーはいないかぁ?」と問い合わせると、新入社員より性能が高く、新しいOSを搭載する「偉いPC」がマスターブラウザーを引き継ぐ(Windows2003 より Windows7 が当然新しいくてエライ。Windows はどっちがエライかを体の大きさや能力ではなく、バージョンで自動的に判断するようです)
3) 何らかの理由でマスターブラウザーの情報は壊れる可能性があり、リブートして別なPCに引き継ぐまでしつこく壊れた情報を保持する。例えば誤った人事考課の途中で夜の銀座に出張してしまった新しモノ好きな「エライ部長のPC」がマスターブラウザーになっていても再起動することができない。(怒られますからね) だから、エライ人が判断を間違えたまま夜の銀座に「出張」してしまい無断で古い Windows Server にパッチを当てて再起動なんかをすると、ホンとに人事考課がエライことになる。
4) Windows 7 をマスターブラウザーに「しない」ためには秘密のレジストリを修正をする必要がある(全台...orz)
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Browser\Parameters
ドメイン マスター ブラウザーで発生するブラウザー イベント ID 8021 および 8032 の一般的な原因と解決方法
http://support.microsoft.com/kb/135404/ja
5) マスターブラウザーになる、ならないはデフォルトで「全自動」なので、「全自動」にならないサーバーをマスターブラウザを「手動で強制的に」マスターブラウザーにしなければならない。
6) 夜の「パブリックネットワーク」に接続している場合はマスターブラウザーに情報を提供しない(見えないだけでPINGは通る、ファイアウォールの設定もあるけどたぶん)
9) マスターブラウザーが情報を更新するにはエラク時間がかかる。これも社会の常識です。
10) マスターブラウザーになる、ならないは「全自動」これはサーバーでも同じ仕様なので、何らかの理由で Windows7 がマスターブラウザーとなってしまうこともある。特定のサーバー「だけ」マスターブラウザーにする方法はレジストリを修正する必要がある。(ドメイン環境はまた別な仕組みがあるらしい)
11) NAS がある場合、NAS が勝手に Local Master Browser になっている場合があり、NAS によっては機能を停止できない場合がある。NASをリセットするしかない。つまり Windows (Server)をリブートするのであれば NAS もリブートしたほうがいい。(パートのおばちゃんであっても無視してはいけない。「家政婦は全部知っている」誰がどこにいるかはちゃんと知っているわけです)
12) コマンドプロンプトで "nbtstat" コマンドを実行して、マスターブラウザを確認できる(らしい、あまりにも解りづらい社会の仕組みを解析するツールがMicrosoft によって提供されている) このツールの使えない所は、自分がつかんでいるマスターブラウザを表示する機能がない事である。だから、どうして自分のPCが他のPCに接続できないのか、原因がどこにあるのかを調べる為のツールではない事である。自分がどのマスターブラウザの情報をつかんでいるのかを調べるには、全てのローカルネットワークに nbtstat を打ちまくるしかないという非常に馬鹿な機能しかない所である。
13) 「自分はマスターブラウザーでエライんだ」と誤解していながら、それより「エライ」マスターブラウザーが存在することを知らない上司がたまにいる。そんな上司を盲目に信用している部下もまた沢山いる。(よくある話)。つまり風通しの悪いネットワークではマスターブラウザーが二つあってもおかしくない。どっちが正しいかは起動した後、先に見つかった「マスターブラウザー」次第である。
そしてリセットしたアタマで考えると、目の前の部長より社内のプレイイングマネージャは他にいた気が付くヤツがいて、隣は間違っているのに「オレは問題ない」と黙っている。
14) Microsoft のマスターブラウザーは社内の人事を全て司る DNS サーバなんかよりなぜかエライ。だからDNSの設定が正しく dns名で ping が通っても、ネットワークには見えないことは平気で良くある。それどころか、DNSレコードに登録した名前で Ping すら通らない事もある。困ったことに、せっかくダイナミックDNSなんて設定しても全く無視してくれる。 DNS のマスターレコードにwindows7pc.mynetwork.com なんて設定しても、Windows はまず集落のマスターブラウザに名前解決を求めてくる。村役場のDNSに問い合わせず、そこい登録していない住民は存在しない事になっている。これが Windows のマスタブラウザの仕組みです。まず近所の顔色を窺え。これ閉鎖的なマイクロソフト村の常識です。所詮、小規模なネットワークにしか対応していないのです。大規模ネットワークで使えという方がどう考えても無理。ローカルネットワークの FQDN を指定しても「ページがありません」なんて事が普通にある。Linux なら、全然 FQDN を指定しなくても、同じドメインなら、Aレコードを指定しただけでも、問題なく動くンだけどね。
15) 所属しているワークグループのまま、「リストラ隔離部屋」に送られると、社内の人事部(DNS)からも隔離されてしまう。声をあげて arp を叫んでも、セグメントが変わって個室に閉じ込められると誰も MSbrowse の返事がない。他のマスターブラウザがあっても聞こえない。社内の事情が見えないので、自分はワークグループに所属していても「孤立しているんだ」「社内にはオレしかいない」と誤解してしまう。仕方がないので呼べど答えぬローカルネットDNS、社内DNSを無視して、社外DNSの駆け込み寺(労働者ユニオンみたいなもの)に名前解決相談(DNSクエリ)するしかない。当然、社内のプリンタなんかのリソースにはアクセスできない。
-補足-
実際に nbstat を使った例です。
C:\Users\Administrator>nbtstat -n <-- 自身を調べた
ローカル エリア接続 4:
ノード IP アドレス: [192.168.1.217] スコープ ID: []
NetBIOS ローカル ネーム テーブル
名前 種類 状態
---------------------------------------------
W28S <00> 一意 登録済
MYJOBGROUP <00> グループ 登録済 <--- 所属するワークグループだ
W28S <20> 一意 登録済
C:\Users\Administrator>nbtstat -a 192.168.1.31 <- 他人を調べた
ローカル エリア接続 4:
ノード IP アドレス: [192.168.1.217] スコープ ID: []
NetBIOS リモート コンピューター ネーム テーブル
名前 種類 状態
---------------------------------------------
WIN7PC1 <00> 一意 登録済
WORKGROUP <00> グループ 登録済 <---- これは違うワークグループなので
WIN7PC1 <20> 一意 登録済
WORKGROUP <1E> グループ 登録済
WORKGROUP <1D> 一意 登録済
..__MSBROWSE__.<01> グループ 登録済 <--- たかだかデスクトップPCのクセにエライ
MAC アドレス = 00-40-45-33-D9-16
C:\Users\Administrator>nbtstat -a 192.168.1.35 <--- 別なPCを調べた
ローカル エリア接続 4:
ノード IP アドレス: [192.168.1.217] スコープ ID: []
NetBIOS リモート コンピューター ネーム テーブル
名前 種類 状態
---------------------------------------------
WIN7PC2 <20> 一意 登録済
WIN7PC2 <00> 一意 登録済
MYJOBGROUP1 <00> グループ 登録済 <---- ワークグループに所属しているので _MSB_ ではない。
MYJOBGROUP1 <1E> グループ 登録済
MAC アドレス = 00-23-81-12-97-7E
C:\Users\Administrator>
--
と、言うことで、常時稼動している SUSE Linux の samba サーバを「マスターブラウザー」として設定する方法を説明します。
良いドキュメントが Novell さんの Web サイトにありました。
Sambaサーバをマスタブラウザにする方法
http://www.novell.com/ja-jp/support/tidj/jp/00006500_/00006752.htm#
簡単に言うと/etc/samba/smb.confファイルのglobalセクションに次の記述を追加して smb をリスタートすると問題が解決します。
local master = yes
os level = 65
-YaSTの設定-
もちろん vi で書き換えても良いのですが、SUSE には YaST という便利なツールがあるので、これで設定してしまいます。(SUSE を使う人間がいつまでも Linux に精通できない理由はこんな便利な一発ツールがあるからなんですね)
yast (ここでは CUI 版) を起動し、Network Service > Samba を選びます。TABキーでIdentity を選び
Expert Global Settings を選びます。
パラメータリストから local master を選び
スペースキーでチェックを入れます。
OS Level に 65 をセット
yast を終了すると、自動的に samba が再起動します。誰かがファイルを開いていると yast が注意してくれます。一応、手動で再起動してみましょう。
正しく smb.conf が書き込まれました。
各パラメータについては次の文書が参考になります。
Windowsネットワークのブラウジング問題の解明
http://www.samba.gr.jp/doc/browsing/browsing02.html
Appendix A. Example Configuration Files
http://www.samba.org/samba/docs/using_samba/appa.html
os level に関してはこの文書が詳しいようです。
os level = 255 にすると「最強の一番エライ」マスターブラウザーになるようです。(社長ですね。未確認ですけど)
Chapter 7. Name Resolution and Browsing
http://www.samba.org/samba/docs/using_samba/ch07.html
結果を Linux 側で調べるには nmblookup コマンドを使います。SUSE11 の場合、samba をインストールすると同時にインストールされます。
samba:~ # nmblookup -M myworkgroup
querying myworkgroup on 192.168.1.255
192.168.1.239 myworkgroup<1d>
samba:~ #
実際に他のPCの状態をLinux 側から調べてみました。nmblookup -A xx.xx.xx.xx を行います。(-A は Case Sensitive です)
sles11:~ # nmblookup -A 192.168.1.31
Looking up status of 192.168.1.31
WIN7PC <00> - B
WORKGROUP <00> -B
WIN7PC <20> - B
WORKGROUP <1e> -B
WORKGROUP <1d> - B
..__MSBROWSE__. <01> -B <--- コイツが怪しい
MAC Address = 00-40-45-33-D9-16
sles11:~ # nmblookup -A 192.168.1.217
Looking up status of 192.168.1.217
W28S <00> - B
MYJOBGROUP1 <00> -B
W28S <20> - B
MAC Address = 00-16-3E-33-02-17
sles11:~ # nmblookup -A 192.168.1.24
Looking up status of 192.168.1.24
W7PC-2 <00> - B
MYJOBGROUP1 <00> -B
W7PC-2 <20> - B
MYJOBGROUP1 <1e> -B
MAC Address = 00-16-3E-5B-17-2F
sles11:~ #
DOS窓開いて一々 nbstat するのも面倒なので、 fping で作り出したホストリストから、nmblookup して __MSBROSE__ を grep するスクリプトを書けば、内部のマスターブラウザのリストが一覧で出るのかなぁ、とぼんやり検討しました。ということで。
-ネットワーク内のコンピュータに fping して生きているデバイスに nmblookup を行うシェルを作る-
※参考にして動かなくても一切責任は負えませんので悪しからず御免なさい。あくまで SUSE Linux Enterprise Server (SLES11sp2)で試して動いたものです。YaST しか知らないのにちょっとがんばりました。
sles11:~ # cat create-fping-list.sh
#! /bin/sh
rm nmblookup-all.sh
if [ $# -ne 1 ]; then
echo usage:makepinglist xx.xx.xx.0/24
exit 1
fi
/usr/sbin/fping -g $1 | grep alive | sort -t. -k3,3n -k4,4n | sed -e 's/ is alive//' | sed -e 's/^/nmblookup -A /g' >> nmblookup-all.sh
chmod 700 nmblookup-all.sh
echo ---- done ------
cat nmblookup-all.sh
-簡単に解説-
まず、前回作ったシェルがあったら rm で消して
# fping -g 192.168.1.0/24
で実行すると 192.168.1.x のセグメント全てに ping します。そこで一応パラメータチェックします。このシェルに渡すのは 192.168.xx.xx/24 などの値です。この辺は fping の man で確認してください。
結果から "alive" の文字があれば、 sort して ip アドレスの下二桁をソートします。(よく考えると無意味ですね)
" is alive" の文字を sed で消しすと ip アドレスだけになるので、先頭にsed で nmblookup -A の文字を挿入します。
この結果を nmblookup-all.sh に書き込んで実行権を与えて、 cat で確認するということです。
もちろん alive でない結果もあるのでエラーが続々と出てきます。
sed に詳しいのでご紹介
フィルタを使用した文字列操作
これで ./nmblookup-all.sh で実行すると fping で aliveなデバイス全てに nmblookup をかけるので(ルータなどもチェックするので、no response が帰ってくるまで)結構時間がかかります。結果をリダイレクト">"するなり、端末のログを見れば、どれがマスタブラウザをつかんでいるかが解りました。
--
Windows 7 NotWork では外部のDNSを設定すると、内部のネットワークを参照できないという「仕様」があるようなので、DNSは内部参照だけにしておいたほうがいいようです。どうも DNS より MSbrowse の方が Windows NotWork 内部の名前解決の優先度が高いようで、せっかく内部向けDNSを使っていても、全く機能しない場合があるようです。つまり、 Windows NotWork では Windows 以外は使ってくれるなという人事部のお達しがある感じですね。
Windows 7 の DNS 名前解決ができない
--
Need to know はどうなるの
Windows NotWork には Need to Know という概念はありません。「共有」を設定した以上「共有」されるのが Windows ネットワークの「悪」の部分です。あなたのPCに「xxさんとyyさんだけね」という「共有」を作ったら、全てのユーザに「共有」されます。もちろん、アクセス権限は自由に作れますが、「xxさんとyyさんだけね」という共有だけは誰からでもばっちり見えます。
基本的に「隣のPCは見えない」ようにして「共有機能」は利用させないことがポイントです。
※2013/5/16 一部修正しました。何だかまとまりのない記事になりました。
-Keyword-
SUSE SLES SLES11 Windows7 ネットワーク ワークグループ ネットワークのPCが見えない samba でマスターブラウザーを設定 Windows8 Windows10
お問い合わせは
islandcenter.jp