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)