NASなどのSMB共有に対してpingは通るのに、Finderの「サーバへ接続」やmount_smbfsでマウントできない場合がある。pingが確認するのはIPアドレスへの到達性だけで、SMBが使うTCPの445番ポートや、SMBのプロトコルバージョンまでは確認しない。
マウントまでの流れを層に分けて、下の層から順に確認すると、原因を絞り込める。
graph TD A[名前解決] --> B[445番ポートへの接続] B --> C[SMBのバージョンの一致] C --> D[共有の一覧と認証] D --> E[マウント]
以降の例では、ホスト名をnas.local、IPアドレスを192.168.1.10、共有名をshareとする。実行例はmacOS 27.0.1のもの。
名前解決を確認する
dscacheutilで、ホスト名がIPアドレスに解決されるかを確認する。
$ dscacheutil -q host -a name nas.local
name: nas.local
ipv4_address: 192.168.1.10
解決できないホスト名を指定すると、何も出力されない。終了コードは0のままなので、出力の有無で判断する。
$ dscacheutil -q host -a name no-such-host.local
$ echo $?
0
何も出力されない場合は、IPアドレスでpingを試す。IPアドレスならpingが通る場合、原因は名前解決である。ホスト名の代わりにIPアドレスを指定してマウントすれば回避できる。
445番ポートに接続できるか確認する
nc -zで、SMBが使う445番ポートにTCP接続できるかを確認する。-zはデータを送らずに接続だけを試し、-G 3は接続のタイムアウトを3秒にする。
$ nc -z -G 3 nas.local 445
Connection to nas.local port 445 [tcp/microsoft-ds] succeeded!
接続できない場合は何も出力されず、終了コードが1になる。
$ nc -z -G 3 nas.local 4455
$ echo $?
1
445番ポートに接続できない場合、原因はサーバー側でSMBが停止している、あるいはファイアウォールが445番ポートを遮断している、のいずれかである。pingに応答するICMPと、SMBのTCP通信は、別々に制限される。
Bonjourで共有が公開されているか確認する
dns-sdで、同じネットワークにSMBを公開しているホストを一覧する。実行すると終了しないため、Ctrl + Cで止める。
$ dns-sd -B _smb._tcp local.
Browsing for _smb._tcp.local.
DATE: ---Fri 30 Oct 2026---
7:36:50.059 ...STARTING...
Timestamp A/R Flags if Domain Service Type Instance Name
7:36:50.060 Add 2 17 local. _smb._tcp. nas
Instance Nameの列に、サーバーの名前が表示される。一覧に表示されないホストは、Bonjourでは見つからない。その場合はsmb://[ホスト名またはIPアドレス]を直接指定して接続する。
共有の一覧を取得できるか確認する
smbutil viewで、サーバーが公開している共有の一覧を取得できるかを確認する。-Gを付けるとゲストとして接続し、ユーザー名とパスワードの入力を求められない。
$ smbutil view -G //nas.local
Share Type Comments
-------------------------------
share Disk
IPC$ Pipe IPC Service
2 shares listed
共有名が一覧に表示されれば、サーバーとの通信は成立している。マウントに失敗する場合の原因は、SMBのバージョン、共有ごとの認証、アクセス権のいずれかに絞られる。
応答しないホストに対しては、smbutil viewは長時間待たされる。先にncで445番ポートへの接続を確認してから実行する。
参考: 【smbclient】SMBサーバーの共有一覧を確認する (-L)
SMBのバージョンが一致しているか確認する
共有の一覧を取得できるのにマウントできないときは、SMBのバージョンが一致していない可能性がある。SMB1(NT1)にしか対応していないサーバーは、smbutil viewで共有の一覧を取得できても、mount_smbfsではマウントに失敗した。
$ mount_smbfs -N '//GUEST:@nas.local/share' ~/mnt/share
mount_smbfs: mount error: //GUEST:@nas.local/share: Operation not supported
サーバーが対応しているバージョンは、nmapで確認できる。NT LM 0.12 (SMBv1)だけが表示されるサーバーは、SMB1にしか対応していない。
参考: 【nmap】SMBサーバーが対応するプロトコルバージョンを調べる (smb-protocols)
ログでエラーの原因を確認する
log showで、mount_smbfsが出力したエラーを確認する。
$ /usr/bin/log show --last 2m --predicate 'process == "mount_smbfs"'
...
Error ... mount_smbfs: (SMBClient) smb_mount: mount failed to <private>/<private>, syserr = Operation not supported
zshでは、logが組み込みコマンドとして先に実行される。log showがtoo many argumentsで失敗するため、/usr/bin/logとフルパスで指定する。
$ type log
log is a shell builtin
ログのsyserrには、mount_smbfsが標準エラー出力に出すメッセージと同じ原因が記録される。マウント失敗の前後には、カーネルのsmbfsがstart reconnectを記録することもある。
ホスト名とIPアドレスの両方で試す
ここまでの確認で原因が分からない場合は、smb://nas.localとsmb://192.168.1.10の両方でマウントを試す。名前解決の経路やBonjourの設定によって、片方だけ成功することがある。成功した方の接続先を使い続ければよい。
確認の結果と原因の対応
| 確認の結果 | 原因の見当 |
|---|---|
dscacheutilの出力が空 | 名前解決に失敗している |
nc -zが失敗する | 445番ポートが遮断されている、またはSMBが停止している |
smbutil viewが失敗する | SMBの通信自体が成立していない |
smbutil viewは成功するがmount_smbfsがOperation not supportedで失敗する | SMB1にしか対応していないサーバーである |
smbutil viewは成功するが認証で失敗する | ユーザー名、パスワード、アクセス権の問題である |
参考: 【mount_smbfs】SMB共有をダイアログなしでゲストマウントする (-N)
