2015年03月03日の日記です


Winファイル共有で「別のマシン」に繋がるトラブルの解決  2015-03-03 23:39:24  コンピュータ

QNAP をしばらく前に導入したわけだけど、なんだかうまく共有できないことがあった。


おかしいなぁ、と思いながら、僕は使えていたので気にしていなかった。

でも、妻のマシンから QNAP にアクセスできない。


僕のマシンでも、ごくまれにうまく接続できないことがある。不安定。



時間がなくてなかなか追及できなかったのだけど、やっと原因がわかった。


多分レアケースで、同じようなミスをする人がそれほどいるとは思えない。

でも、そんなこともあるんだ、って例として書き記しておこう。




まず、最初に環境について。


仕事のために Linux サーバーを立ててある。

この Linux サーバーには samba が入っている。


samba っていうのは、windows のファイル共有を Linux でも使うようにするソフト。

実は、QNAP の中もこれで動いている。


一時は、ネットワーク上に2つの samba サーバーを共存させるのに何か相性問題とかあるのか、と疑ったのだけど、最終的にこれは関係なかった。


Linux サーバーは、家庭内 DNS サーバーとしての役割もある。


DNS は基本的に各マシンを登録してあるのだけど、登録していない名前でアクセスが発生した時は、Linux サーバーの IP アドレスを返すようにしてある。


仕事で WEB アプリを作ることが多く、Apache に仮想サーバー設定することが多いためだ。


適当な名前でアクセスした際、Apache がサーバー名で動作を変える。

この時、いちいち DNS 設定の変更なしに新たな仮想サーバーを作れると便利だ。




以前、I/Oデータの Landisk シリーズを NAS として使っていた。


これ、確か初期設定でサーバー名が landisk-1 となっていた。

じゃぁ、って DNS にも landisk-1 で登録した。


QNAP を導入した際、置き換えだったので同じ IP アドレスを割り振った。

同じ IP アドレスにしたのは、もし IP アドレスが変わったことで問題が出るような環境があると嫌だったから。


もっとも、QNAP と Landisk は共有ディスク名などが違ったので、IP アドレス一緒でも同じファイルパスでアクセスできなかったのだけど。



で、QNAP がホスト名を決めろ、と言ってきた時に、ここは「NAS」とした。

landisk じゃないのに landisk-1 と呼ぶのもどうかと思ったし、今後 NAS を買い替えることがあっても、NAS という名前ならそのまま使えるだろうと思ったから。


で、動かしたら動き始めた。問題ない。

Windows からネットワークを見ると、NAS というサーバーが見えている。


ところが、僕の環境ではアクセスできたのに、なぜか妻の PC からアクセスできない。

NAS を開くと、どういうわけか、Linux サーバーの方の samba に接続してしまうのだ。


これが解決できなかった。




今日、(妻がたまたま出かける用事があったので)妻のマシンを長時間借りて調査。

妻の環境でだけおかしいので、妻のマシンの設定を疑ったのだけど、それほどおかしそうなところは無い。


すぐに Linux サーバーに接続してしまうので、試しに Linux サーバーの samba を停止してみる。

すると、QNAP に接続するようになった。


ありゃ。もしかして、samba を同一ネットワークに置くとおかしくなるのか?


でも、前の Landisk だって samba だった。

なにか、ネットワーク上で同居しやすい設定とかあって、そこが微妙に違うのかな?


ここから、samba の設定お勉強タイム。

実のところ、Windows のファイル共有には詳しくないのだけど、一つだけ分かったことがある。


windows の共有の仕組みは、基本的に「何も考えないで良い」ことになっている。

でも、Linux で windows の共有に参加しようと思うと、かなり細かな設定が必要。


そして、設定を間違えても気づきにくい。

windows 側で、それなりに「おかしな設定」でも吸収してしまうようなのだ。さすが windows 、よく出来てる。


でも、おかしいものはやっぱおかしい。

エラーにならないでそれなりに動くからこそ、不具合部分が何に起因するのかなかなかわからなかったりする。


…ということを解説しているページがあって、根が深そうだと暗い気持ちになる。




Linux の samba を止めればうまくいくのだから、何か設定を間違えているのだろうなぁ。

そう思って、samba の設定ファイルをいろいろと変えてみる。


でもうまくいかず。


他にももっと何かないか…と思っていたら、samba のトラブルシューティング方法を書いた HowTo 文書を見つける。

(Linux の世界には、技術を初心者に教えるための HowTo と呼ばれるテキストが数多く残されている)


ここで初めて、体系だった方法で悪い部分を見つけ出すことができるようになった。

順次トラブルシュート手順をこなしていく。


11の手順が示される中の、8番目の手順。

Windows 側から、コマンドラインで \\NAS に接続しようとすると、そんなマシンは存在しない、と怒られた。


#\\NAS 、というのは、Windows のネットワーク共有をコマンドラインから指示するとき、NAS と名付けられたサーバーの意味。


これに対する対応方法も書いてあるのだけど、それは「NetBIOS がおかしい」ことを前提としたものだ。

どうもそうではない。NetBIOS はおかしくない。でも、何かがおかしい。


Windows は、ネットワークの一覧に NAS を表示している。でもそのマシンがどこにあるかがわからない。

認識しているマシンが認識できない、という言葉にするのもおかしな状態になっている。


いろいろ試していて、気まぐれに IP アドレス指定してみると、見えている。

じゃぁ、と思って \\landisk-1 を指定すると、これも見えている。


でも、ネットワーク一覧の中では landisk-1 は出てこない。NAS が出てくる。


えーと、つまり、ネットワーク一覧に NAS として認識されるけど、landisk-1 を指定しないとアクセスできない、と、そういうこと?




DNS に NAS を登録していなかったことを思い出し、landisk-1 の別名として登録する。

これ、後で登録しなくちゃな、と思ったまま、なんとなく動いていたから忘れていた。


これで動くようになった。



さて、一体何が起こっているのか、samba と DNS にどんな関係があるのか、情報を整理しておこう。




samba のそもそも論から入ろう。


Windows では、SMB (Server Message Block)というプロトコルでファイル共有を行う。

これを UNIX からも使用できるようにするためのソフトが、samba だ。


SMB は「ファイル共有」だけを行う。UNIX でいうと、NFS (Network File System)に当たる部分だ。


NFS の場合、ファイル共有は相手サーバーの名前を指定することで行うが、ネットワークは「名前」では接続できない。

このため、名前を IP アドレスに変換する必要が出てくる。これを名前解決と呼ぶ。


UNIX では、リゾルバと言う仕組みで名前を解決する。

リゾルバでは、ローカルファイルに書かれているデータベースか、ネットワークに存在する DNS と呼ばれるデータベースの仕組みを使って名前解決を行う。


Windows の場合、名前解決には NetBIOS という仕組みが使われる。

UNIX の DNS の場合、データを集中管理しているので仕組みが簡潔な反面、管理が結構面倒だ。


NetBIOS では、各マシンに名前を付けるだけで良い。

あとはマシン同士が勝手に、うまいことやって名前を解決してくれる。とても便利だ。

その反面、DNS よりも仕組みが複雑になる。複雑さを反映して、速度が遅かったりもする。


#Windows で「ネットワーク」を開いても、すぐに目的のマシンが表示されなかったりしたこと、ありません?



samba では、 SMB と NetBIOS を、それぞれ smbd と nmbd という二つのソフトで扱う。


smbd は、SMB プロトコルを、nmbd は、NetBIOS プロトコルを解釈する。



ファイル共有と名前解決の方法を、それぞれ持っている。

だから僕は、samba は DNS とは無縁だと思い込んでいた。




NetBIOS は設計が古く、インターネット時代に対応できていない。

普通のネットプロトコル… TCP/IP と共存できないのだ。


そこで、現在は NetBIOS over TCP/IP と呼ばれるプロトコルに移行しているらしい。

面倒なので、これも NetBIOS と呼ばれてしまう。


そして、samba のサーバー側でなく、クライアントの Windows マシンの方では、もう NetBIOS だけには頼っていない。

名前解決の方法は複数ある。これを、一番ユーザーにとって扱いやすいように、ミックスして使う。


先に UNIX では、ローカルファイルと DNS の2つの方法で名前解決する、と書いた。

Windows では、これに加えて WINS と NetBIOS を混ぜ、4つの方法で名前解決する。


#上に「DNS」と書いたのは、実際には UNIX のリゾルバ相当の意味で、ローカルファイルと DNS サーバーを適切に組み合わせる。

 そのため、「ローカルファイル」は、NetBIOS 用とリゾルバ用の二つがあることになり、都合5つの名前解決方法がある。



さて、どのようにミックスするかは非常にややこしい。

しかし、基本的に速度の速い方法から順にためし、解決できなかったら次の方法を試してみる、という動作を繰り返す。


ここで、僕が家庭内 DNS の設定として、登録されない名前は Linux サーバーに向かう、としていたことが問題となる。

DNS に何を問い合わせても、とりあえず解決してしまうのだ。


そのため、NetBIOS の出番は無くなり、DNS 設定されていないが NetBIOS は認識している、という名前が正しく処理されなくなる。


これが、「ネットワーク」の一覧に出てくるホストに接続すると、別のサーバーに繋がってしまう、という現象の正体となる。



ちなみに、WINS サーバーは NetBIOS の遅さを解消する仕組み…だと思う。我が家では使っていないし、使ったことないから正確なところがわからない。

DNS みたいなものだけど、NetBIOS の仕組みを使っているので、自動的に名前を収集して設定が手間いらず、というようなものだと思う。



妻のマシンではアクセスできなくて、僕のマシンではアクセスできたとか、Linux のsamba 止めただけで、名前解決できないはずの QNAP にちゃんと接続できたとか、よくわかってない部分もある。


Windows が非常にややこしい方法で、ユーザーが何も設定しないでもつながる仕組みを作ってくれているので、トラブルが起こった場合は何が起こっているのか推察するのが難しい。


#文句を言っているのではない。問題は正しくない DNS 設定にあったのであって、Windows は悪くない。




原因を見つけるのに時間がかかったが、原因がわかれば後は簡単。

NAS を DNS に登録した。これで完全解決。


知らない名前は全部 Linux サーバーへ、という設定も、本当は良くないのだろう。

でも、開発で気軽に名前を作れるのはありがたいので、この設定は変更できない。



全く同じ問題に遭遇する人は、おそらくいないと思う。


でも、Windows の共有設定は NetBIOS で名前解決するので、DNS は関係ない、と思っている人は結構多いのではないかな。

DNS サーバーが混ざっていて、設定が絶妙だとハマることがあるよ、という情報は、ほんの一部の人にとって役立つかもしれないので、ここに記録しておく次第です。




同じテーマの日記(最近の一覧)

コンピュータ

関連ページ

ダイナマイト刑事【日記 16/10/27】

Windows で、二つのネットワークにまたがる VPN 設定を行う【日記 16/12/02】

Harley-Davidson & L.A. Riders【日記 18/02/16】

別年同日の日記

02年 3/3

17年 ロジェ・カイヨワ 誕生日(1913)

20年 休校


申し訳ありませんが、現在意見投稿をできない状態にしています


戻る
トップページへ

-- share --

3000

-- follow --




- Reverse Link -