SMBに乗り換えたMac――WindowsとMacのファイル共有のいま(後編)その知識、ホントに正しい? Windowsにまつわる都市伝説(27)(1/2 ページ)

前回はWindowsとMacのファイル共有について、最新のOS X 10.10 Yosemiteの状況について調査しました。今回は、以前のOS Xと絡めて、変更点や互換性問題を説明します。

» 2015年03月17日 18時00分 公開
[山市良テクニカルライター]
「Windowsにまつわる都市伝説」のインデックス

連載目次

以前のMac OS XのSMBクライアント機能は“NT LM 0.12だけ”で会話する

 前回、Macが「Samba」からアップル独自のSMB(Server Message Block)実装に切り替えたというお話をしました。これはSMBサーバー機能の話であり、MacのSMBクライアント機能とは別の話です。ただし、新しいバージョンのSMBへの対応やIPv6(Internet Protocol version 6)対応がSMBサーバー機能と同じタイミングで行われているため、混乱するかもしれません。

 前回も触れましたが、MacはOS X 10.1 PumaからSMBクライアント機能を標準搭載しており、FreeBSDの「smbfsプロジェクト」をベースにしたオープンソースの「smb」(APSL(Apple Public Source License)およびBSDライセンス)を使用しています。OS X 10.10 YosemiteとOS X 10.9 MavericksのSMBクライアント機能の動きについては前回説明した通りです。今回は、OS X 10.8 Mountain Lion以前とのSMBクライアント機能の違いから説明します。

 OS X 10.8 Mountain Lion以前のSMBクライアント機能は、基本的に同じ動きをします。次の画面1は、OS X 10.6 Snow LeopardのSMBクライアント機能が、Windows 8.1の共有フォルダーに接続する様子を「Wireshark」でキャプチャした結果です。Macからの接続には「Finder」の「移動|サーバーへ接続」メニューを使用して、「smb://コンピューター名またはIPアドレス/共有名」で接続しました。

画面1 画面1 OS X 10.6 Snow LeopardからWindows 8.1の共有フォルダーへの接続には、SMB 1.0/CIFS(NT LM 0.12)が使用される。SMBクライアント機能は、OS X 10.8 Mountain Lionまでこれと同様の動き

 この画面1を見ると分かるように、SMBネゴシエート要求に含まれるダイアレクトは、SMB 1.0/CIFSを示す「NT LM 0.12」だけです。リモートから接続中のSMBセッション情報を示すWindows 8.1の「Get-SmbSession」コマンドレットも、SMB 1.0/CIFSの使用を示しています。「LANMAN2.1」(LAN Manager 2.1のプロトコル)など、SMB 1.0/CIFSよりも古い、レガシーなダイアレクトには一切対応していません。もちろん、SMB 2.0以降にも対応していません。

 OS X 10.8 Mountain LionまでのSMBクライアント機能は、同じようにSMB 1.0/CIFSだけに対応したものです。下位プロトコルとしては、最新のOS X 10.10 Yosemiteと同様に、「NetBIOS over TCP(NBT)」と「Microsoft Direct Hosting of SMB(Microsoft-DS)」の両方に対応しています。さらに下位のIPv6プロトコルへの対応は、Mac OS X 10.7 Lionからになります。

Mavericks以降のSMBクライアントでSMB 1.0/CIFSを強制する

 その後、MacのSMBクライアント機能は、OS X 10.9 MavericksでSMB 2.0およびSMB 2.1に、OS X 10.10 YosemiteでSMB 3.0およびSMB 3.02に対応しました。また、OS X 10.9 Mavericksからは、プロトコルが明示的に指定されない場合、AFP(Apple Filing Protocol)よりもSMBを優先して接続するようになりました。

 MacのSMBクライアント機能は、オープンソース実装です。Mac同士のファイル共有では問題にならなくても、WindowsのSMBと完全に互換性があるというわけではありません。実際、OS X 10.9 Mavericksの初期のバージョンでは、Windows 8.1の共有フォルダーに接続した際に「Finder」がクラッシュするという問題があったようです。

 この問題は「10.9.5アップデート」で修正されましたが、回避策として、ファイル共有プロトコルとしてSMB 1.0/CIFSを強制的に使用する方法がありました。具体的には、アドレス指定で「smb://」の代わりに「cifs://」を使用することで、SMB 2.0以降に対応した共有フォルダーへの接続でSMB 1.0/CIFSの使用を強制できます(画面2)。この方法は、OS X 10.10 Yosemiteでも使える方法なので、SMBのトラブル時に試してみるとよいでしょう。

画面2 画面2 OS X 10.9 Mavericks以降では「smb://」ではなく、「cifs://」でアドレスを指定すると、SMB 1.0/CIFSのみをネゴシエートするようになる

 「smb://」の代わりに「cifs://」の指定でSMB 1.0/CIFSを使用するというのは、本連載で説明してきたSMBとCIFSの現在の解釈に合っていて、筆者としては気に入っています。

 接続するたびに「cifs://」のアドレスを指定するのが面倒な場合には、SMBクライアントの既定のダイアレクトをSMB 1.0/CIFSにすることもできます。それには「〜/Library/Preferences/nsmb.conf」(〜は/Users/ユーザー名と同じ)を作成し、次の2行を記述してMacを再起動します。

[default]

smb_neg_smb1_only


 この設定で「Finder」の「共有」からの接続や「移動|サーバーへ接続」での「smb://」アドレス指定の接続は、SMB 1.0/CIFSで行われることになります。

 なお、「nsmb.conf」では、既定のダイアレクトの指定の他、NBTの強制、NBTの無効化(Microsoft-DSの強制)、最小認証レベルの設定、SMB署名の強制、タイムアウトの設定など、SMBクライアント機能の既定の動作をカスタマイズできます(画面3)。詳しくは、「man mount_smbfs」や「man nsmb.conf」のマニュアルページを参照してください。

画面3 画面3 OS X 10.9 Mavericks以降では、「nsmb.conf」ファイルでSMBクライアントの既定の動作をカスタマイズできる

 ちなみに次の画面4は、OS X 10.10 YosemiteからOS X 10.6 Snow Leopardの共有フォルダーに対して、「Finder」の「共有」からコンピューターを選択して接続したときのものです。OS X 10.8 Snow Leopardの共有設定では、AFPとSMBの両方のプロトコルを有効にしています。OS X 10.9 Mavericks以降は明示的にプロトコルを指定しない場合、AFPよりもSMBを優先して接続すると説明しましたが、AFPとSMB 1.0/CIFSの場合はAFPを優先するようです。

画面4 画面4 AFPとSMB 1.0/CIFSの両方を有効にした古いMacの共有フォルダーに新しいMacからプロトコルを明示的に指定せずに接続したところ、AFP(TCPポート548)で接続された

SMBサーバー機能はSambaから“アップル独自”の実装へ

 ここまでは、MacのSMBクライアント機能の話です。ここからは、MacのバージョンによるSMBサーバー機能の違いについて見ていきましょう。

 MacはOS X 10.2 Jaguar(10.2.4アップデート)からSMBサーバー機能を標準搭載していますが、OS X 10.6 Snow Leopardまではオープンソース(GPLライセンス)のSambaをベースとしてSMBサーバー機能を実装していました。それがOS X 10.7 Lionで大きく方針を転換し、アップル独自の実装に変わりました。

 アップル独自の実装になったといっても、OS X 10.8 Mountain LionまでのSMBサーバー機能はSMB 1.0/CIFSのみの実装であり、SMBは従来と同じくオプション扱いでした。そのため、共有設定で“明示的にSMBを有効化”しなければ、SMBサーバーとしては動作しませんでした。OS X MavericksでSMB 2.0およびSMB 2.1に対応してからは、SMBが既定のファイル共有プロトコルとなり、AFPよりも優先されるようになりました。また、AFPは古いMacとの互換性を考慮して既定で有効化されます(画面5)。

画面5 画面5 OS X 10.6 Snow LeopardとOS X 10.10 Yosemiteの既定の共有設定を比較。OS X 10.9 Mavericks以降は、共有を有効化するとSMBとAFPの両方が有効になる

 次の画面6を見れば、OS X 10.6 Snow LeopardのSMBサーバー機能が、確かにSambaベースであることが分かるでしょう。OS Xのバージョンによって違いますが、Samba 2.2.3aから3.0.28aのバージョンが使用されています。SambaがSMB 2.0以降に対応したのは、Samba 3.6からなので、OS X 10.6 Snow Leopard以前のSMBサーバー機能はSMB 1.0/CIFSまでに対応したものです。SMBクライアント機能は、SMB 1.0/CIFS(NT LM 0.12)より古いダイアレクトには対応していませんが、SMBサーバー機能はSambaベースなので、LANMAN2.1などの古いダイアレクトにも対応しています。

画面6 画面6 OS X 10.6 Snow LeopardのSMBサーバー機能はSambaベース。古いダイアレクトにも対応しているし、NBTのTCPポート139も待ち受け(リスン)していることに注目

 「netstat」コマンドの結果を見ると、NBTのTCPポート139(NetBIOSセッションサービス)、NetBIOS名の名前解決とブラウジングのためのUDPポート137(NetBIOSネームサービス)、UDPポート138(NetBIOSデータグラムサービス)、およびMicrosoft DSのTCPポート445を開いていることが分かります。IPv6には対応していません。SambaにおけるIPv6の完全なサポートは、Samba 3.2からなので当然です。

 次の画面7は、OS X 10.10 Yosemiteの場合です。SMBサーバー機能のデーモンは同じファイル名(/usr/sbin/smbd)ですが、Sambaベースではありません。「man smbd」の最後には、「The smbd utility first appeared in Mac OS 10.7.」と明記されています。

画面7 画面7 OS X 10.7 Lion以降のSMBサーバー機能は、アップル独自の実装に変更。SMB 1.0/CIFS(NT LM 0.12)より古いダイアレクトへの対応と、NBTのTCPポート139への対応は削除された

 アップル独自のSMB実装になって大きく変わった点としては、SMB 1.0/CIFS(NT LM 0.12)より古いダイアレクトへの対応がなくなったことと、NBTのTCPポート139(NetBIOSセッションサービス)を使用しなくなったことがあります。

 OS X 10.7 Lionが登場したとき、一部のスキャナー複合機では、Macの共有フォルダーに対するスキャン結果の送信ができないというトラブルが話題になりました。アップル独自の実装が原因で、SMBのプロトコル互換性がなくなっただとか、ネットワークスキャン機能が未実装だとかいう人がいましたが、本当の原因はNBTのTCPポート139を使用しなくなったことにあります。OS X 10.6 Snow Leopard以前では、SMBの代わりにFTPを使用するという方法もあったのですが、Macのファイル共有におけるFTPの有効化機能はOS X 10.7 Lionで廃止されたため、当面の代替手段がなくなったことも問題でした。

 アップル独自のSMB実装がNBTのTCPポート139を使用しないのは、実装をシンプルにしたかったからだと筆者は想像しています。OS X 10.7 Lionでは、SMBサーバー機能、SMBクライアント機能の両方でIPv6上でのSMBのサポートが追加されました。NBTはプロトコルの仕様上、IPv6上で動作しないプロトコルです。IPv4のNBTとMicrosoft-DS、さらにIPv6のMicrosoft-DSを実装するよりも、IPv4とIPv6にMicrosoft-DSを実装するだけの方が圧倒的に開発の手間が少なくて済むはずです。

 なお、NetBIOS名の名前解決やブラウジング、WINS(Windows Internet Naming Service)サーバーへの対応のために、NetBIOSネームサービス(UDPポート137)とNetBIOSデータグラムサービス(UDPポート138)には引き続き対応しています。これはSMBサーバー機能のことで、SMBクライアント機能の方はNBTのTCPポート139にも対応しています。繰り返しになりますが、MacにおけるSMBサーバー機能とSMBクライアント機能は別々の実装なのです。

       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。